diff --git a/cmake/FindWrapBacktrace.cmake b/cmake/FindWrapBacktrace.cmake new file mode 100644 index 00000000000..6a6264099a8 --- /dev/null +++ b/cmake/FindWrapBacktrace.cmake @@ -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() diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index ab73d8b98c4..95c31167531 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -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 diff --git a/src/corelib/configure.cmake b/src/corelib/configure.cmake index 477669a7d4a..e82ac8bf933 100644 --- a/src/corelib/configure.cmake +++ b/src/corelib/configure.cmake @@ -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") diff --git a/src/corelib/configure.json b/src/corelib/configure.json index 637e603c975..46435311352 100644 --- a/src/corelib/configure.json +++ b/src/corelib/configure.json @@ -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", diff --git a/util/cmake/helper.py b/util/cmake/helper.py index 7895019519e..8917821a3e8 100644 --- a/util/cmake/helper.py +++ b/util/cmake/helper.py @@ -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),