@@ -7,18 +7,24 @@ cmake_minimum_required(VERSION 3.8...4.20)
77
88project (boost_stacktrace VERSION "${BOOST_SUPERPROJECT_VERSION} " LANGUAGES CXX )
99
10- function (stacktrace_add_module name )
10+ function (stacktrace_add_module name import_std )
1111 target_sources (${name}
1212 PUBLIC
1313 FILE_SET CXX_MODULES
1414 BASE_DIRS "${CMAKE_CURRENT_LIST_DIR} /modules"
1515 FILES "${CMAKE_CURRENT_LIST_DIR} /modules/${name} .cppm"
1616 )
17- target_compile_features (${name} PUBLIC cxx_std_20 )
1817 target_compile_definitions (${name} PUBLIC BOOST_USE_MODULES )
18+
19+ if (${import_std} )
20+ target_compile_features (${name} PUBLIC cxx_std_23 )
21+ target_compile_definitions (${name} PRIVATE BOOST_STACKTRACE_USE_STD_MODULE )
22+ else ()
23+ target_compile_features (${name} PUBLIC cxx_std_20 )
24+ endif ()
1925endfunction ()
2026
21- function (stacktrace_add_library suffix opt public_libs libs defs add_module )
27+ function (stacktrace_add_library suffix opt public_libs libs defs add_module import_std )
2228
2329 if (NOT opt)
2430 return ()
@@ -50,7 +56,7 @@ function(stacktrace_add_library suffix opt public_libs libs defs add_module)
5056 )
5157
5258 if (add_module)
53- stacktrace_add_module (boost_stacktrace_${suffix} )
59+ stacktrace_add_module (boost_stacktrace_${suffix} ${import_std} )
5460 else ()
5561 target_sources (boost_stacktrace_${suffix}
5662 PRIVATE
@@ -129,23 +135,36 @@ else()
129135 set (_enable_non_noop_backend FALSE )
130136endif ()
131137
132- if (NOT BOOST_USE_MODULES)
138+ if (BOOST_USE_MODULES)
139+ if (NOT CMAKE_CXX_STANDARD )
140+ set (CMAKE_CXX_STANDARD 20)
141+ endif ()
142+ if ((CMAKE_CXX_STANDARD IN_LIST CMAKE_CXX_COMPILER_IMPORT_STD) AND CMAKE_CXX_MODULE_STD)
143+ message (STATUS "Using `import std;`" )
144+ set (__import_std ON )
145+ else ()
146+ message (STATUS "`import std;` is not available" )
147+ set (__import_std OFF )
148+ endif ()
149+ unset (__standard)
150+ else ()
133151 set (BOOST_USE_MODULES OFF )
152+ set (__import_std OFF )
134153endif ()
135154
136- stacktrace_add_library (dump ${_enable_non_noop_backend} "" "" "" ${BOOST_USE_MODULES} )
137- stacktrace_add_library (noop ${BOOST_STACKTRACE_ENABLE_NOOP} "" "" "" ${BOOST_USE_MODULES} )
138- stacktrace_add_library (backtrace ${BOOST_STACKTRACE_ENABLE_BACKTRACE} Boost::stacktrace_dump "backtrace;${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} )
139- stacktrace_add_library (addr2line ${BOOST_STACKTRACE_ENABLE_ADDR2LINE} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} )
140- stacktrace_add_library (basic ${BOOST_STACKTRACE_ENABLE_BASIC} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} )
141- stacktrace_add_library (windbg ${BOOST_STACKTRACE_ENABLE_WINDBG} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" ${BOOST_USE_MODULES} )
142- stacktrace_add_library (windbg_cached ${BOOST_STACKTRACE_ENABLE_WINDBG_CACHED} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" ${BOOST_USE_MODULES} )
155+ stacktrace_add_library (dump ${_enable_non_noop_backend} "" "" "" ${BOOST_USE_MODULES} ${__import_std} )
156+ stacktrace_add_library (noop ${BOOST_STACKTRACE_ENABLE_NOOP} "" "" "" ${BOOST_USE_MODULES} ${__import_std} )
157+ stacktrace_add_library (backtrace ${BOOST_STACKTRACE_ENABLE_BACKTRACE} Boost::stacktrace_dump "backtrace;${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} ${__import_std} )
158+ stacktrace_add_library (addr2line ${BOOST_STACKTRACE_ENABLE_ADDR2LINE} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} ${__import_std} )
159+ stacktrace_add_library (basic ${BOOST_STACKTRACE_ENABLE_BASIC} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" ${BOOST_USE_MODULES} ${__import_std} )
160+ stacktrace_add_library (windbg ${BOOST_STACKTRACE_ENABLE_WINDBG} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" ${BOOST_USE_MODULES} ${__import_std} )
161+ stacktrace_add_library (windbg_cached ${BOOST_STACKTRACE_ENABLE_WINDBG_CACHED} Boost::stacktrace_dump "dbgeng;ole32" "_GNU_SOURCE=1" ${BOOST_USE_MODULES} ${__import_std} )
143162
144163# boost_stacktrace, default library
145164
146165if (BOOST_USE_MODULES)
147166 add_library (boost_stacktrace )
148- stacktrace_add_module (boost_stacktrace boost_stacktrace )
167+ stacktrace_add_module (boost_stacktrace ${__import_std} )
149168 set (__scope PUBLIC)
150169
151170 foreach (backend noop backtrace addr2line basic windbg windbg_cached)
@@ -157,6 +176,7 @@ else()
157176 add_library (boost_stacktrace INTERFACE )
158177 set (__scope INTERFACE)
159178endif ()
179+ unset (__import_std)
160180
161181target_include_directories (boost_stacktrace ${__scope} "${CMAKE_CURRENT_LIST_DIR} /include" )
162182add_library (Boost::stacktrace ALIAS boost_stacktrace )
@@ -182,7 +202,7 @@ target_link_libraries(boost_stacktrace ${__scope} Boost::stacktrace_${__default_
182202
183203# Boost::stacktrace_from_exception is never the default
184204if (_enable_non_noop_backend)
185- stacktrace_add_library (from_exception ${BOOST_STACKTRACE_ENABLE_FROM_EXCEPTION} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" FALSE )
205+ stacktrace_add_library (from_exception ${BOOST_STACKTRACE_ENABLE_FROM_EXCEPTION} Boost::stacktrace_dump "${CMAKE_DL_LIBS} " "" FALSE FALSE )
186206endif ()
187207unset (_enable_non_noop_backend)
188208
0 commit comments