5c40cb0f1a
In addition to the fix, I've removed some legacy codes in the `configure` file and delegated most of the work to the `QtWriteArgsFile.cmake` which was being used by `configure.bat`. I am not sure how this was supposed to work before since it was not really working, but now, `config.opt` lives in the build directory, together with `config.opt.in` (a template file), and the `config.redo` (and `config.redo.in`) which holds the full redo command. The template files are being used to preserve the quoted variables and to help QtWriteArgFiles process the opt files more consistency. Also fixed an issue on Unix, where ./configure was failing to run if its path contained spaces, e.g., `Qt Src/qt5/configure`. Fixes: QTBUG-108287 Change-Id: I9843b690a1fd3177a93e55e08a3484a4c85ba2e8 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
87 lines
3.0 KiB
CMake
87 lines
3.0 KiB
CMake
# Copyright (C) 2022 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
# This script writes its arguments to the file determined by OUT_FILE.
|
|
# Each argument appears on a separate line.
|
|
# This is used for writing the config.opt file.
|
|
#
|
|
# This script takes the following arguments:
|
|
# IN_FILE: The input file. The whole command line as one string, or one argument per line.
|
|
# REDO_FILE: A file containing extra commands to be joined with IN_FILE.
|
|
# 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.
|
|
#
|
|
# If the REDO_FILE is given, its parameters will be merged with IN_FILE parameters
|
|
# and be written into the OUT_FILE.
|
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
|
|
# Read arguments from IN_FILE and separate them.
|
|
file(READ "${IN_FILE}" raw_args)
|
|
separate_arguments(args NATIVE_COMMAND "${raw_args}")
|
|
|
|
if(DEFINED REDO_FILE)
|
|
file(READ "${REDO_FILE}" raw_redo_args)
|
|
separate_arguments(redo_args NATIVE_COMMAND "${raw_redo_args}")
|
|
|
|
if(args)
|
|
list(FIND args "--" args_ddash_loc)
|
|
list(FIND redo_args "--" redo_ddash_loc)
|
|
if("${redo_ddash_loc}" STREQUAL "-1")
|
|
if("${args_ddash_loc}" STREQUAL "-1")
|
|
list(LENGTH args args_ddash_loc)
|
|
endif()
|
|
# Avoid adding an empty line for an empty -redo
|
|
if(NOT "${redo_args}" STREQUAL "")
|
|
list(INSERT args ${args_ddash_loc} "${redo_args}")
|
|
endif()
|
|
else()
|
|
# Handling redo's configure options
|
|
list(SUBLIST redo_args 0 ${redo_ddash_loc} redo_config_args)
|
|
if(redo_config_args)
|
|
if("${args_ddash_loc}" STREQUAL "-1")
|
|
list(APPEND args "${redo_config_args}")
|
|
else()
|
|
list(INSERT args ${args_ddash_loc} "${redo_config_args}")
|
|
endif()
|
|
endif()
|
|
|
|
# Handling redo's CMake options
|
|
list(LENGTH redo_args redo_args_len)
|
|
math(EXPR redo_ddash_loc "${redo_ddash_loc} + 1")
|
|
# Catch an unlikely case of -redo being called with an empty --, ie., `-redo --`
|
|
if(NOT ${redo_ddash_loc} STREQUAL ${redo_args_len})
|
|
list(SUBLIST redo_args ${redo_ddash_loc} -1 redo_cmake_args)
|
|
endif()
|
|
|
|
if(DEFINED redo_cmake_args)
|
|
if("${args_ddash_loc}" STREQUAL "-1")
|
|
list(APPEND args "--")
|
|
endif()
|
|
list(APPEND args "${redo_cmake_args}")
|
|
endif()
|
|
endif()
|
|
else()
|
|
list(APPEND args "${redo_args}")
|
|
endif()
|
|
|
|
endif()
|
|
|
|
# Skip arguments if requested
|
|
if(DEFINED SKIP_ARGS)
|
|
foreach(i RANGE 1 ${SKIP_ARGS})
|
|
list(POP_FRONT args)
|
|
endforeach()
|
|
endif()
|
|
|
|
# Write config.opt
|
|
set(content "")
|
|
foreach(arg IN LISTS args)
|
|
if(NOT arg IN_LIST IGNORE_ARGS)
|
|
string(APPEND content "${arg}\n")
|
|
endif()
|
|
endforeach()
|
|
|
|
file(WRITE "${OUT_FILE}" "${content}")
|