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