summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2025-04-08 13:11:43 +0200
committerMichal Klocek <michal.klocek@qt.io>2025-09-25 12:35:11 +0200
commit5a61b338408be7ae3cb22b4c7de302d4e488511f (patch)
tree6d89c82bcad9f85d35bb5b974d988fc0fc50db7a
parent8f05eaa6a91e12418e4268211d2e2c6052f52e3f (diff)
CMake: Add missing version checks
Whenever we check for some version number we should also have it documented. These change simply adds all missing checks. Note this might give more warnings than expected in case of missing libs, however follow up change takes care of that issue Pick-to: 6.10 6.9 Change-Id: Iaca8c3ae059567473072b9ecd2cac450928f6317 Reviewed-by: Moss Heim <moss.heim@qt.io>
-rw-r--r--cmake/QtConfigureHelpers.cmake18
-rw-r--r--configure.cmake122
2 files changed, 83 insertions, 57 deletions
diff --git a/cmake/QtConfigureHelpers.cmake b/cmake/QtConfigureHelpers.cmake
index 31b8c6230..7524c9422 100644
--- a/cmake/QtConfigureHelpers.cmake
+++ b/cmake/QtConfigureHelpers.cmake
@@ -189,6 +189,24 @@ function(qt_webengine_configure_check check)
endforeach()
endfunction()
+# trivial wrapper around qt_webengine_configure_check to avoid excessive typing
+macro(qt_webengine_configure_check_for_optional_unix lib condition)
+ string(SUBSTRING ${lib} 0 1 first_letter)
+ string(TOUPPER ${first_letter} first_letter)
+ string(REGEX REPLACE "^.(.*)" "${first_letter}\\1" lib_cap "${lib}")
+ qt_webengine_configure_check(${lib}
+ MODULES QtWebEngine
+ CONDITION NOT UNIX OR ${condition}
+ MESSAGE "No ${lib} library with version ${QT_CONFIGURE_CHECK_${lib}_version} or later. Using built-in one"
+ DOCUMENTATION "${lib_cap} library version ${QT_CONFIGURE_CHECK_${lib}_version}
+ or later. (optional, built-in used otherwise)"
+ TAGS MACOS_PLATFORM LINUX_PLATFORM
+ OPTIONAL
+ )
+ unset(first_letter)
+ unset(lib_cap)
+endmacro()
+
function(qt_webengine_configure_check_for_ulimit)
message(STATUS "Checking 'ulimit -n'")
execute_process(COMMAND bash -c "ulimit -n"
diff --git a/configure.cmake b/configure.cmake
index 101fd2908..5625a349a 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -6,6 +6,8 @@ if(QT_CONFIGURE_RUNNING)
endfunction()
endif()
+#### Versions
+
qt_webengine_set_version(cmake ${QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_BUILDING_WEBENGINE})
qt_webengine_set_version(ninja 1.7.2)
qt_webengine_set_version(python3 3.8)
@@ -13,7 +15,7 @@ qt_webengine_set_version(nodejs 14.9)
qt_webengine_set_version(nss 3.26)
qt_webengine_set_version(gcc 10.0)
qt_webengine_set_version(clang 17.0)
-qt_webengine_set_version(gcc-pdf 9.0)
+qt_webengine_set_version(gcc_for_pdf 9.0)
qt_webengine_set_version(glib 2.32.0)
qt_webengine_set_version(glibc 2.16)
qt_webengine_set_version(harfbuzz 4.3.0)
@@ -29,9 +31,14 @@ qt_webengine_set_version(libavformat 60.16.100)
qt_webengine_set_version(openh264 2.4.1)
qt_webengine_set_version(windows_sdk 26100) # we only care about minor number "10.0.26100.0"
+
+#### find_package checks
+
if(QT_CONFIGURE_RUNNING)
function(qt_webengine_configure_check)
endfunction()
+ function(qt_webengine_configure_check_for_optional_unix)
+ endfunction()
function(qt_webengine_configure_check_for_ulimit)
endfunction()
function(qt_webengine_get_windows_sdk_version)
@@ -55,6 +62,8 @@ else()
)
endif()
+#### pkg_config checks
+
if(PkgConfig_FOUND)
pkg_check_modules(DBUS dbus-1)
pkg_check_modules(FONTCONFIG fontconfig)
@@ -97,6 +106,8 @@ if(PkgConfig_FOUND)
pkg_check_modules(OPENH264 openh264>=${QT_CONFIGURE_CHECK_openh264_version})
endif()
+#### Tests
+
if(Python3_EXECUTABLE)
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "import html5lib"
@@ -105,8 +116,6 @@ if(Python3_EXECUTABLE)
)
endif()
-#### Tests
-
if(LINUX)
qt_webengine_configure_check_for_ulimit()
endif()
@@ -261,7 +270,7 @@ int main(void) {
}"
)
-#### Support Checks
+#### Support Checks (required)
qt_webengine_configure_check("compiler-cxx20"
MODULES QtWebEngine QtPdf
@@ -341,6 +350,12 @@ if(QT_GENERATE_SBOM AND QT_SBOM_GENERATE_JSON AND QT_SBOM_REQUIRE_GENERATE_JSON)
"SBOM JSON file generation requirements missing, but JSON files were explicitly required. ${sbom_missing_deps_message}"
)
endif()
+qt_webengine_configure_check("ninja"
+ MODULES QtWebEngine QtPdf
+ CONDITION Ninja_FOUND
+ MESSAGE "Ninja version ${QT_CONFIGURE_CHECK_ninja_version} or later is required."
+ DOCUMENTATION "Ninja version ${QT_CONFIGURE_CHECK_python3_version} or later."
+)
qt_webengine_configure_check("python3-html5lib"
MODULES QtWebEngine
CONDITION Python3_EXECUTABLE AND NOT html5lib_NOT_FOUND
@@ -378,22 +393,6 @@ qt_webengine_configure_check("glibc"
DOCUMENTATION "Glibc library at least ${QT_CONFIGURE_CHECK_glibc_version} version or later."
TAGS LINUX_PLATFORM
)
-qt_webengine_configure_check("glib"
- MODULES QtWebEngine
- CONDITION NOT UNIX OR GLIB_FOUND
- MESSAGE "No glib library at least ${QT_CONFIGURE_CHECK_glib_version} version or later. Using build-in one"
- DOCUMENTATION "Glib library at least ${QT_CONFIGURE_CHECK_glib_version} version or later."
- TAGS MACOS_PLATFORM LINUX_PLATFORM
- OPTIONAL
-)
-qt_webengine_configure_check("harfbuzz"
- MODULES QtWebEngine QtPdf
- CONDITION NOT UNIX OR HARFBUZZ_FOUND
- MESSAGE "No harfbuzz library at least ${QT_CONFIGURE_CHECK_harfbuzz_version} version or later. Using build-in one"
- DOCUMENTATION "Harfbuzz library at least ${QT_CONFIGURE_CHECK_harfbuzz_version} version or later."
- TAGS MACOS_PLATFORM LINUX_PLATFORM
- OPTIONAL
-)
qt_webengine_configure_check("mesa-headers"
MODULES QtWebEngine
CONDITION NOT LINUX OR TEST_khr
@@ -412,7 +411,7 @@ qt_webengine_configure_check("nss"
MODULES QtWebEngine
CONDITION NOT LINUX OR NSS_FOUND
MESSAGE "Build requires nss >= ${QT_CONFIGURE_CHECK_nss_version}."
- DOCUMENTATION "Nss library are least ${QT_CONFIGURE_CHECK_nss_version} version."
+ DOCUMENTATION "Nss library is at least ${QT_CONFIGURE_CHECK_nss_version} version."
TAGS LINUX_PLATFORM
)
qt_webengine_configure_check("dbus"
@@ -422,36 +421,6 @@ qt_webengine_configure_check("dbus"
DOCUMENTATION "Dbus"
TAGS LINUX_PKG_CONFIG
)
-qt_webengine_configure_check("libudev"
- MODULES QtWebEngine
- CONDITION NOT UNIX OR LIBUDEV_FOUND
- MESSAGE "No libudev found."
- DOCUMENTATION "Libudev library."
- TAGS MACOS_PLATFORM LINUX_PLATFORM
- OPTIONAL
-)
-
-# Only check for the 'xcb' feature if the Gui targets exists, aka Qt was not configured with
-# -no-gui.
-set(x_libs X11 LIBDRM XCOMPOSITE XCURSOR XRANDR XI XPROTO XSHMFENCE XTST XKBCOMMON XKBFILE XCBDRI3)
-set(qpa_xcb_support_check TRUE)
-foreach(x_lib ${x_libs})
- string(TOLOWER ${x_lib} x)
- qt_webengine_configure_check("${x}"
- MODULES QtWebEngine
- CONDITION NOT TARGET Qt6::Gui OR NOT LINUX OR NOT QT_FEATURE_xcb OR ${x_lib}_FOUND
- MESSAGE "Could not find ${x} library for qpa-xcb support."
- DOCUMENTATION "${x}"
- TAGS LINUX_XCB
- OPTIONAL
- )
- if(qpa_xcb_support_check AND NOT QT_CONFIGURE_CHECK_${x})
- set(qpa_xcb_support_check FALSE)
- endif()
- unset(x)
-endforeach()
-unset(x_libs)
-
qt_webengine_configure_check("compiler"
MODULES QtWebEngine
CONDITION MSVC OR
@@ -513,12 +482,12 @@ qt_webengine_configure_check("clang"
TAGS LINUX_PLATFORM
)
-qt_webengine_configure_check("gcc-pdf"
+qt_webengine_configure_check("gcc_for_pdf"
MODULES QtPdf
CONDITION NOT (LINUX OR MINGW) OR NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
- NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${QT_CONFIGURE_CHECK_gcc-pdf_version}
- MESSAGE "Gcc version must be at least ${QT_CONFIGURE_CHECK_gcc-pdf_version}"
- DOCUMENTATION "Gcc version must be at least ${QT_CONFIGURE_CHECK_gcc-pdf_version}."
+ NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${QT_CONFIGURE_CHECK_gcc_for_pdf_version}
+ MESSAGE "GCC version must be at least ${QT_CONFIGURE_CHECK_gcc_for_pdf_version}"
+ DOCUMENTATION "Gcc version must be at least ${QT_CONFIGURE_CHECK_gcc_for_pdf_version}"
TAGS LINUX_PLATFORM
)
@@ -537,6 +506,43 @@ qt_webengine_configure_check("windows-sdk"
)
unset(sdk_minor)
+### Support Checks (optional)
+
+# Only check for the 'xcb' feature if the Gui targets exists, aka Qt was not configured with
+# -no-gui.
+set(x_libs X11 LIBDRM XCOMPOSITE XCURSOR XRANDR XI XPROTO XSHMFENCE XTST XKBCOMMON XKBFILE XCBDRI3)
+set(qpa_xcb_support_check TRUE)
+foreach(x_lib ${x_libs})
+ string(TOLOWER ${x_lib} lib)
+ qt_webengine_configure_check("${lib}"
+ MODULES QtWebEngine
+ CONDITION NOT TARGET Qt6::Gui OR NOT LINUX OR NOT QT_FEATURE_xcb OR ${x_lib}_FOUND
+ MESSAGE "Could not find ${lib} library for qpa-xcb support."
+ DOCUMENTATION "${lib}"
+ TAGS LINUX_XCB
+ OPTIONAL
+ )
+ if(qpa_xcb_support_check AND NOT QT_CONFIGURE_CHECK_${lib})
+ set(qpa_xcb_support_check FALSE)
+ endif()
+endforeach()
+unset(lib)
+unset(x_libs)
+
+qt_webengine_configure_check_for_optional_unix(glib GLIB_FOUND)
+qt_webengine_configure_check_for_optional_unix(harfbuzz HARFBUZZ_FOUND)
+qt_webengine_configure_check_for_optional_unix(libudev LIBUDEV_FOUND)
+qt_webengine_configure_check_for_optional_unix(libpng PNG_FOUND)
+qt_webengine_configure_check_for_optional_unix(libtiff TIFF_FOUND)
+qt_webengine_configure_check_for_optional_unix(re2 TEST_re2)
+qt_webengine_configure_check_for_optional_unix(icu ICU_FOUND)
+qt_webengine_configure_check_for_optional_unix(opus OPUS_FOUND)
+qt_webengine_configure_check_for_optional_unix(vpx VPX_FOUND)
+qt_webengine_configure_check_for_optional_unix(libavutil FFMPEG_FOUND)
+qt_webengine_configure_check_for_optional_unix(libavcodec FFMPEG_FOUND)
+qt_webengine_configure_check_for_optional_unix(libavformat FFMPEG_FOUND)
+qt_webengine_configure_check_for_optional_unix(openh264 OPENH264_FOUND)
+
#### Features
qt_feature("qtwebengine-build" PUBLIC
@@ -618,7 +624,7 @@ qt_feature("webengine-system-re2" PRIVATE
qt_feature("webengine-system-icu" PRIVATE
LABEL "icu"
AUTODETECT FALSE
- CONDITION UNIX AND NOT APPLE AND ICU_FOUND
+ CONDITION UNIX AND ICU_FOUND
)
qt_feature("webengine-system-libwebp" PRIVATE
LABEL "libwebp, libwebpmux and libwebpdemux"
@@ -743,11 +749,13 @@ qt_feature("webengine-ozone-x11" PRIVATE
AND qpa_xcb_support_check
)
+#FIXME: fix version numbers when qt_feature_with_configure_check megred as
+#it requires diffrent evaluation order
qt_feature("webengine-gcc-legacy-support" PRIVATE
LABEL "gcc-legacy-support"
CONDITION UNIX AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU"
AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0
- AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL ${QT_CONFIGURE_CHECK_gcc-pdf_version}
+ AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0
)
#### Summary