aboutsummaryrefslogtreecommitdiff
path: root/src/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/CMakeLists.txt')
-rw-r--r--src/CMakeLists.txt45
1 files changed, 30 insertions, 15 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2db46c60..cfb6ff16 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -191,38 +191,53 @@ foreach (f ${NNG_SOURCES})
source_group ("${SRC_GROUP}" FILES ${f})
endforeach ()
-# Static libary
-add_library (${PROJECT_NAME}_static STATIC ${NNG_SOURCES})
-target_compile_definitions(${PROJECT_NAME}_static PUBLIC -DNNG_STATIC_LIB)
-
-# Shared library
-add_library (${PROJECT_NAME} SHARED ${NNG_SOURCES})
-target_compile_definitions(${PROJECT_NAME} PRIVATE -DNNG_SHARED_LIB)
+# Library
+add_library (${PROJECT_NAME} ${NNG_SOURCES})
+
+# When building shared libraries we prefer to suppress default symbol
+# visibility, so that only the symbols that should be exposed in the
+# resulting library are. This is the default with Windows.
+if (BUILD_SHARED_LIBS)
+ target_compile_definitions(${PROJECT_NAME} PRIVATE -DNNG_SHARED_LIB)
+ if (NNG_HIDDEN_VISIBILITY)
+ target_compile_definitions(${PROJECT_NAME} PRIVATE -DNNG_HIDDEN_VISIBILITY)
+ set_target_properties(${PROJECT_NAME} PROPERTIES C_VISIBILITY_PRESET hidden)
+ endif()
+else()
+ target_compile_definitions(${PROJECT_NAME} PUBLIC -DNNG_STATIC_LIB)
+endif()
set_target_properties (${PROJECT_NAME}
- PROPERTIES SOVERSION "${NNG_ABI_VERSION}")
+ PROPERTIES SOVERSION ${NNG_ABI_SOVERSION} VERSION "${NNG_ABI_VERSION}")
# Set library outputs same as top-level project binary outputs
-set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static
+set_target_properties (${PROJECT_NAME}
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
-set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static
+set_target_properties (${PROJECT_NAME}
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
-set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static
+set_target_properties (${PROJECT_NAME}
PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
-set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}_static
+set_target_properties (${PROJECT_NAME} ${PROJECT_NAME}
PROPERTIES FRAMEWORK OFF)
-target_link_libraries (${PROJECT_NAME} ${NNG_REQUIRED_LIBRARIES})
-target_link_libraries (${PROJECT_NAME} Threads::Threads)
+target_link_libraries (${PROJECT_NAME} PRIVATE ${NNG_REQUIRED_LIBRARIES})
+target_link_libraries (${PROJECT_NAME} PRIVATE Threads::Threads)
-install (TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_static
+install (TARGETS ${PROJECT_NAME}
+ EXPORT ${PROJECT_NAME}-target
FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT library
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT tools
)
+install (EXPORT ${PROJECT_NAME}-target
+ FILE ${PROJECT_NAME}-config.cmake
+ NAMESPACE nng::
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+)
+
# Install the header files. It would be much better if we could use
# the PUBLIC_HEADER facility, but it stupidly flattens the directories.
foreach (f ${NNG_HEADERS})