summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2021-08-20 14:34:37 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2021-08-20 19:44:43 +0200
commit57ad532e75f62212f24dd2791583b975d09aca9d (patch)
tree7d8c0d1930525cf910dad3ade544dec48d87cd48 /cmake
parent4e2ec5ab5da1355b1200f78ed89426d4d168af38 (diff)
Fix our usage of CMake script mode in Windows configure
This is a preparation for adding the -help argument to qt-configure-module.bat. Consider the call qt-configure-module.bat path/to/qt-module -help Internally, we called cmake ... -P .../QtWriteArgsFile.cmake path/to/qt-module -help which was supposed to separate the arguments and write them into config.opt. However, passing arbitrary arguments after "-P script.cmake" only worked by accident and is not supported. As soon as arguments are passed that are valid CMake arguments, like -help or -G, the CMake call would fail. Now, we let configure.bat and qt-configure-module.bat write the arguments as is into config.opt.in and let QtWriteArgsFile.cmake read this file, separate the arguments and write config.opt. Pick-to: 6.2 Task-number: QTBUG-95943 Change-Id: I80f298a2aaf55b0f79fed86320a055eb2d2b6faa Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtWriteArgsFile.cmake33
1 files changed, 14 insertions, 19 deletions
diff --git a/cmake/QtWriteArgsFile.cmake b/cmake/QtWriteArgsFile.cmake
index ddb390a146..d21d050ed4 100644
--- a/cmake/QtWriteArgsFile.cmake
+++ b/cmake/QtWriteArgsFile.cmake
@@ -3,35 +3,30 @@
# This is used for writing the config.opt file.
#
# This script takes the following arguments:
-# OUT_FILE: The output file.
+# IN_FILE: The input file. The whole command line as one string.
+# OUT_FILE: The output file. One argument per line.
# SKIP_ARGS: Number of arguments to skip from the front of the arguments list.
# IGNORE_ARGS: List of arguments to be ignored, i.e. that are not written.
cmake_minimum_required(VERSION 3.3)
-# Look for the -P argument to determine the start of the actual script arguments
-math(EXPR stop "${CMAKE_ARGC} - 1")
-set(start 0)
-foreach(i RANGE 1 ${stop})
- if(CMAKE_ARGV${i} STREQUAL "-P")
- math(EXPR start "${i} + 2")
- break()
- endif()
-endforeach()
+# Read arguments from IN_FILE and separate them.
+file(READ "${IN_FILE}" raw_args)
+separate_arguments(args NATIVE_COMMAND "${raw_args}")
# Skip arguments if requested
if(DEFINED SKIP_ARGS)
- math(EXPR start "${start} + ${SKIP_ARGS}")
+ foreach(i RANGE 1 ${SKIP_ARGS})
+ list(POP_FRONT args)
+ endforeach()
endif()
# Write config.opt
set(content "")
-if(start LESS_EQUAL stop)
- foreach(i RANGE ${start} ${stop})
- set(arg ${CMAKE_ARGV${i}})
- if(NOT arg IN_LIST IGNORE_ARGS)
- string(APPEND content "${arg}\n")
- endif()
- endforeach()
-endif()
+foreach(arg IN LISTS args)
+ if(NOT arg IN_LIST IGNORE_ARGS)
+ string(APPEND content "${arg}\n")
+ endif()
+endforeach()
+
file(WRITE "${OUT_FILE}" "${content}")