diff --git a/CMakeLists.txt b/CMakeLists.txt index 481393b..d5e1002 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -350,7 +350,12 @@ endif() 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) + if(NOT CPPTRACE_FIND_LIBDWARF_WITH_PKGCONFIG) + find_package(libdwarf REQUIRED) + else() + find_package(PkgConfig) + pkg_check_modules(LIBDWARF REQUIRED libdwarf) + endif() else() include(FetchContent) # First, dependencies: Zstd and zlib (currently relying on system zlib) @@ -440,8 +445,13 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) # it's libdwarf/libdwarf.h and libdwarf/dwarf.h or just libdwarf.h and dwarf.h include(CheckIncludeFileCXX) # libdwarf's cmake doesn't properly set variables to indicate where its libraries live - get_target_property(LIBDWARF_INTERFACE_INCLUDE_DIRECTORIES ${LIBDWARF_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES) - set(CMAKE_REQUIRED_INCLUDES ${LIBDWARF_INTERFACE_INCLUDE_DIRECTORIES}) + if(NOT CPPTRACE_CONDA_LIBDWARF_WEIRDNESS) + get_target_property(LIBDWARF_INTERFACE_INCLUDE_DIRECTORIES ${LIBDWARF_LIBRARIES} INTERFACE_INCLUDE_DIRECTORIES) + set(CMAKE_REQUIRED_INCLUDES ${LIBDWARF_INTERFACE_INCLUDE_DIRECTORIES}) + else() + set(CMAKE_REQUIRED_INCLUDES ${LIBDWARF_INCLUDE_DIRS}) + target_compile_definitions(${target_name} PRIVATE CPPTRACE_CONDA_LIBDWARF_WEIRDNESS) + endif() CHECK_INCLUDE_FILE_CXX("libdwarf/libdwarf.h" LIBDWARF_IS_NESTED) CHECK_INCLUDE_FILE_CXX("libdwarf.h" LIBDWARF_IS_NOT_NESTED) # check_include_file("libdwarf/libdwarf.h" LIBDWARF_IS_NESTED) diff --git a/cmake/OptionVariables.cmake b/cmake/OptionVariables.cmake index 5589a8d..d432a3c 100644 --- a/cmake/OptionVariables.cmake +++ b/cmake/OptionVariables.cmake @@ -159,9 +159,11 @@ if(PROJECT_IS_TOP_LEVEL) endif() option(CPPTRACE_USE_EXTERNAL_LIBDWARF "" OFF) +option(CPPTRACE_FIND_LIBDWARF_WITH_PKGCONFIG "" OFF) option(CPPTRACE_USE_EXTERNAL_ZSTD "" OFF) option(CPPTRACE_CONAN "" OFF) option(CPPTRACE_VCPKG "" OFF) +option(CPPTRACE_CONDA_LIBDWARF_WEIRDNESS "" OFF) option(CPPTRACE_SANITIZER_BUILD "" OFF) option(CPPTRACE_WERROR_BUILD "" OFF) option(CPPTRACE_POSITION_INDEPENDENT_CODE "" ON) @@ -174,4 +176,5 @@ mark_as_advanced( CPPTRACE_WERROR_BUILD CPPTRACE_CONAN CPPTRACE_VCPKG + CPPTRACE_CONDA_LIBDWARF_WEIRDNESS ) diff --git a/cmake/in/cpptrace-config-cmake.in b/cmake/in/cpptrace-config-cmake.in index fc017ad..ef6e4a0 100644 --- a/cmake/in/cpptrace-config-cmake.in +++ b/cmake/in/cpptrace-config-cmake.in @@ -14,7 +14,9 @@ if(@CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF@) set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH_OLD}") unset(CMAKE_MODULE_PATH_OLD) endif() - find_dependency(libdwarf REQUIRED) + if(NOT @CPPTRACE_FIND_LIBDWARF_WITH_PKGCONFIG@) + find_dependency(libdwarf REQUIRED) + endif() endif() # We cannot modify an existing IMPORT target diff --git a/src/utils/dwarf.hpp b/src/utils/dwarf.hpp index 98bf587..a4f6c55 100644 --- a/src/utils/dwarf.hpp +++ b/src/utils/dwarf.hpp @@ -13,8 +13,13 @@ #include #include #else - #include - #include + #ifndef CPPTRACE_CONDA_LIBDWARF_WEIRDNESS + #include + #include + #else + #include + #include + #endif #endif namespace cpptrace {