Fix backtrace on non-linux systems

On BSD systems backtrace lies in libexecinfo. Use
FindBacktrace from CMake to be able to resolve
backtrace on more unixes than linux.

Change-Id: Ie14fd1727d2da03645fc2d6de10c0217baabad6b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Niclas Rosenvik 2021-03-20 09:31:43 +00:00
parent 65b4937f34
commit 75296f347f
5 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1,17 @@
if(TARGET WrapBacktrace::WrapBacktrace)
set(WrapBacktrace_FOUND ON)
return()
endif()
find_package(Backtrace)
if(Backtrace_FOUND)
add_library(WrapBacktrace::WrapBacktrace INTERFACE IMPORTED)
target_link_libraries(WrapBacktrace::WrapBacktrace
INTERFACE ${Backtrace_LIBRARY})
target_include_directories(WrapBacktrace::WrapBacktrace
INTERFACE ${Backtrace_INCLUDE_DIR})
set(WrapBacktrace_FOUND ON)
else()
set(WrapBacktrace_FOUND OFF)
endif()

View File

@ -729,6 +729,11 @@ qt_internal_extend_target(Core CONDITION QT_FEATURE_commandlineparser
tools/qcommandlineparser.cpp tools/qcommandlineparser.h
)
qt_internal_extend_target(Core CONDITION QT_FEATURE_backtrace
LIBRARIES
WrapBacktrace::WrapBacktrace
)
qt_internal_extend_target(Core CONDITION QT_FEATURE_system_doubleconversion
LIBRARIES
WrapDoubleConversion::WrapDoubleConversion

View File

@ -14,6 +14,9 @@ set_property(CACHE INPUT_libb2 PROPERTY STRINGS undefined no qt system)
#### Libraries
if((UNIX) OR QT_FIND_ALL_PACKAGES_ALWAYS)
qt_find_package(WrapBacktrace PROVIDED_TARGETS WrapBacktrace::WrapBacktrace MODULE_NAME core QMAKE_LIB backtrace)
endif()
qt_find_package(WrapDoubleConversion PROVIDED_TARGETS WrapDoubleConversion::WrapDoubleConversion MODULE_NAME core QMAKE_LIB doubleconversion)
qt_find_package(GLIB2 PROVIDED_TARGETS GLIB2::GLIB2 MODULE_NAME core QMAKE_LIB glib)
qt_find_package(ICU COMPONENTS i18n uc data PROVIDED_TARGETS ICU::i18n ICU::uc ICU::data MODULE_NAME core QMAKE_LIB icu)
@ -674,6 +677,10 @@ qt_feature("regularexpression" PUBLIC
CONDITION QT_FEATURE_system_pcre2 OR QT_FEATURE_pcre2
)
qt_feature_definition("regularexpression" "QT_NO_REGULAREXPRESSION" NEGATE VALUE "1")
qt_feature("backtrace" PRIVATE
LABEL "backtrace"
CONDITION UNIX AND QT_FEATURE_regularexpression AND WrapBacktrace_FOUND
)
qt_feature("sharedmemory" PUBLIC
SECTION "Kernel"
LABEL "QSharedMemory"
@ -909,6 +916,7 @@ qt_feature("cborstreamwriter" PUBLIC
PURPOSE "Provides support for writing the CBOR binary format."
)
qt_configure_add_summary_section(NAME "Qt Core")
qt_configure_add_summary_entry(ARGS "backtrace")
qt_configure_add_summary_entry(ARGS "doubleconversion")
qt_configure_add_summary_entry(ARGS "system-doubleconversion")
qt_configure_add_summary_entry(ARGS "glib")

View File

@ -22,6 +22,17 @@
},
"libraries": {
"backtrace": {
"label": "backtrace",
"test": {
"main":
[ "void *buffer[100];",
"int nptrs = backtrace(buffer, 100);"
]
},
"headers": "execinfo.h",
"sources": [ "-lexecinfo" ]
},
"doubleconversion": {
"label": "DoubleConversion",
"test": {
@ -718,6 +729,11 @@
"condition": "features.system-pcre2 || features.pcre2",
"output": [ "publicFeature", "feature" ]
},
"backtrace": {
"label": "backtrace",
"condition": "config.unix && features.regularexpression && libs.backtrace",
"output": [ "privateFeature" ]
},
"sharedmemory": {
"label": "QSharedMemory",
"purpose": "Provides access to a shared memory segment.",
@ -1013,6 +1029,7 @@ Note that this is required for plugin loading. Qt GUI needs QPA plugins for basi
{
"section": "Qt Core",
"entries": [
"backtrace",
"doubleconversion",
"system-doubleconversion",
"glib",

View File

@ -402,6 +402,7 @@ _qt_library_map = [
_library_map = [
# 3rd party:
LibraryMapping("atspi", "ATSPI2", "PkgConfig::ATSPI2"),
LibraryMapping("backtrace", "WrapBacktrace", "WrapBacktrace::WrapBacktrace", emit_if="config.unix"),
LibraryMapping("bluez", "BlueZ", "PkgConfig::BlueZ"),
LibraryMapping("brotli", "WrapBrotli", "WrapBrotli::WrapBrotliDec"),
LibraryMapping("corewlan", None, None),