summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorKevin Funk <kevin.funk@kdab.com>2019-02-12 20:17:57 +0100
committerKevin Funk <kevin.funk@kdab.com>2019-02-14 07:39:21 +0000
commitcf7426e8c9ce81b8bd9bbbbc86f11e4335bf9bd1 (patch)
tree1f547f85774d9204672b095351086b01a42f8d46 /cmake
parent0896e203d651af55008aefa6edb7da940c27c02a (diff)
cmake: Make sure to finddeps of private target
Public interface libraries of the private target need to be first looked up via `find_dependency(...)` in the CMake config files as well. This patch is just changing the foreach() loop and defer the package config file generation. Change-Id: Iecaf7f778379b526f12ac6a42e76d714d9349b2c Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtBuild.cmake63
1 files changed, 33 insertions, 30 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index c63081d8c0..0179086a38 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -546,16 +546,6 @@ function(add_qt_module target)
set(config_install_dir "${INSTALL_LIBDIR}/cmake/${INSTALL_CMAKE_NAMESPACE}${target}")
install(EXPORT "${INSTALL_CMAKE_NAMESPACE}${target}Targets" NAMESPACE ${QT_CMAKE_EXPORT_NAMESPACE}:: DESTINATION ${config_install_dir})
- set(target_deps)
- foreach(lib ${arg_PUBLIC_LIBRARIES})
- if ("${lib}" MATCHES "^Qt::(Platform|GlobalConfig)")
- list(APPEND target_deps "Qt5\;${PROJECT_VERSION}")
- elseif ("${lib}" MATCHES "^Qt::")
- string(REGEX REPLACE "^Qt::" "${INSTALL_CMAKE_NAMESPACE}" dep "${lib}")
- list(APPEND target_deps "${dep}\;${PROJECT_VERSION}")
- endif()
- endforeach()
-
set(extra_cmake_files)
set(extra_cmake_includes)
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Macros.cmake")
@@ -570,25 +560,6 @@ function(add_qt_module target)
list(APPEND extra_cmake_includes "${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake")
endif()
- configure_package_config_file(
- "${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
- INSTALL_DESTINATION "${config_install_dir}"
- )
- write_basic_package_version_file(
- ${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake
- VERSION ${PROJECT_VERSION}
- COMPATIBILITY AnyNewerVersion
- )
-
- install(FILES
- "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
- "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake"
- ${extra_cmake_files}
- DESTINATION "${config_install_dir}"
- COMPONENT Devel
- )
-
### fixme: cmake is missing a built-in variable for this. We want to apply it only to modules and plugins
# that belong to Qt.
if (GCC OR CLANG)
@@ -605,7 +576,6 @@ function(add_qt_module target)
endforeach()
target_link_libraries("${target_private}" INTERFACE "${target}" "${qt_libs_private}")
-
target_include_directories("${target_private}" INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${module_include_dir}/${PROJECT_VERSION}>
@@ -613,6 +583,39 @@ function(add_qt_module target)
$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}>
$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}/${module}>
)
+
+ set(target_deps)
+ foreach(lib IN LISTS arg_PUBLIC_LIBRARIES qt_libs_private)
+ if ("${lib}" MATCHES "^Qt::(.*)")
+ set(lib "${CMAKE_MATCH_1}")
+ if (lib STREQUAL Platform OR lib STREQUAL GlobalConfig)
+ list(APPEND target_deps "Qt5\;${PROJECT_VERSION}")
+ elseif ("${lib}" MATCHES "(.*)Private")
+ list(APPEND target_deps "${INSTALL_CMAKE_NAMESPACE}${CMAKE_MATCH_1}\;${PROJECT_VERSION}")
+ else()
+ list(APPEND target_deps "${INSTALL_CMAKE_NAMESPACE}${lib}\;${PROJECT_VERSION}")
+ endif()
+ endif()
+ endforeach()
+
+ configure_package_config_file(
+ "${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
+ INSTALL_DESTINATION "${config_install_dir}"
+ )
+ write_basic_package_version_file(
+ ${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY AnyNewerVersion
+ )
+
+ install(FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}ConfigVersion.cmake"
+ ${extra_cmake_files}
+ DESTINATION "${config_install_dir}"
+ COMPONENT Devel
+ )
endfunction()