diff --git a/CMakeLists.txt b/CMakeLists.txt index 02c56b5..5da1101 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -337,7 +337,6 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) target_compile_definitions(${target_name} PUBLIC CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) if(CPPTRACE_USE_EXTERNAL_LIBDWARF) find_package(libdwarf REQUIRED) - target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_EXTERNAL_LIBDWARF) else() set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) set(PIC_ALWAYS TRUE) @@ -356,14 +355,29 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) endif() if(CPPTRACE_CONAN) target_link_libraries(${target_name} PRIVATE libdwarf::libdwarf) + target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) elseif(CPPTRACE_VCPKG) target_link_libraries(${target_name} PRIVATE $,libdwarf::dwarf-static,libdwarf::dwarf-shared>) + target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) + elseif(CPPTRACE_USE_EXTERNAL_LIBDWARF) + if(DEFINED LIBDWARF_LIBRARIES) + target_link_libraries(${target_name} PRIVATE ${LIBDWARF_LIBRARIES}) + else() + # if LIBDWARF_LIBRARIES wasn't set by find_package, try looking for libdwarf::dwarf-static, + # libdwarf::dwarf-shared, then libdwarf::dwarf + # libdwarf v0.8.0 installs with the target libdwarf::dwarf somehow, despite creating libdwarf::dwarf-static or + # libdwarf::dwarf-shared under fetchcontent + target_link_libraries(${target_name} PRIVATE $,libdwarf::dwarf-static,$,libdwarf::dwarf-shared,libdwarf::dwarf>>) + endif() else() target_link_libraries(${target_name} PRIVATE libdwarf::dwarf-static) endif() if(UNIX) target_link_libraries(${target_name} PRIVATE ${CMAKE_DL_LIBS}) endif() + if(CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) # user override + target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) + endif() endif() if(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP) diff --git a/cmake/OptionVariables.cmake b/cmake/OptionVariables.cmake index 377290d..abdc269 100644 --- a/cmake/OptionVariables.cmake +++ b/cmake/OptionVariables.cmake @@ -158,6 +158,7 @@ if(PROJECT_IS_TOP_LEVEL) endif() option(CPPTRACE_USE_EXTERNAL_LIBDWARF "" OFF) +option(CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH "" OFF) option(CPPTRACE_CONAN "" OFF) option(CPPTRACE_VCPKG "" OFF) option(CPPTRACE_SANITIZER_BUILD "" OFF) @@ -167,6 +168,7 @@ mark_as_advanced( CPPTRACE_ADDR2LINE_PATH CPPTRACE_ADDR2LINE_SEARCH_SYSTEM_PATH CPPTRACE_SANITIZER_BUILD + CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH CPPTRACE_CONAN CPPTRACE_VCPKG ) diff --git a/src/symbols/symbols_with_libdwarf.cpp b/src/symbols/symbols_with_libdwarf.cpp index fb3b66e..f3cc878 100644 --- a/src/symbols/symbols_with_libdwarf.cpp +++ b/src/symbols/symbols_with_libdwarf.cpp @@ -20,7 +20,7 @@ #include #include -#ifdef CPPTRACE_USE_EXTERNAL_LIBDWARF +#ifdef CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH #include #include #else diff --git a/src/utils/dwarf.hpp b/src/utils/dwarf.hpp index 61a8ea5..39fbb1a 100644 --- a/src/utils/dwarf.hpp +++ b/src/utils/dwarf.hpp @@ -9,7 +9,7 @@ #include #include -#ifdef CPPTRACE_USE_EXTERNAL_LIBDWARF +#ifdef CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH #include #include #else