diff options
author | Kevin Funk <kevin.funk@kdab.com> | 2019-02-12 20:17:57 +0100 |
---|---|---|
committer | Kevin Funk <kevin.funk@kdab.com> | 2019-02-14 07:39:21 +0000 |
commit | cf7426e8c9ce81b8bd9bbbbc86f11e4335bf9bd1 (patch) | |
tree | 1f547f85774d9204672b095351086b01a42f8d46 /cmake | |
parent | 0896e203d651af55008aefa6edb7da940c27c02a (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.cmake | 63 |
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() |