summaryrefslogtreecommitdiffstats
path: root/configure
blob: 6d7704a9dd5cd06407e0ccac59f34057d9664b1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/bin/sh
# Copyright (C) 2016 The Qt Company Ltd.
# Copyright (C) 2016 Intel Corporation.
# SPDX-License-Identifier: BSD-3-Clause

#-------------------------------------------------------------------------------
# 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.last
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

exec cmake "-DOPTFILE=${optfilepath}" ${top_level_arg} ${fresh_requested_arg} -P "${relpath}/cmake/QtProcessConfigureArgs.cmake"

IFS=$SAVED_IFS