diff options
-rw-r--r-- | CMakeLists.txt | 31 | ||||
-rw-r--r-- | cmake/FindGPerf.cmake | 20 | ||||
-rw-r--r-- | cmake/FindNodejs.cmake | 32 | ||||
-rw-r--r-- | cmake/FindSnappy.cmake | 35 | ||||
-rw-r--r-- | cmake/Functions.cmake | 41 | ||||
-rw-r--r-- | configure.cmake | 462 | ||||
-rw-r--r-- | src/core/api/configure.cmake | 155 |
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 +) |