From 399e52f4601914aefc84fe6f0ff5f4bba760219f Mon Sep 17 00:00:00 2001 From: Jeremy <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:23:02 -0600 Subject: [PATCH] Try again to fix libdwarf #includes --- CMakeLists.txt | 23 ++++++++++++++++------- src/symbols/symbols_with_libdwarf.cpp | 10 +--------- src/utils/dwarf.hpp | 18 ++++++++++++++---- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b0f3f3..4a8b0ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -371,13 +371,22 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) # libdwarf::dwarf-shared under fetchcontent target_link_libraries(${target_name} PRIVATE $,libdwarf::dwarf-static,$,libdwarf::dwarf-shared,libdwarf::dwarf>>) endif() - include(CheckIncludeFileCXX) - # 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 - CHECK_INCLUDE_FILE_CXX("libdwarf/libdwarf.h" LIBDWARF_IS_NESTED) - if(${LIBDWARF_IS_NESTED}) - target_compile_definitions(${target_name} PRIVATE CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH) - 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/symbols/symbols_with_libdwarf.cpp b/src/symbols/symbols_with_libdwarf.cpp index f3cc878..29cf417 100644 --- a/src/symbols/symbols_with_libdwarf.cpp +++ b/src/symbols/symbols_with_libdwarf.cpp @@ -3,7 +3,7 @@ #include #include "symbols.hpp" #include "../utils/common.hpp" -#include "../utils/dwarf.hpp" +#include "../utils/dwarf.hpp" // has dwarf #includes #include "../utils/error.hpp" #include "../binary/object.hpp" #include "../utils/utils.hpp" @@ -20,14 +20,6 @@ #include #include -#ifdef CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH -#include -#include -#else -#include -#include -#endif - // It's been tricky to piece together how to handle all this dwarf stuff. Some resources I've used are // https://www.prevanders.net/libdwarf.pdf // https://github.com/davea42/libdwarf-addr2line diff --git a/src/utils/dwarf.hpp b/src/utils/dwarf.hpp index 39fbb1a..d682418 100644 --- a/src/utils/dwarf.hpp +++ b/src/utils/dwarf.hpp @@ -10,11 +10,21 @@ #include #ifdef CPPTRACE_USE_NESTED_LIBDWARF_HEADER_PATH -#include -#include + #include + #include #else -#include -#include + #ifdef __has_include + #ifdef __has_include() + #include + #include + #else + #include + #include + #endif + #else + #include + #include + #endif #endif namespace cpptrace {