@@ -43,12 +43,6 @@ set(STACK_DETAILS_BFD FALSE CACHE BOOL
4343set (STACK_DETAILS_DWARF FALSE CACHE BOOL
4444 "Use libdwarf/libelf to read debug info" )
4545
46- if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR AND NOT DEFINED BACKWARD_TESTS)
47- # If this is a top level CMake project, we most lixely want the tests
48- set (BACKWARD_TESTS ON CACHE BOOL "Enable tests" )
49- else ()
50- set (BACKWARD_TESTS OFF CACHE BOOL "Enable tests" )
51- endif ()
5246###############################################################################
5347# CONFIGS
5448###############################################################################
@@ -79,18 +73,31 @@ if (STACK_WALKING_LIBUNWIND)
7973
8074 # Disable other unwinders if libunwind is found
8175 set (STACK_WALKING_UNWIND FALSE )
82- set (STACK_WALKING_BACKTRACE FALSE )
76+ set (STACK_WALKING_BACKTRACE FALSE )
8377endif ()
8478
85- if (${STACK_DETAILS_AUTO_DETECT} AND NOT WIN32 )
79+ if (${STACK_DETAILS_AUTO_DETECT} )
8680 if (NOT CMAKE_VERSION VERSION_LESS 3.17)
8781 set (_name_mismatched_arg NAME_MISMATCHED)
8882 endif ()
8983 # find libdw
9084 find_path (LIBDW_INCLUDE_DIR NAMES "elfutils/libdw.h" "elfutils/libdwfl.h" )
9185 find_library (LIBDW_LIBRARY dw)
86+ # in case it's statically linked, look for all the possible dependencies
87+ find_library (LIBELF_LIBRARY elf)
88+ find_library (LIBPTHREAD_LIBRARY pthread)
89+ find_library (LIBZ_LIBRARY z)
90+ find_library (LIBBZ2_LIBRARY bz2)
91+ find_library (LIBLZMA_LIBRARY lzma)
92+ find_library (LIBZSTD_LIBRARY zstd)
9293 set (LIBDW_INCLUDE_DIRS ${LIBDW_INCLUDE_DIR} )
93- set (LIBDW_LIBRARIES ${LIBDW_LIBRARY} )
94+ set (LIBDW_LIBRARIES ${LIBDW_LIBRARY}
95+ $<$<BOOL :${LIBELF_LIBRARY} >:${LIBELF_LIBRARY} >
96+ $<$<BOOL :${LIBPTHREAD_LIBRARY} >:${LIBPTHREAD_LIBRARY} >
97+ $<$<BOOL :${LIBZ_LIBRARY} >:${LIBZ_LIBRARY} >
98+ $<$<BOOL :${LIBBZ2_LIBRARY} >:${LIBBZ2_LIBRARY} >
99+ $<$<BOOL :${LIBLZMA_LIBRARY} >:${LIBLZMA_LIBRARY} >
100+ $<$<BOOL :${LIBZSTD_LIBRARY} >:${LIBZSTD_LIBRARY} >)
94101 find_package_handle_standard_args(libdw ${_name_mismatched_arg}
95102 REQUIRED_VARS LIBDW_LIBRARY LIBDW_INCLUDE_DIR)
96103 mark_as_advanced (LIBDW_INCLUDE_DIR LIBDW_LIBRARY)
@@ -139,6 +146,11 @@ if (${STACK_DETAILS_AUTO_DETECT} AND NOT WIN32)
139146 # If we attempt to link against static bfd, make sure to link its dependencies, too
140147 get_filename_component (bfd_lib_ext "${LIBBFD_LIBRARY} " EXT )
141148 if (bfd_lib_ext STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX} " )
149+ find_library (LIBSFRAME_LIBRARY NAMES sframe)
150+ if (LIBSFRAME_LIBRARY)
151+ list (APPEND _BACKWARD_LIBRARIES ${LIBSFRAME_LIBRARY} )
152+ endif ()
153+
142154 list (APPEND _BACKWARD_LIBRARIES iberty z)
143155 endif ()
144156
@@ -190,14 +202,24 @@ if (NOT _BACKWARD_DEFINITIONS)
190202endif ()
191203
192204if (WIN32 )
193- list (APPEND _BACKWARD_LIBRARIES dbghelp psapi)
205+ list (APPEND _BACKWARD_LIBRARIES dbghelp psapi)
194206 if (MINGW)
195- set (MINGW_MSVCR_LIBRARY "msvcr90$<$<CONFIG:DEBUG>:d>" CACHE STRING "Mingw MSVC runtime import library" )
196- list (APPEND _BACKWARD_LIBRARIES ${MINGW_MSVCR_LIBRARY} )
197- endif ()
207+ include (CheckCXXCompilerFlag)
208+ check_cxx_compiler_flag(-gcodeview SUPPORT_WINDOWS_DEBUG_INFO)
209+ if (SUPPORT_WINDOWS_DEBUG_INFO)
210+ set (CMAKE_EXE_LINKER_FLAGS "-Wl,--pdb= " )
211+ add_compile_options (-gcodeview)
212+ else ()
213+ set (MINGW_MSVCR_LIBRARY "msvcr90$<$<CONFIG:DEBUG>:d>" CACHE STRING "Mingw MSVC runtime import library" )
214+ list (APPEND _BACKWARD_LIBRARIES ${MINGW_MSVCR_LIBRARY} )
215+ endif ()
216+ endif ()
198217endif ()
199218
200- set (BACKWARD_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR} " )
219+ set (BACKWARD_INCLUDE_DIR
220+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} >
221+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR} >
222+ )
201223
202224set (BACKWARD_HAS_EXTERNAL_LIBRARIES FALSE )
203225set (FIND_PACKAGE_REQUIRED_VARS BACKWARD_INCLUDE_DIR)
@@ -208,40 +230,41 @@ endif()
208230
209231include (FindPackageHandleStandardArgs)
210232find_package_handle_standard_args(Backward
211- REQUIRED_VARS ${FIND_PACKAGE_REQUIRED_VARS}
233+ REQUIRED_VARS ${FIND_PACKAGE_REQUIRED_VARS}
212234)
213235list (APPEND _BACKWARD_INCLUDE_DIRS ${BACKWARD_INCLUDE_DIR} )
214236
237+ # add_backward, optional bool argument; if passed and true, backward will be included as a system header
215238macro (add_backward target )
216- target_include_directories (${target} PRIVATE ${BACKWARD_INCLUDE_DIRS} )
239+ message (DEPRECATION "The add_backward() macro is deprecated, use target_link_libraries() to link to "
240+ "one of the exported targets: Backward::Interface, Backward::Object, or Backward::Backward."
241+ )
242+ if ("${ARGN} " )
243+ target_include_directories (${target} SYSTEM PRIVATE ${BACKWARD_INCLUDE_DIRS} )
244+ else ()
245+ target_include_directories (${target} PRIVATE ${BACKWARD_INCLUDE_DIRS} )
246+ endif ()
217247 set_property (TARGET ${target} APPEND PROPERTY COMPILE_DEFINITIONS ${BACKWARD_DEFINITIONS} )
218248 set_property (TARGET ${target} APPEND PROPERTY LINK_LIBRARIES ${BACKWARD_LIBRARIES} )
219249endmacro ()
220250
221- set (BACKWARD_INCLUDE_DIRS ${_BACKWARD_INCLUDE_DIRS} CACHE INTERNAL "_BACKWARD_INCLUDE_DIRS " )
251+ set (BACKWARD_INCLUDE_DIRS ${_BACKWARD_INCLUDE_DIRS} CACHE INTERNAL "BACKWARD_INCLUDE_DIRS " )
222252set (BACKWARD_DEFINITIONS ${_BACKWARD_DEFINITIONS} CACHE INTERNAL "BACKWARD_DEFINITIONS" )
223253set (BACKWARD_LIBRARIES ${_BACKWARD_LIBRARIES} CACHE INTERNAL "BACKWARD_LIBRARIES" )
224254mark_as_advanced (BACKWARD_INCLUDE_DIRS BACKWARD_DEFINITIONS BACKWARD_LIBRARIES)
225255
226256# Expand each definition in BACKWARD_DEFINITIONS to its own cmake var and export
227257# to outer scope
228258foreach (var ${BACKWARD_DEFINITIONS} )
229- string (REPLACE "=" ";" var_as_list ${var} )
230- list (GET var_as_list 0 var_name)
231- list (GET var_as_list 1 var_value)
232- set (${var_name} ${var_value} )
233- mark_as_advanced (${var_name} )
259+ string (REPLACE "=" ";" var_as_list ${var} )
260+ list (GET var_as_list 0 var_name)
261+ list (GET var_as_list 1 var_value)
262+ set (${var_name} ${var_value} )
263+ mark_as_advanced (${var_name} )
234264endforeach ()
235265
236- if (NOT TARGET Backward::Backward)
237- add_library (Backward::Backward INTERFACE IMPORTED )
238- set_target_properties (Backward::Backward PROPERTIES
239- INTERFACE_INCLUDE_DIRECTORIES "${BACKWARD_INCLUDE_DIRS} "
240- INTERFACE_COMPILE_DEFINITIONS "${BACKWARD_DEFINITIONS} "
241- )
242- if (BACKWARD_HAS_EXTERNAL_LIBRARIES)
243- set_target_properties (Backward::Backward PROPERTIES
244- INTERFACE_LINK_LIBRARIES "${BACKWARD_LIBRARIES} "
245- )
246- endif ()
266+ # if this file is used from the install tree by find_package(), include the
267+ # file CMake-generated file where the targets are defined
268+ if (EXISTS ${CMAKE_CURRENT_LIST_DIR} /BackwardTargets.cmake)
269+ include (${CMAKE_CURRENT_LIST_DIR} /BackwardTargets.cmake)
247270endif ()
0 commit comments