Symbol visibility for Sun C
Project: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/commit/78e9417a Tree: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/tree/78e9417a Diff: http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/diff/78e9417a Branch: refs/heads/master Commit: 78e9417aaa2836cfbd37dfc65c92fe8ee81dc9fa Parents: 8136d84 Author: Nick Wellnhofer <[email protected]> Authored: Tue Aug 19 17:10:27 2014 +0200 Committer: Nick Wellnhofer <[email protected]> Committed: Tue Aug 19 22:32:10 2014 +0200 ---------------------------------------------------------------------- src/Charmonizer/Core/CFlags.c | 13 ++++++++++--- src/Charmonizer/Probe/SymbolVisibility.c | 12 ++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/78e9417a/src/Charmonizer/Core/CFlags.c ---------------------------------------------------------------------- diff --git a/src/Charmonizer/Core/CFlags.c b/src/Charmonizer/Core/CFlags.c index a0542d7..8627fca 100644 --- a/src/Charmonizer/Core/CFlags.c +++ b/src/Charmonizer/Core/CFlags.c @@ -224,9 +224,16 @@ chaz_CFlags_compile_shared_library(chaz_CFlags *flags) { void chaz_CFlags_hide_symbols(chaz_CFlags *flags) { - if (flags->style == CHAZ_CFLAGS_STYLE_GNU - && strcmp(chaz_OS_shared_lib_ext(), ".dll") != 0) { - chaz_CFlags_append(flags, "-fvisibility=hidden"); + if (flags->style == CHAZ_CFLAGS_STYLE_GNU) { + if (strcmp(chaz_OS_shared_lib_ext(), ".dll") != 0) { + chaz_CFlags_append(flags, "-fvisibility=hidden"); + } + } + else if (flags->style == CHAZ_CFLAGS_STYLE_SUN_C) { + if (chaz_CC_sun_c_version_num() >= 0x550) { + /* Sun Studio 8. */ + chaz_CFlags_append(flags, "-xldscope=hidden"); + } } } http://git-wip-us.apache.org/repos/asf/lucy-charmonizer/blob/78e9417a/src/Charmonizer/Probe/SymbolVisibility.c ---------------------------------------------------------------------- diff --git a/src/Charmonizer/Probe/SymbolVisibility.c b/src/Charmonizer/Probe/SymbolVisibility.c index e97f49a..73fdaf4 100644 --- a/src/Charmonizer/Probe/SymbolVisibility.c +++ b/src/Charmonizer/Probe/SymbolVisibility.c @@ -39,6 +39,18 @@ chaz_SymbolVisibility_run(void) { chaz_ConfWriter_start_module("SymbolVisibility"); chaz_CFlags_set_warnings_as_errors(temp_cflags); + /* Sun C. */ + if (!can_control_visibility) { + char export_sun[] = "__global"; + sprintf(code_buf, chaz_SymbolVisibility_symbol_exporting_code, + export_sun); + if (chaz_CC_test_compile(code_buf)) { + can_control_visibility = true; + chaz_ConfWriter_add_def("EXPORT", export_sun); + chaz_ConfWriter_add_def("IMPORT", export_sun); + } + } + /* Windows. */ if (!can_control_visibility) { char export_win[] = "__declspec(dllexport)";
