Skip to content

Commit d9940cd

Browse files
committed
CDRIVER-4784 Disable shared libmongoc targets if ENABLE_SHARED=OFF (#1486)
1 parent ebaa4bf commit d9940cd

File tree

1 file changed

+79
-71
lines changed

1 file changed

+79
-71
lines changed

src/libmongoc/CMakeLists.txt

Lines changed: 79 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -812,58 +812,82 @@ if (MONGOC_ENABLE_STATIC_BUILD)
812812
set_target_properties (mcd_rpc PROPERTIES OUTPUT_NAME "mcd-rpc")
813813
endif ()
814814

815-
add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING})
816-
if(WIN32)
817-
# Add resource-definition script for Windows shared library (.dll).
818-
configure_file(libmongoc.rc.in libmongoc.rc)
819-
target_sources(mongoc_shared PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/libmongoc.rc)
820-
endif()
821-
set_target_properties (mongoc_shared PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden)
822-
target_link_libraries (mongoc_shared PRIVATE ${LIBRARIES} PUBLIC ${BSON_LIBRARIES} mongo::detail::c_dependencies)
823-
target_include_directories (mongoc_shared PRIVATE ${ZLIB_INCLUDE_DIRS})
824-
target_include_directories (mongoc_shared PRIVATE ${UTF8PROC_INCLUDE_DIRS})
825-
target_include_directories (mongoc_shared PRIVATE ${LIBMONGOCRYPT_INCLUDE_DIRECTORIES})
826-
if (MONGOC_ENABLE_MONGODB_AWS_AUTH)
827-
target_include_directories (mongoc_shared PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../kms-message/src")
828-
if (APPLE)
829-
set_target_properties (mongoc_shared PROPERTIES LINK_FLAGS "-Wl,-unexported_symbols_list,\"${CMAKE_CURRENT_SOURCE_DIR}/../../build/cmake/libmongoc-hidden-symbols.txt\"")
830-
elseif (UNIX)
831-
set_target_properties (mongoc_shared PROPERTIES LINK_FLAGS "-Wl,--version-script=\"${CMAKE_CURRENT_SOURCE_DIR}/../../build/cmake/libmongoc-hidden-symbols.map\"")
815+
if (ENABLE_SHARED)
816+
add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING})
817+
if(WIN32)
818+
# Add resource-definition script for Windows shared library (.dll).
819+
configure_file(libmongoc.rc.in libmongoc.rc)
820+
target_sources(mongoc_shared PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/libmongoc.rc)
821+
endif()
822+
set_target_properties (mongoc_shared PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden)
823+
target_link_libraries (mongoc_shared PRIVATE ${LIBRARIES} PUBLIC ${BSON_LIBRARIES} mongo::detail::c_dependencies)
824+
target_include_directories (mongoc_shared PRIVATE ${ZLIB_INCLUDE_DIRS})
825+
target_include_directories (mongoc_shared PRIVATE ${UTF8PROC_INCLUDE_DIRS})
826+
target_include_directories (mongoc_shared PRIVATE ${LIBMONGOCRYPT_INCLUDE_DIRECTORIES})
827+
if (MONGOC_ENABLE_MONGODB_AWS_AUTH)
828+
target_include_directories (mongoc_shared PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../kms-message/src")
829+
if (APPLE)
830+
set_target_properties (mongoc_shared PROPERTIES LINK_FLAGS "-Wl,-unexported_symbols_list,\"${CMAKE_CURRENT_SOURCE_DIR}/../../build/cmake/libmongoc-hidden-symbols.txt\"")
831+
elseif (UNIX)
832+
set_target_properties (mongoc_shared PROPERTIES LINK_FLAGS "-Wl,--version-script=\"${CMAKE_CURRENT_SOURCE_DIR}/../../build/cmake/libmongoc-hidden-symbols.map\"")
833+
endif ()
834+
832835
endif ()
836+
target_compile_definitions (mongoc_shared
837+
PRIVATE
838+
MONGOC_COMPILATION
839+
${KMS_MSG_DEFINITIONS}
840+
MCOMMON_NAME_PREFIX=_mongoc_mcommon
841+
)
833842

834-
endif ()
835-
target_compile_definitions (mongoc_shared
836-
PRIVATE
837-
MONGOC_COMPILATION
838-
${KMS_MSG_DEFINITIONS}
839-
MCOMMON_NAME_PREFIX=_mongoc_mcommon
840-
)
843+
if (USE_BUNDLED_UTF8PROC)
844+
target_compile_definitions (mongoc_shared PRIVATE UTF8PROC_STATIC)
845+
endif ()
841846

842-
if (USE_BUNDLED_UTF8PROC)
843-
target_compile_definitions (mongoc_shared PRIVATE UTF8PROC_STATIC)
844-
endif ()
847+
# Several directories in the source and build trees contain headers we would like
848+
# include via relative reference, but they all end up in the same install path
849+
target_include_directories (
850+
mongoc_shared
851+
PUBLIC
852+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>
853+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src/mongoc>
854+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
855+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/mongoc>
856+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../../src/common>
857+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/../../src>
858+
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/../../src/common>
859+
)
845860

846-
# Several directories in the source and build trees contain headers we would like
847-
# include via relative reference, but they all end up in the same install path
848-
target_include_directories (
849-
mongoc_shared
850-
PUBLIC
851-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src>
852-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/src/mongoc>
853-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
854-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/mongoc>
855-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/../../src/common>
856-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/../../src>
857-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/../../src/common>
858-
)
861+
set_target_properties (mongoc_shared PROPERTIES
862+
OUTPUT_NAME "${MONGOC_OUTPUT_BASENAME}-${MONGOC_API_VERSION}"
863+
VERSION 0.0.0
864+
SOVERSION 0
865+
pkg_config_REQUIRES "libbson-1.0"
866+
)
867+
mongo_generate_pkg_config(mongoc_shared INSTALL RENAME libmongoc-${MONGOC_API_VERSION}.pc)
868+
869+
if (ENABLE_APPLE_FRAMEWORK)
870+
set_target_properties (mongoc_shared PROPERTIES
871+
FRAMEWORK TRUE
872+
MACOSX_FRAMEWORK_BUNDLE_VERSION ${MONGOC_VERSION}
873+
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${MONGOC_VERSION}
874+
MACOSX_FRAMEWORK_IDENTIFIER org.mongodb.mongoc
875+
OUTPUT_NAME "${MONGOC_OUTPUT_BASENAME}"
876+
PUBLIC_HEADER "${HEADERS}"
877+
)
878+
endif () # ENABLE_APPLE_FRAMEWORK
859879

860-
set_target_properties (mongoc_shared PROPERTIES
861-
OUTPUT_NAME "${MONGOC_OUTPUT_BASENAME}-${MONGOC_API_VERSION}"
862-
VERSION 0.0.0
863-
SOVERSION 0
864-
pkg_config_REQUIRES "libbson-1.0"
865-
)
866-
mongo_generate_pkg_config(mongoc_shared INSTALL RENAME libmongoc-${MONGOC_API_VERSION}.pc)
880+
add_executable (mongoc-stat ${PROJECT_SOURCE_DIR}/../../src/tools/mongoc-stat.c)
881+
target_link_libraries (mongoc-stat mongoc_shared ${LIBRARIES})
882+
883+
# mongoc-stat works if shared memory performance counters are enabled.
884+
if (ENABLE_SHM_COUNTERS)
885+
install (TARGETS mongoc-stat
886+
EXPORT mongoc_targets
887+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
888+
endif () # ENABLE_SHM_COUNTERS
889+
890+
endif () # ENABLE_SHARED
867891

868892
if (MONGOC_ENABLE_STATIC_BUILD)
869893
add_library (mongoc_static STATIC ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING})
@@ -922,26 +946,6 @@ if (MONGOC_ENABLE_STATIC_BUILD)
922946
endif()
923947
endif ()
924948

925-
if (ENABLE_APPLE_FRAMEWORK)
926-
set_target_properties (mongoc_shared PROPERTIES
927-
FRAMEWORK TRUE
928-
MACOSX_FRAMEWORK_BUNDLE_VERSION ${MONGOC_VERSION}
929-
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${MONGOC_VERSION}
930-
MACOSX_FRAMEWORK_IDENTIFIER org.mongodb.mongoc
931-
OUTPUT_NAME "${MONGOC_OUTPUT_BASENAME}"
932-
PUBLIC_HEADER "${HEADERS}"
933-
)
934-
endif ()
935-
936-
add_executable (mongoc-stat ${PROJECT_SOURCE_DIR}/../../src/tools/mongoc-stat.c)
937-
target_link_libraries (mongoc-stat mongoc_shared ${LIBRARIES})
938-
939-
# mongoc-stat works if shared memory performance counters are enabled.
940-
if (ENABLE_SHM_COUNTERS)
941-
install (TARGETS mongoc-stat
942-
EXPORT mongoc_targets
943-
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
944-
endif ()
945949

946950
set (test-libmongoc-sources
947951
${PROJECT_SOURCE_DIR}/../../src/libbson/tests/corpus-test.c
@@ -1166,7 +1170,7 @@ if (ENABLE_TESTS)
11661170
)
11671171
endif ()
11681172

1169-
if (ENABLE_EXAMPLES)
1173+
if (ENABLE_EXAMPLES AND ENABLE_SHARED)
11701174
function (mongoc_add_example example)
11711175
add_executable (${example} ${ARGN})
11721176
target_link_libraries (${example} mongoc_shared ${LIBRARIES})
@@ -1243,10 +1247,14 @@ file (COPY ${PROJECT_SOURCE_DIR}/tests/json DESTINATION ${PROJECT_BINARY_DIR}/te
12431247
file (COPY ${PROJECT_SOURCE_DIR}/tests/x509gen DESTINATION ${PROJECT_BINARY_DIR}/tests)
12441248
file (COPY ${PROJECT_SOURCE_DIR}/tests/release_files DESTINATION ${PROJECT_BINARY_DIR}/tests)
12451249

1250+
set (TARGETS_TO_INSTALL)
1251+
12461252
if (MONGOC_ENABLE_STATIC_INSTALL)
1247-
set (TARGETS_TO_INSTALL mongoc_shared mongoc_static)
1248-
else ()
1249-
set (TARGETS_TO_INSTALL mongoc_shared)
1253+
list (APPEND TARGETS_TO_INSTALL mongoc_static)
1254+
endif ()
1255+
1256+
if (ENABLE_SHARED)
1257+
list (APPEND TARGETS_TO_INSTALL mongoc_shared)
12501258
endif ()
12511259

12521260
set (MONGOC_HEADER_INSTALL_DIR

0 commit comments

Comments
 (0)