summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2020-08-13 14:36:50 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2020-08-17 18:19:24 +0200
commitd6e41abd62f03761388664574c538a8c7de9b50d (patch)
tree8d9d2d7dde6991558d02003adec36b36a9c4e316
parenta930e657edbc4dcd1437f3f4146a4e46e0ce2d62 (diff)
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 <alexandru.croitor@qt.io>
-rw-r--r--cmake/QtInternalTargets.cmake19
-rw-r--r--cmake/QtPostProcessHelpers.cmake16
-rw-r--r--cmake/QtPriHelpers.cmake17
-rw-r--r--cmake/QtProcessConfigureArgs.cmake4
-rw-r--r--cmake/QtQmakeHelpers.cmake15
-rw-r--r--cmake/configure-cmake-mapping.md8
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 $<$<COMPILE_LANGUAGE:CXX>:-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 "$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>")
set(is_static_lib "$<STREQUAL:$<TARGET_PROPERTY:TYPE>,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=<filename> |
| -no-gcc-sysroot | | |
| -no-pkg-config | | |
-| -D <string> | | |
-| -I <string> | | |
-| -L <string> | | |
-| -F <string> | | |
+| -D <string> | -DQT_EXTRA_DEFINES=<string1>;<string2> | |
+| -I <string> | -DQT_EXTRA_INCLUDEPATHS=<string1>;<string2> | |
+| -L <string> | -DQT_EXTRA_LIBDIRS=<string1>;<string2> | |
+| -F <string> | -DQT_EXTRA_FRAMEWORKPATHS=<string1>;<string2> | |
| -sdk <sdk> | | |
| -android-sdk path | | |
| -android-ndk path | | |