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>
171 lines
4.6 KiB
Bash
Executable File
171 lines
4.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# Copyright (C) 2016 The Qt Company Ltd.
|
|
# Copyright (C) 2016 Intel Corporation.
|
|
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# script initialization
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# the directory of this script is the "source tree"
|
|
relpath=`dirname "$0"`
|
|
relpath=`(cd "$relpath"; /bin/pwd)`
|
|
# the current directory is the "build tree" or "object tree"
|
|
outpath=`/bin/pwd`
|
|
outpathPrefix=$outpath
|
|
|
|
# do this early so we don't store it in config.status
|
|
CFG_TOPLEVEL=
|
|
|
|
SAVED_IFS=$IFS
|
|
IFS='
|
|
'
|
|
|
|
checkTopLevelBuild()
|
|
{
|
|
relpathMangled=$relpath
|
|
if [ x"$1" = x"-top-level" ]; then
|
|
CFG_TOPLEVEL=yes
|
|
relpathMangled=`dirname "$relpath"`
|
|
outpathPrefix+=/..
|
|
else
|
|
if [ -f ../.qmake.super ]; then
|
|
echo >&2 "ERROR: You cannot configure qtbase separately within a top-level build."
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
OPT_CMDLINE= # expanded version for the script
|
|
determineOptFilePath()
|
|
{
|
|
> "${outpathPrefix}/config.redo.in"
|
|
set -f # suppress globbing in for loop
|
|
for i in "$@"; do
|
|
if [ x"$i" = x"-top-level" ]; then
|
|
continue
|
|
fi
|
|
case $i in
|
|
-redo|--redo)
|
|
optfile=${outpathPrefix}/config.opt
|
|
if ! test -f "$optfile"; then
|
|
echo >&2 "No config.opt present - cannot redo configuration."
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
# If redo-ing, write the rest of parameters into the config.redo.in file
|
|
echo \"$i\" >> "${outpathPrefix}/config.redo.in"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# initialize variables
|
|
#-------------------------------------------------------------------------------
|
|
|
|
OPT_HELP=
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# parse command line arguments
|
|
#-------------------------------------------------------------------------------
|
|
parseCommandline()
|
|
{
|
|
# parse the arguments, setting things to "yes" or "no"
|
|
while [ "$#" -gt 0 ]; do
|
|
CURRENT_OPT="$1"
|
|
case "$1" in
|
|
#Autoconf style options
|
|
--*)
|
|
VAR=`echo $1 | sed 's,^--\(.*\),\1,'`
|
|
VAL=yes
|
|
;;
|
|
#General options, including Qt style yes options
|
|
-*)
|
|
VAR=`echo $1 | sed 's,^-\(.*\),\1,'`
|
|
VAL="yes"
|
|
;;
|
|
# most options don't need processing in the configure script, skip them. qmake will do the real validation
|
|
*)
|
|
shift
|
|
continue
|
|
;;
|
|
esac
|
|
|
|
shift
|
|
|
|
case "$VAR" in
|
|
h|help)
|
|
if [ "$VAL" = "yes" ]; then
|
|
OPT_HELP="$VAL"
|
|
fi
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# help - interactive parts of the script _after_ this section please
|
|
#-------------------------------------------------------------------------------
|
|
handleHelp()
|
|
{
|
|
if [ "$OPT_HELP" = "yes" ]; then
|
|
cat $relpath/config_help.txt
|
|
if [ -n "$CFG_TOPLEVEL" ]; then
|
|
IFS='
|
|
'
|
|
for i in $relpathMangled/qt*/config_help.txt; do
|
|
if [ x"$i" != x"$relpath/config_help.txt" ]; then
|
|
echo
|
|
cat "$i"
|
|
fi
|
|
done
|
|
fi
|
|
exit 0
|
|
fi
|
|
}
|
|
|
|
checkTopLevelBuild "$@"
|
|
parseCommandline "$@"
|
|
handleHelp
|
|
determineOptFilePath "$@"
|
|
|
|
optfilepath=${outpathPrefix}/config.opt
|
|
opttmpfilepath=${outpathPrefix}/config.opt.in
|
|
|
|
redofilepath=${outpathPrefix}/config.redo
|
|
redotmpfilepath=${outpathPrefix}/config.redo.in
|
|
|
|
fresh_requested_arg=
|
|
if [ -z "$optfile" ]; then # only write optfile if not currently redoing
|
|
> "$opttmpfilepath"
|
|
> "$redotmpfilepath"
|
|
|
|
for arg in "$@"; do echo \"$arg\" >> "$opttmpfilepath"; done
|
|
|
|
cmake -DIN_FILE="${opttmpfilepath}" -DOUT_FILE="${optfilepath}" -DIGNORE_ARGS=-top-level -P "${relpath}/cmake/QtWriteArgsFile.cmake"
|
|
else
|
|
# In case config.opt.in is missing for some reason
|
|
if [ ! -f "$opttmpfilepath" ]; then
|
|
> "$opttmpfilepath"
|
|
for arg in `cat $optfile`; do echo \"$arg\" >> "$opttmpfilepath"; done
|
|
fi
|
|
|
|
cmake -DIN_FILE="${opttmpfilepath}" -DREDO_FILE="${redotmpfilepath}" -DOUT_FILE="${redofilepath}" -DIGNORE_ARGS=-top-level -P "${relpath}/cmake/QtWriteArgsFile.cmake"
|
|
optfilepath=${redofilepath}
|
|
fresh_requested_arg=-DFRESH_REQUESTED=TRUE
|
|
fi
|
|
|
|
top_level_arg=
|
|
if [ -n "$CFG_TOPLEVEL" ]; then
|
|
top_level_arg=-DTOP_LEVEL=TRUE
|
|
cd ..
|
|
fi
|
|
|
|
cmake "-DOPTFILE=${optfilepath}" ${top_level_arg} ${fresh_requested_arg} -P "${relpath}/cmake/QtProcessConfigureArgs.cmake"
|
|
|
|
IFS=$SAVED_IFS
|