summaryrefslogtreecommitdiffstats
path: root/cmake/QtConfig.cmake.in
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/QtConfig.cmake.in')
-rw-r--r--cmake/QtConfig.cmake.in211
1 files changed, 171 insertions, 40 deletions
diff --git a/cmake/QtConfig.cmake.in b/cmake/QtConfig.cmake.in
index 57c252091d..c2a5d381d9 100644
--- a/cmake/QtConfig.cmake.in
+++ b/cmake/QtConfig.cmake.in
@@ -1,14 +1,28 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
@PACKAGE_INIT@
cmake_minimum_required(VERSION @min_new_policy_version@...@max_new_policy_version@)
+include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@ConfigExtras.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/QtPublicCMakeVersionHelpers.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/QtPublicCMakeHelpers.cmake")
+include("${CMAKE_CURRENT_LIST_DIR}/QtInstallPaths.cmake")
+
+__qt_internal_require_suitable_cmake_version_for_using_qt()
+
get_filename_component(_qt_cmake_dir "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
set(_qt_@PROJECT_VERSION_MAJOR@_config_cmake_dir "${CMAKE_CURRENT_LIST_DIR}")
if (NOT QT_NO_CREATE_TARGETS)
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@Targets.cmake")
if(NOT QT_NO_CREATE_VERSIONLESS_TARGETS)
- include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@VersionlessTargets.cmake")
+ if(CMAKE_VERSION VERSION_LESS 3.18 OR QT_USE_OLD_VERSION_LESS_TARGETS)
+ include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@VersionlessTargets.cmake")
+ else()
+ include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@VersionlessAliasTargets.cmake")
+ endif()
endif()
else()
# For examples using `find_package(...)` inside their CMakeLists.txt files:
@@ -19,73 +33,190 @@ else()
QT_VERSION_PATCH @PROJECT_VERSION_PATCH@)
endif()
-if(NOT "${QT_HOST_PATH}" STREQUAL "")
- find_package(Qt@PROJECT_VERSION_MAJOR@HostInfo
- CONFIG
- REQUIRED
- PATHS "${QT_HOST_PATH}"
- "${QT_HOST_PATH_CMAKE_DIR}"
- NO_CMAKE_FIND_ROOT_PATH
- NO_DEFAULT_PATH)
-endif()
-
-# if (NOT @INSTALL_CMAKE_NAMESPACE@_FIND_COMPONENTS)
-# set(@INSTALL_CMAKE_NAMESPACE@_NOT_FOUND_MESSAGE "The Qt package requires at least one component")
-# set(@INSTALL_CMAKE_NAMESPACE@_FOUND False)
-# return()
-# endif()
-
get_filename_component(_qt_import_prefix "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_qt_import_prefix "${_qt_import_prefix}" REALPATH)
list(APPEND CMAKE_MODULE_PATH "${_qt_import_prefix}")
list(APPEND CMAKE_MODULE_PATH "${_qt_import_prefix}/3rdparty/extra-cmake-modules/find-modules")
list(APPEND CMAKE_MODULE_PATH "${_qt_import_prefix}/3rdparty/kwin")
-if(APPLE AND (NOT CMAKE_SYSTEM_NAME OR CMAKE_SYSTEM_NAME STREQUAL "Darwin"))
- # Add module directory to pick up custom Info.plist template for macOS
- list(APPEND CMAKE_MODULE_PATH "${_qt_import_prefix}/macos")
+if(APPLE)
+ if(NOT CMAKE_SYSTEM_NAME OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(__qt_internal_cmake_apple_support_files_path "${_qt_import_prefix}/macos")
+ elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ set(__qt_internal_cmake_apple_support_files_path "${_qt_import_prefix}/ios")
+ endif()
+endif()
+
+# Public helpers available to all Qt packages.
+set(__qt_public_files_to_include
+ @QT_PUBLIC_FILES_TO_INCLUDE@
+)
+foreach(__qt_public_file_to_include IN LISTS __qt_public_files_to_include)
+ include("${__qt_public_file_to_include}")
+endforeach()
+
+if(NOT DEFINED QT_CMAKE_EXPORT_NAMESPACE)
+ set(QT_CMAKE_EXPORT_NAMESPACE @QT_CMAKE_EXPORT_NAMESPACE@)
+endif()
+
+set(QT_ADDITIONAL_PACKAGES_PREFIX_PATH "" CACHE STRING
+ "Additional directories where find(Qt6 ...) components are searched")
+set(QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH "" CACHE STRING
+ "Additional directories where find(Qt6 ...) host Qt components are searched")
+
+__qt_internal_collect_additional_prefix_paths(_qt_additional_packages_prefix_paths
+ QT_ADDITIONAL_PACKAGES_PREFIX_PATH)
+__qt_internal_collect_additional_prefix_paths(_qt_additional_host_packages_prefix_paths
+ QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH)
+
+__qt_internal_prefix_paths_to_roots(_qt_additional_host_packages_root_paths
+ "${_qt_additional_host_packages_prefix_paths}")
+
+__qt_internal_collect_additional_module_paths()
+
+# Propagate sanitizer flags to both internal Qt builds and user projects.
+# Allow opt-out in case if downstream projects handle it in a different way.
+set(QT_CONFIGURED_SANITIZER_OPTIONS "@ECM_ENABLE_SANITIZERS@")
+
+if(QT_CONFIGURED_SANITIZER_OPTIONS
+ AND NOT __qt_sanitizer_options_set
+ AND NOT QT_NO_ADD_SANITIZER_OPTIONS)
+ set(ECM_ENABLE_SANITIZERS "${QT_CONFIGURED_SANITIZER_OPTIONS}")
+ include(
+ "${CMAKE_CURRENT_LIST_DIR}/3rdparty/extra-cmake-modules/modules/ECMEnableSanitizers.cmake")
endif()
+# Mark that the current directory scope has its sanitizer flags set.
+set(__qt_sanitizer_options_set TRUE)
# Find required dependencies, if any.
include(CMakeFindDependencyMacro)
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@Dependencies.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/@INSTALL_CMAKE_NAMESPACE@Dependencies.cmake")
- if(NOT @INSTALL_CMAKE_NAMESPACE@_DEPENDENCIES_FOUND)
- set(@INSTALL_CMAKE_NAMESPACE@_FOUND FALSE)
- message(FATAL_ERROR "Failed to find Qt Platform dependency: "
- "${@INSTALL_CMAKE_NAMESPACE@_DEPENDENCY_NOT_FOUND_MESSAGE}")
+
+ _qt_internal_suggest_dependency_debugging(@INSTALL_CMAKE_NAMESPACE@
+ __qt_@INSTALL_CMAKE_NAMESPACE@_pkg ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE)
+
+ if(NOT @INSTALL_CMAKE_NAMESPACE@_FOUND)
+ # Clear the components, no need to look for them if dependencies were not found, otherwise
+ # you get a wall of recursive error messages.
+ set(@INSTALL_CMAKE_NAMESPACE@_FIND_COMPONENTS "")
endif()
endif()
+set(_@INSTALL_CMAKE_NAMESPACE@_FIND_PARTS_QUIET)
+if(@INSTALL_CMAKE_NAMESPACE@_FIND_QUIETLY)
+ set(_@INSTALL_CMAKE_NAMESPACE@_FIND_PARTS_QUIET QUIET)
+endif()
+
set(__qt_use_no_default_path_for_qt_packages "NO_DEFAULT_PATH")
if(QT_DISABLE_NO_DEFAULT_PATH_IN_QT_PACKAGES)
set(__qt_use_no_default_path_for_qt_packages "")
endif()
foreach(module ${@INSTALL_CMAKE_NAMESPACE@_FIND_COMPONENTS})
- find_package(@INSTALL_CMAKE_NAMESPACE@${module}
- ${_@INSTALL_CMAKE_NAMESPACE@_FIND_PARTS_QUIET}
- ${_@INSTALL_CMAKE_NAMESPACE@_FIND_PARTS_REQUIRED}
- PATHS
- ${_qt_cmake_dir}
- ${QT_ADDITIONAL_PACKAGES_PREFIX_PATH}
- ${QT_EXAMPLES_CMAKE_PREFIX_PATH}
- ${__qt_use_no_default_path_for_qt_packages}
- )
+ if(NOT "${QT_HOST_PATH}" STREQUAL ""
+ AND "${module}" MATCHES "Tools$"
+ AND NOT "${module}" MATCHES "UiTools$"
+ AND NOT "${module}" MATCHES "ShaderTools$"
+ AND NOT "${module}" MATCHES "^Tools$"
+ AND NOT QT_NO_FIND_HOST_TOOLS_PATH_MANIPULATION)
+ # Make sure that a Qt*Tools package is also looked up in QT_HOST_PATH.
+ # But don't match QtShaderTools and QtTools which are cross-compiled target package names.
+ # Allow opt out just in case.
+ get_filename_component(__qt_find_package_host_qt_path
+ "${Qt@PROJECT_VERSION_MAJOR@HostInfo_DIR}/.." ABSOLUTE)
+ set(__qt_backup_cmake_prefix_path "${CMAKE_PREFIX_PATH}")
+ set(__qt_backup_cmake_find_root_path "${CMAKE_FIND_ROOT_PATH}")
+ list(PREPEND CMAKE_PREFIX_PATH "${__qt_find_package_host_qt_path}"
+ ${_qt_additional_host_packages_prefix_paths})
+ list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_HOST_PATH}"
+ ${_qt_additional_host_packages_root_paths})
+ endif()
+
+ _qt_internal_save_find_package_context_for_debugging(@INSTALL_CMAKE_NAMESPACE@${module})
+
+ if(NOT @INSTALL_CMAKE_NAMESPACE@${module}_FOUND)
+ find_package(@INSTALL_CMAKE_NAMESPACE@${module}
+ ${@INSTALL_CMAKE_NAMESPACE@_FIND_VERSION}
+ ${_@INSTALL_CMAKE_NAMESPACE@_FIND_PARTS_QUIET}
+ PATHS
+ ${QT_BUILD_CMAKE_PREFIX_PATH}
+ ${_qt_cmake_dir}
+ ${_qt_additional_packages_prefix_paths}
+ ${__qt_find_package_host_qt_path}
+ ${_qt_additional_host_packages_prefix_paths}
+ ${__qt_use_no_default_path_for_qt_packages}
+ )
+ endif()
+
+ if(NOT "${__qt_find_package_host_qt_path}" STREQUAL "")
+ set(CMAKE_PREFIX_PATH "${__qt_backup_cmake_prefix_path}")
+ set(CMAKE_FIND_ROOT_PATH "${__qt_backup_cmake_find_root_path}")
+ unset(__qt_backup_cmake_prefix_path)
+ unset(__qt_backup_cmake_find_root_path)
+ unset(__qt_find_package_host_qt_path)
+ endif()
+
if (NOT @INSTALL_CMAKE_NAMESPACE@${module}_FOUND)
- string(CONFIGURE ${_qt5_module_location_template} _expected_module_location @ONLY)
+ set(_qt_expected_component_config_path
+ "${_qt_cmake_dir}/@INSTALL_CMAKE_NAMESPACE@${module}/@INSTALL_CMAKE_NAMESPACE@${module}Config.cmake")
+ get_filename_component(
+ _qt_expected_component_dir_path "${_qt_expected_component_config_path}" DIRECTORY)
- if (@INSTALL_CMAKE_NAMESPACE@_FIND_REQUIRED_${module})
- set(_Qt_NOTFOUND_MESSAGE "${_Qt_NOTFOUND_MESSAGE}Failed to find Qt component \"${module}\" config file at \"${_expected_module_location}\"\n")
+ set(_qt_component_not_found_msg
+ "\nExpected Config file at \"${_qt_expected_component_config_path}\"")
+
+ if(EXISTS "${_qt_expected_component_config_path}")
+ string(APPEND _qt_component_not_found_msg " exists \n")
+ else()
+ string(APPEND _qt_component_not_found_msg " does NOT exist\n")
+ endif()
+
+ set(_qt_candidate_component_dir_path "${@INSTALL_CMAKE_NAMESPACE@${module}_DIR}")
+
+ if(_qt_candidate_component_dir_path AND
+ NOT _qt_expected_component_dir_path STREQUAL _qt_candidate_component_dir_path)
+ string(APPEND _qt_component_not_found_msg
+ "\n@INSTALL_CMAKE_NAMESPACE@${module}_DIR was computed by CMake or specified on the "
+ "command line by the user: \"${_qt_candidate_component_dir_path}\" "
+ "\nThe expected and computed paths are different, which might be the reason for "
+ "the package not to be found.")
+ endif()
+
+ if(@INSTALL_CMAKE_NAMESPACE@_FIND_REQUIRED_${module})
+ set(@INSTALL_CMAKE_NAMESPACE@_FOUND False)
+ set(_Qt_NOTFOUND_MESSAGE
+ "${_Qt_NOTFOUND_MESSAGE}Failed to find required Qt component \"${module}\". ${_qt_component_not_found_msg}")
+ set(_qt_full_component_name "@INSTALL_CMAKE_NAMESPACE@${module}")
+ _qt_internal_suggest_dependency_debugging(${_qt_full_component_name}
+ _qt_full_component_name _Qt_NOTFOUND_MESSAGE)
+ unset(_qt_full_component_name)
+ break()
elseif(NOT @INSTALL_CMAKE_NAMESPACE@_FIND_QUIETLY)
- message(WARNING "Failed to find Qt component \"${module}\" config file at \"${_expected_module_location}\"")
+ message(WARNING
+ "Failed to find optional Qt component \"${module}\". ${_qt_component_not_found_msg}")
endif()
- unset(_expected_module_location)
+ unset(_qt_expected_component_config_path)
+ unset(_qt_expected_component_dir_path)
+ unset(_qt_candidate_component_dir_path)
+ unset(_qt_component_not_found_msg)
endif()
endforeach()
-if (_Qt_NOTFOUND_MESSAGE)
+if(@INSTALL_CMAKE_NAMESPACE@_FIND_COMPONENTS AND _Qt_NOTFOUND_MESSAGE)
set(@INSTALL_CMAKE_NAMESPACE@_NOT_FOUND_MESSAGE "${_Qt_NOTFOUND_MESSAGE}")
- set(@INSTALL_CMAKE_NAMESPACE@_FOUND False)
+ unset(_Qt_NOTFOUND_MESSAGE)
+endif()
+
+if(@INSTALL_CMAKE_NAMESPACE@_FOUND
+ AND COMMAND _qt_internal_override_example_install_dir_to_dot
+ AND NOT _qt_internal_example_dir_set_to_dot)
+ _qt_internal_override_example_install_dir_to_dot()
+endif()
+
+__qt_internal_defer_promote_targets_in_dir_scope_to_global()
+if(CMAKE_VERSION VERSION_LESS 3.21)
+ __qt_internal_check_link_order_matters()
+ __qt_internal_check_cmp0099_available()
endif()