Home | History | Annotate | Download | only in pkgdata
      1 //  2016 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 /**************************************************************************
      4 *
      5 *   Copyright (C) 2000-2012, International Business Machines
      6 *   Corporation and others.  All Rights Reserved.
      7 *
      8 ***************************************************************************
      9 *   file name:  pkgdata.c
     10 *   encoding:   ANSI X3.4 (1968)
     11 *   tab size:   8 (not used)
     12 *   indentation:4
     13 *
     14 *   created on: 2000may16
     15 *   created by: Steven \u24C7 Loomis
     16 *
     17 *  common types for pkgdata
     18 */
     19 
     20 #ifndef _PKGTYPES
     21 #define _PKGTYPES
     22 
     23 /* headers */
     24 #include "unicode/utypes.h"
     25 #include "filestrm.h"
     26 
     27 /* linked list */
     28 struct _CharList;
     29 
     30 typedef struct _CharList
     31 {
     32   const char       *str;
     33   struct _CharList *next;
     34 } CharList;
     35 
     36 
     37 
     38 /*
     39  * write CharList 'l' into stream 's' using deliminter 'delim' (delim can be NULL). quoted: -1 remove, 0 as is, 1 add quotes
     40  */
     41 const char *pkg_writeCharList(FileStream *s, CharList *l, const char *delim, int32_t quoted);
     42 
     43 /*
     44  * Same, but use line breaks. quoted: -1 remove, 0 as is, 1 add quotes
     45  */
     46 const char *pkg_writeCharListWrap(FileStream *s, CharList *l, const char *delim, const char *brk, int32_t quoted);
     47 
     48 
     49 /*
     50  * Count items . 0 if null
     51  */
     52 uint32_t pkg_countCharList(CharList *l);
     53 
     54 /*
     55  * Prepend string to CharList. Str is adopted!
     56  */
     57 CharList *pkg_prependToList(CharList *l, const char *str);
     58 
     59 /*
     60  * append string to CharList. *end or even end can be null if you don't
     61  * know it.[slow]
     62  * Str is adopted!
     63  */
     64 CharList *pkg_appendToList(CharList *l, CharList** end, const char *str);
     65 
     66 /*
     67  * strAlias is an alias to a full or relative path to a FILE.  This function
     68  * will search strAlias for the directory name (with strrchr). Then, it will
     69  * determine if that directory is already in list l.  If not, it will add it
     70  * with strdup(strAlias).
     71  * @param l list to append to , or NULL
     72  * @param end end pointer-to-pointer.  Can point to null, or be null.
     73  * @param strAlias alias to full path string
     74  * @return new list
     75  */
     76 CharList *pkg_appendUniqueDirToList(CharList *l, CharList** end, const char *strAlias);
     77 
     78 /*
     79  * does list contain string?  Returns: t/f
     80  */
     81 UBool  pkg_listContains(CharList *l, const char *str);
     82 
     83 /*
     84  * Delete list
     85  */
     86 void pkg_deleteList(CharList *l);
     87 
     88 /*
     89  * Mode package function
     90  */
     91 struct UPKGOptions_;
     92 typedef   void (UPKGMODE)(struct UPKGOptions_ *, FileStream *s, UErrorCode *status);
     93 
     94 /*
     95  * Static mode - write the readme file
     96  * @param opt UPKGOptions
     97  * @param libName Name of the .lib, etc file
     98  * @param status ICU error code
     99  */
    100 void pkg_sttc_writeReadme(struct UPKGOptions_ *opt, const char *libName, UErrorCode *status);
    101 
    102 /*
    103  * Options to be passed throughout the program
    104  */
    105 
    106 typedef struct UPKGOptions_
    107 {
    108   CharList   *fileListFiles; /* list of files containing files for inclusion in the package */
    109   CharList   *filePaths;     /* All the files, with long paths */
    110   CharList   *files;         /* All the files */
    111   CharList   *outFiles;      /* output files [full paths] */
    112 
    113   const char *shortName;   /* name of what we're building */
    114   const char *cShortName;   /* name of what we're building as a C identifier */
    115   const char *entryName;   /* special entrypoint name */
    116   const char *targetDir;  /* dir for packaged data to go */
    117   const char *dataDir;    /* parent of dir for package (default: tmpdir) */
    118   const char *tmpDir;
    119   const char *srcDir;
    120   const char *options;     /* Options arg */
    121   const char *mode;        /* Mode of building */
    122   const char *version;     /* Library version */
    123   const char *comment;     /* comment string */
    124   const char *install;     /* Where to install to (NULL = don't install) */
    125   const char *icuroot;     /* where does ICU lives */
    126   const char *libName;     /* name for library (default: shortName) */
    127   UBool      rebuild;
    128   UBool      verbose;
    129   UBool      quiet;
    130   UBool      withoutAssembly;
    131   UBool      pdsbuild;     /* for building PDS in z/OS */
    132 } UPKGOptions;
    133 
    134 char * convertToNativePathSeparators(char *path);
    135 
    136 
    137 /* set up common defines for library naming */
    138 
    139 #if U_PLATFORM_HAS_WIN32_API
    140 # ifndef UDATA_SO_SUFFIX
    141 #  define UDATA_SO_SUFFIX ".dll"
    142 # endif
    143 # define LIB_PREFIX ""
    144 # define LIB_STATIC_PREFIX ""
    145 # define OBJ_SUFFIX ".obj"
    146 # define UDATA_LIB_SUFFIX ".lib"
    147 
    148 #elif U_PLATFORM == U_PF_CYGWIN
    149 # define LIB_PREFIX "cyg"
    150 # define LIB_STATIC_PREFIX "lib"
    151 # define OBJ_SUFFIX ".o"
    152 # define UDATA_LIB_SUFFIX ".a"
    153 
    154 #else  /* POSIX? */
    155 # define LIB_PREFIX "lib"
    156 # define LIB_STATIC_PREFIX "lib"
    157 # define OBJ_SUFFIX ".o"
    158 # define UDATA_LIB_SUFFIX ".a"
    159 #endif
    160 
    161 #define ASM_SUFFIX ".s"
    162 
    163 /* defines for common file names */
    164 #define UDATA_CMN_PREFIX ""
    165 #define UDATA_CMN_SUFFIX ".dat"
    166 #define UDATA_CMN_INTERMEDIATE_SUFFIX "_dat"
    167 
    168 #define ICUDATA_RES_FILE "icudata.res"
    169 
    170 #define PKGDATA_DERIVED_PATH '\t'
    171 
    172 #endif
    173