diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-04-29 14:36:25 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-05-02 07:30:55 +0000 |
commit | bcfc3dca5d9f3e329fbbcf114145cf8b348c2c81 (patch) | |
tree | 9c07e6dac499c51e9b208ae90206fa3d562cb76d /cmake | |
parent | 9b0b464e82071338134700edfa190bf998846e4e (diff) |
Make module package depend on its own tool package
Also make the tool package depend on all tool packages that correspond
to the qt module dependencies.
So find_package(Qt5Widgets) implicitly calls find_package(Qt5WidgetTools).
And find_package(Qt5WidgetsTools) will call find_package for
Qt5GuiTools, and Qt5CoreTools.
This enhances the user experience, so that in modules like qtsvg, you
don't have to specify both find_package(Qt5Widgets) and
find_package(Qt5WidgetsTools), but only the former.
Or when cross building, you only need to specify Qt5WidgetTools, to get
both Core and Gui tools.
Change-Id: Ib1c5173a5b97584a52e144c22e38e90a712f727a
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtModuleDependencies.cmake.in | 17 | ||||
-rw-r--r-- | cmake/QtModuleToolsConfig.cmake.in | 7 | ||||
-rw-r--r-- | cmake/QtModuleToolsDependencies.cmake.in | 16 | ||||
-rw-r--r-- | cmake/QtPostProcess.cmake | 38 |
4 files changed, 76 insertions, 2 deletions
diff --git a/cmake/QtModuleDependencies.cmake.in b/cmake/QtModuleDependencies.cmake.in index 7ff02df894..2190460b71 100644 --- a/cmake/QtModuleDependencies.cmake.in +++ b/cmake/QtModuleDependencies.cmake.in @@ -32,3 +32,20 @@ endforeach() # Restore old module path. set(CMAKE_MODULE_PATH "${old_CMAKE_MODULE_PATH}") + +# Find Qt tool package. +set(_tool_deps "@main_module_tool_deps@") +foreach(_target_dep ${_tool_deps}) + list(GET _target_dep 0 pkg) + list(GET _target_dep 1 version) + + if (NOT ${pkg}_FOUND) + find_dependency(${pkg} ${version}) + endif() + + if (NOT ${pkg}_FOUND) + set(@INSTALL_CMAKE_NAMESPACE@@target@_FOUND FALSE) + return() + endif() +endforeach() + diff --git a/cmake/QtModuleToolsConfig.cmake.in b/cmake/QtModuleToolsConfig.cmake.in index 4dc658a10b..afc6de5b19 100644 --- a/cmake/QtModuleToolsConfig.cmake.in +++ b/cmake/QtModuleToolsConfig.cmake.in @@ -1,5 +1,12 @@ @PACKAGE_INIT@ +include(CMakeFindDependencyMacro) + +# Find required dependencies, if any. +if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Dependencies.cmake") + include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Dependencies.cmake") +endif() + include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Targets.cmake") @extra_cmake_statements@ diff --git a/cmake/QtModuleToolsDependencies.cmake.in b/cmake/QtModuleToolsDependencies.cmake.in new file mode 100644 index 0000000000..bac8bb0e04 --- /dev/null +++ b/cmake/QtModuleToolsDependencies.cmake.in @@ -0,0 +1,16 @@ +# Find "ModuleTools" dependencies, which are other ModuleTools packages. +set(_tool_deps "@tool_deps@") +foreach(_target_dep ${_tool_deps}) + list(GET _target_dep 0 pkg) + list(GET _target_dep 1 version) + + if (NOT ${pkg}_FOUND) + find_dependency(${pkg} ${version}) + endif() + + if (NOT ${pkg}_FOUND) + set(@INSTALL_CMAKE_NAMESPACE@@target@Tools_FOUND FALSE) + return() + endif() +endforeach() + diff --git a/cmake/QtPostProcess.cmake b/cmake/QtPostProcess.cmake index 10dd5bfbb1..40ac08396d 100644 --- a/cmake/QtPostProcess.cmake +++ b/cmake/QtPostProcess.cmake @@ -20,6 +20,8 @@ function(qt_internal_create_depends_files) set(qtdeps "") set(third_party_deps "") set(third_party_deps_seen "") + set(tool_deps "") + set(tool_deps_seen "") foreach (dep ${depends}) # Normalize module by stripping leading "Qt::" and trailing "Private" if (dep MATCHES "Qt::(.*)") @@ -32,6 +34,14 @@ function(qt_internal_create_depends_files) list(FIND QT_KNOWN_MODULES "${dep}" _pos) if (_pos GREATER -1) list(APPEND qtdeps "${dep}") + + # Make the ModuleTool package depend on dep's ModuleTool package. + list(FIND tool_deps_seen ${dep} dep_seen) + if(dep_seen EQUAL -1 AND ${dep} IN_LIST QT_KNOWN_MODULES_WITH_TOOLS) + list(APPEND tool_deps_seen ${dep}) + list(APPEND tool_deps + "${INSTALL_CMAKE_NAMESPACE}${dep}Tools\;${PROJECT_VERSION}") + endif() endif() endforeach() @@ -66,6 +76,12 @@ function(qt_internal_create_depends_files) endif() endforeach() + # Add dependency to the main ModuleTool package to ModuleDependencies file. + if(${target} IN_LIST QT_KNOWN_MODULES_WITH_TOOLS) + set(main_module_tool_deps + "${INSTALL_CMAKE_NAMESPACE}${target}Tools\;${PROJECT_VERSION}") + endif() + if (DEFINED qtdeps) list(REMOVE_DUPLICATES qtdeps) endif() @@ -75,8 +91,9 @@ function(qt_internal_create_depends_files) qt_internal_write_depends_file("${target}" ${qtdeps}) endif() - if(third_party_deps) - # Configure and install dependencies file. + + if(third_party_deps OR main_module_tool_deps) + # Configure and install ModuleDependencies file. configure_file( "${QT_CMAKE_DIR}/QtModuleDependencies.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Dependencies.cmake" @@ -91,6 +108,23 @@ function(qt_internal_create_depends_files) COMPONENT Devel ) endif() + if(tool_deps) + # Configure and install ModuleToolDependencies file. + configure_file( + "${QT_CMAKE_DIR}/QtModuleToolsDependencies.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ToolsDependencies.cmake" + @ONLY + ) + + set(config_install_dir + "${INSTALL_LIBDIR}/cmake/${INSTALL_CMAKE_NAMESPACE}${target}Tools") + + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ToolsDependencies.cmake" + DESTINATION "${config_install_dir}" + COMPONENT Devel + ) + endif() endforeach() |