diff options
author | sgk@google.com <sgk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-29 04:59:00 +0000 |
---|---|---|
committer | sgk@google.com <sgk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-29 04:59:00 +0000 |
commit | 8670ffb68690e8714fb2999fb5466d2d39d72389 (patch) | |
tree | 040d7fff36ccde87d811e1c80fe98e82fe014b8c /base | |
parent | 65d7001f983ebef9153be6e6aa87762267ae3ed3 (diff) | |
download | chromium_src-8670ffb68690e8714fb2999fb5466d2d39d72389.zip chromium_src-8670ffb68690e8714fb2999fb5466d2d39d72389.tar.gz chromium_src-8670ffb68690e8714fb2999fb5466d2d39d72389.tar.bz2 |
ICU changes
* Add an ICU_UTIL_DATA_IMPL #defines to control whether we're expecting
the ICU data as ICU_UTIL_DATA_{SHARED,STATIC,FILE}.
* Set defaults on the platforms to match our current practice:
Windows => shared, Linux => file, Mac => static.
* On Mac, link the separate icui18n, icuuc and icudata libs (matching
how we're building there), instead of the common icu lib.
* Roll the icu38 revision in DEPS to get the updated SCons build.
Review URL: http://codereview.chromium.org/5022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2669 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/icu_util.cc | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/base/icu_util.cc b/base/icu_util.cc index 4c96926..17f934d 100644 --- a/base/icu_util.cc +++ b/base/icu_util.cc @@ -19,39 +19,60 @@ #include "unicode/putil.h" #include "unicode/udata.h" +#define ICU_UTIL_DATA_FILE 0 +#define ICU_UTIL_DATA_SHARED 1 +#define ICU_UTIL_DATA_STATIC 2 + +#ifndef ICU_UTIL_DATA_IMPL + +#if defined(OS_WIN) +#define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_SHARED +#elif defined(OS_MACOSX) +#define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_STATIC +#elif defined(OS_LINUX) +#define ICU_UTIL_DATA_IMPL ICU_UTIL_DATA_FILE +#endif + +#endif // ICU_UTIL_DATA_IMPL + +#if defined(OS_WIN) +#define ICU_UTIL_DATA_SYMBOL "icudt38_dat" +#define ICU_UTIL_DATA_SHARED_MODULE_NAME L"icudt38.dll" +#endif + namespace icu_util { bool Initialize() { -#if defined(OS_WIN) +#ifndef NDEBUG // Assert that we are not called more than once. Even though calling this // function isn't harmful (ICU can handle it), being called twice probably // indicates a programming error. -#ifndef NDEBUG static bool called_once = false; DCHECK(!called_once); called_once = true; #endif +#if (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_SHARED) // We expect to find the ICU data module alongside the current module. std::wstring data_path; PathService::Get(base::DIR_MODULE, &data_path); - file_util::AppendToPath(&data_path, L"icudt38.dll"); + file_util::AppendToPath(&data_path, ICU_UTIL_DATA_SHARED_MODULE_NAME); HMODULE module = LoadLibrary(data_path.c_str()); if (!module) return false; - FARPROC addr = GetProcAddress(module, "icudt38_dat"); + FARPROC addr = GetProcAddress(module, ICU_UTIL_DATA_SYMBOL); if (!addr) return false; UErrorCode err = U_ZERO_ERROR; udata_setCommonData(reinterpret_cast<void*>(addr), &err); return err == U_ZERO_ERROR; -#elif defined(OS_MACOSX) +#elif (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_STATIC) // Mac bundles the ICU data in. return true; -#elif defined(OS_LINUX) +#elif (ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE) // For now, expect the data file to be alongside the executable. // This is sufficient while we work on unit tests, but will eventually // likely live in a data directory. @@ -59,7 +80,11 @@ bool Initialize() { bool path_ok = PathService::Get(base::DIR_EXE, &data_path); DCHECK(path_ok); u_setDataDirectory(base::SysWideToNativeMB(data_path).c_str()); - return true; + // Only look for the packaged data file; + // the default behavior is to look for individual files. + UErrorCode err = U_ZERO_ERROR; + udata_setFileAccess(UDATA_ONLY_PACKAGES, &err); + return err == U_ZERO_ERROR; #endif } |