diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2021-08-20 14:34:37 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2021-08-20 19:44:43 +0200 |
commit | 57ad532e75f62212f24dd2791583b975d09aca9d (patch) | |
tree | 7d8c0d1930525cf910dad3ade544dec48d87cd48 /cmake | |
parent | 4e2ec5ab5da1355b1200f78ed89426d4d168af38 (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.cmake | 33 |
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}") |