Skip to content

Commit dd0e48b

Browse files
authored
CXX-2745 Add advanced CMake options to toggle root namespace redeclarations (#1324)
* Apply default ABI override to polyfills
1 parent 0e17103 commit dd0e48b

File tree

6 files changed

+42
-0
lines changed

6 files changed

+42
-0
lines changed

cmake/BsoncxxUtil.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ function(bsoncxx_add_library TARGET OUTPUT_NAME LINK_TYPE)
117117
DEFINE_SYMBOL BSONCXX_EXPORT
118118
)
119119

120+
if(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
121+
target_compile_definitions(${TARGET} PUBLIC BSONCXX_API_OVERRIDE_DEFAULT_ABI)
122+
endif()
123+
120124
if(ENABLE_ABI_TAG_IN_LIBRARY_FILENAMES)
121125
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME}${abi_tag})
122126
else()

cmake/MongocxxUtil.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ function(mongocxx_add_library TARGET OUTPUT_NAME LINK_TYPE)
7979
DEFINE_SYMBOL MONGOCXX_EXPORTS
8080
)
8181

82+
if(MONGOCXX_API_OVERRIDE_DEFAULT_ABI)
83+
target_compile_definitions(${TARGET} PUBLIC MONGOCXX_API_OVERRIDE_DEFAULT_ABI)
84+
endif()
85+
8286
if(ENABLE_ABI_TAG_IN_LIBRARY_FILENAMES)
8387
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME}${abi_tag})
8488
else()

src/bsoncxx/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ message(STATUS "bsoncxx version: ${BSONCXX_VERSION}")
2323
option(BSONCXX_POLY_USE_IMPLS "Use bsoncxx implementations for stdx polyfills" OFF)
2424
option(BSONCXX_POLY_USE_STD "Use C++17 std library for stdx polyfills" OFF)
2525

26+
option(BSONCXX_API_OVERRIDE_DEFAULT_ABI "The default ABI namespace to use for root namespace redeclarations" OFF)
27+
mark_as_advanced(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
28+
if(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
29+
message(WARNING "BSONCXX_API_OVERRIDE_DEFAULT_ABI is an experimental feature")
30+
endif()
31+
2632
set(BSONCXX_OUTPUT_BASENAME "bsoncxx" CACHE STRING "Output bsoncxx library base name")
2733

2834
# Count how many polyfill options are true-ish

src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,26 @@ using v1::stdx::optional;
3434
namespace bsoncxx {
3535
namespace stdx {
3636

37+
#if defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
38+
39+
using v1::stdx::in_place;
40+
using v1::stdx::in_place_t;
41+
using v1::stdx::make_optional;
42+
using v1::stdx::nullopt;
43+
using v1::stdx::nullopt_t;
44+
using v1::stdx::optional;
45+
46+
#else
47+
3748
using v_noabi::stdx::in_place;
3849
using v_noabi::stdx::in_place_t;
3950
using v_noabi::stdx::make_optional;
4051
using v_noabi::stdx::nullopt;
4152
using v_noabi::stdx::nullopt_t;
4253
using v_noabi::stdx::optional;
4354

55+
#endif // defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
56+
4457
} // namespace stdx
4558
} // namespace bsoncxx
4659

src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,18 @@ using v1::stdx::string_view;
3030
namespace bsoncxx {
3131
namespace stdx {
3232

33+
#if defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
34+
35+
using v1::stdx::basic_string_view;
36+
using v1::stdx::string_view;
37+
38+
#else
39+
3340
using v_noabi::stdx::basic_string_view;
3441
using v_noabi::stdx::string_view;
3542

43+
#endif // defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI)
44+
3645
} // namespace stdx
3746
} // namespace bsoncxx
3847

src/mongocxx/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ message(STATUS "mongocxx version: ${MONGOCXX_VERSION}")
2323
option(MONGOCXX_ENABLE_SSL "Enable SSL - if the underlying C driver offers it" ON)
2424
option(MONGOCXX_ENABLE_SLOW_TESTS "Run slow tests when invoking the the test target" OFF)
2525

26+
option(MONGOCXX_API_OVERRIDE_DEFAULT_ABI "The default ABI namespace to use for root namespace redeclarations" OFF)
27+
mark_as_advanced(MONGOCXX_API_OVERRIDE_DEFAULT_ABI)
28+
if(MONGOCXX_API_OVERRIDE_DEFAULT_ABI)
29+
message(WARNING "MONGOCXX_API_OVERRIDE_DEFAULT_ABI is an experimental feature")
30+
endif ()
31+
2632
set(MONGOCXX_OUTPUT_BASENAME "mongocxx" CACHE STRING "Output mongocxx library base name")
2733

2834
set(MONGOCXX_PKG_DEP "") # Required by mongocxx-config.cmake.in.

0 commit comments

Comments
 (0)