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