1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ********************************************************************** 5 * Copyright (C) 2002-2016, International Business Machines 6 * Corporation and others. All Rights Reserved. 7 ********************************************************************** 8 * file name: uconfig.h 9 * encoding: UTF-8 10 * tab size: 8 (not used) 11 * indentation:4 12 * 13 * created on: 2002sep19 14 * created by: Markus W. Scherer 15 */ 16 17 #ifndef __UCONFIG_H__ 18 #define __UCONFIG_H__ 19 20 // Android patch: Hard code UCONFIG_USE_LOCAL=1 so that ICU will use 21 // uconfig_local.h, which allows us to disable use of non-stable and 22 // internal APIs in libicu and Android's libandroidicu shim. For more 23 // information on this pre-processor variable see the comments below. 24 // Also, see http://b/117094880 25 26 // To keep updateicudata.py (which uses the ICU make process) working, 27 // uconfig_local.h is only included when ANDROID is defined in the 28 // platform build system(s), or __ANDROID__ is defined when targeting 29 // Android, e.g. NDK build. 30 #if defined(ANDROID) || defined(__ANDROID__) 31 #define UCONFIG_USE_LOCAL 1 32 #endif 33 34 /*! 35 * \file 36 * \brief User-configurable settings 37 * 38 * Miscellaneous switches: 39 * 40 * A number of macros affect a variety of minor aspects of ICU. 41 * Most of them used to be defined elsewhere (e.g., in utypes.h or platform.h) 42 * and moved here to make them easier to find. 43 * 44 * Switches for excluding parts of ICU library code modules: 45 * 46 * Changing these macros allows building partial, smaller libraries for special purposes. 47 * By default, all modules are built. 48 * The switches are fairly coarse, controlling large modules. 49 * Basic services cannot be turned off. 50 * 51 * Building with any of these options does not guarantee that the 52 * ICU build process will completely work. It is recommended that 53 * the ICU libraries and data be built using the normal build. 54 * At that time you should remove the data used by those services. 55 * After building the ICU data library, you should rebuild the ICU 56 * libraries with these switches customized to your needs. 57 * 58 * @stable ICU 2.4 59 */ 60 61 /** 62 * If this switch is defined, ICU will attempt to load a header file named "uconfig_local.h" 63 * prior to determining default settings for uconfig variables. 64 * 65 * @internal ICU 4.0 66 */ 67 #if defined(UCONFIG_USE_LOCAL) 68 #include "uconfig_local.h" 69 #endif 70 71 /** 72 * \def U_DEBUG 73 * Determines whether to include debugging code. 74 * Automatically set on Windows, but most compilers do not have 75 * related predefined macros. 76 * @internal 77 */ 78 #ifdef U_DEBUG 79 /* Use the predefined value. */ 80 #elif defined(_DEBUG) 81 /* 82 * _DEBUG is defined by Visual Studio debug compilation. 83 * Do *not* test for its NDEBUG macro: It is an orthogonal macro 84 * which disables assert(). 85 */ 86 # define U_DEBUG 1 87 # else 88 # define U_DEBUG 0 89 #endif 90 91 /** 92 * Determines whether to enable auto cleanup of libraries. 93 * @internal 94 */ 95 #ifndef UCLN_NO_AUTO_CLEANUP 96 #define UCLN_NO_AUTO_CLEANUP 1 97 #endif 98 99 /** 100 * \def U_DISABLE_RENAMING 101 * Determines whether to disable renaming or not. 102 * @internal 103 */ 104 #ifndef U_DISABLE_RENAMING 105 #define U_DISABLE_RENAMING 0 106 #endif 107 108 /** 109 * \def U_NO_DEFAULT_INCLUDE_UTF_HEADERS 110 * Determines whether utypes.h includes utf.h, utf8.h, utf16.h and utf_old.h. 111 * utypes.h includes those headers if this macro is defined to 0. 112 * Otherwise, each those headers must be included explicitly when using one of their macros. 113 * Defaults to 0 for backward compatibility, except inside ICU. 114 * @stable ICU 49 115 */ 116 #ifdef U_NO_DEFAULT_INCLUDE_UTF_HEADERS 117 /* Use the predefined value. */ 118 #elif defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || \ 119 defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || \ 120 defined(U_TOOLUTIL_IMPLEMENTATION) 121 # define U_NO_DEFAULT_INCLUDE_UTF_HEADERS 1 122 #else 123 # define U_NO_DEFAULT_INCLUDE_UTF_HEADERS 0 124 #endif 125 126 /** 127 * \def U_OVERRIDE_CXX_ALLOCATION 128 * Determines whether to override new and delete. 129 * ICU is normally built such that all of its C++ classes, via their UMemory base, 130 * override operators new and delete to use its internal, customizable, 131 * non-exception-throwing memory allocation functions. (Default value 1 for this macro.) 132 * 133 * This is especially important when the application and its libraries use multiple heaps. 134 * For example, on Windows, this allows the ICU DLL to be used by 135 * applications that statically link the C Runtime library. 136 * 137 * @stable ICU 2.2 138 */ 139 #ifndef U_OVERRIDE_CXX_ALLOCATION 140 #define U_OVERRIDE_CXX_ALLOCATION 1 141 #endif 142 143 /** 144 * \def U_ENABLE_TRACING 145 * Determines whether to enable tracing. 146 * @internal 147 */ 148 #ifndef U_ENABLE_TRACING 149 #define U_ENABLE_TRACING 0 150 #endif 151 152 /** 153 * \def UCONFIG_ENABLE_PLUGINS 154 * Determines whether to enable ICU plugins. 155 * @internal 156 */ 157 #ifndef UCONFIG_ENABLE_PLUGINS 158 #define UCONFIG_ENABLE_PLUGINS 0 159 #endif 160 161 /** 162 * \def U_ENABLE_DYLOAD 163 * Whether to enable Dynamic loading in ICU. 164 * @internal 165 */ 166 #ifndef U_ENABLE_DYLOAD 167 #define U_ENABLE_DYLOAD 1 168 #endif 169 170 /** 171 * \def U_CHECK_DYLOAD 172 * Whether to test Dynamic loading as an OS capability. 173 * @internal 174 */ 175 #ifndef U_CHECK_DYLOAD 176 #define U_CHECK_DYLOAD 1 177 #endif 178 179 /** 180 * \def U_DEFAULT_SHOW_DRAFT 181 * Do we allow ICU users to use the draft APIs by default? 182 * @internal 183 */ 184 #ifndef U_DEFAULT_SHOW_DRAFT 185 #define U_DEFAULT_SHOW_DRAFT 1 186 #endif 187 188 /*===========================================================================*/ 189 /* Custom icu entry point renaming */ 190 /*===========================================================================*/ 191 192 /** 193 * \def U_HAVE_LIB_SUFFIX 194 * 1 if a custom library suffix is set. 195 * @internal 196 */ 197 #ifdef U_HAVE_LIB_SUFFIX 198 /* Use the predefined value. */ 199 #elif defined(U_LIB_SUFFIX_C_NAME) || defined(U_IN_DOXYGEN) 200 # define U_HAVE_LIB_SUFFIX 1 201 #endif 202 203 /** 204 * \def U_LIB_SUFFIX_C_NAME_STRING 205 * Defines the library suffix as a string with C syntax. 206 * @internal 207 */ 208 #ifdef U_LIB_SUFFIX_C_NAME_STRING 209 /* Use the predefined value. */ 210 #elif defined(U_LIB_SUFFIX_C_NAME) 211 # define CONVERT_TO_STRING(s) #s 212 # define U_LIB_SUFFIX_C_NAME_STRING CONVERT_TO_STRING(U_LIB_SUFFIX_C_NAME) 213 #else 214 # define U_LIB_SUFFIX_C_NAME_STRING "" 215 #endif 216 217 /* common/i18n library switches --------------------------------------------- */ 218 219 /** 220 * \def UCONFIG_ONLY_COLLATION 221 * This switch turns off modules that are not needed for collation. 222 * 223 * It does not turn off legacy conversion because that is necessary 224 * for ICU to work on EBCDIC platforms (for the default converter). 225 * If you want "only collation" and do not build for EBCDIC, 226 * then you can define UCONFIG_NO_CONVERSION or UCONFIG_NO_LEGACY_CONVERSION to 1 as well. 227 * 228 * @stable ICU 2.4 229 */ 230 #ifndef UCONFIG_ONLY_COLLATION 231 # define UCONFIG_ONLY_COLLATION 0 232 #endif 233 234 #if UCONFIG_ONLY_COLLATION 235 /* common library */ 236 # define UCONFIG_NO_BREAK_ITERATION 1 237 # define UCONFIG_NO_IDNA 1 238 239 /* i18n library */ 240 # if UCONFIG_NO_COLLATION 241 # error Contradictory collation switches in uconfig.h. 242 # endif 243 # define UCONFIG_NO_FORMATTING 1 244 # define UCONFIG_NO_TRANSLITERATION 1 245 # define UCONFIG_NO_REGULAR_EXPRESSIONS 1 246 #endif 247 248 /* common library switches -------------------------------------------------- */ 249 250 /** 251 * \def UCONFIG_NO_FILE_IO 252 * This switch turns off all file access in the common library 253 * where file access is only used for data loading. 254 * ICU data must then be provided in the form of a data DLL (or with an 255 * equivalent way to link to the data residing in an executable, 256 * as in building a combined library with both the common library's code and 257 * the data), or via udata_setCommonData(). 258 * Application data must be provided via udata_setAppData() or by using 259 * "open" functions that take pointers to data, for example ucol_openBinary(). 260 * 261 * File access is not used at all in the i18n library. 262 * 263 * File access cannot be turned off for the icuio library or for the ICU 264 * test suites and ICU tools. 265 * 266 * @stable ICU 3.6 267 */ 268 #ifndef UCONFIG_NO_FILE_IO 269 # define UCONFIG_NO_FILE_IO 0 270 #endif 271 272 #if UCONFIG_NO_FILE_IO && defined(U_TIMEZONE_FILES_DIR) 273 # error Contradictory file io switches in uconfig.h. 274 #endif 275 276 /** 277 * \def UCONFIG_NO_CONVERSION 278 * ICU will not completely build (compiling the tools fails) with this 279 * switch turned on. 280 * This switch turns off all converters. 281 * 282 * You may want to use this together with U_CHARSET_IS_UTF8 defined to 1 283 * in utypes.h if char* strings in your environment are always in UTF-8. 284 * 285 * @stable ICU 3.2 286 * @see U_CHARSET_IS_UTF8 287 */ 288 #ifndef UCONFIG_NO_CONVERSION 289 # define UCONFIG_NO_CONVERSION 0 290 #endif 291 292 #if UCONFIG_NO_CONVERSION 293 # define UCONFIG_NO_LEGACY_CONVERSION 1 294 #endif 295 296 /** 297 * \def UCONFIG_ONLY_HTML_CONVERSION 298 * This switch turns off all of the converters NOT listed in 299 * the HTML encoding standard: 300 * http://www.w3.org/TR/encoding/#names-and-labels 301 * 302 * This is not possible on EBCDIC platforms 303 * because they need ibm-37 or ibm-1047 default converters. 304 * 305 * @stable ICU 55 306 */ 307 #ifndef UCONFIG_ONLY_HTML_CONVERSION 308 # define UCONFIG_ONLY_HTML_CONVERSION 0 309 #endif 310 311 /** 312 * \def UCONFIG_NO_LEGACY_CONVERSION 313 * This switch turns off all converters except for 314 * - Unicode charsets (UTF-7/8/16/32, CESU-8, SCSU, BOCU-1) 315 * - US-ASCII 316 * - ISO-8859-1 317 * 318 * Turning off legacy conversion is not possible on EBCDIC platforms 319 * because they need ibm-37 or ibm-1047 default converters. 320 * 321 * @stable ICU 2.4 322 */ 323 #ifndef UCONFIG_NO_LEGACY_CONVERSION 324 # define UCONFIG_NO_LEGACY_CONVERSION 0 325 #endif 326 327 /** 328 * \def UCONFIG_NO_NORMALIZATION 329 * This switch turns off normalization. 330 * It implies turning off several other services as well, for example 331 * collation and IDNA. 332 * 333 * @stable ICU 2.6 334 */ 335 #ifndef UCONFIG_NO_NORMALIZATION 336 # define UCONFIG_NO_NORMALIZATION 0 337 #endif 338 339 /** 340 * \def UCONFIG_USE_ML_PHRASE_BREAKING 341 * This switch turns on BudouX ML phrase-based line breaking, rather than using the dictionary. 342 * 343 * @internal 344 */ 345 #ifndef UCONFIG_USE_ML_PHRASE_BREAKING 346 # define UCONFIG_USE_ML_PHRASE_BREAKING 0 347 #endif 348 349 #if UCONFIG_NO_NORMALIZATION 350 /* common library */ 351 /* ICU 50 CJK dictionary BreakIterator uses normalization */ 352 # define UCONFIG_NO_BREAK_ITERATION 1 353 /* IDNA (UTS #46) is implemented via normalization */ 354 # define UCONFIG_NO_IDNA 1 355 356 /* i18n library */ 357 # if UCONFIG_ONLY_COLLATION 358 # error Contradictory collation switches in uconfig.h. 359 # endif 360 # define UCONFIG_NO_COLLATION 1 361 # define UCONFIG_NO_TRANSLITERATION 1 362 #endif 363 364 /** 365 * \def UCONFIG_NO_BREAK_ITERATION 366 * This switch turns off break iteration. 367 * 368 * @stable ICU 2.4 369 */ 370 #ifndef UCONFIG_NO_BREAK_ITERATION 371 # define UCONFIG_NO_BREAK_ITERATION 0 372 #endif 373 374 /** 375 * \def UCONFIG_NO_IDNA 376 * This switch turns off IDNA. 377 * 378 * @stable ICU 2.6 379 */ 380 #ifndef UCONFIG_NO_IDNA 381 # define UCONFIG_NO_IDNA 0 382 #endif 383 384 /** 385 * \def UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE 386 * Determines the default UMessagePatternApostropheMode. 387 * See the documentation for that enum. 388 * 389 * @stable ICU 4.8 390 */ 391 #ifndef UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE 392 # define UCONFIG_MSGPAT_DEFAULT_APOSTROPHE_MODE UMSGPAT_APOS_DOUBLE_OPTIONAL 393 #endif 394 395 /** 396 * \def UCONFIG_USE_WINDOWS_LCID_MAPPING_API 397 * On platforms where U_PLATFORM_HAS_WIN32_API is true, this switch determines 398 * if the Windows platform APIs are used for LCID<->Locale Name conversions. 399 * Otherwise, only the built-in ICU tables are used. 400 * 401 * @internal ICU 64 402 */ 403 #ifndef UCONFIG_USE_WINDOWS_LCID_MAPPING_API 404 # define UCONFIG_USE_WINDOWS_LCID_MAPPING_API 1 405 #endif 406 407 /* i18n library switches ---------------------------------------------------- */ 408 409 /** 410 * \def UCONFIG_NO_COLLATION 411 * This switch turns off collation and collation-based string search. 412 * 413 * @stable ICU 2.4 414 */ 415 #ifndef UCONFIG_NO_COLLATION 416 # define UCONFIG_NO_COLLATION 0 417 #endif 418 419 /** 420 * \def UCONFIG_NO_FORMATTING 421 * This switch turns off formatting and calendar/timezone services. 422 * 423 * @stable ICU 2.4 424 */ 425 #ifndef UCONFIG_NO_FORMATTING 426 # define UCONFIG_NO_FORMATTING 0 427 #endif 428 429 /** 430 * \def UCONFIG_NO_TRANSLITERATION 431 * This switch turns off transliteration. 432 * 433 * @stable ICU 2.4 434 */ 435 #ifndef UCONFIG_NO_TRANSLITERATION 436 # define UCONFIG_NO_TRANSLITERATION 0 437 #endif 438 439 /** 440 * \def UCONFIG_NO_REGULAR_EXPRESSIONS 441 * This switch turns off regular expressions. 442 * 443 * @stable ICU 2.4 444 */ 445 #ifndef UCONFIG_NO_REGULAR_EXPRESSIONS 446 # define UCONFIG_NO_REGULAR_EXPRESSIONS 0 447 #endif 448 449 /** 450 * \def UCONFIG_NO_SERVICE 451 * This switch turns off service registration. 452 * 453 * @stable ICU 3.2 454 */ 455 #ifndef UCONFIG_NO_SERVICE 456 # define UCONFIG_NO_SERVICE 0 457 #endif 458 459 /** 460 * \def UCONFIG_HAVE_PARSEALLINPUT 461 * This switch turns on the "parse all input" attribute. Binary incompatible. 462 * 463 * @internal 464 */ 465 #ifndef UCONFIG_HAVE_PARSEALLINPUT 466 # define UCONFIG_HAVE_PARSEALLINPUT 1 467 #endif 468 469 /** 470 * \def UCONFIG_NO_FILTERED_BREAK_ITERATION 471 * This switch turns off filtered break iteration code. 472 * 473 * @internal 474 */ 475 #ifndef UCONFIG_NO_FILTERED_BREAK_ITERATION 476 # define UCONFIG_NO_FILTERED_BREAK_ITERATION 0 477 #endif 478 479 #endif // __UCONFIG_H__ 480