summaryrefslogtreecommitdiffstats
path: root/cmake
Commit message (Collapse)AuthorAgeFilesLines
* Make correct replacement of '-Wl,--no-undefined' in ECMEnableSanitizersAlexey Edelev24 hours2-2/+17
| | | | | | | | | | | The previous replacement method didn't consider flags that start with -Wl,--no-undefined, and this leads to the invalid flags landing to the linker line. E.g. -Wl,--no-undefined-version implaced '-version' after replacement. Pick-to: 6.5 6.8 6.9 6.10 Change-Id: I7748f1849dc5c8e552db179ccbad1e75c86bb785 Reviewed-by: Assam Boudjelthia <[email protected]>
* Add dynamic feature supportAlexey Edelev4 days1-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Introduce the qt6_add_android_dynamic_features function. The function marks the targets specified in the FEATURE_TARGETS argument as dynamic features, assigned to the specific Android application target. The dynamic feature target must be the SHARED_LIBRARY and not the Android target of type different from the DYNAMIC_FEATURE type. The design allows many-to-many component linking, so multiple Android applications may use same dynamic feature, and single Android application may use many dynamic features. Dynamic features are deployed as part of the main Android application aab and use the QT_ANDROID_MODERN_BUNDLE as the required pre-requisite. Limitations: - Dynamic features only implemented for the single ABI builds. - Dynamic features are not tested and proved in multi-config builds. - Qt disallowed to provide the store API to load dynamic features. Users need to follow Qt guidelines and documentation to implement own feature delivery. Task-number: QTBUG-116683 Task-number: QTBUG-124600 Change-Id: Idf10d481cedfe1cb5bd08c86e57a844e502bd6ff Reviewed-by: Assam Boudjelthia <[email protected]>
* Generate features in AndroidManifest.xmlAlexey Edelev4 days2-0/+13
| | | | | | | | Use the transitive INTERFACE_QT_ANDROID_FEATURES property to generate user feature declarations in AndroidManifest.xml. Change-Id: I6d49da12dc708abe125546241a268bb4ed6937d1 Reviewed-by: Alexandru Croitor <[email protected]>
* Rework android permission handlingAlexey Edelev4 days3-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current QT_ANDROID_PERMISSIONS property format is inconvenient for use in the CMake generator expressions and mixes attribute syntax with CMake list syntax. This suggests the new format for the QT_ANDROID_PERMISSIONS property. Each element is encoded the following way: <android:name>\;<permission>\\\;<extra1>\;<value>\\\;<extra2>\;<value> Elements are separated using standard CMake semicolons. QT_ANDROID_PERMISSIONS is now transitive LINK property. This feature deprecates the '<permission' records in the Qt6<Module>-android-dependencies.xml files. If application links Qt Module that requires specific permissions, these permissions will be written to the application deployment-settings.json file. The 'permissions' record in the application deployment-settings.json file is changed too, the new format is following: "permissions": [{ "name": "permission", "extra1": "value", "extra2": "value" }] Comparing to the previous format each extra attribute is stored under a separate key in permission object. IMPORTANT: androiddeployqt has no backward compatibility with the old format. With QT_USE_ANDROID_MODERN_BUNDLE enabled permissions are written directly to the AndroidManifest.xml without androiddeployqt involved. Supply tests for the Android permissions, that reads the manifest-declared permissions in test using the Android PackageManager API. Change-Id: I691df33c70acc6c7139302b119edc791fef8d5ef Reviewed-by: Assam Boudjelthia <[email protected]>
* Teach androidtestrunner running android bundlesAlexey Edelev4 days2-3/+23
| | | | | | | | | | | | | Add the modern android bundles support to androidtestrunner. The tool uses Android bundle tool to unpack and install Android bundles. If the Android bundletool found in the system and QT_USE_ANDROID_MODERN_BUNDLE is enabled Qt tests prefer run 'aab' but not APKs. This unlocks testing of Android bundles in CI and locally. Change-Id: I98be662f5c383127a8401371757ea708a495a94f Reviewed-by: Alexandru Croitor <[email protected]>
* Add Bundletool moduleAlexey Edelev4 days1-0/+48
| | | | | | | | | | | | | | The module looks for the Android bundletool in the system. The bundletool is a helper tool that allows making various manipulation on Android bundles: https://developer.android.com/tools/bundletool We want use it for testing of the Android bundles. Change-Id: Ic0b60e78705c4f1a78da1c401352589fa4a5f6d4 Reviewed-by: Alexandru Croitor <[email protected]> Reviewed-by: Assam Boudjelthia <[email protected]>
* Introduce _qt_internal_android_get_platform_tools_pathAlexey Edelev4 days1-1/+2
| | | | | | | | | Function returns the path to the Android platform tools. If the path is changed in the future, this function will localize the required changes. Pick-to: 6.5 6.8 6.9 6.10 Change-Id: Iea6e76c28e4260aaad6ba5429e2e46b0836c5e1a Reviewed-by: Alexandru Croitor <[email protected]>
* Avoid using the output variable in qt_internal_android_test_runner_argumentsAlexey Edelev4 days1-3/+3
| | | | | | | | | | | | It's a bad practice, since the output variable may interfere with the local variable name, so local variable will be unpredictably corrupted. Use local variable and write the result at the end of function. Pick-to: 6.5 6.8 6.9 6.10 Change-Id: I10c47460337c1fa3d1d060c77b56b8d4913d6a98 Reviewed-by: Alexandru Croitor <[email protected]>
* Migrate to the gradle.settings approach when generating Android projectsAlexey Edelev4 days2-1/+8
| | | | | | | | | | | | | | | | | | | | | | This approach is more flexible and modernizes the gradle project structure for Qt apps. We now try to reproduce the CMake Android project structure of user applications, in the modern Android project structure described here: https://developer.android.com/build The new structure using the module based application build and unlocks the support for the use of dynamic features and Android libraries(aar). All gradle-related rules are generated by CMake and androiddeployqt is used in the auxiliary mode only(--aux-mode option). Update gradle templates. To opt-in the modern deployment use the QT_ANDROID_MODERN_BUNDLE variable. Task-number: QTBUG-116683 Task-number: QTBUG-124600 Change-Id: I343b884dea77a7b3b9059cf876a81c3693d0294b Reviewed-by: Assam Boudjelthia <[email protected]>
* CMake: pass -mcx16 for clang/mingw builds on win64Tim Blechmann4 days1-0/+7
| | | | | | | | | | Windows 10 requires the cmpxchg16b instruction to be available. Enabling it for clang/mingw allows us to use cpp_winrt. Task-number: QTBUG-115078 Pick-to: 6.10 Change-Id: I6ac5afa1c592e9d42f7712aca1062ecc9251d52d Reviewed-by: Thiago Macieira <[email protected]>
* CMake:Android: add ANDROID_PLATFORM to Core.jsonSheree Morphett8 days1-2/+3
| | | | | | | | | Add ANDROID_PLATFORM to Core.json so that Qt Creator can pick it up. Task-number: QTCREATORBUG-32932 Pick-to: 6.10 6.9 6.8 Change-Id: I4a84ba74f43d68e2aef6c31f93c8c94a46bd406a Reviewed-by: Assam Boudjelthia <[email protected]>
* Build system: support C++2cMarc Mutz8 days2-2/+5
| | | | | | | | | | | | | | | CMake supports it since 3.25 (and we ship Qt with 3.30), so allow the selection of to-be-C++26. This patch merely continues the status quo. It does not attempt to change policy. Pick-to: 6.10 6.9 6.8 6.5 Change-Id: I6e1e7d76f787d619ad16551114ca92423159917a Reviewed-by: Alexandru Croitor <[email protected]> Reviewed-by: Giuseppe D'Angelo <[email protected]> Reviewed-by: Joerg Bornemann <[email protected]> Reviewed-by: Alexey Edelev <[email protected]>
* wasm: Update emsdk to 4.0.7Lorn Potter8 days1-1/+1
| | | | | | Pick-to: 6.10 Change-Id: I6bee3046d383ee44a01460880d22650fb698605b Reviewed-by: Piotr Wierciński <[email protected]>
* CMake: demote -Wnullability-completeness to warning for unity buildsTim Blechmann8 days1-0/+12
| | | | | | | | | | | | | Unity builds currently fail on macos with -Werror, due to -Wnullability-completeness. It seems that apple's system headers don't have every NS_ASSUME_NONNULL_BEGIN followed by a NS_ASSUME_NONNULL_END, which seems to leak into our code. Demoting the errors to a warning to make -Werror builds pass again. Pick-to: 6.10 Change-Id: I70d8ae33bf57b87feac7bb33b929b74f8cd60504 Reviewed-by: Tor Arne Vestbø <[email protected]> Reviewed-by: Alexey Edelev <[email protected]>
* CMake: Fix finding of system frameworks on macOS if vcpkg is usedJoerg Bornemann11 days1-0/+6
| | | | | | | | | | | | | | | | | The vcpkg toolchain file sets CMAKE_FIND_FRAMEWORK to LAST unless VCPKG_PREFER_SYSTEM_LIBS is enabled. The latter however has other unwanted implications and is also deprecated. The CMAKE_FIND_FRAMEWORK=LAST setting breaks qt_internal_find_system_framework for libraries like "Network" that are available as framework and as TBD file. Set CMAKE_FIND_FRAMEWORK temporarily to FIRST (the default value) in qt_internal_find_system_framework if vcpkg is used. Change-Id: I2fd3152d75b043a396f7c9b6269e623700077b98 Reviewed-by: Alexandru Croitor <[email protected]> Reviewed-by: Alexey Edelev <[email protected]>
* CMake: Work around AUTOGEN discarded dependencies for in-tree examplesAlexandru Croitor13 days1-1/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | When building qt examples in-tree, in a cross-compiling case, with a CMake version lower than 4.0, we lose AUTOGEN dependencies due to a bug in cmake. To ensure the dependencies are not lost, we need to apply the same workaround we did for internal Qt targets. For targets created by Qt's public API, we now query the target's LINK_LIBRARIES and INTERFACE_LINK_LIBRARIES at finalizer time, and add them to the AUTOGEN dependencies. The implementation is also modified to remove duplicates. We only apply the behavior in public API when QT_BUILDING_QT is true, to reduce the risk for regular user projects. The assumption here is when building a user project, Qt is already fully built, so we don't need to ensure that Qt's sync headers and autogen targets are up to date. Pick-to: 6.5 6.8 6.9 6.10 Fixes: QTBUG-137587 Task-number: QTBUG-133725 Change-Id: I61bd799ca39d92702ca0fc48d54bb517fc55baeb Reviewed-by: Alexey Edelev <[email protected]>
* CMake: Move qt_internal_work_around_autogen_discarded_dependenciesAlexandru Croitor13 days3-47/+48
| | | | | | | | | | | | | | Move it to a public Helpers file, so we can call it also from public API, because there are cases when we need the workaround for public API calls as well. Amends fcb20586316aff2ccc39e2ae840b79f8b0e904a7 Pick-to: 6.5 6.8 6.9 6.10 Task-number: QTBUG-133725 Task-number: QTBUG-137587 Change-Id: I9aef59f5eadc78fd581b24790e6b69795c32c1bf Reviewed-by: Alexey Edelev <[email protected]>
* Move the plugin config special handling to TargetsPrecheckCristian Le2025-06-274-29/+43
| | | | | | | | | | | This replaces the previous logic used in the QtPluginConfig.cmake files, allowing now to include the plugins independent of the current repo's dependencies. The only thing that controls whether a plugin is being included is if the current plugin is being built or not. Task-number: QTBUG-135233 Change-Id: I2d044eb6f6a3f36f49217eed81e799c4cfced66c Reviewed-by: Alexandru Croitor <[email protected]>
* Replace `QT_NO_CREATE_TARGETS` with an automated and scoped logicCristian Le2025-06-2713-15/+133
| | | | | | | | | | Effectively check if we are importing while still building the current project Task-number: QTBUG-135233 Change-Id: If172617463157e84e1b16fc2354147fabae41084 Reviewed-by: Alexandru Croitor <[email protected]> Reviewed-by: Alexey Edelev <[email protected]>
* Add `_qt_internal_should_include_targets`Cristian Le2025-06-271-0/+95
| | | | | | | Used to check if we should include the `Targets.cmake` file. Change-Id: I87b22a9eb68c6d0649595703e9d08e88c55d58e1 Reviewed-by: Alexandru Croitor <[email protected]>
* Use the new interface of `_qt_internal_check_multiple_inclusion`Cristian Le2025-06-272-2/+2
| | | | | Change-Id: I240939724b7013e00af6c118443b04007c9ce543 Reviewed-by: Alexandru Croitor <[email protected]>
* Expand `_qt_internal_check_multiple_inclusion` to accept namespaceCristian Le2025-06-271-6/+29
| | | | | | | Includes backwards compatibility for the old interface Change-Id: I6aeb62eff2a4e9a27d797bd9e06fbe68b2916ae6 Reviewed-by: Alexandru Croitor <[email protected]>
* Add a helper target check_qt_module_json_schemasCristian Le2025-06-261-0/+15
| | | | | Change-Id: If8e8970c6752aa0fcdf49181c001ef5766faa9ea Reviewed-by: Alexandru Croitor <[email protected]>
* Add qt_internal_add_default_testsCristian Le2025-06-262-0/+6
| | | | | | | | This serves as a hook to add tests and test-like targets to all repo builds Change-Id: I480885bf5c8899981e5b8d215a14a7b736bda890 Reviewed-by: Alexandru Croitor <[email protected]>
* Add the Json schema for the modules.jsonCristian Le2025-06-262-0/+6
| | | | | Change-Id: Id2c821a9e0abd067a8eb66348baff0f2f657bd75 Reviewed-by: Alexandru Croitor <[email protected]>
* Add a qt module json file schema validator utilityCristian Le2025-06-261-0/+2
| | | | | Change-Id: I4f85cee9957c0c8cf001417a61b61a57d7041dba Reviewed-by: Alexandru Croitor <[email protected]>
* Add QT_INSTALL_CI_FILESCristian Le2025-06-264-7/+27
| | | | | | | | Gate the installation of CI-only files by this option. Change-Id: I9327bac01707ceaa27aa0c91952ddb4846589dca Reviewed-by: Joerg Bornemann <[email protected]> Reviewed-by: Alexandru Croitor <[email protected]>
* Install `user_facing_tool_links.txt` automaticallyCristian Le2025-06-251-0/+13
| | | | | | | | | | The installation is already gated by the user having to specify `INSTALL_PUBLICBINDIR`, at which point we know that they want symlinks created and installed. This automates the installation for that user. Fixes: QTBUG-132761 Change-Id: Ie1242f21ec39db8fc0f31d7f2b93a43a23533485 Reviewed-by: Alexandru Croitor <[email protected]>
* cmake: remove variables that doesn't existZhao Yuhang2025-06-255-10/+1
| | | | | | | | | | | | This "deprecation_define" variable existed before, but after some commit the logic that set this variable has all been removed, so it's always empty and become useless now. I've searched for this variable globally in whole qtbase repo and can't find anywhere set or use this variable, so I think it's safe to remove these leftovers. Change-Id: If89c40570f24f5b845d17966da8a83746473152f Reviewed-by: Alexandru Croitor <[email protected]>
* Reland: CMake: Annotate some qt_find_package calls with MODULEAlexandru Croitor2025-06-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A qt_find_package call first tries to find a Config package with the CONFIG mode option, and if not found, falls back to an arg-less mode which searches both Config and Find modules. For some packages, we know we want to find the Find module because there can't be a Config package, e.g our FindWrap modules or any of the other Find modules we carry in our cmake directory. So we should annotate these calls with MODULE. Aside from slightly faster configuration, there is another reason to do so. Future versions of CMake will automatically log find_package calls that have a state change (e.g. Not Found -> Found) into CMakeConfigureLog.yaml. Due to the Config-first logic in qt_find_package, we always unset the Foo_DIR variable if the Config package is not found. This means that there will be a constant build up of not-found messages in the log. Explicitly annotating the calls with MODULE will prevent this. Do that. This commit relands f1a59e974f013fcf8629d8cbacab58d895523100 This reverts commit 0ce82b78a35026cb56ff76d1c24b311008934a53. Pick-to: 6.10 Change-Id: I5d37579d2f4957215ce1475b5c0ec8509d77c83d Reviewed-by: Joerg Bornemann <[email protected]>
* CMake: Always execute qt_find_package(MODULE) callsAlexandru Croitor2025-06-241-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A qt_find_package(Foo MODULE) call is only executed if Foo_FOUND is 0, otherwise it is skipped. This is problematic for FindFoo scripts that are implemented using pkg_check_modules calls which specify a <prefix> that matches the package name (Foo), because pkg_check_modules then sets the Foo_FOUND cache var to 1. On reconfiguration Foo_FOUND is 1, the qt_find_package call is skipped, and thus no targets are created, which can lead to 'unknown target' errors. The fact that pkg_check_modules sets a cache var, rather than a local var is a CMake issue: https://gitlab.kitware.com/cmake/cmake/-/issues/27014 One workaround would be to modify all our Find scripts to use a <prefix> that does not match the package name, so the _FOUND cache var is not set. That is somewhat error prone though, and requires some effort. Until CMake changes its behavior, make sure we always run qt_find_package(MODULE) calls, even if the cache var is set as found. Pick-to: 6.10 Task-number: QTBUG-137870 Change-Id: Ifad8807fd69a65be8e338695b9002760c6d97461 Reviewed-by: Joerg Bornemann <[email protected]>
* CMake: Pass qt-configured linker flag when building examplesAlexandru Croitor2025-06-231-0/+15
| | | | | | | | | | | | | | | | | | | | | | | If Qt is configured to build with lld, our examples should use it as well. But we want to do it without forcing the same linker on user projects. Normally if we wanted to do it for all user projects, we would propagate the linker flag via the Platform target, but we can't. In case of in-tree examples, we propagate the flags using add_link_options which is directory-scoped, and will apply to all targets created under the examples directory. For out-of-tree examples, we pass the flags via the equivalent CMAKE_<type>_LINKER_FLAGS_INIT variable to the external project. Pick-to: 6.8 6.9 6.10 Fixes: QTBUG-137882 Change-Id: Iade8ee2f37032b4a7801e5a628c9cc177d478129 Reviewed-by: Alexey Edelev <[email protected]> Reviewed-by: Moss Heim <[email protected]>
* Drop CMAKE_SYSTEM_VERSION from modules json if LinuxCristian Le2025-06-232-2/+6
| | | | | | | | | | | | | | In order to make the project build reproducible it should not record transient information of the build host. The linux kernel is not encoded in the source, and the value from the modules.json does not seem to be used anywhere, so we can drop it for now. Fixes: QTBUG-136060 Change-Id: Ic157d66d47040b080e9121fd065a8d60d489f586 Reviewed-by: Alexandru Croitor <[email protected]> Reviewed-by: Joerg Bornemann <[email protected]>
* Propagate minimum visionOS version to qmakeTor Arne Vestbø2025-06-201-0/+7
| | | | | | Pick-to: 6.10 6.9 6.8 Change-Id: I3dad6ba44a72399c95adbb78d186f78542a6db84 Reviewed-by: Christian Strømme <[email protected]>
* cmake: Propagate minimum visionOS version to CMAKE_OSX_DEPLOYMENT_TARGETTor Arne Vestbø2025-06-201-0/+2
| | | | | | | | | | | We were missing the plumbing from QT_SUPPORTED_MIN_VISIONOS_VERSION to CMAKE_OSX_DEPLOYMENT_TARGET which resulted in picking up the SDK version as the CMAKE_OSX_DEPLOYMENT_TARGET, which is not great for testing the new visionOS 26 SDK against visionOS 2.5 simulator. Pick-to: 6.10 6.9 6.8 Change-Id: Ic0bb3f4307dced463f51f1781e68c21bd8aa2e96 Reviewed-by: Christian Strømme <[email protected]>
* Revert "CMake: Annotate some qt_find_package calls with MODULE"Alexandru Croitor2025-06-191-1/+1
| | | | | | | | | | | | | | | | | | | This breaks reconfiguring Qt in various ways, one of which is CMake Error at cmake/QtTargetHelpers.cmake:1557 (message): PkgConfig::ATSPI2 is not a valid target. This happens because pkg_check_modules sets ATSPI2_FOUND to 1, so qt_find_package thinks it shouldn't find the FindATSPI2.cmake module, which ends up not creating the ATSPI2 target. This reverts commit f1a59e974f013fcf8629d8cbacab58d895523100. Pick-to: 6.10 Fixes: QTBUG-137870 Change-Id: Ica74a236c6b1bb9d7ca9af29175cb2e84a93251b Reviewed-by: Fabian Kosmale <[email protected]> Reviewed-by: Joerg Bornemann <[email protected]>
* CMake: Annotate some qt_find_package calls with MODULEAlexandru Croitor2025-06-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | A qt_find_package call first tries to find a Config package with the CONFIG mode option, and if not found, falls back to an arg-less mode which searches both Config and Find modules. For some packages, we know we want to find the Find module because there can't be a Config package, e.g our FindWrap modules or any of the other Find modules we carry in our cmake directory. So we should annotate these calls with MODULE. Aside from slightly faster configuration, there is another reason to do so. Future versions of CMake will automatically log find_package calls that have a state change (e.g. Not Found -> Found) into CMakeConfigureLog.yaml. Due to the Config-first logic in qt_find_package, we always unset the Foo_DIR variable if the Config package is not found. This means that there will be a constant build up of not-found messages in the log. Explicitly annotating the calls with MODULE will prevent this. Do that. Pick-to: 6.10 Change-Id: I465b015ac18f8a09b9a5c86cec7b6312a0bfbdf1 Reviewed-by: Alexey Edelev <[email protected]> Reviewed-by: Joerg Bornemann <[email protected]>
* cmake: Unify the set flags between AUTOMOC and qt_wrap_cppFabian Kosmale2025-06-143-1/+18
| | | | | | | | | | | | | | | | | | | For AUTOMOC, we were missing the compiler flavor flag, as well as the WIN32 define. While the latter has not caused any known issues yet, the former is rather problematic for implementing __has_include in moc. Note that this only applies in the case where the AUTOMOC flags are set by us in a qt_ function like qt_add_excutable. Plain add_executable won't benefit from it, but we already mention that Qt targets should not use plain CMake functions. This change is (indirectly) tested by the commit adding __has_include support for moc. Task-number: QTBUG-136097 Pick-to: 6.10 6.9 6.8 Change-Id: Ie2beb08a44a3a67e3bc363d9c1ba93b7d6a49133 Reviewed-by: Alexandru Croitor <[email protected]>
* SQL/DB2: Add and document DB2_ROOTChristian Ehrlicher2025-06-131-5/+11
| | | | | | | | | | Sync the cmake arguments to search for DB2 with the rest of the qsql find modules and provide a DB2_ROOT env or cmake var. Also allow the old variables as a fallback. Pick-to: 6.10 Change-Id: I587e519b5cf3513e9580f64f0fb9b46bf789da5c Reviewed-by: Alexandru Croitor <[email protected]>
* Introduce _qt_internal_append_cmake_configure_dependsAlexey Edelev2025-06-124-4/+15
| | | | | | | | | | | | The function append the unique entries to the CMAKE_CONFIGURE_DEPENDS property. This suppress the ninja recompat issue, which complains about the duplicated entries in that come from the CMAKE_CONFIGURE_DEPENDS property. It's likely the CMake issue, but we may work around it. Pick-to: 6.8 6.9 6.10 Change-Id: I2f10834b0dca3d2aa08fe13fba69849e97fa77d0 Reviewed-by: Alexandru Croitor <[email protected]>
* macOS: Remove linkage to AGL frameworkTor Arne Vestbø2025-06-101-9/+0
| | | | | | | | | It's no longer available on macOS 26, and we don't use it anymore anyways. Pick-to: 6.10 6.9 6.8 6.5 Change-Id: Ia1d0e37dda177f333646e598e517f4af20215dad Reviewed-by: Alexandru Croitor <[email protected]>
* CMake: Make QT_CMAKE_EXPORT_NAMESPACE available in the top-level scopeAlexandru Croitor2025-06-064-13/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously QT_CMAKE_EXPORT_NAMESPACE was set by calling find_package(QtBuildInternals) at repo dir scope, even in a top-level build. Starting with ddcafa0a51c65d86f6b5481f06fce5faeb75920d in qtdeclarative, we now have a deferred call of _qt_internal_write_deferred_qmlls_build_ini_file in the CMAKE_BINARY_DIR scope, which lacks the QT_CMAKE_EXPORT_NAMESPACE variable. This caused errors in a top-level standalone tests build: Error evaluating generator expression $ No target "::qtpaths" CMakeLists.txt:DEFERRED To avoid the error we now set QT_CMAKE_EXPORT_NAMESPACE in the top level scope. To avoid duplicating the code into the QtBaseTopLevelHelpers, we extract the qt_internal_top_level_setup_cmake_and_export_namespace function into a new QtBuildInternalsHelpers.cmake file, which is included by both QtBaseTopLevelHelpers.cmake and QtBuildInternalsConfig.cmake. We also copy and install that file. This has less side effects than trying to call find_package(QtBuildInternals) in the top-level scope. Pick-to: 6.10 Change-Id: I8e54e21d3f07ee86860cad49d6e43e0fdefbcee3 Reviewed-by: Joerg Bornemann <[email protected]>
* CMake: Make qt-cmake-standalone-tests work from prefix build dirAlexandru Croitor2025-06-062-3/+18
| | | | | | | | | | | We didn't copy the standalone test template files into the build dir when configuring a prefix build. We also need to copy the mkspecs. Pick-to: 6.8 6.9 6.10 Change-Id: I517165b2b8db84b0766935e3d535a7a1ef2b6ad9 Reviewed-by: Joerg Bornemann <[email protected]>
* CMake: Improve compile test error reporting in configure summaryAlexandru Croitor2025-06-042-4/+71
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Starting with 605913f9d7a60461939c1a8fb8dac05054cade2d we run configure.cmake compile tests lazily during feature evaluation. This means that qt_config_compile_test() calls will no longer set TEST_foo_OUTPUT variables in the scope of configure.cmake files and thus the build output of compile tests is no longer available for configure summary error reports. Instead of setting the output variable in the caller scope, save the output in a global property. Then, when we add error reports that mention compile tests either in CONDITION or in a newly introduced COMPILE_TESTS_TO_SHOW_ON_ERROR option, dump those outputs in the error report. We continue to set the output in the parent scope, in case if qt_run_config_compile_test is called manually. Amends 3334a77ecfb792fba0144e99887f11cd0fa2506d Amends 605913f9d7a60461939c1a8fb8dac05054cade2d Pick-to: 6.8 6.9 6.10 Fixes: QTBUG-137198 Change-Id: Idc0470556a053123286983c44063e17b7eb9949d Reviewed-by: Joerg Bornemann <[email protected]>
* CMake: Improve error reporting for failed linker no undefined flagAlexandru Croitor2025-06-043-13/+25
| | | | | | | | | | | | | Capture the output of the check_cxx_source_compiles calls in qt_internal_add_link_flags_no_undefined like we do for qt_config_compile_test. Amends 3334a77ecfb792fba0144e99887f11cd0fa2506d Pick-to: 6.8 6.9 6.10 Task-number: QTBUG-137198 Change-Id: Ic7dd4eae0ac1af0f8293f2ce285d2987e4e26249 Reviewed-by: Joerg Bornemann <[email protected]>
* xcb: mark xcb-image dependent on xcb-auxIlya Fedin2025-06-031-1/+1
| | | | | | | | Pick-to: 6.10 6.9 6.8 6.5 Fixes: QTBUG-86287 Fixes: QTBUG-137004 Change-Id: Ic4055078dedbbd8fcf1fba3983d6d64b7a06a20e Reviewed-by: Alexandru Croitor <[email protected]>
* Add feature deprecation capabilityCristian Le2025-06-022-0/+138
| | | | | | | | | Emit a warning if `FEATURE_*` variable is set. The "feature" is not registered as a true feature after deprecation. Pick-to: 6.10 6.9 6.8 Change-Id: I715af231c228c73d70b037ee31aa61edcd45c21e Reviewed-by: Alexandru Croitor <[email protected]>
* Display feature alias information in configureCristian Le2025-06-021-1/+15
| | | | | | Pick-to: 6.10 6.9 6.8 Change-Id: Ia7d054436ffcca64d6fecd363795e7439694b3f4 Reviewed-by: Alexandru Croitor <[email protected]>
* CMake: Add targets for building Android docs from Java sourcesJoerg Bornemann2025-06-028-32/+313
| | | | | | | | | | | | | | | | | | One can now run "ninja android_docs" to generate HTML docs for Android Java sources of Qt. This is done with javadoc. One can now run "ninja android_source_jars" to generate source jars for Android. They're supposed to be loaded into an IDE. The targets are enabled automatically for Android builds. For non-Android builds, set QT_BUILD_HOST_JAVA_DOCS=ON to create those targets. In that case you must also set ANDROID_SDK_ROOT. Fixes: QTBUG-117028 Change-Id: I2df51153359a95870c055d3ee373b8381f10cb51 Reviewed-by: Alexandru Croitor <[email protected]> Reviewed-by: Alexey Edelev <[email protected]> Reviewed-by: Nicholas Bennett <[email protected]>
* CMake: Fix location of iOS framework prl filesAlexandru Croitor2025-06-021-2/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | iOS prl files for static frameworks were previously placed at a path like 6.8.3/ios/lib/QtCore.framework/Versions/A/Resources/QtCore.prl This caused qmake to silently fail to find iOS framework prl files. The failure could only be seen when calling qmake with -d -d: DEBUG 2: QMakeMetaInfo: Cannot find info file for 6.8.3/ios/lib/QtCore.framework/Resources/QtCore.prl This in turn can lead to various build failures if a different non-iOS prl file is found in a system path. Place the prl file into the root of each framework, e.g. at 6.8.3/ios/lib/QtCore.framework/QtCore.prl We didn't have this issue in 6.7 and earlier, because by default iOS was built with static libraries rather than static frameworks. Amends 291817b0bf3f351843b0c1d0de237dc8df5c0fa5 Pick-to: 6.8 6.9 6.10 Fixes: QTBUG-137297 Change-Id: Idff8e808e9bfc009f82d2a59e5e6752ed8a55714 Reviewed-by: Joerg Bornemann <[email protected]>