diff options
author | piman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-29 20:52:15 +0000 |
---|---|---|
committer | piman@google.com <piman@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-29 20:52:15 +0000 |
commit | 778da76f8a401af0eb108889e3e29506d1638bd5 (patch) | |
tree | b4f4226deffd358705a4be5753082cd8aeec2a31 /o3d/base | |
parent | 7c37e4c641007ccbb666be127926e7512b0db89b (diff) | |
download | chromium_src-778da76f8a401af0eb108889e3e29506d1638bd5.zip chromium_src-778da76f8a401af0eb108889e3e29506d1638bd5.tar.gz chromium_src-778da76f8a401af0eb108889e3e29506d1638bd5.tar.bz2 |
linux: unexport as many symbols as possible
See discussion on http://code.google.com/p/chromium/issues/detail?id=17557
On linux, exported symbols from a shared library can be overridden by another unit (e.g. the browser) if it exports the same ones. So compile everything with -fvisibility=hidden to make every symbol private by default, and explicitly export the ones that we care about. Also make sure that third-party deps (e.g. icu) don't explicitly export symbols.
Review URL: http://codereview.chromium.org/160317
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21992 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/base')
-rw-r--r-- | o3d/base/icu38_o3d.scons | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/o3d/base/icu38_o3d.scons b/o3d/base/icu38_o3d.scons index 701e511..f7d5a33 100644 --- a/o3d/base/icu38_o3d.scons +++ b/o3d/base/icu38_o3d.scons @@ -397,6 +397,14 @@ def MakeObject(env, source, extra_defines): if CombinedLib: + if env.Bit('linux'): + # U_STATIC_IMPLEMENTATION gets overridden by U_COMBINED_IMPLEMENTATION, + # which on linux causes all the symbols to be exported from the shared + # library, conflicting with the browser's definition if it uses icu as well + # (e.g. Chrome). + combined_flag = [] + else: + combined_flag = ['U_COMBINED_IMPLEMENTATION'] # These empirically fail to build when U_COMMON_IMPLEMENTATION # isn't defined in addition to U_COMBINED_IMPLEMENTATION. Remove # them from the source file list and re-append them with Nodes @@ -410,13 +418,11 @@ if CombinedLib: objects = [] for n in need_common_implementation: common_input_files.remove(n) - o = MakeObject(env, n, ['U_COMMON_IMPLEMENTATION', - 'U_COMBINED_IMPLEMENTATION']) + o = MakeObject(env, n, ['U_COMMON_IMPLEMENTATION'] + combined_flag) objects.append(o) sources = common_input_files + i18n_input_files + stubdata_input_files - objects += [MakeObject(env, n, ['U_COMBINED_IMPLEMENTATION']) - for n in sources] + objects += [MakeObject(env, n, combined_flag) for n in sources] icu_lib = env.ComponentLibrary('icu', objects); |