summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtBuild.cmake39
-rw-r--r--cmake/QtModuleConfig.cmake.in18
-rw-r--r--cmake/QtModuleDependencies.cmake.in19
-rw-r--r--cmake/QtPostProcess.cmake24
4 files changed, 71 insertions, 29 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index 0ddc4110252..78251c90542 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -422,6 +422,22 @@ function(extend_target target)
endif()
endforeach()
+ # Find dependencies to internal libraries
+ get_target_property(target_deps "${target}" _qt_target_deps)
+ if(NOT target_deps)
+ set(target_deps "")
+ endif()
+
+ foreach(lib ${arg_LIBRARIES})
+ if (TARGET "${lib}")
+ get_target_property(_is_exported "${lib}" INTERFACE_QT_EXPORTED_LIBRARY)
+ if("${_is_exported}")
+ list(APPEND target_deps "${lib}\;${PROJECT_VERSION}")
+ endif()
+ endif()
+ endforeach()
+
+ # Set-up the target
target_sources("${target}" PRIVATE ${arg_SOURCES} ${dbus_sources})
if (arg_COMPILE_FLAGS)
set_source_files_properties(${arg_SOURCES} PROPERTIES COMPILE_FLAGS "${arg_COMPILE_FLAGS}")
@@ -431,7 +447,11 @@ function(extend_target target)
target_link_libraries("${target}" PUBLIC ${arg_PUBLIC_LIBRARIES} PRIVATE ${arg_LIBRARIES})
target_compile_options("${target}" PUBLIC ${arg_PUBLIC_COMPILE_OPTIONS} PRIVATE ${arg_COMPILE_OPTIONS})
target_link_options("${target}" PUBLIC ${arg_PUBLIC_LINK_OPTIONS} PRIVATE ${arg_LINK_OPTIONS})
- set_target_properties("${target}" PROPERTIES AUTOMOC_MOC_OPTIONS "${arg_MOC_OPTIONS}")
+
+ set_target_properties("${target}" PROPERTIES
+ AUTOMOC_MOC_OPTIONS "${arg_MOC_OPTIONS}"
+ _qt_target_deps "${target_deps}"
+ )
else()
if(QT_CMAKE_DEBUG_EXTEND_TARGET)
message("extend_target(${target} CONDITION ${arg_CONDITION} ...): Skipped")
@@ -698,7 +718,13 @@ function(add_qt_module target)
$<INSTALL_INTERFACE:include/${module}/${PROJECT_VERSION}/${module}>
)
- set(target_deps)
+ get_target_property(target_deps "${target}" _qt_target_deps)
+ if(NOT target_deps)
+ set(target_deps "")
+ endif()
+
+ # TODO: should this also be in extend_target ? From the looks of it I would say that
+ # it is not necessary but I'm not sure
foreach(lib IN LISTS arg_PUBLIC_LIBRARIES qt_libs_private)
if ("${lib}" MATCHES "^Qt::(.*)")
set(lib "${CMAKE_MATCH_1}")
@@ -712,14 +738,7 @@ function(add_qt_module target)
endif()
endforeach()
- foreach(lib ${arg_LIBRARIES})
- if (TARGET "${lib}")
- get_target_property(_is_exported "${lib}" INTERFACE_QT_EXPORTED_LIBRARY)
- if("${_is_exported}")
- list(APPEND target_deps "${lib}\;${PROJECT_VERSION}")
- endif()
- endif()
- endforeach()
+ set_target_properties("${target}" PROPERTIES _qt_target_deps "${target_deps}")
configure_package_config_file(
"${QT_CMAKE_DIR}/QtModuleConfig.cmake.in"
diff --git a/cmake/QtModuleConfig.cmake.in b/cmake/QtModuleConfig.cmake.in
index 9a0f0c368c6..9d2135d8426 100644
--- a/cmake/QtModuleConfig.cmake.in
+++ b/cmake/QtModuleConfig.cmake.in
@@ -10,24 +10,6 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Dependenci
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Dependencies.cmake")
endif()
-# note: target_deps example: "Qt5Core\;5.12.0;Qt5Gui\;5.12.0"
-set(_target_deps "@target_deps@")
-foreach(_target_dep ${_target_deps})
- list(GET _target_dep 0 pkg)
- list(GET _target_dep 1 version)
-
- if (NOT ${pkg}_FOUND)
- find_dependency(${pkg} ${version}
- PATHS "${CMAKE_CURRENT_LIST_DIR}/.." NO_DEFAULT_PATH
- )
- endif()
-
- if (NOT ${pkg}_FOUND)
- set(@INSTALL_CMAKE_NAMESPACE@@target@_FOUND FALSE)
- return()
- endif()
-endforeach()
-
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@@target@Targets.cmake")
foreach(extra_cmake_include @extra_cmake_includes@)
diff --git a/cmake/QtModuleDependencies.cmake.in b/cmake/QtModuleDependencies.cmake.in
index 2190460b71e..714d2b91ec0 100644
--- a/cmake/QtModuleDependencies.cmake.in
+++ b/cmake/QtModuleDependencies.cmake.in
@@ -49,3 +49,22 @@ foreach(_target_dep ${_tool_deps})
endif()
endforeach()
+# note: target_deps example: "Qt5Core\;5.12.0;Qt5Gui\;5.12.0"
+set(_target_deps "@target_deps@")
+foreach(_target_dep ${_target_deps})
+ list(GET _target_dep 0 pkg)
+ list(GET _target_dep 1 version)
+
+ if (NOT ${pkg}_FOUND)
+ find_dependency(${pkg} ${version}
+ PATHS "${CMAKE_CURRENT_LIST_DIR}/.." NO_DEFAULT_PATH
+ )
+ endif()
+
+ if (NOT ${pkg}_FOUND)
+ set(@INSTALL_CMAKE_NAMESPACE@@target@_FOUND FALSE)
+ return()
+ endif()
+endforeach()
+
+
diff --git a/cmake/QtPostProcess.cmake b/cmake/QtPostProcess.cmake
index 40ac08396d5..57d194c0376 100644
--- a/cmake/QtPostProcess.cmake
+++ b/cmake/QtPostProcess.cmake
@@ -17,11 +17,15 @@ function(qt_internal_create_depends_files)
foreach (target ${QT_KNOWN_MODULES})
get_target_property(depends "${target}" LINK_LIBRARIES)
get_target_property(public_depends "${target}" INTERFACE_LINK_LIBRARIES)
+ get_target_property(target_deps "${target}" _qt_target_deps)
+ set(target_deps_seen "")
+
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::(.*)")
@@ -82,6 +86,24 @@ function(qt_internal_create_depends_files)
"${INSTALL_CMAKE_NAMESPACE}${target}Tools\;${PROJECT_VERSION}")
endif()
+ # Dirty hack because https://gitlab.kitware.com/cmake/cmake/issues/19200
+ foreach(dep ${target_deps})
+ if(dep)
+ list(FIND target_deps_seen "${dep}" dep_seen)
+ if(dep_seen EQUAL -1)
+ list(LENGTH dep len)
+ if(NOT (len EQUAL 2))
+ message(FATAL_ERROR "List '${dep}' should look like QtFoo;version")
+ endif()
+ list(GET dep 0 dep_name)
+ list(GET dep 1 dep_ver)
+
+ list(APPEND target_deps_seen "${dep_name}\;${dep_ver}")
+ endif()
+ endif()
+ endforeach()
+ set(target_deps "${target_deps_seen}")
+
if (DEFINED qtdeps)
list(REMOVE_DUPLICATES qtdeps)
endif()
@@ -92,7 +114,7 @@ function(qt_internal_create_depends_files)
endif()
- if(third_party_deps OR main_module_tool_deps)
+ if(third_party_deps OR main_module_tool_deps OR target_deps)
# Configure and install ModuleDependencies file.
configure_file(
"${QT_CMAKE_DIR}/QtModuleDependencies.cmake.in"