Files
qt5/CMakeLists.txt
Alexandru Croitor abed2215b2 CMake: Remove CMake minimum version check in top-level project
The check is done in qtbase instead.

Trying to do it in the top-level project is cumbersome due to needing
to know whether it will be a static or shared Qt build.

It's also cumbersome because the top-level build used to use qtbase's
minimum cmake version values and that can get awkward to handle with
submodule dependency updates.

Replace the check with a regular minimum required call.
The minimum version is 3.16 and the upper range value for NEW policy
assignments is 3.20, while 3.21.0 is still kind of fresh and has some
AUTOUIC issues.

As a drive-by, add a clarifying comment about QtAutoDetect.cmake.

Task-number: QTBUG-95018
Change-Id: Ifb4ec0b4ed7f56ab0179feb79072c93d1d66ce63
Reviewed-by: Craig Scott <craig.scott@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
(cherry picked from commit 4180e9c511)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2021-07-27 09:31:19 +00:00

112 lines
4.0 KiB
CMake

# The real minimum version will be checked by the qtbase project.
# 3.16 is the absolute minimum though.
cmake_minimum_required(VERSION 3.16...3.20)
# Include qtbase's .cmake.conf for access to QT_REPO_MODULE_VERSION
set(__qt6_qtbase_src_path "${CMAKE_CURRENT_SOURCE_DIR}/qtbase")
include("${__qt6_qtbase_src_path}/.cmake.conf")
# Run platform auto-detection /before/ the first project() call and thus
# before the toolchain file is loaded.
include("${__qt6_qtbase_src_path}/cmake/QtAutoDetect.cmake")
project(Qt
VERSION "${QT_REPO_MODULE_VERSION}"
DESCRIPTION "Qt Libraries"
HOMEPAGE_URL "https://qt.io/"
LANGUAGES CXX C ASM
)
# Required so we can call ctest from the root build directory
enable_testing()
set(qt_module_prop_prefix "__qt_prop_")
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
if (NOT QT_BUILD_STANDALONE_TESTS)
list(APPEND CMAKE_MODULE_PATH "${__qt6_qtbase_src_path}/cmake")
list(APPEND CMAKE_MODULE_PATH
"${__qt6_qtbase_src_path}/cmake/3rdparty/extra-cmake-modules/find-modules")
list(APPEND CMAKE_MODULE_PATH "${__qt6_qtbase_src_path}/cmake/3rdparty/kwin")
endif()
include("QtTopLevelHelpers")
include(ECMOptionalAddSubdirectory)
# Also make sure the CMake config files do not recreate the already-existing targets
if (NOT QT_BUILD_STANDALONE_TESTS)
set(QT_NO_CREATE_TARGETS TRUE)
endif()
set(QT_SUPERBUILD TRUE)
# Get submodule list if not already defined
if(NOT QT_BUILD_SUBMODULES)
if(DEFINED ENV{QT_BUILD_SUBMODULES})
set(QT_BUILD_SUBMODULES "$ENV{QT_BUILD_SUBMODULES}")
else()
qt_internal_find_modules(QT_BUILD_SUBMODULES)
endif()
endif()
set(QT_BUILD_SUBMODULES "${QT_BUILD_SUBMODULES}" CACHE STRING "Submodules to build")
set(qt_module_dependency_map_prefix "__qt_module_dependencies_")
qt_internal_sort_module_dependencies("${QT_BUILD_SUBMODULES}" QT_BUILD_SUBMODULES
"${qt_module_dependency_map_prefix}")
foreach(module IN LISTS QT_BUILD_SUBMODULES)
# Check for unmet dependencies
if(NOT DEFINED BUILD_${module} OR BUILD_${module})
message(NOTICE "Checking dependencies of '${module}'")
get_property(required_deps GLOBAL PROPERTY QT_REQUIRED_DEPS_FOR_${module})
foreach(dep IN LISTS "${qt_module_dependency_map_prefix}${module}")
if (dep STREQUAL "qtbase")
# Always available skip
continue()
endif()
set(required FALSE)
if(dep IN_LIST required_deps)
set(required TRUE)
endif()
set(error_reason "")
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${dep}/CMakeLists.txt")
set(error_reason "${dep}'s CMakeLists.txt couldn't be found")
elseif(DEFINED BUILD_${dep} AND NOT BUILD_${dep})
set(error_reason "building '${dep}' was explicitly disabled")
endif()
if(NOT error_reason STREQUAL "")
if(required)
message(FATAL_ERROR "Module '${module}' depends on '${dep}', "
"but ${error_reason}.\n"
"Note: Use '-skip ${module}' to exclude it from the build.")
else()
message(NOTICE "Skipping optional dependency '${dep}' of '${module}', "
"because ${error_reason}.")
endif()
endif()
endforeach()
endif()
endforeach()
foreach(module IN LISTS QT_BUILD_SUBMODULES)
message(NOTICE "Configuring '${module}'")
ecm_optional_add_subdirectory("${module}")
if(module STREQUAL "qtbase")
if (NOT QT_BUILD_STANDALONE_TESTS)
list(APPEND CMAKE_PREFIX_PATH "${QtBase_BINARY_DIR}/lib/cmake")
list(APPEND CMAKE_FIND_ROOT_PATH "${QtBase_BINARY_DIR}")
endif()
endif()
endforeach()
if(NOT QT_BUILD_STANDALONE_TESTS)
# Display a summary of everything
include(QtBuildInformation)
include(QtPlatformSupport)
qt_print_feature_summary()
qt_print_build_instructions()
endif()