@@ -13,6 +13,8 @@ set (ENABLE_SASL AUTO CACHE STRING
13
13
"Enable SASL authentication (Kerberos).\ Options are \" CYRUS\" to use Cyrus
14
14
SASL, \" SSPI\" to use Windows Native SSPI, \" GSSAPI\" to use macOS Native GSS,
15
15
\" AUTO\" ,\ or \" OFF\" . These options are case-sensitive." )
16
+
17
+ set (ENABLE_STATIC AUTO CACHE STRING "Build static libmongoc. Set to ON/AUTO/OFF, default AUTO." )
16
18
option (ENABLE_TESTS "Build MongoDB C Driver tests." ON )
17
19
option (ENABLE_EXAMPLES "Build MongoDB C Driver examples." ON )
18
20
option (ENABLE_AUTOMATIC_INIT_AND_CLEANUP "Enable automatic init and cleanup (GCC only)" ON )
@@ -46,19 +48,32 @@ find_package (libbson-1.0
46
48
${BSON_ROOT_DIR}
47
49
REQUIRED )
48
50
49
- find_package (libbson-static-1.0
50
- "${MONGOC_MAJOR_VERSION} .${MONGOC_MINOR_VERSION} .${MONGOC_MICRO_VERSION} "
51
- HINTS
52
- ${BSON_ROOT_DIR}
53
- REQUIRED )
54
-
55
51
message ("-- libbson found version \" ${BSON_VERSION} \" " )
56
52
message ("-- libbson include path \" ${BSON_INCLUDE_DIRS} \" " )
57
53
message ("-- libbson libraries \" ${BSON_LIBRARIES} \" " )
58
54
59
- message ("-- libbson-static found version \" ${BSON_STATIC_VERSION} \" " )
60
- message ("-- libbson-static include path \" ${BSON_STATIC_INCLUDE_DIRS} \" " )
61
- message ("-- libbson-static libraries \" ${BSON_STATIC_LIBRARIES} \" " )
55
+ if (ENABLE_STATIC STREQUAL ON OR ENABLE_STATIC STREQUAL AUTO )
56
+ find_package (libbson-static-1.0
57
+ "${MONGOC_MAJOR_VERSION} .${MONGOC_MINOR_VERSION} .${MONGOC_MICRO_VERSION} "
58
+ HINTS
59
+ ${BSON_ROOT_DIR} )
60
+
61
+ if (ENABLE_STATIC STREQUAL ON AND NOT BSON_STATIC_LIBRARY )
62
+ message (FATAL_ERROR "Static libbson not found. Pass -DENABLE_STATIC=OFF" )
63
+ endif ()
64
+
65
+ if (BSON_STATIC_LIBRARY )
66
+ set (MONGOC_ENABLE_STATIC ON )
67
+ endif ()
68
+
69
+ message ("-- libbson-static found version \" ${BSON_STATIC_VERSION} \" " )
70
+ message ("-- libbson-static include path \" ${BSON_STATIC_INCLUDE_DIRS} \" " )
71
+ message ("-- libbson-static libraries \" ${BSON_STATIC_LIBRARIES} \" " )
72
+ endif ()
73
+
74
+ if (ENABLE_TESTS AND NOT MONGOC_ENABLE_STATIC )
75
+ message (FATAL_ERROR "ENABLE_TESTS requires ENABLE_STATIC" )
76
+ endif ()
62
77
63
78
if (NOT (ENABLE_SSL STREQUAL DARWIN
64
79
OR ENABLE_SSL STREQUAL WINDOWS
@@ -532,10 +547,38 @@ else()
532
547
message (STATUS "SASL disabled" )
533
548
endif ()
534
549
535
- add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} )
536
- add_library (mongoc_static STATIC ${SOURCES} ${HEADERS} )
537
-
538
- set (CMAKE_CXX_VISIBILITY_PRESET hidden )
550
+ if (ENABLE_SNAPPY STREQUAL "bundled" )
551
+ set (MONGOC_ENABLE_COMPRESSION 1 )
552
+ set (MONGOC_ENABLE_COMPRESSION_SNAPPY 1 )
553
+ include (FindSnappy )
554
+ endif ()
555
+ if (ENABLE_ZLIB STREQUAL "bundled" )
556
+ check_include_files ("unistd.h" HAVE_UNISTD_H )
557
+ check_include_files ("stdarg.h" HAVE_STDARG_H )
558
+ set (MONGOC_ENABLE_COMPRESSION 1 )
559
+ set (MONGOC_ENABLE_COMPRESSION_ZLIB 1 )
560
+ set (SOURCES ${SOURCES}
561
+ ${SOURCE_DIR} /src/zlib-1.2.11/adler32.c
562
+ ${SOURCE_DIR} /src/zlib-1.2.11/crc32.c
563
+ ${SOURCE_DIR} /src/zlib-1.2.11/deflate.c
564
+ ${SOURCE_DIR} /src/zlib-1.2.11/infback.c
565
+ ${SOURCE_DIR} /src/zlib-1.2.11/inffast.c
566
+ ${SOURCE_DIR} /src/zlib-1.2.11/inflate.c
567
+ ${SOURCE_DIR} /src/zlib-1.2.11/inftrees.c
568
+ ${SOURCE_DIR} /src/zlib-1.2.11/trees.c
569
+ ${SOURCE_DIR} /src/zlib-1.2.11/zutil.c
570
+ ${SOURCE_DIR} /src/zlib-1.2.11/compress.c
571
+ ${SOURCE_DIR} /src/zlib-1.2.11/uncompr.c
572
+ ${SOURCE_DIR} /src/zlib-1.2.11/gzclose.c
573
+ ${SOURCE_DIR} /src/zlib-1.2.11/gzlib.c
574
+ ${SOURCE_DIR} /src/zlib-1.2.11/gzread.c
575
+ ${SOURCE_DIR} /src/zlib-1.2.11/gzwrite.c
576
+ )
577
+ configure_file (
578
+ "${SOURCE_DIR} /src/zlib-1.2.11/zconf.h.in"
579
+ "${PROJECT_BINARY_DIR} /src/zlib-1.2.11/zconf.h"
580
+ )
581
+ endif ()
539
582
540
583
set (THREADS_PREFER_PTHREAD_FLAG 1 )
541
584
find_package (Threads REQUIRED )
@@ -548,23 +591,33 @@ if(WIN32)
548
591
set (LIBS ${LIBS} ws2_32 )
549
592
endif ()
550
593
594
+ add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} )
595
+ set_target_properties (mongoc_shared PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden )
551
596
target_link_libraries (mongoc_shared ${LIBS} ${BSON_LIBRARIES} )
552
597
target_include_directories (mongoc_shared PUBLIC ${BSON_INCLUDE_DIRS} )
553
598
target_compile_definitions (mongoc_shared PUBLIC MONGOC_COMPILATION ${BSON_DEFINITIONS} )
554
599
555
- target_link_libraries (mongoc_static ${LIBS} ${BSON_STATIC_LIBRARIES} )
556
- target_include_directories (mongoc_static PUBLIC ${BSON_STATIC_INCLUDE_DIRS} )
557
- target_compile_definitions (mongoc_static PUBLIC MONGOC_COMPILATION MONGOC_STATIC ${BSON_STATIC_DEFINITIONS} )
558
-
559
600
# CMake wants to make different symlinks than the Autotools, see
560
601
# https://cmake.org/pipermail/cmake/2007-September/016501.html
561
602
# This hack sets up standard symlink, libmongoc-1.0.so -> libmongoc-1.0.0.so
562
603
set_target_properties (mongoc_shared PROPERTIES VERSION 0 SOVERSION ${MONGOC_MAJOR_VERSION} )
563
- set_target_properties (mongoc_static PROPERTIES VERSION ${MONGOC_VERSION} )
564
-
565
604
set_target_properties (mongoc_shared PROPERTIES OUTPUT_NAME "mongoc-${MONGOC_API_VERSION} " PREFIX "lib" )
566
- set_target_properties (mongoc_static PROPERTIES OUTPUT_NAME "mongoc-static-${MONGOC_API_VERSION} " )
567
605
606
+ if (MONGOC_ENABLE_STATIC )
607
+ add_library (mongoc_static STATIC ${SOURCES} ${HEADERS} )
608
+ target_link_libraries (mongoc_static ${LIBS} ${BSON_STATIC_LIBRARIES} )
609
+ target_include_directories (mongoc_static PUBLIC ${BSON_STATIC_INCLUDE_DIRS} )
610
+ target_compile_definitions (mongoc_static PUBLIC MONGOC_COMPILATION MONGOC_STATIC ${BSON_STATIC_DEFINITIONS} )
611
+ set_target_properties (mongoc_static PROPERTIES VERSION ${MONGOC_VERSION} )
612
+ set_target_properties (mongoc_static PROPERTIES OUTPUT_NAME "mongoc-static-${MONGOC_API_VERSION} " )
613
+ endif ()
614
+
615
+ if (ENABLE_SNAPPY STREQUAL "bundled" )
616
+ set_target_properties (mongoc_shared PROPERTIES LINKER_LANGUAGE CXX )
617
+ if (MONGOC_ENABLE_STATIC )
618
+ set_target_properties (mongoc_static PROPERTIES LINKER_LANGUAGE CXX )
619
+ endif ()
620
+ endif ()
568
621
function (mongoc_add_test test use_shared )
569
622
if (ENABLE_TESTS )
570
623
add_executable (${test} ${ARGN} )
@@ -574,9 +627,11 @@ function(mongoc_add_test test use_shared)
574
627
endif ()
575
628
if (${use_shared} )
576
629
target_link_libraries (${test} mongoc_shared )
630
+ target_include_directories (${test} PRIVATE ${BSON_INCLUDE_DIRS} )
577
631
else ()
578
632
target_compile_definitions (${test} PUBLIC "MONGOC_COMPILATION" )
579
633
target_link_libraries (${test} mongoc_static )
634
+ target_include_directories (${test} PRIVATE ${BSON_STATIC_INCLUDE_DIRS} )
580
635
endif ()
581
636
if (WIN32 )
582
637
target_link_libraries (${test} shlwapi )
@@ -727,12 +782,21 @@ file(COPY ${SOURCE_DIR}/tests/x509gen DESTINATION ${PROJECT_BINARY_DIR}/tests)
727
782
file (COPY ${SOURCE_DIR} /tests/release_files DESTINATION ${PROJECT_BINARY_DIR} /tests )
728
783
729
784
install (
730
- TARGETS mongoc_shared mongoc_static ${EXAMPLES}
785
+ TARGETS mongoc_shared ${EXAMPLES}
731
786
LIBRARY DESTINATION lib
732
787
ARCHIVE DESTINATION lib
733
788
RUNTIME DESTINATION bin
734
789
)
735
790
791
+ if (MONGOC_ENABLE_STATIC )
792
+ install (
793
+ TARGETS mongoc_shared mongoc_static ${EXAMPLES}
794
+ LIBRARY DESTINATION lib
795
+ ARCHIVE DESTINATION lib
796
+ RUNTIME DESTINATION bin
797
+ )
798
+ endif ()
799
+
736
800
set (MONGOC_HEADER_INSTALL_DIR "include/libmongoc-${MONGOC_API_VERSION} " )
737
801
738
802
install (
@@ -768,15 +832,16 @@ install(
768
832
FILES ${CMAKE_CURRENT_BINARY_DIR} /src/libmongoc-1.0.pc
769
833
DESTINATION lib/pkgconfig
770
834
)
771
- configure_file (
772
- ${CMAKE_CURRENT_SOURCE_DIR} /src/libmongoc-static-1.0.pc.in
773
- ${CMAKE_CURRENT_BINARY_DIR} /src/libmongoc-static-1.0.pc
774
- @ONLY )
775
- install (
776
- FILES ${CMAKE_CURRENT_BINARY_DIR} /src/libmongoc-static-1.0.pc
777
- DESTINATION lib/pkgconfig
778
- )
779
-
835
+ if (MONGOC_ENABLE_STATIC )
836
+ configure_file (
837
+ ${CMAKE_CURRENT_SOURCE_DIR} /src/libmongoc-static-1.0.pc.in
838
+ ${CMAKE_CURRENT_BINARY_DIR} /src/libmongoc-static-1.0.pc
839
+ @ONLY )
840
+ install (
841
+ FILES ${CMAKE_CURRENT_BINARY_DIR} /src/libmongoc-static-1.0.pc
842
+ DESTINATION lib/pkgconfig
843
+ )
844
+ endif ()
780
845
# Deprecated alias for libmongoc-1.0.pc, see CDRIVER-2086.
781
846
if (MONGOC_ENABLE_SSL )
782
847
configure_file (
0 commit comments