aboutsummaryrefslogtreecommitdiffstats
path: root/cmake
Commit message (Collapse)AuthorAgeFilesLines
* CMake: Normalize submodule names by stripping tqtc- prefixesAlexandru Croitor2022-04-281-5/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In tqtc repos, the dependencies.yaml files may point to tqtc- prefixed repos, which can lead to build failures when doing a top-level build and the local repo directory names have no tqtc- prefix. This is the case both in the CI, and when using init-repository or git submodule init --recursive, because qt5.git specifies the 'path' key for each submodule to not contain any tqtc- prefix. Normalize the repo names by removing the tqtc- prefix when doing dependency resolution for CMake add_subdirectory calls, if such a submodule name does not exist on-disk. The normalization is conditional, to allow inclusion of repos that don't have a non-tqtc mirror. qt_internal_sync_to and the other git related operations are currently broken (both before and after this change) when used in conjunction with tqtc- repos and is non-trivial to fix. The first problem is the assumption of using the 'origin' remote, which will likely be an open-source repo that doesn't contain any tqtc repos. The second problem is that we would need to agree upon requiring 2 remotes, one open source and one tqtc one, to reliably choose where to clone / fetch from, as well as determining whether the checked out repo name needs to have a tqtc- prefix (by checking whether the repo does not exist in the open source remote for commercial only repos). Alternatively we could hard code a list of known open source repos, and anything not in the list will have its tqtc- prefix kept, but we still need to know which remote to use. As a drive-by, adjusted some of the shown messages for better readability and easier grepping. Pick-to: 6.2 6.3 Fixes: QTBUG-102883 Change-Id: I6806b119dd32b14dc0d9711dc829bfc5130d1e6f Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
* CMake: Don't ignore repos without dependencies.yamlJoerg Bornemann2022-02-101-6/+5
| | | | | | | | | | | | | | | | While resolving inter-repository dependencies, we skipped dependencies if their dependencies.yaml did not exist. This is wrong. Instead, such repos must be handled as if they don't have dependencies. Drive-by change: Clarify the dependencies result value in the comment for qt_internal_resolve_module_dependencies. This amends commit 8a94d1e2946644253cf2979c35636cbfb850422d. Fixes: QTBUG-100549 Change-Id: I523ed74cfa96a4bab238f3a475f28c3ac55dd7b4 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
* CMake: Rework inter-repository dependency resolutionJoerg Bornemann2022-01-312-68/+124
| | | | | | | | | | | | | | | | | | | | In certain cases the dependency resolution between Qt repositories resulted in a wrong order, for example qtsvg being handled before qtbase. See the linked task for an example. Replace the existing algorithm with a post-order traversal of the dependency graph to produce a topological ordering. Rename qt_internal_add_module_dependencies to qt_internal_resolve_module_dependencies and remove unnecessary positional arguments. Use keyword arguments for a nicer API. Raise the cmake_policy in QtSynchronizeRepo.cmake to avoid policy warnings we now would get due to the use of IN_LIST. Fixes: QTBUG-98268 Change-Id: I1425fd9c802fa71ae42549ceb14bcfc4c0a62078 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Fix ignored submodules if a submodule does not have a dependency.yamlKai Köhne2021-03-311-1/+2
| | | | | | | | | | | If a subdirectory has a CMakeLists.txt file, but no dependency.yaml file qt_internal_add_module_dependencies will bail out early, with out_module_dependencies being empty. Pick-to: 6.1 Fixes: QTBUG-92257 Change-Id: I024e812e9debd3c83b24bf306ff0375b2cb08659 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
* Remove unused TopologicalSort.cmakeJoerg Bornemann2021-03-123-185/+0
| | | | | | | | | Commit da25b7f149ee55317e14365ae10f2df77e8250bb removed the usage of TopologicalSort.cmake. Remove that file and its associated attribution data and license. Change-Id: I2dd34764c4343ac9ae0ce6fdcff5adcc3b70d299 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Do not error out on missing optional repository dependenciesJoerg Bornemann2021-03-121-13/+29
| | | | | | | | | | | | | Read the 'required' value from dependencies.yaml and store all required dependencies of repository 'qtfoo' in a global property QT_REQUIRED_DEPS_FOR_qtfoo. Check this property in the top-level CMakeLists.txt and only print informational messages instead of errors for optional dependencies. Fixes: QTBUG-91144 Change-Id: I0e1b84a70221857cebba1b9a27456ad3667bfe3a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Mark 'CMake Topological Sort' attribution as tools relatedKai Koehne2020-12-041-0/+1
| | | | | | | | The code is only used for building Qt, and not shipped by customers. Pick-to: 6.0 Change-Id: I0e255fe674b1703160608ab6b208918ea511baa4 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Checkout as detached if checking out branch failsVolker Hilsheimer2020-12-021-0/+9
| | | | | | | | | | | | | Having several toplevel worktrees for the same branch is problematic, but but we do want to be able to have one toplevel worktree synchronized to e.g. one submodule's dev and another with all submodules at the respective dev heads. So fall back to detached checkout if regular checkout fails, and generate a warning. Change-Id: I13981ab931cbbd8b56187979708bfe63f7373718 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Add worktrees as detachedVolker Hilsheimer2020-12-021-2/+2
| | | | | | | | | | | | Since we later check the worktree out to the revision specified in the dependency file, add it as detached to avoid conflicts with already existing worktrees for the default branch. As a drive-bye, fix a typo in a comment. Pick-to: 6.0 Change-Id: I81c30c1fa3cfc9831fe7884a103746b43478dd8e Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Initialize missing submodules if a supermodule is presentVolker Hilsheimer2020-12-021-0/+15
| | | | | | | | | | When fetching dependencies, the submodule directory might not exist or might be empty. If so, try to initialize the submodule before trying to add the worktree. Pick-to: 6.0 Change-Id: Ie4d6ec483ac9ea3f9207d5ab4cea34d6e0fb2921 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Support absorbed and unabsorbed submodulesVolker Hilsheimer2020-12-011-0/+4
| | | | | | | | | | | Modern git usage for submodules is that the git object storage is absorbed into the supermodule (see git submodule absorbgitdirs). Handle both cases when trying to locate the gitdir for the target module. Pick-to: 6.0 Change-Id: Icddbae3a4d9a8823551106f089dbbff2c935ff35 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Be less quiet when cloning or adding worktreesVolker Hilsheimer2020-11-211-17/+17
| | | | | | | | | | | | | Since doing either for qtbase and qtdeclarative can take a long time, and since it's a relevant change to the local file system, log what's going on. Swallow output from most git commands unless cmake runs in VERBOSE mode. Pick-to: 6.0 Change-Id: I984915689247d6372240744b5bc9183660046084 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Make syncing script capable of setting up new worktrees and clonesVolker Hilsheimer2020-11-171-0/+66
| | | | | | | | For missing dependencies, create worktrees from existing clones if found, otherwise clone from the same remote. Change-Id: Ie624e6c1b3f621dce43ee8cc7f06ce469851285b Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Add a script to synchronize the repo to a consistent (sub)setVolker Hilsheimer2020-11-172-12/+133
| | | | | | | | | | | | | | | | | | Make a few modifications to the dependency evaluation to include the revision of each dependency, and a method that checks each dependency out to the revision necessary to create a consistent set for the requested module. If the requested module is ".", check all modules out to the given revision. Can be called (ideally from a git-sync-to alias script): cmake -DSYNC_TO_MODULE="$1" -DSYNC_TO_BRANCH="$2" \ -P cmake/QtSynchronizeRepo.cmake Change-Id: I007e9f9023bae949907b64e264ae7869dff1da2e Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* CMake: Fix dependency handling when module is skippedAlexey Edelev2020-11-141-6/+19
| | | | | | | | | Put dependencies of all modules to top-level variables and check for unmet dependencies before module configuring. Fixes: QTBUG-88214 Change-Id: I089feb474687652f3f8fd1bb1959179ea1114983 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* Use dependencies.yaml to order sub modulesVolker Hilsheimer2020-11-111-0/+85
| | | | | | | | | | | | | Don't rely on .gitmodules, instead parse the dependencies.yaml file from every subdirectory with a CMakeLists.txt, and sort all projects based on that data. Projects with no dependencies are added last. This allows us to get rid of the duplication of dependency information in .gitmodules, and makes each module the authoritative source of its own dependencies. Change-Id: Ib1ec6c63bde2aa1852399d598dac5b8e1efda31d Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
* CMake: Add missing quote in qt_attribution.jsonLeander Beernaert2020-03-311-1/+1
| | | | | Change-Id: I360f5311373265843234c45bd8dd24f6499a5b99 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Read module list from .gitmodulesLeander Beernaert2020-03-183-0/+184
| | | | | | | | | | | | | | | This patch mimics the behavior of qt.pro, where the module list is extracted from the .gitmodules file and then topologically sorted based on the modules dependencies. This patch also introduces a small check to make sure all the required dependencies are met and will be built. Change-Id: Idd3df9b618805ca0b2347eac57aaa39c1bcdb3dd Reviewed-by: Qt CMake Build Bot Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> (cherry picked from commit b01225fb3257fa4c26d364c9a8fe5e19a04039e3) Reviewed-by: Leander Beernaert <leander.beernaert@qt.io>
* Start the CMake superbuildKevin Funk2020-03-181-0/+73
Also import and use ECMOptionalAddSubdirectory.cmake to add other module's as subdirectories, in case the directories exist. Additionally this module allows to disable the build of submodules by passing e.g. BUILD_qtsvg=OFF. This probably needs more though on how to hande the intermodule dependencies, but it's a start. Task-number: QTBUG-75582 Change-Id: Ic3de9711d9b865b2d96bdaee0089f570408b9693 Reviewed-by: Qt CMake Build Bot Reviewed-by: Cristian Adam <cristian.adam@qt.io> (cherry picked from commit 7509458d5f1ed5a48285471e32eda333cc3eeb8c) Reviewed-by: Leander Beernaert <leander.beernaert@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>