From ce975dce7ae8950b6e7b9a2d0c00ead9d45f73ff Mon Sep 17 00:00:00 2001 From: Nikolaus Waxweiler Date: Wed, 14 Mar 2018 00:50:32 +0000 Subject: [PATCH] CMake: hide symbols by default on non-MSVC, define export attribute This change makes sure that non-MSVC builds using CMake properly hide non-exported functions. --- CMakeLists.txt | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 53e89740d..3de853992 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,14 +131,6 @@ if (MSVC) add_definitions(-wd4244 -wd4267 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) endif () -if (BUILD_SHARED_LIBS) - if (WIN32 AND NOT MINGW) - add_definitions("-DHB_EXTERN=__declspec(dllexport) extern") - else () - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") - endif () -endif () - ## Detect if we are running inside a distribution or regular repository folder # if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog") @@ -534,6 +526,18 @@ endif () add_library(harfbuzz ${project_sources} ${project_extra_sources} ${project_headers}) target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS}) +if (BUILD_SHARED_LIBS) + if (WIN32 AND NOT MINGW) + add_definitions("-DHB_EXTERN=__declspec(dllexport) extern") + else () + add_definitions("-DHB_EXTERN=__attribute__(( visibility( \"default\" ) )) extern") + set_target_properties(harfbuzz PROPERTIES + C_VISIBILITY_PRESET hidden + CXX_VISIBILITY_PRESET hidden + VISIBILITY_INLINES_HIDDEN TRUE) + endif () +endif () + ## Define harfbuzz-subset library add_library(harfbuzz-subset ${subset_project_sources} ${subset_project_headers}) add_dependencies(harfbuzz-subset harfbuzz)