6518bcc167
This change introduces new behavior to error out when configuring user projects if the CMake version used is too old for Qt to work with. The main motivator is the requirement of new CMake features to ensure object libraries are placed in the proper place on the link line in static builds. The minimum CMake version is computed based on whether Qt was configured as shared or static libraries. At the moment the required versions for building and using Qt are the same. The minimum versions are defined in qtbase/.cmake.conf in the following variables QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_BUILDING_QT_SHARED QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_BUILDING_QT_STATIC QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_USING_QT_SHARED QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_USING_QT_STATIC Qt Packagers can disable the version check when configuring Qt by setting QT_FORCE_MIN_CMAKE_VERSION_FOR_BUILDING_QT and QT_FORCE_MIN_CMAKE_VERSION_FOR_USING_QT. In this case it is the packagers responsibility to ensure such a Qt works correctly with the specified CMake version. User projects can also set QT_FORCE_MIN_CMAKE_VERSION_FOR_USING_QT to disable the version check. Then it's the project's developer responsibility to ensure such a Qt works correctly. No official support is provided for these cases. Implementation notes. The versions required to build Qt are stored in QtBuildInternalsExtra.cmake whereas the versions required to use Qt are stored in a new QtConfigExtras.cmake. Also the policy range variables stored in QtBuildInternalsExtra.cmake are now regular variables instead of cache variables, to properly allow overrides per-repository. Some renaming of functions and variables was done for a bit more clarity and easier grep-ability. Pick-to: 6.2 Task-number: QTBUG-95018 Change-Id: I4279f2e10b6d3977319237ba21e2f4ed676aa48b Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
89 lines
4.5 KiB
CMake
89 lines
4.5 KiB
CMake
# Propagate common variables via BuildInternals package.
|
|
set(QT_BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@)
|
|
option(BUILD_SHARED_LIBS "Build Qt statically or dynamically" @BUILD_SHARED_LIBS@)
|
|
set(QT_CMAKE_EXPORT_NAMESPACE @QT_CMAKE_EXPORT_NAMESPACE@)
|
|
set(INSTALL_CMAKE_NAMESPACE @INSTALL_CMAKE_NAMESPACE@)
|
|
set(QT_BUILD_INTERNALS_PATH "${CMAKE_CURRENT_LIST_DIR}")
|
|
|
|
# The relocatable install prefix is meant to be used to find things like host binaries (syncqt),
|
|
# when the CMAKE_INSTALL_PREFIX is overridden to point to a different path (like when building a
|
|
# a Qt repo using Conan, which will set a random install prefix instead of installing into the
|
|
# original Qt install prefix).
|
|
get_filename_component(QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX
|
|
${CMAKE_CURRENT_LIST_DIR}/../@qt_path_from_cmake_config_dir_to_prefix@
|
|
ABSOLUTE)
|
|
|
|
# If no explicit CMAKE_INSTALL_PREFIX is provided, force set the original Qt installation prefix,
|
|
# so that further modules / repositories are installed into same original location.
|
|
# This means by default when configuring qtsvg / qtdeclarative, they will be installed the regular
|
|
# Qt installation prefix.
|
|
# If an explicit installation prefix is specified, honor it.
|
|
# This is an attempt to support Conan, aka handle installation of modules into a
|
|
# different installation prefix than the original one. Also allow to opt out via a special variable.
|
|
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND
|
|
NOT QT_BUILD_INTERNALS_NO_FORCE_SET_INSTALL_PREFIX)
|
|
set(qtbi_orig_prefix "@CMAKE_INSTALL_PREFIX@")
|
|
set(qtbi_new_prefix "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}")
|
|
if(CMAKE_HOST_WIN32)
|
|
# Make sure we use exactly the original prefix if it points to the same directory as the new
|
|
# one. This is needed for the case where the original prefix is passed without drive letter
|
|
# to support installing with DESTDIR set.
|
|
get_filename_component(qtbi_real_orig_prefix "${qtbi_orig_prefix}" REALPATH)
|
|
get_filename_component(qtbi_real_new_prefix "${qtbi_new_prefix}" REALPATH)
|
|
if(qtbi_real_orig_prefix STREQUAL qtbi_real_new_prefix)
|
|
set(qtbi_new_prefix "${qtbi_orig_prefix}")
|
|
endif()
|
|
endif()
|
|
set(CMAKE_INSTALL_PREFIX "${qtbi_new_prefix}" CACHE PATH
|
|
"Install path prefix, prepended onto install directories." FORCE)
|
|
unset(qtbi_orig_prefix)
|
|
unset(qtbi_real_orig_prefix)
|
|
unset(qtbi_new_prefix)
|
|
unset(qtbi_real_new_prefix)
|
|
endif()
|
|
|
|
# Propagate developer builds to other modules via BuildInternals package.
|
|
if(@FEATURE_developer_build@)
|
|
set(FEATURE_developer_build ON CACHE BOOL "Developer build." FORCE)
|
|
endif()
|
|
|
|
# Propagate non-prefix builds.
|
|
set(QT_WILL_INSTALL @QT_WILL_INSTALL@ CACHE BOOL
|
|
"Boolean indicating if doing a Qt prefix build (vs non-prefix build)." FORCE)
|
|
|
|
set(QT_SOURCE_TREE "@QT_SOURCE_TREE@" CACHE PATH
|
|
"A path to the source tree of the previously configured QtBase project." FORCE)
|
|
|
|
# Propagate decision of building tests and examples to other repositories.
|
|
set(QT_BUILD_TESTS @QT_BUILD_TESTS@ CACHE BOOL "Build the testing tree.")
|
|
set(QT_BUILD_EXAMPLES @QT_BUILD_EXAMPLES@ CACHE BOOL "Build Qt examples")
|
|
set(QT_BUILD_TESTS_BY_DEFAULT @QT_BUILD_TESTS_BY_DEFAULT@ CACHE BOOL
|
|
"Should tests be built as part of the default 'all' target.")
|
|
set(QT_BUILD_EXAMPLES_BY_DEFAULT @QT_BUILD_EXAMPLES_BY_DEFAULT@ CACHE BOOL
|
|
"Should examples be built as part of the default 'all' target.")
|
|
|
|
# Propagate usage of ccache.
|
|
set(QT_USE_CCACHE @QT_USE_CCACHE@ CACHE BOOL "Enable the use of ccache")
|
|
|
|
# Propagate usage of versioned hard link.
|
|
set(QT_CREATE_VERSIONED_HARD_LINK "@QT_CREATE_VERSIONED_HARD_LINK@" CACHE BOOL
|
|
"Enable the use of versioned hard link")
|
|
|
|
# The minimum version required to build Qt.
|
|
set(QT_SUPPORTED_MIN_CMAKE_VERSION_FOR_BUILDING_QT "@supported_min_version_for_building_qt@")
|
|
set(QT_COMPUTED_MIN_CMAKE_VERSION_FOR_BUILDING_QT "@computed_min_version_for_building_qt@")
|
|
|
|
# The lower and upper CMake version policy range as computed by qtbase.
|
|
# These values are inherited when building other Qt repositories, unless overridden
|
|
# in the respective repository .cmake.conf file.
|
|
# These are not cache variables, so that they can be overridden in each repo directory scope.
|
|
if(NOT DEFINED QT_MIN_NEW_POLICY_CMAKE_VERSION)
|
|
set(QT_MIN_NEW_POLICY_CMAKE_VERSION "@min_new_policy_version@")
|
|
endif()
|
|
if(NOT DEFINED QT_MAX_NEW_POLICY_CMAKE_VERSION)
|
|
set(QT_MAX_NEW_POLICY_CMAKE_VERSION "@max_new_policy_version@")
|
|
endif()
|
|
|
|
# Extra set of exported variables
|
|
@QT_EXTRA_BUILD_INTERNALS_VARS@
|