Another attempt to resolve libdwarf header issues

This commit is contained in:
Jeremy 2024-01-14 19:56:11 -06:00
parent 3e46d2a570
commit 2100723312
No known key found for this signature in database
GPG Key ID: BE03111EB7ED6E2E
2 changed files with 30 additions and 30 deletions

View File

@ -366,27 +366,37 @@ if(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF)
target_link_libraries(${target_name} PRIVATE ${LIBDWARF_LIBRARIES}) target_link_libraries(${target_name} PRIVATE ${LIBDWARF_LIBRARIES})
else() else()
# if LIBDWARF_LIBRARIES wasn't set by find_package, try looking for libdwarf::dwarf-static, # 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 v0.8.0 installs with the target libdwarf::dwarf somehow, despite creating libdwarf::dwarf-static or
# libdwarf::dwarf-shared under fetchcontent # libdwarf::dwarf-shared under fetchcontent
target_link_libraries(${target_name} PRIVATE $<IF:$<TARGET_EXISTS:libdwarf::dwarf-static>,libdwarf::dwarf-static,$<IF:$<TARGET_EXISTS:libdwarf::dwarf-shared>,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() 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() else()
target_link_libraries(${target_name} PRIVATE libdwarf::dwarf-static) target_link_libraries(${target_name} PRIVATE libdwarf::dwarf-static)
endif() endif()

View File

@ -13,18 +13,8 @@
#include <libdwarf/libdwarf.h> #include <libdwarf/libdwarf.h>
#include <libdwarf/dwarf.h> #include <libdwarf/dwarf.h>
#else #else
#ifdef __has_include #include <libdwarf.h>
#if __has_include(<libdwarf/libdwarf.h>) #include <dwarf.h>
#include <libdwarf/libdwarf.h>
#include <libdwarf/dwarf.h>
#else
#include <libdwarf.h>
#include <dwarf.h>
#endif
#else
#include <libdwarf.h>
#include <dwarf.h>
#endif
#endif #endif
namespace cpptrace { namespace cpptrace {