build: guard execinfo.h via build systems (#3547)

* guard execinfo via cmake

* libexecinfo -> execinfo macro name

* meson: add execinfo check

* move check in cmake up

---------

Co-authored-by: Mihai Fufezan <fufexan@protonmail.com>
This commit is contained in:
Vaxry 2023-10-11 22:27:53 +01:00 committed by GitHub
parent 5dc7161b1d
commit 06cc42441c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 17 deletions

View file

@ -97,6 +97,12 @@ if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
add_link_options(-pg -no-pie -fno-builtin) add_link_options(-pg -no-pie -fno-builtin)
endif() endif()
check_include_file("execinfo.h" EXECINFOH)
if(EXECINFOH)
message(STATUS "Configuration supports execinfo")
add_compile_definitions(HAS_EXECINFO)
endif()
include(CheckLibraryExists) include(CheckLibraryExists)
check_library_exists(execinfo backtrace "" HAVE_LIBEXECINFO) check_library_exists(execinfo backtrace "" HAVE_LIBEXECINFO)
if(HAVE_LIBEXECINFO) if(HAVE_LIBEXECINFO)

View file

@ -29,6 +29,10 @@ add_project_arguments(
], ],
language: 'cpp') language: 'cpp')
if cpp_compiler.check_header('execinfo.h')
add_project_arguments('-DHAS_EXECINFO', language: 'cpp')
endif
wlroots = subproject('wlroots', default_options: ['examples=false', 'renderers=gles2']) wlroots = subproject('wlroots', default_options: ['examples=false', 'renderers=gles2'])
have_xwlr = wlroots.get_variable('features').get('xwayland') have_xwlr = wlroots.get_variable('features').get('xwayland')
xcb_dep = dependency('xcb', required: get_option('xwayland')) xcb_dep = dependency('xcb', required: get_option('xwayland'))

View file

@ -1,7 +1,6 @@
#include "CrashReporter.hpp" #include "CrashReporter.hpp"
#include <random> #include <random>
#include <sys/utsname.h> #include <sys/utsname.h>
#include <execinfo.h>
#include <fstream> #include <fstream>
#include <signal.h> #include <signal.h>

View file

@ -6,7 +6,9 @@
#include <sys/utsname.h> #include <sys/utsname.h>
#include <iomanip> #include <iomanip>
#include <sstream> #include <sstream>
#ifdef HAS_EXECINFO
#include <execinfo.h> #include <execinfo.h>
#endif
#if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) #if defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
#include <sys/sysctl.h> #include <sys/sysctl.h>
@ -689,6 +691,7 @@ std::string replaceInString(std::string subject, const std::string& search, cons
std::vector<SCallstackFrameInfo> getBacktrace() { std::vector<SCallstackFrameInfo> getBacktrace() {
std::vector<SCallstackFrameInfo> callstack; std::vector<SCallstackFrameInfo> callstack;
#ifdef HAS_EXECINFO
void* bt[1024]; void* bt[1024];
size_t btSize; size_t btSize;
char** btSymbols; char** btSymbols;
@ -699,6 +702,9 @@ std::vector<SCallstackFrameInfo> getBacktrace() {
for (size_t i = 0; i < btSize; ++i) { for (size_t i = 0; i < btSize; ++i) {
callstack.emplace_back(SCallstackFrameInfo{bt[i], std::string{btSymbols[i]}}); callstack.emplace_back(SCallstackFrameInfo{bt[i], std::string{btSymbols[i]}});
} }
#else
callstack.emplace_back(SCallstackFrameInfo{nullptr, "configuration does not support execinfo.h"});
#endif
return callstack; return callstack;
} }