#!/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="$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
    # Rewriting config.opt into config.opt.in anyway. Allows for direct manipulation of config.opt
    > "$opttmpfilepath"
    for arg in `cat $optfile`; do echo \"$arg\" >> "$opttmpfilepath"; done

    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