bcfc3dca5d
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>
134 lines
5.2 KiB
CMake
134 lines
5.2 KiB
CMake
function(qt_internal_write_depends_file target)
|
|
set(module Qt${target})
|
|
set(outfile "${PROJECT_BINARY_DIR}/include/${module}/${module}Depends")
|
|
message("Generate ${outfile}...")
|
|
set(contents "/* This file was generated by cmake with the info from ${module} target. */\n")
|
|
string(APPEND contents "#ifdef __cplusplus /* create empty PCH in C mode */\n")
|
|
foreach (m ${ARGN})
|
|
string(APPEND contents "# include <Qt${m}/Qt${m}>\n")
|
|
endforeach()
|
|
string(APPEND contents "#endif\n")
|
|
|
|
file(GENERATE OUTPUT "${outfile}" CONTENT "${contents}")
|
|
endfunction()
|
|
|
|
function(qt_internal_create_depends_files)
|
|
message("Generating depends files for ${QT_KNOWN_MODULES}...")
|
|
foreach (target ${QT_KNOWN_MODULES})
|
|
get_target_property(depends "${target}" LINK_LIBRARIES)
|
|
get_target_property(public_depends "${target}" INTERFACE_LINK_LIBRARIES)
|
|
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::(.*)")
|
|
set(dep "${CMAKE_MATCH_1}")
|
|
endif()
|
|
if (dep MATCHES "(.*)Private")
|
|
set(dep "${CMAKE_MATCH_1}")
|
|
endif()
|
|
|
|
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()
|
|
|
|
# If we are doing a non-static Qt build, we only want to propagate public dependencies.
|
|
# If we are doing a static Qt build, we need to propagate all dependencies.
|
|
set(depends_var "public_depends")
|
|
if(NOT QT_BUILD_SHARED_LIBS)
|
|
set(depends_var "depends")
|
|
endif()
|
|
|
|
foreach(dep ${${depends_var}})
|
|
# Gather third party packages that should be found when using the Qt module.
|
|
if(TARGET ${dep})
|
|
list(FIND third_party_deps_seen ${dep} dep_seen)
|
|
|
|
get_target_property(package_name ${dep} INTERFACE_QT_PACKAGE_NAME)
|
|
if(dep_seen EQUAL -1 AND package_name)
|
|
list(APPEND third_party_deps_seen ${dep})
|
|
get_target_property(package_version ${dep} INTERFACE_QT_PACKAGE_VERSION)
|
|
if(NOT package_version)
|
|
set(package_version "")
|
|
endif()
|
|
|
|
get_target_property(package_components ${dep} INTERFACE_QT_PACKAGE_COMPONENTS)
|
|
if(NOT package_components)
|
|
set(package_components "")
|
|
endif()
|
|
|
|
list(APPEND third_party_deps
|
|
"${package_name}\;${package_version}\;${package_components}")
|
|
endif()
|
|
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()
|
|
|
|
get_target_property(hasModuleHeaders "${target}" MODULE_HAS_HEADERS)
|
|
if (${hasModuleHeaders})
|
|
qt_internal_write_depends_file("${target}" ${qtdeps})
|
|
endif()
|
|
|
|
|
|
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"
|
|
@ONLY
|
|
)
|
|
|
|
set(config_install_dir "${INSTALL_LIBDIR}/cmake/${INSTALL_CMAKE_NAMESPACE}${target}")
|
|
|
|
install(FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${INSTALL_CMAKE_NAMESPACE}${target}Dependencies.cmake"
|
|
DESTINATION "${config_install_dir}"
|
|
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()
|
|
|
|
|
|
endfunction()
|
|
|
|
qt_internal_create_depends_files()
|