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>
This commit is contained in:
parent
0896e203d6
commit
cf7426e8c9
@ -546,16 +546,6 @@ function(add_qt_module target)
|
|||||||
set(config_install_dir "${INSTALL_LIBDIR}/cmake/${INSTALL_CMAKE_NAMESPACE}${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})
|
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_files)
|
||||||
set(extra_cmake_includes)
|
set(extra_cmake_includes)
|
||||||
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Macros.cmake")
|
if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Macros.cmake")
|
||||||
@ -570,6 +560,44 @@ function(add_qt_module target)
|
|||||||
list(APPEND extra_cmake_includes "${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake")
|
list(APPEND extra_cmake_includes "${INSTALL_CMAKE_NAMESPACE}${target}ConfigExtras.cmake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
qt_internal_add_link_flags("${target}" "-Wl,--no-undefined")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# When a public module depends on private, also make its private depend on the other's private
|
||||||
|
set(qt_libs_private "")
|
||||||
|
foreach(it ${KNOWN_QT_MODULES})
|
||||||
|
list(FIND arg_LIBRARIES "Qt::${it}Private" pos)
|
||||||
|
if(pos GREATER -1)
|
||||||
|
list(APPEND qt_libs_private "Qt::${it}Private")
|
||||||
|
endif()
|
||||||
|
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}>
|
||||||
|
$<BUILD_INTERFACE:${module_include_dir}/${PROJECT_VERSION}/${module}>
|
||||||
|
$<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(
|
configure_package_config_file(
|
||||||
"${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
|
"${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
|
"${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Config.cmake"
|
||||||
@ -588,31 +616,6 @@ function(add_qt_module target)
|
|||||||
DESTINATION "${config_install_dir}"
|
DESTINATION "${config_install_dir}"
|
||||||
COMPONENT Devel
|
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)
|
|
||||||
qt_internal_add_link_flags("${target}" "-Wl,--no-undefined")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# When a public module depends on private, also make its private depend on the other's private
|
|
||||||
set(qt_libs_private "")
|
|
||||||
foreach(it ${KNOWN_QT_MODULES})
|
|
||||||
list(FIND arg_LIBRARIES "Qt::${it}Private" pos)
|
|
||||||
if(pos GREATER -1)
|
|
||||||
list(APPEND qt_libs_private "Qt::${it}Private")
|
|
||||||
endif()
|
|
||||||
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}>
|
|
||||||
$<BUILD_INTERFACE:${module_include_dir}/${PROJECT_VERSION}/${module}>
|
|
||||||
$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}>
|
|
||||||
$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}/${module}>
|
|
||||||
)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user