configure: Make it easier to translate arguments to CMake variables

To add a configure argument that is translated to a CMake variable, one
can now use in qt_cmdline.cmake files:
    qt_commandline_option(foo
        TYPE boolean
        CMAKE_VARIABLE QT_FOO
    )

It's not necessary anymore to add a translate_boolean_input call to
QtProcessConfigureArgs.cmake. This is especially useful if a non-qtbase
module wants to add such configure arguments.

This patch adds the CMAKE_VARIABLE argument for configure options of
TYPE boolean and string. An attempt to use CMAKE_VARIABLE with other
types will result in an error.

Task-number: QTBUG-123064
Change-Id: I4c341e57993b729d08327cea57cf7c8a05c96c0e
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
Joerg Bornemann 2025-02-19 15:31:40 +01:00
parent bc06c7c61a
commit d9e9db65a3
3 changed files with 79 additions and 48 deletions

View File

@ -288,7 +288,7 @@ endmacro()
function(qt_commandline_option name)
set(options CONTROLS_FEATURE)
set(oneValueArgs TYPE NAME VALUE)
set(oneValueArgs TYPE NAME VALUE CMAKE_VARIABLE)
set(multiValueArgs VALUES MAPPING)
cmake_parse_arguments(arg "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
@ -299,6 +299,9 @@ function(qt_commandline_option name)
set(input_name ${arg_NAME})
set(commandline_option_${name}_variable "${arg_NAME}" PARENT_SCOPE)
endif()
if(DEFINED arg_CMAKE_VARIABLE)
set_property(GLOBAL PROPERTY INPUTCMAKEVAR_${input_name} "${arg_CMAKE_VARIABLE}")
endif()
set(mapping_type "${arg_TYPE}")
if(arg_CONTROLS_FEATURE)
set(mapping_type "boolean")
@ -317,11 +320,13 @@ endfunction()
# Add the common command line options for every qt repo.
macro(qt_add_common_commandline_options)
qt_commandline_option(headersclean TYPE boolean)
qt_commandline_option(sbom TYPE boolean)
qt_commandline_option(sbom-json TYPE boolean)
qt_commandline_option(sbom-json-required TYPE boolean)
qt_commandline_option(sbom-verify TYPE boolean)
qt_commandline_option(sbom-verify-required TYPE boolean)
qt_commandline_option(sbom TYPE boolean CMAKE_VARIABLE QT_GENERATE_SBOM)
qt_commandline_option(sbom-json TYPE boolean CMAKE_VARIABLE QT_SBOM_GENERATE_JSON)
qt_commandline_option(sbom-json-required TYPE boolean
CMAKE_VARIABLE QT_SBOM_REQUIRE_GENERATE_JSON
)
qt_commandline_option(sbom-verify TYPE boolean CMAKE_VARIABLE QT_SBOM_VERIFY)
qt_commandline_option(sbom-verify-required TYPE boolean CMAKE_VARIABLE QT_SBOM_REQUIRE_VERIFY)
endmacro()
function(qt_commandline_prefix arg var)
@ -801,6 +806,7 @@ foreach(var ${config_inputs})
if("${commandline_input_${var}_type}" STREQUAL "")
get_property(commandline_input_${var}_type GLOBAL PROPERTY INPUTTYPE_${var})
endif()
get_property(commandline_input_${var}_cmake_variable GLOBAL PROPERTY INPUTCMAKEVAR_${var})
endforeach()
macro(drop_input name)
@ -842,6 +848,19 @@ macro(translate_list_input name cmake_var)
endif()
endmacro()
macro(translate_input name cmake_var)
if("${commandline_input_${name}_type}" STREQUAL "boolean")
translate_boolean_input(${name} ${cmake_var})
elseif("${commandline_input_${name}_type}" STREQUAL "string")
translate_string_input(${name} ${cmake_var})
else()
message(FATAL_ERROR
"translate_input cannot handle input '${name}' "
"of type '${commandline_input_${name}_type}'."
)
endif()
endmacro()
# Check whether to guess the compiler for the given language.
#
# Sets ${out_var} to FALSE if one of the following holds:
@ -923,24 +942,16 @@ function(check_qt_build_parts type)
set(cmake_args "${cmake_args}" PARENT_SCOPE)
endfunction()
# Translate command line arguments that have CMAKE_VARIABLE set.
foreach(input IN LISTS config_inputs)
if(NOT "${commandline_input_${input}_cmake_variable}" STREQUAL "")
translate_input("${input}" "${commandline_input_${input}_cmake_variable}")
endif()
endforeach()
drop_input(commercial)
drop_input(confirm-license)
translate_boolean_input(precompile_header BUILD_WITH_PCH)
translate_boolean_input(unity_build QT_UNITY_BUILD)
translate_string_input(unity_build_batch_size QT_UNITY_BUILD_BATCH_SIZE)
translate_boolean_input(ccache QT_USE_CCACHE)
translate_boolean_input(vcpkg QT_USE_VCPKG)
translate_boolean_input(sbom QT_GENERATE_SBOM)
translate_boolean_input(sbom-json QT_SBOM_GENERATE_JSON)
translate_boolean_input(sbom-json-required QT_SBOM_REQUIRE_GENERATE_JSON)
translate_boolean_input(sbom-verify QT_SBOM_VERIFY)
translate_boolean_input(sbom-verify-required QT_SBOM_REQUIRE_VERIFY)
translate_boolean_input(shared BUILD_SHARED_LIBS)
translate_boolean_input(warnings_are_errors WARNINGS_ARE_ERRORS)
translate_boolean_input(qtinlinenamespace QT_INLINE_NAMESPACE)
translate_string_input(qt_namespace QT_NAMESPACE)
translate_string_input(qt_libinfix QT_LIBINFIX)
translate_string_input(qreal QT_COORD_TYPE)
translate_path_input(prefix CMAKE_INSTALL_PREFIX)
translate_path_input(extprefix CMAKE_STAGING_PREFIX)
foreach(kind bin lib archdata libexec qml data doc sysconf examples tests)
@ -956,10 +967,7 @@ if(NOT "${INPUT_device}" STREQUAL "")
push("-DQT_QMAKE_TARGET_MKSPEC=devices/${INPUT_device}")
drop_input(device)
endif()
translate_string_input(platform QT_QMAKE_TARGET_MKSPEC)
translate_string_input(xplatform QT_QMAKE_TARGET_MKSPEC)
guess_compiler_from_mkspec()
translate_string_input(qpa_default_platform QT_QPA_DEFAULT_PLATFORM)
translate_list_input(qpa_platforms QT_QPA_PLATFORMS)
translate_path_input(android-sdk ANDROID_SDK_ROOT)
@ -975,14 +983,9 @@ if(DEFINED INPUT_android-abis)
endif()
translate_string_input(android-abis ANDROID_ABI)
endif()
translate_string_input(android-javac-source QT_ANDROID_JAVAC_SOURCE)
translate_string_input(android-javac-target QT_ANDROID_JAVAC_TARGET)
translate_string_input(sdk QT_APPLE_SDK)
drop_input(make)
drop_input(nomake)
translate_boolean_input(install-examples-sources QT_INSTALL_EXAMPLES_SOURCES)
check_qt_build_parts(nomake)
check_qt_build_parts(make)
@ -1048,7 +1051,6 @@ if("${INPUT_ltcg}" STREQUAL "yes")
endif()
translate_path_input(ffmpeg-dir FFMPEG_DIR)
translate_boolean_input(ffmpeg-deploy QT_DEPLOY_FFMPEG)
translate_list_input(device-option QT_QMAKE_DEVICE_OPTIONS)
translate_list_input(defines QT_EXTRA_DEFINES)

View File

@ -34,18 +34,28 @@ qt_commandline_option(android-abis TYPE string)
qt_commandline_option(android-ndk TYPE string)
qt_commandline_option(android-ndk-platform TYPE string)
qt_commandline_option(android-sdk TYPE string)
qt_commandline_option(android-javac-target TYPE string)
qt_commandline_option(android-javac-source TYPE string)
qt_commandline_option(android-javac-target
TYPE string
CMAKE_VARIABLE QT_ANDROID_JAVAC_TARGET
)
qt_commandline_option(android-javac-source
TYPE string
CMAKE_VARIABLE QT_ANDROID_JAVAC_SOURCE
)
qt_commandline_option(android-style-assets TYPE boolean)
qt_commandline_option(appstore-compliant TYPE boolean)
qt_commandline_option(avx TYPE boolean)
qt_commandline_option(avx2 TYPE boolean)
qt_commandline_option(avx512 TYPE boolean NAME avx512f)
qt_commandline_option(c++std TYPE cxxstd)
qt_commandline_option(unity-build TYPE boolean NAME unity_build)
qt_commandline_option(unity-build-batch-size TYPE string NAME unity_build_batch_size)
qt_commandline_option(ccache TYPE boolean NAME ccache)
qt_commandline_option(vcpkg TYPE boolean)
qt_commandline_option(unity-build TYPE boolean NAME unity_build CMAKE_VARIABLE QT_UNITY_BUILD)
qt_commandline_option(unity-build-batch-size
TYPE string
NAME unity_build_batch_size
CMAKE_VARIABLE QT_UNITY_BUILD_BATCH_SIZE
)
qt_commandline_option(ccache TYPE boolean NAME ccache CMAKE_VARIABLE QT_USE_CCACHE)
qt_commandline_option(vcpkg TYPE boolean CMAKE_VARIABLE QT_USE_VCPKG)
qt_commandline_option(commercial TYPE void)
qt_commandline_option(confirm-license TYPE void)
qt_commandline_option(dbus TYPE optionalString VALUES no yes linked runtime)
@ -84,7 +94,10 @@ qt_commandline_option(libcpp-hardening TYPE boolean NAME libcpp_hardening)
qt_commandline_option(relro-now-linker TYPE boolean NAME relro_now_linker)
qt_commandline_option(make TYPE addString VALUES examples libs tests tools
benchmarks manual-tests minimal-static-tests)
qt_commandline_option(install-examples-sources TYPE boolean)
qt_commandline_option(install-examples-sources
TYPE boolean
CMAKE_VARIABLE QT_INSTALL_EXAMPLES_SOURCES
)
qt_commandline_option(mips_dsp TYPE boolean)
qt_commandline_option(mips_dspr2 TYPE boolean)
qt_commandline_option(nomake TYPE addString VALUES examples tests tools benchmarks
@ -94,21 +107,29 @@ qt_commandline_option(optimize-debug TYPE boolean NAME optimize_debug)
qt_commandline_option(optimize-size TYPE boolean NAME optimize_size)
qt_commandline_option(optimized-qmake TYPE boolean NAME release_tools)
qt_commandline_option(optimized-tools TYPE boolean NAME release_tools)
qt_commandline_option(pch TYPE boolean NAME precompile_header)
qt_commandline_option(pch TYPE boolean NAME precompile_header CMAKE_VARIABLE BUILD_WITH_PCH)
qt_commandline_option(pkg-config TYPE boolean)
qt_commandline_option(platform TYPE string)
qt_commandline_option(platform TYPE string CMAKE_VARIABLE QT_QMAKE_TARGET_MKSPEC)
qt_commandline_option(plugin-manifests TYPE boolean)
qt_commandline_option(profile TYPE boolean)
qt_commandline_option(qreal TYPE string)
qt_commandline_option(qtinlinenamespace TYPE boolean)
qt_commandline_option(qtlibinfix TYPE string NAME qt_libinfix)
qt_commandline_option(qtnamespace TYPE string NAME qt_namespace)
qt_commandline_option(qreal TYPE string CMAKE_VARIABLE QT_COORD_TYPE)
qt_commandline_option(qtinlinenamespace TYPE boolean CMAKE_VARIABLE QT_INLINE_NAMESPACE)
qt_commandline_option(qtlibinfix
TYPE string
NAME qt_libinfix
CMAKE_VARIABLE QT_LIBINFIX
)
qt_commandline_option(qtnamespace
TYPE string
NAME qt_namespace
CMAKE_VARIABLE QT_NAMESPACE
)
qt_commandline_option(reduce-exports TYPE boolean NAME reduce_exports)
qt_commandline_option(reduce-relocations TYPE boolean NAME reduce_relocations)
qt_commandline_option(release TYPE enum NAME debug MAPPING yes no no yes)
qt_commandline_option(rpath TYPE boolean)
qt_commandline_option(sanitize TYPE sanitize)
qt_commandline_option(sdk TYPE string)
qt_commandline_option(sdk TYPE string CMAKE_VARIABLE QT_APPLE_SDK)
qt_commandline_option(separate-debug-info TYPE boolean NAME separate_debug_info)
qt_commandline_option(shared TYPE boolean)
qt_commandline_option(silent TYPE void)
@ -123,15 +144,19 @@ qt_commandline_option(static-runtime TYPE boolean NAME static_runtime)
qt_commandline_option(strip TYPE boolean)
qt_commandline_option(sysroot TYPE string)
qt_commandline_option(use-gold-linker TYPE boolean NAME use_gold_linker_alias)
qt_commandline_option(warnings-are-errors TYPE boolean NAME warnings_are_errors)
qt_commandline_option(warnings-are-errors
TYPE boolean
NAME warnings_are_errors
CMAKE_VARIABLE WARNINGS_ARE_ERRORS
)
qt_commandline_option(Werror TYPE boolean NAME warnings_are_errors)
qt_commandline_option(widgets TYPE boolean)
qt_commandline_option(xplatform TYPE string)
qt_commandline_option(xplatform TYPE string CMAKE_VARIABLE QT_QMAKE_TARGET_MKSPEC)
qt_commandline_option(zlib CONTROLS_FEATURE TYPE enum NAME system-zlib MAPPING system yes qt no)
qt_commandline_option(zstd TYPE boolean)
qt_commandline_option(coverage TYPE optionalString VALUES gcov)
qt_commandline_option(ffmpeg-dir TYPE string)
qt_commandline_option(ffmpeg-deploy TYPE boolean)
qt_commandline_option(ffmpeg-deploy TYPE boolean CMAKE_VARIABLE QT_DEPLOY_FFMPEG)
qt_commandline_prefix(D defines)
qt_commandline_prefix(F fpaths)
qt_commandline_prefix(I includes)

View File

@ -29,7 +29,11 @@ qt_commandline_option(opengl-es-2 TYPE void NAME opengl VALUE es2)
qt_commandline_option(opengles3 TYPE boolean)
qt_commandline_option(openvg TYPE boolean)
qt_commandline_option(qpa TYPE string NAME qpa_platforms)
qt_commandline_option(default-qpa TYPE string NAME qpa_default_platform)
qt_commandline_option(default-qpa
TYPE string
NAME qpa_default_platform
CMAKE_VARIABLE QT_QPA_DEFAULT_PLATFORM
)
qt_commandline_option(sm TYPE boolean NAME sessionmanager)
qt_commandline_option(tslib TYPE boolean)
qt_commandline_option(vulkan TYPE boolean)