Revision control
Copy as Markdown
# Copyright (C) 2025 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
# If we want the override the version (note ALLOW_OVERRIDE_FILE only applies
# currently for QtBaseGlobalTargets) we need to write PACKAGE_VERSION in that
# case we need to know what is real PACKAGE_VERSION before override, therefore
# load package version file and parse it, note we do not want to include it
# here.
get_directory_property(
__qt_version_base_impl_package_version
__qt_version_@QT_PACKAGE_NAME@_base_impl_package_version_cached)
if(NOT __qt_version_base_impl_package_version)
file(STRINGS "${__qt_version_base_impl_file}" QT_BASE_PACKAGE_VERSION)
while(QT_BASE_PACKAGE_VERSION)
list(POP_FRONT QT_BASE_PACKAGE_VERSION __qt_version_line)
if(__qt_version_line MATCHES
"set\\(PACKAGE_VERSION \"([0-9]+\\.[0-9]+\\.[0-9]+)\"\\)")
set(__qt_version_base_impl_package_version "${CMAKE_MATCH_1}")
break()
endif()
endwhile()
set_property(
DIRECTORY
PROPERTY __qt_version_@QT_PACKAGE_NAME@_base_impl_package_version_cached
"${__qt_version_base_impl_package_version}")
endif()
# as small optimization run override only if requested version is greater the qt
# global config version
if(NOT QT_NO_CONFIG_VERSION_OVERRIDE_FILES
AND NOT "${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION}" STREQUAL ""
AND "${${CMAKE_FIND_PACKAGE_NAME}_FIND_VERSION}" VERSION_GREATER
"${__qt_version_base_impl_package_version}")
# This runs a loop for each component in find_package(Qt6 <version>
# <components>) so version of each component has to be overriden with same
# version to make sense
foreach(__qt_version_override_for_component
${${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS})
set(__qt_version_overrides_found FALSE)
set(__qt_version_override_directory
"${CMAKE_CURRENT_LIST_DIR}/ConfigVersionOverrides/${__qt_version_override_for_component}"
)
if(EXISTS "${__qt_version_override_directory}")
# Cache list of version override files.
get_directory_property(
__qt_version_override_file_list_globbed
__qt_version_@QT_PACKAGE_NAME@${__qt_version_override_for_component}_override_file_list_globbed
)
if(NOT __qt_version_override_file_list_globbed)
# Enforce override file names to contain digits and an
# identifying name, to allow sorting the priority of how they
# are included. Naming scheme should be
# Override_[0-9][0-9][0-9][0-9]_<override_identifier>.cmake
set(__qt_version_override_glob_expression
"Override_[0-9][0-9][0-9][0-9]_*.cmake")
file(
GLOB
__qt_version_override_file_list
"${__qt_version_override_directory}/${__qt_version_override_glob_expression}"
)
list(SORT __qt_version_override_file_list)
set_property(
DIRECTORY
PROPERTY
__qt_version_@QT_PACKAGE_NAME@${__qt_version_override_for_component}_override_file_list
"${__qt_version_override_file_list}")
set_property(
DIRECTORY
PROPERTY
__qt_version_@QT_PACKAGE_NAME@${__qt_version_override_for_component}_override_file_list_globbed
TRUE)
else()
get_directory_property(
__qt_version_override_file_list
__qt_version_@QT_PACKAGE_NAME@${__qt_version_override_for_component}_override_file_list
)
endif()
if(NOT __qt_version_override_file_list)
message(
FATAL_ERROR
"Override files for ${__qt_version_override_for_component} are missing in '${__qt_version_override_directory}'"
)
endif()
foreach(__qt_version_override_file IN
LISTS __qt_version_override_file_list)
set(__qt_version_before "${PACKAGE_VERSION}")
include("${__qt_version_override_file}" OPTIONAL
RESULT_VARIABLE __qt_version_override_file_included)
if(__qt_version_override_file_included)
set(__qt_version_overrides_found TRUE)
endif()
# the returned versions has to match, if not return base qt
# config version
if(__qt_version_before AND NOT "${__qt_version_before}"
STREQUAL "${PACKAGE_VERSION}")
message(
WARNING
"The find_package call includes ${__qt_version_override_file} file which tries to override ${PACKAGE_FIND_NAME} with version ${PACKAGE_VERSION} for component ${__qt_version_override_for_component}, however version was set to ${__qt_version_before}. Please split the find_package call to find components separately."
)
set(__qt_version_overrides_found FALSE)
break()
endif()
# Allow breaking early, which can be set by the including file.
if(__qt_version_override_break_early)
break()
endif()
endforeach()
unset(__qt_version_override_file)
unset(__qt_version_override_file_list)
unset(__qt_version_override_file_list_globbed)
unset(__qt_version_before)
unset(__qt_version_override_break_early)
unset(__qt_version_override_file_included)
unset(__qt_version_override_glob_expression)
else()
# The version requested is greater that qt version config, therefore
# requested component should provide override file in case this qt
# version is supported, but it doesn't. Therefore, fail the
# find_package call simply by returning qt config version with the
# warning.
set(__qt_version_overrides_found FALSE)
endif()
unset(__qt_version_override_directory)
unset(__qt_version_override_for_component)
if(NOT __qt_version_overrides_found)
# Make sure nothing is set as there can be multiple overload files
# to bail out
unset(PACKAGE_VERSION)
unset(PACKAGE_VERSION_COMPATIBLE)
unset(PACKAGE_VERSION_EXACT)
set(__qt_version_should_include_base_impl_file TRUE)
break()
else()
set(__qt_version_should_include_base_impl_file FALSE)
endif()
endforeach()
unset(__qt_version_overrides_found)
endif()