summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt31
-rw-r--r--cmake/FindGPerf.cmake20
-rw-r--r--cmake/FindNodejs.cmake32
-rw-r--r--cmake/FindSnappy.cmake35
-rw-r--r--cmake/Functions.cmake41
-rw-r--r--configure.cmake462
-rw-r--r--src/core/api/configure.cmake155
7 files changed, 776 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 42c4faa7d..ab7dd4212 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,37 @@ find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Co
set(installDir ${CMAKE_CURRENT_BINARY_DIR}/install)
+### FEATURES
+
+qt_build_repo_begin()
+qt_feature_module_begin(ONLY_EVALUATE_FEATURES)
+# Enable printing of feature summary by forcing qt_configure_record_command
+# to work in spite of ONLY_EVALUATE_FEATURES.
+set(__QtFeature_only_evaluate_features OFF)
+include(configure.cmake)
+qt_feature_module_end(ONLY_EVALUATE_FEATURES)
+qt_build_repo_end()
+
+if(NOT ${webEngineSupport})
+ add_custom_target(WebEngineErrorMessage ALL
+ ${CMAKE_COMMAND} -E cmake_echo_color --red "QtWebEngine will not be built: ${webEngineError}"
+ COMMENT "Check QtWebEngine support")
+ message("-- Support check for QtWebEngine failed: ${webEngineError}")
+ set(QT_FEATURE_qtwebengine_build OFF CACHE BOOL "Build QtWebEngine" FORCE)
+endif()
+
+if(NOT ${pdfSupport})
+ add_custom_target(PdfErrorMessage ALL
+ ${CMAKE_COMMAND} -E cmake_echo_color --red "QtPdf will not be built: ${pdfError}"
+ COMMENT "Check QtPdf support")
+ message("-- Support check for QtPdf failed: ${pdfError}")
+ set(QT_FEATURE_qtpdf_build OFF CACHE BOOL "Build QtPdf" FORCE)
+endif()
+
+if(NOT QT_FEATURE_qtwebengine_build AND NOT QT_FEATURE_qtpdf_build)
+ return()
+endif()
+
### NINJA
if(NOT Ninja_FOUND)
diff --git a/cmake/FindGPerf.cmake b/cmake/FindGPerf.cmake
new file mode 100644
index 000000000..85b55f1b8
--- /dev/null
+++ b/cmake/FindGPerf.cmake
@@ -0,0 +1,20 @@
+find_program(GPerf_EXECUTABLE NAMES gperf)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GPerf
+ FOUND_VAR
+ GPerf_FOUND
+ REQUIRED_VARS
+ GPerf_EXECUTABLE
+)
+
+if(GPerf_FOUND AND NOT TARGET GPerf::GPerf)
+ add_executable(GPerf::GPerf IMPORTED)
+ set_target_properties(GPerf::GPerf PROPERTIES IMPORTED_LOCATION "${GPerf_EXECUTABLE}")
+endif()
+
+include(FeatureSummary)
+set_package_properties(GPerf PROPERTIES
+ URL "https://www.gnu.org/software/gperf/"
+ DESCRIPTION "Perfect hash function generator"
+)
diff --git a/cmake/FindNodejs.cmake b/cmake/FindNodejs.cmake
new file mode 100644
index 000000000..0e5efe4a3
--- /dev/null
+++ b/cmake/FindNodejs.cmake
@@ -0,0 +1,32 @@
+find_program(Nodejs_EXECUTABLE NAMES node nodejs)
+
+if(Nodejs_EXECUTABLE)
+ execute_process(
+ COMMAND ${Nodejs_EXECUTABLE} --version
+ OUTPUT_VARIABLE Nodejs_VERSION
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif()
+
+string (REGEX MATCHALL "([1-9][0-9])\..*" Nodejs_VERSION "${Nodejs_VERSION}")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Nodejs
+ FOUND_VAR
+ Nodejs_FOUND
+ VERSION_VAR
+ Nodejs_VERSION
+ REQUIRED_VARS
+ Nodejs_EXECUTABLE
+)
+
+if(Nodejs_FOUND AND NOT TARGET Nodejs::Nodejs)
+ add_executable(Nodejs::Nodejs IMPORTED)
+ set_target_properties(Nodejs::Nodejs PROPERTIES IMPORTED_LOCATION "${Nodejs_EXECUTABLE}")
+endif()
+
+include(FeatureSummary)
+set_package_properties(Nodejs PROPERTIES
+ URL "https://nodejs.org/"
+ DESCRIPTION "JavaScript runtime environment that runs on the V8 engine"
+)
diff --git a/cmake/FindSnappy.cmake b/cmake/FindSnappy.cmake
new file mode 100644
index 000000000..1470c55a9
--- /dev/null
+++ b/cmake/FindSnappy.cmake
@@ -0,0 +1,35 @@
+
+if(TARGET Snappy::Snappy)
+ set(Snappy_FOUND TRUE)
+ return()
+endif()
+find_package(PkgConfig QUIET)
+
+if(PkgConfig_FOUND)
+ pkg_check_modules(Snappy snappy IMPORTED_TARGET)
+
+ if (TARGET PkgConfig::Snappy)
+ add_library(Snappy::Snappy INTERFACE IMPORTED)
+ target_link_libraries(Snappy::Snappy INTERFACE PkgConfig::Snappy)
+ set(Snappy_FOUND TRUE)
+ endif()
+endif()
+
+if(NOT TARGET Snappy::Snappy)
+ find_path(SNAPPY_INCLUDE_DIR NAMES snappy.h)
+ find_library(SNAPPY_LIBRARY NAMES snappy)
+
+ if(SNAPPY_LIBRARY AND SNAPPY_INCLUDE_DIR)
+ add_library(Snappy::Snappy UNKNOWN IMPORTED)
+ set_target_properties(Snappy::Snappy PROPERTIES
+ IMPORTED_LOCATION ${SNAPPY_LIBRARY}
+ INTERFACE_INCLUDE_DIRECTORIES ${SNAPPY_INCLUDE_DIR}
+ )
+ endif()
+
+ include(FindPackageHandleStandardArgs)
+ find_package_handle_standard_args(Snappy REQUIRED_VARS
+ SNAPPY_LIBRARY
+ SNAPPY_INCLUDE_DIR
+ )
+endif()
diff --git a/cmake/Functions.cmake b/cmake/Functions.cmake
new file mode 100644
index 000000000..b954654bf
--- /dev/null
+++ b/cmake/Functions.cmake
@@ -0,0 +1,41 @@
+function(assertTargets errorResult supportResult)
+ if(NOT DEFINED ${supportResult})
+ set(${supportResult} ON PARENT_SCOPE)
+ set(${supportResult} ON)
+ endif()
+ if(${${supportResult}})
+ list(REMOVE_ITEM ARGN ${errorResult})
+ list(REMOVE_ITEM ARGN ${supportResult})
+ foreach(qtTarget IN ITEMS ${ARGN})
+ if(NOT TARGET Qt::${qtTarget})
+ set(${errorResult} "Missing required Qt::${qtTarget}." PARENT_SCOPE)
+ set(${supportResult} OFF PARENT_SCOPE)
+ return()
+ endif()
+ endforeach()
+ endif()
+endfunction()
+
+# TODO: this should be idealy in qtbase
+function(add_check_for_support errorResult supportResult)
+ if(NOT DEFINED ${supportResult})
+ set(${supportResult} ON PARENT_SCOPE)
+ set(${supportResult} ON)
+ endif()
+ if (${${supportResult}})
+ qt_parse_all_arguments(arg "add_check_for_support"
+ "" "MODULE" "MESSAGE;CONDITION" "${ARGN}")
+ if ("x${arg_CONDITION}" STREQUAL x)
+ set(arg_CONDITION ON)
+ endif()
+ qt_evaluate_config_expression(result ${arg_CONDITION})
+ if(NOT ${result})
+ set(${supportResult} OFF PARENT_SCOPE)
+ set(${errorResult} ${arg_MESSAGE} PARENT_SCOPE)
+ qt_configure_add_report_entry(TYPE WARNING
+ MESSAGE "${arg_MODULE} won't be built. ${arg_MESSAGE}"
+ CONDITION ON
+ )
+ endif()
+ endif()
+endfunction()
diff --git a/configure.cmake b/configure.cmake
new file mode 100644
index 000000000..906e64017
--- /dev/null
+++ b/configure.cmake
@@ -0,0 +1,462 @@
+#### Inputs
+
+#### Libraries
+
+find_package(Ninja 1.7.2)
+find_package(Gn)
+find_package(Python2 2.7.5)
+find_package(GPerf)
+find_package(BISON)
+find_package(FLEX)
+find_package(Protobuf)
+find_package(PkgConfig)
+find_package(Snappy)
+find_package(Nodejs)
+find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Gui Widgets Network OpenGL OpenGLWidgets Quick Qml)
+
+if(PkgConfig_FOUND)
+ pkg_check_modules(DBUS dbus-1)
+ pkg_check_modules(FONTCONFIG fontconfig)
+ pkg_check_modules(LIBDRM libdrm)
+ pkg_check_modules(XCOMPOSITE xcomposite)
+ pkg_check_modules(XCURSOR xcursor)
+ pkg_check_modules(XI xi)
+ pkg_check_modules(XTST xtst)
+ pkg_check_modules(NSS nss>=3.26)
+ pkg_check_modules(X11 x11)
+ pkg_check_modules(XPROTO glproto)
+ pkg_check_modules(GLIB glib-2.0>=2.32.0)
+ pkg_check_modules(HARFBUZZ harfbuzz>=2.4.0 harfbuzz-subset>=2.4.0)
+ pkg_check_modules(JPEG libjpeg IMPORTED_TARGET)
+ pkg_check_modules(LIBEVENT libevent)
+ pkg_check_modules(MINIZIP minizip)
+ pkg_check_modules(PNG libpng>=1.6.0)
+ pkg_check_modules(ZLIB zlib)
+ pkg_check_modules(RE2 re2 IMPORTED_TARGET)
+ pkg_check_modules(ICU icu-uc>=65 icu-i18n>=65)
+ pkg_check_modules(WEBP libwebp libwebpmux libwebpdemux)
+ pkg_check_modules(LCMS2 lcms2)
+ pkg_check_modules(FREETYPE freetype2 IMPORTED_TARGET)
+ pkg_check_modules(LIBXML2 libxml-2.0 libxslt IMPORTED_TARGET)
+ pkg_check_modules(FFMPEG libavcodec libavformat libavutil)
+ pkg_check_modules(OPUS opus>=1.3.1)
+ pkg_check_modules(VPX vpx>=1.10.0 IMPORTED_TARGET)
+ pkg_check_modules(LIBPCI libpci)
+endif()
+
+#### Tests
+
+qt_config_compile_test(re2
+ LABEL "re2"
+ LIBRARIES
+ PkgConfig::RE2
+ CODE
+"
+#include \"re2/filtered_re2.h\"
+int main() {
+ std::string s;
+ re2::FilteredRE2 fre2(1);
+ int id = 0;
+ fre2.Add(s, {}, &id);
+ const RE2 &re2 = fre2.GetRE2(id);
+}"
+)
+
+qt_config_compile_test(vpx
+ LABEL "vpx"
+ LIBRARIES
+ PkgConfig::VPX
+ CODE
+"
+#include \"vpx/vpx_encoder.h\"
+#include \"vpx/vp8cx.h\"
+#include \"vpx/vpx_image.h\"
+int main() {
+ vpx_codec_cx_pkt pkt;
+ pkt.data.frame.width[0] = 0u;
+ pkt.data.frame.height[0] = 0u;
+ auto a = CONSTRAINED_FROM_ABOVE_DROP;
+ auto b = VPX_IMG_FMT_NV12;
+}"
+)
+
+qt_config_compile_test(snappy
+ LABEL "snappy"
+ LIBRARIES
+ Snappy::Snappy
+ CODE
+"
+#include \"snappy.h\"
+int main() {
+ snappy::Source *src = 0;
+ snappy::Sink *sink = 0;
+ return 0;
+}"
+)
+
+qt_config_compile_test(libxml2
+ LABEL "compatible libxml2 and libxslt"
+ LIBRARIES
+ PkgConfig::LIBXML2
+ CODE
+"
+#include \"libxml/xmlversion.h\"
+#if !defined(LIBXML_ICU_ENABLED)
+#error libxml icu not enabled
+#endif
+int main() {
+ return 0;
+}"
+)
+
+qt_config_compile_test(jpeg
+ LABEL "compatible libjpeg"
+ LIBRARIES
+ PkgConfig::JPEG
+ CODE
+"
+#include <cstdio>
+#include <cstring>
+extern \"C\" {
+ #include <jpeglib.h>
+}
+int main() {
+ JDIMENSION dummy;
+ jpeg_crop_scanline(nullptr, &dummy, &dummy);
+ jpeg_skip_scanlines(nullptr, dummy);
+}"
+)
+
+qt_config_compile_test(freetype
+ LABEL "freetype >= 2.4.2"
+ LIBRARIES
+ PkgConfig::FREETYPE
+ CODE
+"
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#if ((FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) < 20402)
+# error This version of freetype is too old.
+#endif
+int main() {
+ FT_Face ft_face = 0;
+ FT_Reference_Face(ft_face);
+ return 0;
+}"
+)
+
+qt_config_compile_test(glibc
+ LABEL "glibc > 2.16"
+ CODE
+"
+#include <features.h>
+#if __GLIBC__ < 2 || __GLIBC_MINOR__ < 17
+#error glibc versions below 2.17 are not supported
+#endif
+int main(void) {
+ return 0;
+}"
+)
+
+qt_config_compile_test(khr
+ LABEL "khr"
+ CODE
+"
+#include <KHR/khrplatform.h>
+int main(void) {
+ return 0;
+}"
+)
+
+qt_config_compile_test(winversion
+ LABEL "winversion"
+ CODE
+"
+#if !defined(__clang__) && _MSC_FULL_VER < 191426428
+#error unsupported Visual Studio version
+#endif
+int main(void){
+ return 0;
+}"
+)
+
+
+#### Features
+
+qt_feature("qtwebengine-build" PRIVATE
+ LABEL "Build Qt WebEngine"
+ PURPOSE "Enables building the Qt WebEngine modules."
+)
+qt_feature("qtwebengine-widgets-build" PRIVATE
+ LABEL "Build Qt WebEngineWidgets"
+ PURPOSE "Enables building the Qt WebEngineWidgets module."
+ CONDITION TARGET Qt::Widgets
+)
+qt_feature("qtwebengine-quick-build" PRIVATE
+ LABEL "Build Qt WebEngineQuick"
+ PURPOSE "Enables building the Qt WebEngineQuick module."
+ CONDITION TARGET Qt::Quick AND TARGET Qt::Qml
+)
+qt_feature("qtpdf-build" PRIVATE
+ LABEL "Build Qt PDF"
+ PURPOSE "Enables building the Qt PDF rendering module."
+)
+qt_feature("webengine-system-ninja" PRIVATE
+ LABEL "Use system ninja"
+ CONDITION Ninja_FOUND
+)
+qt_feature("webengine-system-gn" PRIVATE
+ LABEL "Use system gn"
+ AUTODETECT FALSE
+ CONDITION GN_Found
+)
+qt_feature("webengine-developer-build" PRIVATE
+ LABEL "Developer build"
+ PURPOSE "Enables the developer build configuration."
+ AUTODETECT QT_FEATURE_private_tests
+)
+qt_feature("webengine-system-re2" PRIVATE
+ LABEL "re2"
+ AUTODETECT UNIX AND TEST_re2
+)
+qt_feature("webengine-system-icu" PRIVATE
+ LABEL "icu"
+ AUTODETECT FALSE
+ CONDITION ICU_FOUND
+)
+qt_feature("webengine-system-libwebp" PRIVATE
+ LABEL "libwebp, libwebpmux and libwebpdemux"
+ CONDITION UNIX AND WEBP_FOUND
+)
+qt_feature("webengine-system-opus" PRIVATE
+ LABEL "opus"
+ CONDITION UNIX AND OPUS_FOUND
+)
+qt_feature("webengine-system-ffmpeg" PRIVATE
+ LABEL "ffmpeg"
+ AUTODETECT FALSE
+ CONDITION FFMPEG_FOUND AND QT_FEATURE_webengine_system_opus AND QT_FEATURE_webengine_system_libwebp
+)
+qt_feature("webengine-system-libvpx" PRIVATE
+ LABEL "libvpx"
+ CONDITION UNIX AND TEST_vpx
+)
+qt_feature("webengine-system-snappy" PRIVATE
+ LABEL "snappy"
+ CONDITION UNIX AND TEST_snappy
+)
+qt_feature("webengine-system-glib" PRIVATE
+ LABEL "glib"
+ CONDITION UNIX AND GLIB_FOUND
+)
+qt_feature("webengine-system-zlib" PRIVATE
+ LABEL "zlib"
+ CONDITION UNIX AND QT_FEATURE_system_zlib AND ZLIB_FOUND
+)
+qt_feature("webengine-system-minizip" PRIVATE
+ LABEL "minizip"
+ CONDITION UNIX AND MINIZIP_FOUND
+)
+qt_feature("webengine-system-libevent" PRIVATE
+ LABEL "libevent"
+ AUTODETECT FALSE # coin bug 711
+ CONDITION UNIX AND LIBEVENT_FOUND
+)
+qt_feature("webengine-system-protobuf" PRIVATE
+ LABEL "protobuf"
+ CONDITION UNIX AND Protobuf_FOUND
+)
+qt_feature("webengine-system-libxml" PRIVATE
+ LABEL "libxml2 and libxslt"
+ CONDITION UNIX AND TEST_libxml2
+)
+qt_feature("webengine-system-lcms2" PRIVATE
+ LABEL "lcms2"
+ CONDITION UNIX AND LCMS2_FOUND
+)
+qt_feature("webengine-system-libpng" PRIVATE
+ LABEL "png"
+ CONDITION UNIX AND TARGET Qt::Gui AND PNG_FOUND AND QT_FEATURE_system_png
+)
+qt_feature("webengine-system-libjpeg" PRIVATE
+ LABEL "jpeg"
+ CONDITION UNIX AND TARGET Qt::Gui AND TEST_jpeg AND QT_FEATURE_system_jpeg
+)
+qt_feature("webengine-system-harfbuzz" PRIVATE
+ LABEL "harfbuzz"
+ CONDITION UNIX AND TARGET Qt::Gui AND HARFBUZZ_FOUND AND QT_FEATURE_system_harfbuzz
+)
+qt_feature("webengine-system-freetype" PRIVATE
+ LABEL "freetype"
+ CONDITION UNIX AND TARGET Qt::Gui AND TEST_freetype AND QT_FEATURE_system_freetype
+)
+qt_feature("webengine-system-libpci" PRIVATE
+ LABEL "libpci"
+ CONDITION UNIX AND LIBPCI_FOUND
+)
+
+qt_feature("webengine-ozone-x11" PRIVATE
+ LABEL "Support qpa-xcb"
+ CONDITION LINUX
+ AND TARGET Qt::Gui
+ AND QT_FEATURE_xcb
+ AND X11_FOUND
+ AND LIBDRM_FOUND
+ AND XCOMPOSITE_FOUND
+ AND XCURSOR_FOUND
+ AND XI_FOUND
+ AND XPROTO_FOUND
+ AND XTST_FOUND
+)
+
+#### Support Checks
+
+assertTargets(webEngineError webEngineSupport Gui Widgets OpenGL OpenGLWidgets Quick Qml)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION LINUX OR WIN32 OR MACOS
+ MESSAGE "Build can be done only on Linux, Windows or macOS."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION TARGET Nodejs::Nodejs
+ MESSAGE "Nodejs is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION Python2_FOUND
+ MESSAGE "Python version 2 (2.7.5 or later) is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION GPerf_FOUND
+ MESSAGE "Tool gperf is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION BISON_FOUND
+ MESSAGE "Tool bison is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION FLEX_FOUND
+ MESSAGE "Tool flex is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR PkgConfig_FOUND
+ MESSAGE "A pkg-config support is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR TEST_glibc
+ MESSAGE "A suitable version >= 2.17 of glibc is required."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR TEST_khr
+ MESSAGE "Build requires Khronos development headers for build(see mesa/libegl1-mesa-dev)."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR FONTCONFIG_FOUND
+ MESSAGE "Build requires fontconfig."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR NSS_FOUND
+ MESSAGE "Build requires nss >= 3.26."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR DBUS_FOUND
+ MESSAGE "Build requires dbus."
+)
+set(xcbSupport X11 LIBDRM XCOMPOSITE XCURSOR XI XPROTO XTST)
+foreach(xs ${xcbSupport})
+ if(${xs}_FOUND)
+ set(xcbErrorMessage "${xcbErrorMessage} ${xs}:YES")
+ else()
+ set(xcbErrorMessage "${xcbErrorMessage} ${xs}:NO")
+ endif()
+endforeach()
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT LINUX OR NOT QT_FEATURE_xcb OR QT_FEATURE_webengine_ozone_x11
+ MESSAGE "Could not find all necessary libraries for qpa-xcb support.\
+${xcbErrorMessage}"
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION NOT WIN32 OR TEST_winversion
+ MESSAGE "Build requires Visual Studio 2019 or higher."
+)
+add_check_for_support(webEngineError webEngineSupport
+ MODULE QtWebEngine
+ CONDITION
+ (LINUX AND CMAKE_CXX_COMPILER_ID STREQUAL GNU) OR
+ (LINUX AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) OR
+ (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL MSVC) OR
+ (WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL Clang AND
+ CMAKE_CXX_SIMULATE_ID STREQUAL MSVC) OR
+ (MACOS AND CMAKE_CXX_COMPILER_ID STREQUAL AppleClang)
+ MESSAGE "${CMAKE_CXX_COMPILER_ID} compiler is not supported."
+)
+add_check_for_support(pdfError pdfSupport
+ MODULE QtPdf
+ CONDITION OFF
+ MESSAGE "QtPdf is missing cmake port."
+)
+
+#### Summary
+
+# > Qt WebEngine Build Features
+qt_configure_add_summary_section(NAME "Build Features")
+qt_configure_add_summary_entry(ARGS "webengine-system-ninja")
+qt_configure_add_summary_entry(ARGS "webengine-system-gn")
+qt_configure_add_summary_entry(ARGS "webengine-developer-build")
+# >> Optional system libraries
+if(UNIX)
+ qt_configure_add_summary_section(NAME "Optional system libraries")
+ qt_configure_add_summary_entry(ARGS "webengine-system-re2")
+ qt_configure_add_summary_entry(ARGS "webengine-system-icu")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libwebp")
+ qt_configure_add_summary_entry(ARGS "webengine-system-opus")
+ qt_configure_add_summary_entry(ARGS "webengine-system-ffmpeg")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libvpx")
+ qt_configure_add_summary_entry(ARGS "webengine-system-snappy")
+ qt_configure_add_summary_entry(ARGS "webengine-system-glib")
+ qt_configure_add_summary_entry(ARGS "webengine-system-zlib")
+ qt_configure_add_summary_entry(ARGS "webengine-system-minizip")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libevent")
+ qt_configure_add_summary_entry(ARGS "webengine-system-protobuf")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libxml")
+ qt_configure_add_summary_entry(ARGS "webengine-system-lcms2")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libpng")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libjpeg")
+ qt_configure_add_summary_entry(ARGS "webengine-system-harfbuzz")
+ qt_configure_add_summary_entry(ARGS "webengine-system-freetype")
+ qt_configure_add_summary_entry(ARGS "webengine-system-libpci")
+ qt_configure_end_summary_section()
+endif()
+# << Optional system libraries
+qt_configure_end_summary_section()
+# < Qt WebEngine Build Features
+
+qt_configure_add_report_entry(
+ TYPE NOTE
+ MESSAGE "QtWebEngine build is disabled by user."
+ CONDITION ${webEngineSupport} AND NOT QT_FEATURE_qtwebengine_build
+)
+
+qt_configure_add_report_entry(
+ TYPE NOTE
+ MESSAGE "QtPdf build is disabled by user."
+ CONDITION ${pdfSupport} AND NOT QT_FEATURE_qtpdf_build
+)
+
+qt_configure_add_report_entry(
+ TYPE WARNING
+ MESSAGE "Building fat libray with device and simulator architectures will disable NEON."
+ CONDITION IOS AND simulator AND device AND QT_FEATURE_qtpdf_build
+)
diff --git a/src/core/api/configure.cmake b/src/core/api/configure.cmake
new file mode 100644
index 000000000..8986bf54e
--- /dev/null
+++ b/src/core/api/configure.cmake
@@ -0,0 +1,155 @@
+#### Libraries
+
+find_package(PkgConfig)
+if(PkgConfig_FOUND)
+ pkg_check_modules(ALSA alsa IMPORTED_TARGET)
+ pkg_check_modules(PULSEAUDIO libpulse>=0.9.10 libpulse-mainloop-glib)
+ pkg_check_modules(GIO gio-2.0)
+endif()
+
+find_package(Qt6 ${PROJECT_VERSION} CONFIG QUIET OPTIONAL_COMPONENTS Positioning WebChannel PrintSupport)
+
+#### Tests
+
+qt_config_compile_test(alsa
+ LABEL "alsa"
+ LIBRARIES
+ PkgConfig::ALSA
+ CODE
+"
+#include \"alsa/asoundlib.h\"
+#if SND_LIB_VERSION < 0x1000a // 1.0.10
+#error Alsa version found too old, require >= 1.0.10
+#endif
+int main(){};
+")
+
+#### Features
+
+qt_feature("webengine-embedded-build" PRIVATE
+ LABEL "Embedded build"
+ PURPOSE "Enables the embedded build configuration."
+ AUTODETECT tests.webengine-embedded-build OR FIXME
+ CONDITION UNIX
+)
+qt_feature("webengine-system-alsa" PRIVATE
+ LABEL "Use ALSA"
+ CONDITION UNIX AND TEST_alsa
+)
+qt_feature("webengine-v8-snapshot-support" PRIVATE
+ LABEL "Building v8 snapshot supported"
+ CONDITION NOT UNIX OR NOT QT_FEATURE_cross_compile OR ( TEST_architecture_arch STREQUAL arm64 ) OR TEST_webengine_host_compiler
+)
+qt_feature("webengine-geolocation" PUBLIC
+ LABEL "Geolocation"
+ CONDITION TARGET Qt::Positioning
+)
+qt_feature("webengine-system-pulseaudio" PRIVATE
+ LABEL "Use PulseAudio"
+ AUTODETECT UNIX
+ CONDITION PULSEAUDIO_FOUND
+)
+qt_feature("webengine-pepper-plugins" PRIVATE
+ LABEL "Pepper Plugins"
+ PURPOSE "Enables use of Pepper Flash plugins."
+ AUTODETECT NOT QT_FEATURE_webengine_embedded_build
+)
+qt_feature("webengine-printing-and-pdf" PRIVATE
+ LABEL "Printing and PDF"
+ PURPOSE "Provides printing and output to PDF."
+ AUTODETECT NOT QT_FEATURE_webengine_embedded_build
+ CONDITION TARGET Qt::PrintSupport AND QT_FEATURE_printer
+)
+qt_feature("webengine-webchannel" PUBLIC
+ SECTION "WebEngine"
+ LABEL "WebChannel support"
+ PURPOSE "Provides QtWebChannel integration."
+ CONDITION TARGET Qt::WebChannel
+)
+qt_feature("webengine-proprietary-codecs" PRIVATE
+ LABEL "Proprietary Codecs"
+ PURPOSE "Enables the use of proprietary codecs such as h.264/h.265 and MP3."
+ AUTODETECT OFF
+)
+qt_feature("webengine-kerberos" PRIVATE
+ SECTION "WebEngine"
+ LABEL "Kerberos Authentication"
+ PURPOSE "Enables Kerberos Authentication Support"
+ AUTODETECT WIN32
+)
+qt_feature("webengine-spellchecker" PUBLIC
+ LABEL "Spellchecker"
+ PURPOSE "Provides a spellchecker."
+ AUTODETECT OFF
+)
+qt_feature("webengine-native-spellchecker" PUBLIC
+ LABEL "Native Spellchecker"
+ PURPOSE "Use the system's native spellchecking engine."
+ AUTODETECT OFF
+ CONDITION MACOS AND QT_FEATURE_webengine_spellchecker
+)
+qt_feature("webengine-extensions" PUBLIC
+ SECTION "WebEngine"
+ LABEL "Extensions"
+ PURPOSE "Enables Chromium extensions within certain limits. Currently used for enabling the pdf viewer."
+ AUTODETECT QT_FEATURE_webengine_printing_and_pdf
+ CONDITION QT_FEATURE_webengine_printing_and_pdf
+)
+qt_feature("webengine-webrtc" PRIVATE
+ LABEL "WebRTC"
+ PURPOSE "Provides WebRTC support."
+ AUTODETECT OFF
+)
+qt_feature("webengine-webrtc-pipewire" PRIVATE
+ LABEL "PipeWire over GIO"
+ PURPOSE "Provides PipeWire support in WebRTC using GIO."
+ AUTODETECT false
+ CONDITION QT_FEATURE_webengine_webrtc AND GIO_FOUND
+)
+qt_feature_config("webengine-full-debug-info" QMAKE_PRIVATE_CONFIG
+ NAME "v8base_debug"
+)
+qt_feature_config("webengine-full-debug-info" QMAKE_PRIVATE_CONFIG
+ NAME "webcore_debug"
+)
+qt_configure_add_summary_section(NAME "Qt WebEngineCore")
+qt_configure_add_summary_entry(ARGS "webengine-embedded-build")
+qt_configure_add_summary_entry(ARGS "webengine-full-debug-info")
+qt_configure_add_summary_entry(ARGS "webengine-pepper-plugins")
+qt_configure_add_summary_entry(ARGS "webengine-printing-and-pdf")
+qt_configure_add_summary_entry(ARGS "webengine-proprietary-codecs")
+qt_configure_add_summary_entry(ARGS "webengine-spellchecker")
+qt_configure_add_summary_entry(ARGS "webengine-native-spellchecker")
+qt_configure_add_summary_entry(ARGS "webengine-webrtc")
+qt_configure_add_summary_entry(ARGS "webengine-webrtc-pipewire")
+qt_configure_add_summary_entry(ARGS "webengine-geolocation")
+qt_configure_add_summary_entry(ARGS "webengine-webchannel")
+qt_configure_add_summary_entry(ARGS "webengine-kerberos")
+qt_configure_add_summary_entry(ARGS "webengine-extensions")
+qt_configure_add_summary_entry(
+ ARGS "webengine-ozone-x11"
+ CONDITION UNIX
+)
+qt_configure_add_summary_entry(
+ ARGS "webengine-v8-snapshot-support"
+ CONDITION UNIX AND cross_compile
+)
+qt_configure_add_summary_entry(
+ ARGS "webengine-system-alsa"
+ CONDITION UNIX
+)
+qt_configure_add_summary_entry(
+ ARGS "webengine-system-pulseaudio"
+ CONDITION UNIX
+)
+qt_configure_end_summary_section() # end of "Qt WebEngineCore" section
+qt_configure_add_report_entry(
+ TYPE WARNING
+ MESSAGE "Thumb instruction set is required to build ffmpeg for QtWebEngine."
+ CONDITION LINUX AND QT_FEATURE_webengine_embedded_build AND NOT QT_FEATURE_webengine_system_ffmpeg AND ( TEST_architecture_arch STREQUAL arm ) AND NOT QT_FEATURE_webengine_arm_thumb
+)
+qt_configure_add_report_entry(
+ TYPE WARNING
+ MESSAGE "V8 snapshot cannot be built. Most likely, the 32-bit host compiler does not work. Please make sure you have 32-bit devel environment installed."
+ CONDITION UNIX AND cross_compile AND NOT QT_FEATURE_webengine_v8_snapshot_support
+)