From d6e41abd62f03761388664574c538a8c7de9b50d Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Thu, 13 Aug 2020 14:36:50 +0200 Subject: CMake: Handle -D, -I, -F and -L configure arguments Introduce new CMake variables and map -D to QT_EXTRA_DEFINES, -I to QT_EXTRA_INCLUDEPATHS, -L to QT_EXTRA_LIBDIRS, and -F to QT_EXTRA_FRAMEWORKPATHS. Those variables only affect the Qt build, not user projects. Fixes: QTBUG-85878 Change-Id: I229df2eed1505a2619068d0d32975962b052569a Reviewed-by: Alexandru Croitor --- cmake/QtInternalTargets.cmake | 19 +++++++++++++++++++ cmake/QtPostProcessHelpers.cmake | 16 ++++++++++++++++ cmake/QtPriHelpers.cmake | 17 +++++++++++++++++ cmake/QtProcessConfigureArgs.cmake | 4 ++++ cmake/QtQmakeHelpers.cmake | 15 +++++++++++++++ cmake/configure-cmake-mapping.md | 8 ++++---- 6 files changed, 75 insertions(+), 4 deletions(-) diff --git a/cmake/QtInternalTargets.cmake b/cmake/QtInternalTargets.cmake index ced23b9d6a..c616d76bb7 100644 --- a/cmake/QtInternalTargets.cmake +++ b/cmake/QtInternalTargets.cmake @@ -187,6 +187,25 @@ if (GCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "9.2") target_compile_options(PlatformCommonInternal INTERFACE $<$:-Wsuggest-override>) endif() +if(DEFINED QT_EXTRA_DEFINES) + target_compile_definitions(PlatformCommonInternal INTERFACE ${QT_EXTRA_DEFINES}) +endif() + +if(DEFINED QT_EXTRA_INCLUDEPATHS) + target_include_directories(PlatformCommonInternal INTERFACE ${QT_EXTRA_INCLUDEPATHS}) +endif() + +if(DEFINED QT_EXTRA_LIBDIRS) + target_link_directories(PlatformCommonInternal INTERFACE ${QT_EXTRA_LIBDIRS}) +endif() + +if(DEFINED QT_EXTRA_FRAMEWORKPATHS AND APPLE) + list(TRANSFORM QT_EXTRA_FRAMEWORKPATHS PREPEND "-F" OUTPUT_VARIABLE __qt_fw_flags) + target_compile_options(PlatformCommonInternal INTERFACE ${__qt_fw_flags}) + target_link_options(PlatformCommonInternal INTERFACE ${__qt_fw_flags}) + unset(__qt_fw_flags) +endif() + function(qt_get_implicit_sse2_genex_condition out_var) set(is_shared_lib "$,SHARED_LIBRARY>") set(is_static_lib "$,STATIC_LIBRARY>") diff --git a/cmake/QtPostProcessHelpers.cmake b/cmake/QtPostProcessHelpers.cmake index 093eb42a8e..42ad39ee5e 100644 --- a/cmake/QtPostProcessHelpers.cmake +++ b/cmake/QtPostProcessHelpers.cmake @@ -515,6 +515,22 @@ endif()\n") string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS "set(QT_DISABLE_RPATH \"${QT_DISABLE_RPATH}\" CACHE STRING \"\")\n") endif() + if(DEFINED QT_EXTRA_DEFINES) + string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS + "set(QT_EXTRA_DEFINES \"${QT_EXTRA_DEFINES}\" CACHE STRING \"\")\n") + endif() + if(DEFINED QT_EXTRA_INCLUDEPATHS) + string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS + "set(QT_EXTRA_INCLUDEPATHS \"${QT_EXTRA_INCLUDEPATHS}\" CACHE STRING \"\")\n") + endif() + if(DEFINED QT_EXTRA_FRAMEWORKPATHS) + string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS + "set(QT_EXTRA_FRAMEWORKPATHS \"${QT_EXTRA_FRAMEWORKPATHS}\" CACHE STRING \"\")\n") + endif() + if(DEFINED QT_EXTRA_LIBDIRS) + string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS + "set(QT_EXTRA_LIBDIRS \"${QT_EXTRA_LIBDIRS}\" CACHE STRING \"\")\n") + endif() if(DEFINED QT_EXTRA_RPATHS) string(APPEND QT_EXTRA_BUILD_INTERNALS_VARS "set(QT_EXTRA_RPATHS \"${QT_EXTRA_RPATHS}\" CACHE STRING \"\")\n") diff --git a/cmake/QtPriHelpers.cmake b/cmake/QtPriHelpers.cmake index a82e3bb227..1e3b12e661 100644 --- a/cmake/QtPriHelpers.cmake +++ b/cmake/QtPriHelpers.cmake @@ -612,6 +612,23 @@ function(qt_generate_global_module_pri_file) list(JOIN corrected_private_config " " private_config_joined) set(content "") + if(DEFINED QT_EXTRA_DEFINES) + list(JOIN QT_EXTRA_DEFINES " " value) + string(APPEND content "EXTRA_DEFINES += ${value}\n") + endif() + if(DEFINED QT_EXTRA_INCLUDEPATHS) + qt_to_qmake_path_list(value ${QT_EXTRA_INCLUDEPATHS}) + string(APPEND content "EXTRA_INCLUDEPATH += ${value}\n") + endif() + if(DEFINED QT_EXTRA_LIBDIRS) + qt_to_qmake_path_list(value ${QT_EXTRA_LIBDIRS}) + string(APPEND content "EXTRA_LIBDIR += ${value}\n") + endif() + if(DEFINED QT_EXTRA_FRAMEWORKPATHS) + qt_to_qmake_path_list(value ${QT_EXTRA_FRAMEWORKPATHS}) + string(APPEND content "EXTRA_FRAMEWORKPATH += ${value}\n") + endif() + set(arch "${TEST_architecture_arch}") list(JOIN TEST_subarch_result " " subarchs) if(CMAKE_CROSSCOMPILING) diff --git a/cmake/QtProcessConfigureArgs.cmake b/cmake/QtProcessConfigureArgs.cmake index 3ae289eb27..de35b2f5df 100644 --- a/cmake/QtProcessConfigureArgs.cmake +++ b/cmake/QtProcessConfigureArgs.cmake @@ -599,6 +599,10 @@ elseif(nr_of_build_configs GREATER 1) endif() translate_list_input(device-option QT_QMAKE_DEVICE_OPTIONS) +translate_list_input(defines QT_EXTRA_DEFINES) +translate_list_input(fpaths QT_EXTRA_FRAMEWORKPATHS) +translate_list_input(includes QT_EXTRA_INCLUDEPATHS) +translate_list_input(lpaths QT_EXTRA_LIBDIRS) translate_list_input(rpaths QT_EXTRA_RPATHS) foreach(input ${config_inputs}) diff --git a/cmake/QtQmakeHelpers.cmake b/cmake/QtQmakeHelpers.cmake index ce1f96efd9..cee57b2ed2 100644 --- a/cmake/QtQmakeHelpers.cmake +++ b/cmake/QtQmakeHelpers.cmake @@ -1,3 +1,18 @@ +# Create a QMake list (values space-separated) containing paths. +# Entries that contain whitespace characters are quoted. +function(qt_to_qmake_path_list out_var) + set(quoted_paths "") + foreach(path ${ARGN}) + if(path MATCHES "[ \t]") + list(APPEND quoted_paths "\"${path}\"") + else() + list(APPEND quoted_paths "${path}") + endif() + endforeach() + list(JOIN quoted_paths " " result) + set("${out_var}" "${result}" PARENT_SCOPE) +endfunction() + macro(qt_add_string_to_qconfig_cpp str) string(LENGTH "${str}" length) string(APPEND QT_CONFIG_STRS " \"${str}\\0\"\n") diff --git a/cmake/configure-cmake-mapping.md b/cmake/configure-cmake-mapping.md index 49af2e6433..874b85e2e3 100644 --- a/cmake/configure-cmake-mapping.md +++ b/cmake/configure-cmake-mapping.md @@ -78,10 +78,10 @@ The effort of this is tracked in QTBUG-85373 and QTBUG-85349. | | | passed via -DCMAKE_TOOLCHAIN_FILE= | | -no-gcc-sysroot | | | | -no-pkg-config | | | -| -D | | | -| -I | | | -| -L | | | -| -F | | | +| -D | -DQT_EXTRA_DEFINES=; | | +| -I | -DQT_EXTRA_INCLUDEPATHS=; | | +| -L | -DQT_EXTRA_LIBDIRS=; | | +| -F | -DQT_EXTRA_FRAMEWORKPATHS=; | | | -sdk | | | | -android-sdk path | | | | -android-ndk path | | | -- cgit v1.2.3