diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2020-11-13 13:42:42 +0100 |
---|---|---|
committer | Alexey Edelev <alexey.edelev@qt.io> | 2020-11-14 13:10:30 +0000 |
commit | a2683113e2c4f204687daaca4f10b28c6e1a98a3 (patch) | |
tree | 0497055d1e0b4b33de29a8610f4f3ee703b7974f /cmake | |
parent | 4e2e65c7f17e57727ccf13c7a079cc04bed6c8fe (diff) |
CMake: Fix dependency handling when module is skipped
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>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtTopLevelHelpers.cmake | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/cmake/QtTopLevelHelpers.cmake b/cmake/QtTopLevelHelpers.cmake index b9f4341a..4aa560e3 100644 --- a/cmake/QtTopLevelHelpers.cmake +++ b/cmake/QtTopLevelHelpers.cmake @@ -33,9 +33,12 @@ endfunction() # Load $module and populate $out_ordered with the submodules based on their dependencies # $ordered carries already sorted dependencies; $out_has_dependencies is left empty -# if there are no dependencies, otherwise set to 1 +# if there are no dependencies, otherwise set to 1; Save list of dependencies for $module into +# $out_module_dependencies. List may contain duplicates, since function checks max depth +# dependencies. # Function calls itself recursively if a dependency is found that is not yet in $ordered. -function(qt_internal_add_module_dependencies module ordered out_ordered out_has_dependencies) +function(qt_internal_add_module_dependencies module ordered out_ordered out_has_dependencies + out_module_dependencies) set(depends_file "${CMAKE_CURRENT_SOURCE_DIR}/${module}/dependencies.yaml") if(NOT EXISTS "${depends_file}") set(${out_has_dependencies} "" PARENT_SCOPE) @@ -55,7 +58,8 @@ function(qt_internal_add_module_dependencies module ordered out_ordered out_has_ if (dindex EQUAL -1) # dependency hasnt' been seen yet - load it list(INSERT ordered ${pindex} "${dependency}") - qt_internal_add_module_dependencies(${dependency} "${ordered}" ordered has_dependency) + qt_internal_add_module_dependencies(${dependency} "${ordered}" ordered has_dependency + "${out_module_dependencies}") elseif(dindex GREATER pindex) # otherwise, make sure it is before module list(REMOVE_AT ordered ${dindex}) @@ -63,15 +67,24 @@ function(qt_internal_add_module_dependencies module ordered out_ordered out_has_ endif() endforeach() set(${out_ordered} "${ordered}" PARENT_SCOPE) + set(${out_module_dependencies} ${${out_module_dependencies}} ${dependencies} PARENT_SCOPE) endfunction() # populates $out_all_ordered with the sequence of the modules that need -# to be built in order to build $modules -function(qt_internal_sort_module_dependencies modules out_all_ordered) +# to be built in order to build $modules; dependencies for each module are populated +# in variables with specified in $dependencies_map_prefix prefix +function(qt_internal_sort_module_dependencies modules out_all_ordered dependencies_map_prefix) set(ordered "") foreach(module IN LISTS modules) set(out_ordered "") - qt_internal_add_module_dependencies(${module} "${ordered}" out_ordered module_depends) + if(NOT dependencies_map_prefix) + message(FATAL_ERROR "dependencies_map_prefix is not provided") + endif() + set(module_dependencies_list_var_name "${dependencies_map_prefix}${module}") + qt_internal_add_module_dependencies(${module} "${ordered}" out_ordered module_depends + "${module_dependencies_list_var_name}") + set(${module_dependencies_list_var_name} + "${${module_dependencies_list_var_name}}" PARENT_SCOPE) if(NOT module_depends) list(APPEND no_dependencies "${module}") endif() |