diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a8b0ac..2d098d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -366,27 +366,37 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) 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::dwarf-shared, libdwarf::dwarf, then libdwarf # 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>>) + if(TARGET libdwarf::dwarf-static) + set(LIBDWARF_LIBRARIES libdwarf::dwarf-static) + elseif(TARGET libdwarf::dwarf-shared) + set(LIBDWARF_LIBRARIES libdwarf::dwarf-shared) + elseif(TARGET libdwarf::dwarf) + set(LIBDWARF_LIBRARIES libdwarf::dwarf) + elseif(TARGET libdwarf) + set(LIBDWARF_LIBRARIES libdwarf) + else() + message(FATAL_ERROR "Couldn't find libdwarf target name to link against") + endif() + target_link_libraries(${target_name} PRIVATE ${LIBDWARF_LIBRARIES}) + endif() + # There seems to be no consistency at all about where libdwarf decides to place its headers........ Figure out if + # 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}) + 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) + # check_support(LIBDWARF_IS_NESTED nested_libdwarf_include.cpp "" "" "") + if(${LIBDWARF_IS_NESTED}) + target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) + elseif(NOT LIBDWARF_IS_NOT_NESTED) + message(FATAL_ERROR "Couldn't find libdwarf.h") endif() - # include(CheckIncludeFileCXX) - # # include(CheckIncludeFile) - # # There seems to be no consistency at all about where libdwarf decides to place its headers........ Figure out if - # # it's libdwarf/libdwarf.h and libdwarf/dwarf.h or just libdwarf.h and dwarf.h - # get_cmake_property(_variableNames VARIABLES) - # list (SORT _variableNames) - # foreach (_variableName ${_variableNames}) - # message(STATUS "${_variableName}=${${_variableName}}") - # endforeach() - # CHECK_INCLUDE_FILE_CXX("libdwarf/libdwarf.h" LIBDWARF_IS_NESTED CMAKE_REQUIRED_LIBRARIES ${LIBDWARF_LIBRARIES}) - # CHECK_INCLUDE_FILE_CXX("libdwarf.h" LIBDWARF_IS_NOT_NESTED CMAKE_REQUIRED_LIBRARIES ${LIBDWARF_LIBRARIES}) - # # check_include_file("libdwarf/libdwarf.h" LIBDWARF_IS_NESTED) - # # check_support(LIBDWARF_IS_NESTED nested_libdwarf_include.cpp "" "" "") - # if(${LIBDWARF_IS_NESTED}) - # target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) - # endif() else() target_link_libraries(${target_name} PRIVATE libdwarf::dwarf-static) endif() diff --git a/src/utils/dwarf.hpp b/src/utils/dwarf.hpp index 8b2b038..39feb34 100644 --- a/src/utils/dwarf.hpp +++ b/src/utils/dwarf.hpp @@ -13,18 +13,8 @@ #include #include #else - #ifdef __has_include - #if __has_include() - #include - #include - #else - #include - #include - #endif - #else - #include - #include - #endif + #include + #include #endif namespace cpptrace {