Skip to content

Commit

Permalink
Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
pwojcikdev committed Jan 28, 2025
1 parent 07aa50f commit 53d8225
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
51 changes: 27 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -391,19 +391,20 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")

# Find libbacktrace first (Unix/Linux only)
if(NOT WIN32)
find_path(BACKTRACE_INCLUDE_DIR
NAMES backtrace.h
PATHS
/usr/local/include
/usr/include
find_path(
BACKTRACE_INCLUDE_DIR
NAMES backtrace.h
PATHS /usr/local/include /usr/include)

if(BACKTRACE_INCLUDE_DIR)
message(STATUS "Found backtrace.h at ${BACKTRACE_INCLUDE_DIR}")
set(BACKTRACE_FOUND TRUE)
# Most systems just need -lbacktrace
set(BACKTRACE_LIBRARIES backtrace)
add_definitions(
-DBOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE="${BACKTRACE_INCLUDE_DIR}/backtrace.h"
)

if(BACKTRACE_INCLUDE_DIR)
set(BACKTRACE_FOUND TRUE)
# Most systems just need -lbacktrace
set(BACKTRACE_LIBRARIES backtrace)
message(STATUS "Found backtrace.h at ${BACKTRACE_INCLUDE_DIR}")
endif()
endif()
endif()

# Then set up boost modules
Expand Down Expand Up @@ -505,19 +506,21 @@ include_directories(${BOOST_LIBRARY_INCLUDES})

# Configure stacktrace with appropriate backend
if(WIN32)
message(STATUS "Windows platform - Using WinDbg stacktrace")
add_definitions(-DBOOST_STACKTRACE_USE_WINDBG)
add_library(Boost::stacktrace ALIAS boost_stacktrace_windbg)
target_link_libraries(boost_stacktrace_windbg PRIVATE dbghelp)
elseif(BACKTRACE_FOUND)
message(STATUS "Found libbacktrace - enabling Boost stacktrace backtrace support")
add_definitions(-DBOOST_STACKTRACE_USE_BACKTRACE)
add_library(Boost::stacktrace ALIAS boost_stacktrace_backtrace)
target_link_libraries(boost_stacktrace_backtrace PRIVATE ${BACKTRACE_LIBRARIES})
message(STATUS "Windows platform - Using WinDbg stacktrace")
add_definitions(-DBOOST_STACKTRACE_USE_WINDBG)
add_library(Boost::stacktrace ALIAS boost_stacktrace_windbg)
target_link_libraries(boost_stacktrace_windbg PRIVATE dbghelp)
elseif(BOOST_STACKTRACE_HAS_BACKTRACE)
message(
STATUS "Found libbacktrace - enabling Boost stacktrace backtrace support")
add_definitions(-DBOOST_STACKTRACE_USE_BACKTRACE)
add_library(Boost::stacktrace ALIAS boost_stacktrace_backtrace)
target_link_libraries(boost_stacktrace_backtrace
PRIVATE ${BACKTRACE_LIBRARIES})
else()
message(STATUS "Unix platform without libbacktrace - Using basic backtrace")
add_definitions(-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED)
add_library(Boost::stacktrace ALIAS boost_stacktrace_basic)
message(STATUS "Using basic stacktrace backend")
add_definitions(-DBOOST_STACKTRACE_GNU_SOURCE_NOT_REQUIRED)
add_library(Boost::stacktrace ALIAS boost_stacktrace_basic)
endif()

# Workaround for missing reference errata in the boost property_tree module
Expand Down
4 changes: 4 additions & 0 deletions ci/prepare/linux/prepare-clang.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ curl -O https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && ./llvm.sh $CLANG_VER
update-alternatives --install /usr/bin/cc cc /usr/bin/clang-$CLANG_VERSION 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-$CLANG_VERSION 100
update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-$CLANG_VERSION 100

# Workaround to get a path that can be easily passed into cmake for BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE
# See https://www.boost.org/doc/libs/1_70_0/doc/html/stacktrace/configuration_and_build.html#stacktrace.configuration_and_build.f3
backtrace_file=$(find /usr/lib/gcc/ -name 'backtrace.h' | head -n 1) && test -f $backtrace_file && ln -s $backtrace_file /usr/local/include/backtrace.h
1 change: 1 addition & 0 deletions nano/core_test/stacktrace.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
TEST (stacktrace, human_readable)
{
auto stacktrace = nano::generate_stacktrace ();
std::cout << stacktrace << std::endl;
ASSERT_FALSE (stacktrace.empty ());
ASSERT_TRUE (stacktrace.find ("stacktrace_human_readable_Test") != std::string::npos);
}

0 comments on commit 53d8225

Please sign in to comment.