# 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) # Stores in out_var the new install/staging prefix for this build. # # new_prefix: the new prefix for this repository # orig_prefix: the prefix that was used when qtbase was configured # # On Windows hosts: if the original prefix does not start with a drive letter, this function removes # the drive letter from the new prefix. This is needed for installation with DESTDIR set. function(qt_internal_new_prefix out_var new_prefix orig_prefix) if(CMAKE_HOST_WIN32) set(drive_letter_regexp "^[a-zA-Z]:") if(new_prefix MATCHES "${drive_letter_regexp}" AND NOT orig_prefix MATCHES "${drive_letter_regexp}") string(SUBSTRING "${new_prefix}" 2 -1 new_prefix) endif() endif() set(${out_var} "${new_prefix}" PARENT_SCOPE) endfunction() # 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. # In a top-level build, QtSetup.cmake takes care of setting CMAKE_INSTALL_PREFIX. if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND NOT QT_BUILD_INTERNALS_NO_FORCE_SET_INSTALL_PREFIX AND NOT QT_SUPERBUILD) set(qtbi_orig_prefix "@CMAKE_INSTALL_PREFIX@") set(qtbi_orig_staging_prefix "@CMAKE_STAGING_PREFIX@") qt_internal_new_prefix(qtbi_new_prefix "${QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX}" "${qtbi_orig_prefix}") if(NOT qtbi_orig_staging_prefix STREQUAL "" AND "${CMAKE_STAGING_PREFIX}" STREQUAL "" AND NOT QT_BUILD_INTERNALS_NO_FORCE_SET_STAGING_PREFIX) qt_internal_new_prefix(qtbi_new_staging_prefix "${qtbi_new_prefix}" "${qtbi_orig_staging_prefix}") set(CMAKE_STAGING_PREFIX "${qtbi_new_staging_prefix}" CACHE PATH "Staging path prefix, prepended onto install directories on the host machine." FORCE) set(qtbi_new_prefix "${qtbi_orig_prefix}") endif() set(CMAKE_INSTALL_PREFIX "${qtbi_new_prefix}" CACHE PATH "Install path prefix, prepended onto install directories." FORCE) unset(qtbi_orig_prefix) unset(qtbi_new_prefix) unset(qtbi_orig_staging_prefix) unset(qtbi_new_staging_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_BENCHMARKS @QT_BUILD_BENCHMARKS@ CACHE BOOL "Build Qt Benchmarks") set(QT_BUILD_MANUAL_TESTS @QT_BUILD_MANUAL_TESTS@ CACHE BOOL "Build Qt manual tests") set(QT_BUILD_MINIMAL_STATIC_TESTS @QT_BUILD_MINIMAL_STATIC_TESTS@ CACHE BOOL "Build minimal subset of tests for static Qt builds") set(QT_BUILD_MINIMAL_ANDROID_MULTI_ABI_TESTS @QT_BUILD_MINIMAL_ANDROID_MULTI_ABI_TESTS@ CACHE BOOL "Build minimal subset of tests for Android multi-ABI Qt builds") set(QT_BUILD_TESTS_BATCHED @QT_BUILD_TESTS_BATCHED@ CACHE BOOL "Should all tests be batched into a single binary.") 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.") set(QT_BUILD_TOOLS_BY_DEFAULT @QT_BUILD_TOOLS_BY_DEFAULT@ CACHE BOOL "Should tools be built as part of the default 'all' target.") set(QT_BUILD_EXAMPLES_AS_EXTERNAL "@QT_BUILD_EXAMPLES_AS_EXTERNAL@" CACHE BOOL "Should examples be built as ExternalProjects.") # Propagate usage of ccache. set(QT_USE_CCACHE @QT_USE_CCACHE@ CACHE BOOL "Enable the use of ccache") # Propagate usage of vcpkg, ON by default. set(QT_USE_VCPKG @QT_USE_VCPKG@ CACHE BOOL "Enable the use of vcpkg") # Propagate usage of unity build. set(QT_UNITY_BUILD @QT_UNITY_BUILD@ CACHE BOOL "Enable unity (jumbo) build") set(QT_UNITY_BUILD_BATCH_SIZE "@QT_UNITY_BUILD_BATCH_SIZE@" CACHE STRING "Unity build batch size") # Propragate the value of WARNINGS_ARE_ERRORS. set(WARNINGS_ARE_ERRORS "@WARNINGS_ARE_ERRORS@" CACHE BOOL "Build Qt with warnings as errors") # 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() get_property(__qt_internal_extras_is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) # We want the same build type to be used when configuring all Qt repos or standalone # tests or single tests. # To do that, we need to force-set the CMAKE_BUILD_TYPE cache var because CMake itself # initializes it with the value of CMAKE_BUILD_TYPE_INIT at the start of project # configuration, so we need to override it. # Note the value of CMAKE_BUILD_TYPE_INIT is different based on the platform, most # Linux and macOS platforms will have it empty, but Windows platforms will have a value. # # We can't reliably differentiate between a value set on the command line by the user # and one set by CMake, so we use a few heuristics: # 1) When using a qt.toolchain.cmake file, we rely on the toolchain file to tell us # if a value was set by the user at initial configure time. On a 2nd run there will # always be a value in the cache, but at that point we've already set it to whatever it needs # to be. # 2) If a toolchain file is not used, we rely on the value of the CMake internal # CMAKE_BUILD_TYPE_INIT variable. # This won't work reliably on Windows where CMAKE_BUILD_TYPE_INIT is non-empty. # # Both cases won't handle an empty "" config set by the user, but we claim that's an # unsupported config when building Qt. # # Allow an opt out when QT_NO_FORCE_SET_CMAKE_BUILD_TYPE is set. # Finally, don't set the variable if a multi-config generator is used. This can happen # when qtbase is built with a single config, but a test is built with a multi-config generator. function(qt_internal_force_set_cmake_build_type_conditionally value) # STREQUAL check needs to be expanded variables because an undefined var is not equal to an # empty defined var. if("${CMAKE_BUILD_TYPE}" STREQUAL "${CMAKE_BUILD_TYPE_INIT}" AND NOT __qt_toolchain_cmake_build_type_before_project_call AND NOT QT_NO_FORCE_SET_CMAKE_BUILD_TYPE AND NOT __qt_internal_extras_is_multi_config) set(CMAKE_BUILD_TYPE "${value}" CACHE STRING "Choose the type of build." FORCE) set(__qt_build_internals_cmake_build_type "${value}" PARENT_SCOPE) endif() endfunction() # Extra set of exported variables @QT_EXTRA_BUILD_INTERNALS_VARS@