@@ -19,31 +19,31 @@ set(BOOST_COMPONENTS
1919
2020function (calculate_abi_hash OUT_HASH)
2121 set (ABI_COMPONENTS "" )
22-
22+
2323 list (APPEND ABI_COMPONENTS "${CMAKE_CXX_COMPILER_ID} " )
24-
24+
2525 list (APPEND ABI_COMPONENTS "${CMAKE_SYSTEM_PROCESSOR} " )
2626 list (APPEND ABI_COMPONENTS "${CMAKE_SIZEOF_VOID_P} " )
27-
27+
2828 if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
2929 list (APPEND ABI_COMPONENTS "debug" )
3030 else ()
3131 list (APPEND ABI_COMPONENTS "release" )
3232 endif ()
33-
33+
3434 # Relevant compiler flags that might affect the ABI
3535 string (REGEX MATCHALL "-m[a-zA-Z0-9_-]+" MARCH_FLAGS "${CMAKE_CXX_FLAGS} " )
3636 string (REGEX MATCHALL "-f[a-zA-Z0-9_-]+" FEATURE_FLAGS "${CMAKE_CXX_FLAGS} " )
3737 string (REGEX MATCHALL "-std=[a-zA-Z0-9_+-]+" STD_FLAGS "${CMAKE_CXX_FLAGS} " )
3838 string (REGEX MATCHALL "-D[a-zA-Z0-9_=]+" DEFINE_FLAGS "${CMAKE_CXX_FLAGS} " )
3939 string (REGEX MATCHALL "-stdlib=[a-zA-Z0-9_+-]+" STDLIB_FLAGS "${CMAKE_CXX_FLAGS} " )
40-
40+
4141 list (APPEND ABI_COMPONENTS ${MARCH_FLAGS} )
4242 list (APPEND ABI_COMPONENTS ${FEATURE_FLAGS} )
4343 list (APPEND ABI_COMPONENTS ${STD_FLAGS} )
4444 list (APPEND ABI_COMPONENTS ${DEFINE_FLAGS} )
4545 list (APPEND ABI_COMPONENTS ${STDLIB_FLAGS} )
46-
46+
4747 # Platform-specific ABI settings
4848 if (WIN32 )
4949 list (APPEND ABI_COMPONENTS "WIN32" )
@@ -61,13 +61,13 @@ function(calculate_abi_hash OUT_HASH)
6161 else ()
6262 list (APPEND ABI_COMPONENTS "UNIX" )
6363 endif ()
64-
64+
6565 list (APPEND ABI_COMPONENTS "${BOOST_VERSION} " )
66-
66+
6767 string (JOIN ";" ABI_STRING ${ABI_COMPONENTS} )
6868 string (SHA256 HASH_VALUE "${ABI_STRING} " )
6969 string (SUBSTRING "${HASH_VALUE} " 0 12 SHORT_HASH)
70-
70+
7171 set (${OUT_HASH} "${SHORT_HASH} " PARENT_SCOPE)
7272endfunction ()
7373
@@ -88,7 +88,7 @@ if(EXISTS "${BOOST_BUILD_DIR}/lib" AND EXISTS "${BOOST_BUILD_DIR}/include")
8888 break ()
8989 endif ()
9090 endforeach ()
91-
91+
9292 if (ALL_LIBS_EXIST)
9393 set (BOOST_ALREADY_BUILT TRUE )
9494 message (STATUS "Found cached Boost build, skipping compilation" )
@@ -199,10 +199,10 @@ endif()
199199function (create_boost_target component_name)
200200 set (LIB_PREFIX "lib" )
201201 set (LIB_SUFFIX ".a" )
202-
202+
203203 # Construct the expected library path
204204 set (EXPECTED_LIB_PATH "${BOOST_BUILD_DIR} /lib/${LIB_PREFIX} boost_${component_name}${LIB_SUFFIX} " )
205-
205+
206206 # Don't use an imported library, as it's not available at configuration time
207207 add_library (boost_${component_name} INTERFACE )
208208 message (STATUS "boost_${component_name} will be imported from ${EXPECTED_LIB_PATH} " )
@@ -212,9 +212,9 @@ function(create_boost_target component_name)
212212 target_include_directories (boost_${component_name} INTERFACE
213213 $<BUILD_INTERFACE:${BOOST_BUILD_DIR} /include >
214214 )
215-
215+
216216 add_dependencies (boost_${component_name} boost_build)
217-
217+
218218 # Set up component-specific dependencies
219219 if (component_name STREQUAL "coroutine" )
220220 target_link_libraries (boost_${component_name} INTERFACE boost_context boost_system)
@@ -242,8 +242,15 @@ foreach(component IN LISTS BOOST_COMPONENTS)
242242 create_boost_target("stacktrace_basic" )
243243
244244 if (UNIX AND NOT APPLE AND BOOST_TOOLSET STREQUAL "gcc" )
245- create_boost_target("stacktrace_backtrace" )
246- target_link_libraries (boost_stacktrace INTERFACE boost_stacktrace_backtrace)
245+ find_library (BACKTRACE_LIBRARY NAMES backtrace)
246+ if (BACKTRACE_LIBRARY)
247+ message (STATUS "libbacktrace found: ${BACKTRACE_LIBRARY} " )
248+ create_boost_target("stacktrace_backtrace" )
249+ target_link_libraries (boost_stacktrace INTERFACE boost_stacktrace_backtrace)
250+ else ()
251+ message (STATUS "libbacktrace not found, using stacktrace_addr2line instead" )
252+ target_link_libraries (boost_stacktrace INTERFACE boost_stacktrace_addr2line)
253+ endif ()
247254 else ()
248255 target_link_libraries (boost_stacktrace INTERFACE boost_stacktrace_basic)
249256 endif ()
0 commit comments