diff --git a/cmake/BsoncxxUtil.cmake b/cmake/BsoncxxUtil.cmake index ad8c426513..b2cf17d40d 100644 --- a/cmake/BsoncxxUtil.cmake +++ b/cmake/BsoncxxUtil.cmake @@ -117,6 +117,10 @@ function(bsoncxx_add_library TARGET OUTPUT_NAME LINK_TYPE) DEFINE_SYMBOL BSONCXX_EXPORT ) + if(BSONCXX_API_OVERRIDE_DEFAULT_ABI) + target_compile_definitions(${TARGET} PUBLIC BSONCXX_API_OVERRIDE_DEFAULT_ABI) + endif() + if(ENABLE_ABI_TAG_IN_LIBRARY_FILENAMES) set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME}${abi_tag}) else() diff --git a/cmake/MongocxxUtil.cmake b/cmake/MongocxxUtil.cmake index de9210cecd..5014384229 100644 --- a/cmake/MongocxxUtil.cmake +++ b/cmake/MongocxxUtil.cmake @@ -79,6 +79,10 @@ function(mongocxx_add_library TARGET OUTPUT_NAME LINK_TYPE) DEFINE_SYMBOL MONGOCXX_EXPORTS ) + if(MONGOCXX_API_OVERRIDE_DEFAULT_ABI) + target_compile_definitions(${TARGET} PUBLIC MONGOCXX_API_OVERRIDE_DEFAULT_ABI) + endif() + if(ENABLE_ABI_TAG_IN_LIBRARY_FILENAMES) set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME}${abi_tag}) else() diff --git a/src/bsoncxx/CMakeLists.txt b/src/bsoncxx/CMakeLists.txt index 1d4dcafe53..5c18db21be 100644 --- a/src/bsoncxx/CMakeLists.txt +++ b/src/bsoncxx/CMakeLists.txt @@ -23,6 +23,12 @@ message(STATUS "bsoncxx version: ${BSONCXX_VERSION}") option(BSONCXX_POLY_USE_IMPLS "Use bsoncxx implementations for stdx polyfills" OFF) option(BSONCXX_POLY_USE_STD "Use C++17 std library for stdx polyfills" OFF) +option(BSONCXX_API_OVERRIDE_DEFAULT_ABI "The default ABI namespace to use for root namespace redeclarations" OFF) +mark_as_advanced(BSONCXX_API_OVERRIDE_DEFAULT_ABI) +if(BSONCXX_API_OVERRIDE_DEFAULT_ABI) + message(WARNING "BSONCXX_API_OVERRIDE_DEFAULT_ABI is an experimental feature") +endif() + set(BSONCXX_OUTPUT_BASENAME "bsoncxx" CACHE STRING "Output bsoncxx library base name") # Count how many polyfill options are true-ish diff --git a/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp b/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp index 5b42bb84f8..720170e58b 100644 --- a/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp +++ b/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/optional.hpp @@ -34,6 +34,17 @@ using v1::stdx::optional; namespace bsoncxx { namespace stdx { +#if defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI) + +using v1::stdx::in_place; +using v1::stdx::in_place_t; +using v1::stdx::make_optional; +using v1::stdx::nullopt; +using v1::stdx::nullopt_t; +using v1::stdx::optional; + +#else + using v_noabi::stdx::in_place; using v_noabi::stdx::in_place_t; using v_noabi::stdx::make_optional; @@ -41,6 +52,8 @@ using v_noabi::stdx::nullopt; using v_noabi::stdx::nullopt_t; using v_noabi::stdx::optional; +#endif // defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI) + } // namespace stdx } // namespace bsoncxx diff --git a/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp b/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp index 334d9316aa..f36690e3d5 100644 --- a/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp +++ b/src/bsoncxx/include/bsoncxx/v_noabi/bsoncxx/stdx/string_view.hpp @@ -30,9 +30,18 @@ using v1::stdx::string_view; namespace bsoncxx { namespace stdx { +#if defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI) + +using v1::stdx::basic_string_view; +using v1::stdx::string_view; + +#else + using v_noabi::stdx::basic_string_view; using v_noabi::stdx::string_view; +#endif // defined(BSONCXX_API_OVERRIDE_DEFAULT_ABI) + } // namespace stdx } // namespace bsoncxx diff --git a/src/mongocxx/CMakeLists.txt b/src/mongocxx/CMakeLists.txt index c06ace2915..e92198c7bb 100644 --- a/src/mongocxx/CMakeLists.txt +++ b/src/mongocxx/CMakeLists.txt @@ -23,6 +23,12 @@ message(STATUS "mongocxx version: ${MONGOCXX_VERSION}") option(MONGOCXX_ENABLE_SSL "Enable SSL - if the underlying C driver offers it" ON) option(MONGOCXX_ENABLE_SLOW_TESTS "Run slow tests when invoking the the test target" OFF) +option(MONGOCXX_API_OVERRIDE_DEFAULT_ABI "The default ABI namespace to use for root namespace redeclarations" OFF) +mark_as_advanced(MONGOCXX_API_OVERRIDE_DEFAULT_ABI) +if(MONGOCXX_API_OVERRIDE_DEFAULT_ABI) + message(WARNING "MONGOCXX_API_OVERRIDE_DEFAULT_ABI is an experimental feature") +endif () + set(MONGOCXX_OUTPUT_BASENAME "mongocxx" CACHE STRING "Output mongocxx library base name") set(MONGOCXX_PKG_DEP "") # Required by mongocxx-config.cmake.in.