summaryrefslogtreecommitdiffstats
path: root/configure
diff options
context:
space:
mode:
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure955
1 files changed, 41 insertions, 914 deletions
diff --git a/configure b/configure
index 62422fa263..6d7704a9dd 100755
--- a/configure
+++ b/configure
@@ -1,101 +1,25 @@
#!/bin/sh
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Copyright (C) 2016 Intel Corporation.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2016 The Qt Company Ltd.
+# Copyright (C) 2016 Intel Corporation.
+# SPDX-License-Identifier: BSD-3-Clause
#-------------------------------------------------------------------------------
# script initialization
#-------------------------------------------------------------------------------
-# the name of this script
-relconf=`basename $0`
# the directory of this script is the "source tree"
-relpath=`dirname $0`
+relpath=`dirname "$0"`
relpath=`(cd "$relpath"; /bin/pwd)`
# the current directory is the "build tree" or "object tree"
outpath=`/bin/pwd`
-
-WHICH="which"
-
-PERL=
-findPerl()
-{
-PERL=`$WHICH perl 2>/dev/null`
-}
-
-# find out which awk we want to use, prefer gawk, then nawk, then regular awk
-AWK=
-findAwk()
-{
-for e in gawk nawk awk; do
- if "$WHICH" $e >/dev/null 2>&1 && ( $e -f /dev/null /dev/null ) >/dev/null 2>&1; then
- AWK=$e
- break
- fi
-done
-}
-
-# find a make command
-findMake()
-{
-if [ -z "$MAKE" ]; then
- MAKE=
- for mk in gmake make; do
- if "$WHICH" $mk >/dev/null 2>&1; then
- MAKE=`"$WHICH" $mk`
- break
- fi
- done
- if [ -z "$MAKE" ]; then
- echo >&2 "You don't seem to have 'make' or 'gmake' in your PATH."
- echo >&2 "Cannot proceed."
- exit 1
- fi
- # export MAKE, we need it later in the config.tests
- export MAKE
-fi
-}
-
-# make sure qmake is not confused by these. recursion via Makefiles would
-# be still affected, so just unsetting them here is not an option.
-checkQMakeEnv()
-{
-if [ -n "$QMAKESPEC" ] || [ -n "$XQMAKESPEC" ] || \
- [ -n "$QMAKEPATH" ] || [ -n "$QMAKEFEATURES" ]; then
- echo >&2 "Please make sure to unset the QMAKESPEC, XQMAKESPEC, QMAKEPATH,"
- echo >&2 "and QMAKEFEATURES environment variables prior to building Qt."
- exit 1
-fi
-}
+outpathPrefix=$outpath
# do this early so we don't store it in config.status
CFG_TOPLEVEL=
-outpathPrefix=
+
+SAVED_IFS=$IFS
+IFS='
+'
checkTopLevelBuild()
{
@@ -103,7 +27,7 @@ checkTopLevelBuild()
if [ x"$1" = x"-top-level" ]; then
CFG_TOPLEVEL=yes
relpathMangled=`dirname "$relpath"`
- outpathPrefix=../
+ outpathPrefix="$outpathPrefix/.."
else
if [ -f ../.qmake.super ]; then
echo >&2 "ERROR: You cannot configure qtbase separately within a top-level build."
@@ -112,387 +36,36 @@ checkTopLevelBuild()
fi
}
-CMAKE_CMDLINE=
-getCMakeCmdLine()
-{
-PASSTHRU=
-set -f # suppress globbing in for loop
-SAVED_IFS=$IFS
-IFS='
-'
-
-if [ "$CFG_DEV" = "yes" ]; then
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DFEATURE_developer_build=ON"
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DBUILD_TESTING=ON"
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DBUILD_EXAMPLES=ON"
-fi
-
-if [ "$CMAKE_MAKEFILES" = "no" ]; then
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--G Ninja"
-fi
-
-while [ "$#" -gt 0 ]; do
- i="$1"
- shift
- if [ "$PASSTHRU" = "yes" ]; then
- CMAKE_CMDLINE="$CMAKE_CMDLINE
-$i"
- else
- case $i in
- -nomake|--nomake)
- arg_capitalized=`echo $1 | tr a-z A-Z`
- shift
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DQT_NO_MAKE_${arg_capitalized}=ON"
- ;;
- -feature-*|--feature-*)
- VAR=`echo $i | sed -E 's/-?-feature-(.*)/\1/'`
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DQT_FEATURE_${VAR}=ON"
- ;;
- -no-feature-*|--no-feature-*)
- VAR=`echo $i | sed -E 's/-?-no-feature-(.*)/\1/'`
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DQT_FEATURE_${VAR}=OFF"
- ;;
- -no-pch|--no-pch)
- "$CMAKE_CMDLINE
--DBUILD_WITH_PCH=OFF"
- ;;
- -no-*|--no-*)
- VAR=`echo $i | sed -E 's/-?-no-(.*)/\1/'`
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DFEATURE_${VAR}=OFF"
- ;;
- -system-*|--system-*)
- VAR=`echo $i | sed -E 's/-?-system-(.*)/\1/'`
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DFEATURE_system_${VAR}=ON"
- ;;
- -qt-*|--qt-*)
- VAR=`echo $i | sed -E 's/-?-qt-(.*)/\1/'`
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DFEATURE_system_${VAR}=OFF"
- ;;
- -sanitize=*|--sanitize=*)
- VAR=`echo $i | sed -E 's/-?-sanitize=(.*)/\1/'`
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DECM_ENABLE_SANITIZERS=${VAR}"
- ;;
- -ccache|--ccache)
- CMAKE_CMDLINE="$CMAKE_CMDLINE
--DQT_USE_CCACHE=ON"
- ;;
- --)
- PASSTHRU=yes
- ;;
- *)
- ;;
- esac
- fi
-done
-set +f
-IFS=$SAVED_IFS
-}
-
OPT_CMDLINE= # expanded version for the script
-QMAKE_CMDLINE= # verbatim version for qmake call
-getOptAndQMakeCmdLines()
+determineOptFilePath()
{
+> "${outpathPrefix}/config.redo.in"
set -f # suppress globbing in for loop
-SAVED_IFS=$IFS
-IFS='
-'
for i in "$@"; do
if [ x"$i" = x"-top-level" ]; then
continue
fi
case $i in
-redo|--redo)
- optfile=${outpathPrefix}config.opt
- if test -n "$CFG_TOPLEVEL" && ! test -f $optfile; then
- optfile=config.opt
- fi
- if ! test -f $optfile; then
+ optfile=${outpathPrefix}/config.opt
+ if ! test -f "$optfile"; then
echo >&2 "No config.opt present - cannot redo configuration."
exit 1
fi
- for a in `cat $optfile`; do
- OPT_CMDLINE="$OPT_CMDLINE
-$a"
- done
;;
*)
- OPT_CMDLINE="$OPT_CMDLINE
-$i"
+ # If redo-ing, write the rest of parameters into the config.redo.in file
+ echo \"$i\" >> "${outpathPrefix}/config.redo.in"
;;
esac
- QMAKE_CMDLINE="$QMAKE_CMDLINE
-$i"
done
-set --
-for i in $OPT_CMDLINE; do
- set -- "$@" "$i"
-done
-set +f
-IFS=$SAVED_IFS
}
#-------------------------------------------------------------------------------
-# utility functions
-#-------------------------------------------------------------------------------
-
-# Helper function for getQMakeConf. It parses include statements in
-# qmake.conf and prints out the expanded file
-expandQMakeConf()
-{
- while read line; do case "$line" in
- include*)
- inc_file=`echo "$line" | sed -n -e '/^include.*(.*)/s/include.*(\(.*\)).*$/\1/p'`
- current_dir=`dirname "$1"`
- conf_file="$current_dir/$inc_file"
- if [ ! -f "$conf_file" ]; then
- echo "WARNING: Unable to find file $conf_file" >&2
- continue
- fi
- expandQMakeConf "$conf_file"
- ;;
- *)
- echo "$line"
- ;;
- esac; done < "$1"
-}
-
-extractQMakeVariables()
-{
- LC_ALL=C $AWK '
-BEGIN {
- values["LITERAL_WHITESPACE"] = " "
- values["LITERAL_DOLLAR"] = "$"
-}
-/^[_A-Z0-9.]+[ \t]*\+?=/ {
- valStart = index($0, "=") + 1
-
- append = 0
- if (substr($0, valStart - 2, 1) == "+") {
- append = 1
- }
-
- variable = substr($0, 0, valStart - 2 - append)
- value = substr($0, valStart)
- gsub("[ \t]+", "", variable)
- gsub("^[ \t]+", "", value)
- gsub("[ \t]+$", "", value)
-
- ovalue = ""
- while (match(value, /\$\$(\{[_A-Z0-9.]+\}|[_A-Z0-9.]+)/)) {
- ovalue = ovalue substr(value, 1, RSTART - 1)
- var = substr(value, RSTART + 2, RLENGTH - 2)
- value = substr(value, RSTART + RLENGTH)
- if (var ~ /^\{/) {
- var = substr(var, 2, length(var) - 2)
- }
- ovalue = ovalue values[var]
- }
- value = ovalue value
-
- ovalue = ""
- while (match(value, /\$\$system\(("[^"]*"|[^)]*)\)/)) {
- ovalue = ovalue substr(value, 1, RSTART - 1)
- cmd = substr(value, RSTART + 9, RLENGTH - 10)
- gsub(/^"|"$/, "", cmd)
- value = substr(value, RSTART + RLENGTH)
- while ((cmd | getline line) > 0) {
- ovalue = ovalue line
- }
- close(cmd)
- }
- value = ovalue value
-
- combinedValue = values[variable]
- if (append == 1 && length(combinedValue) > 0) {
- combinedValue = combinedValue " " value
- } else {
- combinedValue = value
- }
- values[variable] = combinedValue
-}
-END {
- for (var in values) {
- print var "=" values[var]
- }
-}
-'
-}
-
-getSingleQMakeVariable()
-{
- echo "$2" | $AWK "/^($1)=/ { print substr(\$0, index(\$0, \"=\") + 1) }"
-}
-
-macSDKify()
-{
- # Normally we take care of sysrootifying in sdk.prf, but configure extracts some
- # values before qmake is even built, so we have to duplicate the logic here.
-
- sdk=$(getSingleQMakeVariable "QMAKE_MAC_SDK" "$1")
- if [ -z "$sdk" ]; then echo "QMAKE_MAC_SDK must be set when building on Mac" >&2; exit 1; fi
- sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null)
- if [ -z "$sysroot" ]; then echo "Failed to resolve SDK path for '$sdk'" >&2; exit 1; fi
-
- case "$sdk" in
- macosx*)
- version_min_flag="-mmacosx-version-min=$(getSingleQMakeVariable QMAKE_MACOSX_DEPLOYMENT_TARGET "$1")"
- ;;
- iphoneos*)
- version_min_flag="-miphoneos-version-min=$(getSingleQMakeVariable QMAKE_IOS_DEPLOYMENT_TARGET "$1")"
- ;;
- iphonesimulator*)
- version_min_flag="-mios-simulator-version-min=$(getSingleQMakeVariable QMAKE_IOS_DEPLOYMENT_TARGET "$1")"
- ;;
- appletvos*)
- version_min_flag="-mappletvos-version-min=$(getSingleQMakeVariable QMAKE_TVOS_DEPLOYMENT_TARGET "$1")"
- ;;
- appletvsimulator*)
- version_min_flag="-mtvos-simulator-version-min=$(getSingleQMakeVariable QMAKE_TVOS_DEPLOYMENT_TARGET "$1")"
- ;;
- watchos*)
- version_min_flag="-mwatchos-version-min=$(getSingleQMakeVariable QMAKE_WATCHOS_DEPLOYMENT_TARGET "$1")"
- ;;
- watchsimulator*)
- version_min_flag="-mwatchos-simulator-version-min=$(getSingleQMakeVariable QMAKE_WATCHOS_DEPLOYMENT_TARGET "$1")"
- ;;
- *)
- ;;
- esac
-
- hasCFlags=
- echo "$1" | while read line; do
- case "$line" in
- QMAKE_CC=*|QMAKE_CXX=*|QMAKE_FIX_RPATH=*|QMAKE_AR=*|QMAKE_RANLIB=*|QMAKE_LINK=*|QMAKE_LINK_SHLIB=*)
- # Prefix tool with toolchain path
- var=$(echo "$line" | cut -d '=' -f 1)
- val=$(echo "$line" | cut -d '=' -f 2-)
- sdk_val=$(/usr/bin/xcrun -sdk $sdk -find $(echo $val | cut -d ' ' -f 1))
- val=$(echo $sdk_val $(echo $val | cut -s -d ' ' -f 2-))
- echo "$var=$val"
- ;;
- QMAKE_CFLAGS=*)
- echo "$line -isysroot $sysroot $version_min_flag"
- hasCFlags="true";
- ;;
- QMAKE_CXXFLAGS=*|QMAKE_LFLAGS=*)
- echo "$line -isysroot $sysroot $version_min_flag"
- ;;
- *)
- echo "$line"
- ;;
- esac
- done
-
- if [ -z "$hasCFlags" ]; then
- echo "QMAKE_CFLAGS = -isysroot $sysroot $version_min_flag";
- fi
-}
-
-# relies on $QMAKESPEC being set correctly. parses include statements in
-# qmake.conf and prints out the expanded file
-getQMakeConf()
-{
- if [ -z "$specvals" ]; then
- specvals=`expandQMakeConf "$QMAKESPEC/qmake.conf" | extractQMakeVariables`
- if [ "$BUILD_ON_MAC" = "yes" ]; then specvals=$(macSDKify "$specvals"); fi
- fi
- getSingleQMakeVariable "$1" "$specvals"
-}
-
-#-------------------------------------------------------------------------------
-# operating system detection
-#-------------------------------------------------------------------------------
-detectOperatingSystem()
-{
-# need that throughout the script
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
-
-BUILD_ON_MAC=no
-if [ -d /System/Library/Frameworks/Cocoa.framework ]; then
- BUILD_ON_MAC=yes
-fi
-if [ "$OSTYPE" = "msys" ]; then
- relpath=`(cd "$relpath"; pwd -W)`
- outpath=`pwd -W`
-fi
-}
-#-------------------------------------------------------------------------------
-# Verify Xcode installation on Mac OS
-#-------------------------------------------------------------------------------
-maybeVerifyXcode()
-{
-if [ "$BUILD_ON_MAC" = "yes" ]; then
- if ! /usr/bin/xcode-select --print-path >/dev/null 2>&1; then
- echo >&2
- echo " No Xcode selected. Please install Xcode via the App Store, " >&2
- echo " or the command line developer tools via xcode-select --install, " >&2
- echo " and use xcode-select --switch to choose the right installation. " >&2
- echo " See the xcode-select man page for more information." >&2
- echo >&2
- exit 2
- fi
-
- # In the else case we are probably using a Command Line Tools installation
- if /usr/bin/xcrun -find xcodebuild >/dev/null 2>&1; then
- if ! /usr/bin/xcrun xcodebuild -license check 2>/dev/null; then
- echo >&2
- echo " Xcode setup not complete. You need to confirm the license" >&2
- echo " agreement by running 'sudo xcrun xcodebuild -license accept'." >&2
- echo >&2
- exit 2
- fi
- fi
-fi
-}
-#-----------------------------------------------------------------------------
-# Qt version detection
-#-----------------------------------------------------------------------------
-QT_VERSION=
-QT_MAJOR_VERSION=
-QT_MINOR_VERSION=0
-QT_PATCH_VERSION=0
-detectQtVersion()
-{
-eval `sed -n -e 's/^MODULE_VERSION = \(\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*\)$/QT_VERSION=\1\
- QT_MAJOR_VERSION=\2\
- QT_MINOR_VERSION=\3\
- QT_PATCH_VERSION=\4/p' < "$relpath"/.qmake.conf`
-if [ -z "$QT_MAJOR_VERSION" ]; then
- echo "Cannot process version from .qmake.conf"
- echo "Cannot proceed."
- exit 1
-fi
-}
-#-------------------------------------------------------------------------------
# initialize variables
#-------------------------------------------------------------------------------
-# QTDIR may be set and point to an old or system-wide Qt installation
-unset QTDIR
-
-# initalize internal variables
-CFG_RELEASE_TOOLS=no
-PLATFORM=
-OPT_SHADOW=maybe
-OPT_VERBOSE=no
OPT_HELP=
-CFG_SILENT=no
-CFG_DEV=no
-BUILD_WITH_CMAKE=no
-CMAKE_MAKEFILES=no
#-------------------------------------------------------------------------------
# parse command line arguments
@@ -504,95 +77,10 @@ while [ "$#" -gt 0 ]; do
CURRENT_OPT="$1"
case "$1" in
#Autoconf style options
- --enable-*)
- VAR=`echo $1 | sed 's,^--enable-\(.*\),\1,'`
- VAL=yes
- ;;
- --disable-*)
- VAR=`echo $1 | sed 's,^--disable-\(.*\),\1,'`
- VAL=no
- ;;
- --*=*)
- VAR=`echo $1 | sed 's,^--\(.*\)=.*,\1,'`
- VAL=`echo $1 | sed 's,^--.*=\(.*\),\1,'`
- ;;
- --no-*)
- VAR=`echo $1 | sed 's,^--no-\(.*\),\1,'`
- VAL=no
- ;;
--*)
VAR=`echo $1 | sed 's,^--\(.*\),\1,'`
VAL=yes
;;
- #Qt plugin options
- -no-*-*|-plugin-*-*|-qt-*-*)
- VAR=`echo $1 | sed 's,^-[^-]*-\(.*\),\1,'`
- VAL=`echo $1 | sed 's,^-\([^-]*\).*,\1,'`
- ;;
- #Qt style no options
- -no-*)
- VAR=`echo $1 | sed 's,^-no-\(.*\),\1,'`
- VAL=no
- ;;
- #Qt style options that pass an argument
- -prefix| \
- -docdir| \
- -headerdir| \
- -plugindir| \
- -qmldir| \
- -archdatadir| \
- -datadir| \
- -libdir| \
- -bindir| \
- -libexecdir| \
- -translationdir| \
- -sysconfdir| \
- -examplesdir| \
- -testsdir| \
- -hostdatadir| \
- -hostbindir| \
- -hostlibdir| \
- -extprefix| \
- -sysroot| \
- -external-hostbindir| \
- -make| \
- -nomake| \
- -skip| \
- -platform| \
- -xplatform| \
- -device| \
- -device-option| \
- -sdk| \
- -android-sdk| \
- -android-ndk| \
- -android-ndk-platform| \
- -android-ndk-host| \
- -android-arch)
- VAR=`echo $1 | sed 's,^-\(.*\),\1,'`
- shift
- VAL="$1"
- ;;
- #Qt style complex options in one command
- -enable-*|-disable-*)
- VAR=`echo $1 | sed 's,^-\([^-]*\)-.*,\1,'`
- VAL=`echo $1 | sed 's,^-[^-]*-\(.*\),\1,'`
- ;;
- #Qt Builtin/System style options
- -no-*|-system-*|-qt-*)
- VAR=`echo $1 | sed 's,^-[^-]*-\(.*\),\1,'`
- VAL=`echo $1 | sed 's,^-\([^-]*\)-.*,\1,'`
- ;;
- #Options that cannot be generalized
- -hostprefix)
- VAR=`echo $1 | sed 's,^-\(.*\),\1,'`
- # this option may or may not be followed by an argument
- if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then
- VAL=$outpath
- else
- shift;
- VAL=$1
- fi
- ;;
#General options, including Qt style yes options
-*)
VAR=`echo $1 | sed 's,^-\(.*\),\1,'`
@@ -607,59 +95,18 @@ while [ "$#" -gt 0 ]; do
shift
- UNKNOWN_OPT=no
case "$VAR" in
- external-hostbindir)
- CFG_HOST_QT_TOOLS_PATH="$VAL"
- ;;
- platform)
- PLATFORM="$VAL"
- ;;
- optimized-qmake|optimized-tools)
- if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
- CFG_RELEASE_TOOLS="$VAL"
- fi
- ;;
- developer-build)
- CFG_DEV="yes"
- ;;
h|help)
if [ "$VAL" = "yes" ]; then
OPT_HELP="$VAL"
- else
- UNKNOWN_OPT=yes
fi
;;
- v|verbose)
- if [ "$VAL" = "yes" ]; then
- OPT_VERBOSE=yes
- elif [ "$VAL" = "no" ]; then
- OPT_VERBOSE=no
- else
- UNKNOWN_OPT=yes
- fi
- ;;
- silent)
- # need to keep this here, to ensure qmake is built silently
- CFG_SILENT="$VAL"
- ;;
- cmake)
- BUILD_WITH_CMAKE=yes
- ;;
- cmake-makefiles)
- BUILD_WITH_CMAKE=yes
- CMAKE_MAKEFILES=yes
- ;;
*)
;;
esac
- if [ "$UNKNOWN_OPT" = "yes" ]; then
- echo "${CURRENT_OPT}: invalid command-line switch"
- ERROR=yes
- fi
done
-[ "x$ERROR" = "xyes" ] && exit 1
}
+
#-------------------------------------------------------------------------------
# help - interactive parts of the script _after_ this section please
#-------------------------------------------------------------------------------
@@ -680,362 +127,42 @@ if [ "$OPT_HELP" = "yes" ]; then
exit 0
fi
}
-#-------------------------------------------------------------------------------
-# platform detection
-#-------------------------------------------------------------------------------
-PLATFORM_NOTES=
-detectPlatform()
-{
-if [ -z "$PLATFORM" ]; then
- case "$UNAME_SYSTEM:$UNAME_RELEASE" in
- Darwin:*)
- PLATFORM=macx-clang
- ;;
- AIX:*)
- #PLATFORM=aix-g++
- PLATFORM=aix-g++-64
- PLATFORM_NOTES="AIX: aix-g++ aix-g++-64"
- ;;
- GNU:*)
- PLATFORM=hurd-g++
- ;;
- FreeBSD:*)
- if [ "$(uname -r | cut -d. -f1)" -ge 10 ]; then
- PLATFORM=freebsd-clang
- PLATFORM_NOTES="FreeBSD: freebsd-g++"
- else
- PLATFORM=freebsd-g++
- PLATFORM_NOTES="FreeBSD: freebsd-clang"
- fi
- ;;
- OpenBSD:*)
- PLATFORM=openbsd-g++
- ;;
- NetBSD:*)
- PLATFORM=netbsd-g++
- ;;
- HP-UX:*)
- case "$UNAME_MACHINE" in
- ia64)
- PLATFORM=hpuxi-g++-64
- ;;
- esac
- ;;
- Linux:*)
- PLATFORM=linux-g++
- PLATFORM_NOTES="Linux: linux-clang linux-icc"
- ;;
- SunOS:5*)
- #PLATFORM=solaris-g++-64
- PLATFORM=solaris-cc
- #PLATFORM=solaris-cc64
- PLATFORM_NOTES="Solaris: solaris-g++-64 solaris-cc-64"
- ;;
- CYGWIN*:*)
- PLATFORM=cygwin-g++
- ;;
- LynxOS*:*)
- PLATFORM=lynxos-g++
- ;;
- QNX:*)
- PLATFORM=unsupported/qnx-g++
- ;;
- *)
- echo >&2
- echo " The build script does not currently recognize all" >&2
- echo " platforms supported by Qt." >&2
- echo " Rerun this script with a -platform option listed to" >&2
- echo " set the system/compiler combination you use." >&2
- echo >&2
- exit 2
- esac
-fi
-echo "$PLATFORM_NOTES" > "${outpathPrefix}.config.notes"
-}
-
-#-------------------------------------------------------------------------------
-# command line and environment validation
-#-------------------------------------------------------------------------------
-validateEnv()
-{
-if [ -d "$PLATFORM" ]; then
- QMAKESPEC="$PLATFORM"
-else
- QMAKESPEC="$relpath/mkspecs/${PLATFORM}"
-fi
-
-if [ "$BUILD_ON_MAC" = "yes" ]; then
- if [ `basename $QMAKESPEC` = "macx-xcode" ]; then
- echo >&2
- echo " Platform 'macx-xcode' should not be used when building Qt/Mac." >&2
- echo " Please build Qt/Mac with 'macx-clang' or 'macx-g++', then use" >&2
- echo " the 'macx-xcode' spec for your application, and it will link to" >&2
- echo " the Qt/Mac build using the settings of the original mkspec." >&2
- echo >&2
- exit 2
- fi
-fi
-
-# check specified platforms are supported
-if [ '!' -d "$QMAKESPEC" ]; then
- echo
- echo " The specified system/compiler is not supported:"
- echo
- echo " $QMAKESPEC"
- echo
- echo " Please see the README file for a complete list."
- echo
- exit 2
-fi
-}
-#-------------------------------------------------------------------------------
-# build tree initialization
-#-------------------------------------------------------------------------------
-initBuildTree()
-{
-# is this a shadow build?
-if [ "$OPT_SHADOW" = "maybe" ]; then
- OPT_SHADOW=no
- if [ "$relpath" != "$outpath" ] && [ '!' -f "$outpath/configure" ]; then
- if [ -h "$outpath" ]; then
- [ "$relpath" -ef "$outpath" ] || OPT_SHADOW=yes
- else
- OPT_SHADOW=yes
- fi
- fi
-fi
-if [ "$OPT_SHADOW" = "yes" ]; then
- if [ -f "$relpath/.qmake.cache" -o -f "$relpath/src/corelib/global/qconfig.h" -o -f "$relpath/src/corelib/global/qconfig.cpp" ]; then
- echo >&2 "You cannot make a shadow build from a source tree containing a previous build."
- echo >&2 "Cannot proceed."
- exit 1
- fi
- [ "$OPT_VERBOSE" = "yes" ] && echo "Performing shadow build..."
-fi
-if [ "$OPT_SHADOW" = "yes" ]; then
- echo "Preparing build tree..."
-
- [ -d "$outpath/bin" ] || mkdir -p "$outpath/bin"
-
- mkdir -p "$outpath/mkspecs"
-fi
-}
-
-# $1: input variable name (awk regexp)
-# $2: optional output variable name
-# $3: optional value transformation (sed command)
-# relies on $QMAKESPEC, $COMPILER_CONF and $mkfile being set correctly, as the latter
-# is where the resulting variable is written to
-setBootstrapVariable()
-{
- getQMakeConf "$1" | echo ${2-$1} = `if [ -n "$3" ]; then sed "$3"; else cat; fi` >> "$mkfile"
-}
-
-# -----------------------------------------------------------------------------
-# build qmake
-# -----------------------------------------------------------------------------
-
-buildQMake()
-{
-# symlink includes
-if [ -e "$relpath/.git" ]; then
- if [ -z "$PERL" ]; then
- echo
- echo "You need perl in your PATH to make a build from GIT."
- echo "Cannot proceed."
- exit 1
- fi
-
- "$relpath/bin/syncqt.pl" -version $QT_VERSION -minimal -module QtCore "$relpath" || exit 1
-fi
-# build qmake
- echo "Creating qmake..."
- mkdir -p "$outpath/qmake" || exit
-
- in_mkfile=$relpath/qmake/Makefile.unix
- mkfile=$outpath/qmake/Makefile
- if [ -f "$mkfile" ]; then
- [ "$CFG_DEV" = "yes" ] && "$WHICH" chflags >/dev/null 2>&1 && chflags nouchg "$mkfile"
- rm -f "$mkfile"
- fi
-
- echo "########################################################################" > "$mkfile"
- echo "## This file was autogenerated by configure, all changes will be lost ##" >> "$mkfile"
- echo "########################################################################" >> "$mkfile"
- EXTRA_CXXFLAGS="\$(QMAKE_CXXFLAGS) \$(QMAKE_CXXFLAGS_CXX1Z) \$(QMAKE_CXXFLAGS_SPLIT_SECTIONS)"
- EXTRA_LFLAGS="\$(QMAKE_LFLAGS) \$(QMAKE_LFLAGS_GCSECTIONS)"
+checkTopLevelBuild "$@"
+parseCommandline "$@"
+handleHelp
+determineOptFilePath "$@"
- [ "$CFG_SILENT" = "yes" ] && CC_TRANSFORM='s,^,\@,' || CC_TRANSFORM=
- setBootstrapVariable QMAKE_CC CC "$CC_TRANSFORM"
- setBootstrapVariable QMAKE_CXX CXX "$CC_TRANSFORM"
- setBootstrapVariable QMAKE_CXXFLAGS
- setBootstrapVariable QMAKE_CFLAGS
- setBootstrapVariable QMAKE_CXXFLAGS_CXX1Z
- setBootstrapVariable QMAKE_CXXFLAGS_SPLIT_SECTIONS
- setBootstrapVariable QMAKE_LFLAGS
- setBootstrapVariable QMAKE_LFLAGS_GCSECTIONS
+optfilepath=${outpathPrefix}/config.opt
+opttmpfilepath=${outpathPrefix}/config.opt.in
- if [ "$CFG_DEBUG" = "no" ] || [ "$CFG_RELEASE_TOOLS" = "yes" ]; then
- setBootstrapVariable QMAKE_CXXFLAGS_RELEASE
- EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_RELEASE)"
- else
- setBootstrapVariable QMAKE_CXXFLAGS_DEBUG
- EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_DEBUG)"
- fi
+redofilepath=${outpathPrefix}/config.redo.last
+redotmpfilepath=${outpathPrefix}/config.redo.in
- adjrelpath=`echo "$relpath" | sed 's/ /\\\\\\\\ /g'`
- adjoutpath=`echo "$outpath" | sed 's/ /\\\\\\\\ /g'`
- adjqmakespec=`echo "$QMAKESPEC" | sed 's/ /\\\\\\\\ /g'`
+fresh_requested_arg=
+if [ -z "$optfile" ]; then # only write optfile if not currently redoing
+ > "$opttmpfilepath"
+ > "$redotmpfilepath"
- echo "BUILD_PATH = .." >> "$mkfile"
- echo "SOURCE_PATH = $adjrelpath" >> "$mkfile"
- if [ -e "$relpath/.git" ]; then
- echo 'INC_PATH = $(BUILD_PATH)/include' >> "$mkfile"
- else
- echo 'INC_PATH = $(SOURCE_PATH)/include' >> "$mkfile"
- fi
- echo "QMAKESPEC = $adjqmakespec" >> "$mkfile"
- echo "QT_VERSION = $QT_VERSION" >> "$mkfile"
- echo "QT_MAJOR_VERSION = $QT_MAJOR_VERSION" >> "$mkfile"
- echo "QT_MINOR_VERSION = $QT_MINOR_VERSION" >> "$mkfile"
- echo "QT_PATCH_VERSION = $QT_PATCH_VERSION" >> "$mkfile"
- echo "CONFIG_CXXFLAGS = $EXTRA_CXXFLAGS" >> "$mkfile"
- echo "CONFIG_CFLAGS = \$(QMAKE_CFLAGS)" >> "$mkfile"
- echo "CONFIG_LFLAGS = $EXTRA_LFLAGS" >> "$mkfile"
- echo "RM_F = rm -f" >> "$mkfile"
- echo "RM_RF = rm -rf" >> "$mkfile"
+ for arg in "$@"; do echo \"$arg\" >> "$opttmpfilepath"; done
- case `basename "$PLATFORM"` in
- win32-*g++*)
- cat "$in_mkfile.win32" >> "$mkfile"
- ;;
- *)
- cat "$in_mkfile.unix" >> "$mkfile"
- if [ "$BUILD_ON_MAC" = "yes" ]; then
- cat "$in_mkfile.macos" >> "$mkfile"
- fi
- ;;
- esac
- echo >>"$mkfile"
-
- if [ "$BUILD_ON_MAC" = "yes" ]; then
- echo "EXTRA_CXXFLAGS += -MMD" >> "$mkfile"
- cat "$in_mkfile" >> "$mkfile"
- echo "-include \$(notdir \$(DEPEND_SRC:%.cpp=%.d))" >> "$mkfile"
- else
- cat "$in_mkfile" >> "$mkfile"
- if "$WHICH" makedepend >/dev/null 2>&1 && grep 'depend:' "$mkfile" >/dev/null 2>&1; then
- (cd "$outpath/qmake" && "$MAKE" -f "$mkfile" depend) >/dev/null 2>&1
- sed 's,^.*/\([^/]*.o\):,\1:,g' "$mkfile" >"$mkfile.tmp"
- sed "s,$outpath,$adjoutpath,g" "$mkfile.tmp" >"$mkfile"
- rm "$mkfile.tmp"
- fi
- fi
-
- if [ "$OPT_VERBOSE" = yes ]; then
- # Show the output of make
- (cd "$outpath/qmake"; "$MAKE") || exit 2
- else
- # Hide the output of make
- # Use bash to print dots, if we have it, and stdout is a tty.
- if test -t 1 && $WHICH bash > /dev/null 2>/dev/null; then
- bash -c 'set -o pipefail
- cd "$0/qmake"; "$1" | while read line; do
- builtin echo -n .
- done' "$outpath" "$MAKE" || exit 2
- else
- (cd "$outpath/qmake"; "$MAKE" -s) || exit 2
- fi
- echo "Done."
- fi
-}
-
-#-------------------------------------------------------------------------------
-# create a qt.conf for the Qt build tree itself
-#-------------------------------------------------------------------------------
+ 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
-createQtConf()
-{
-# Note that this file is just sufficient to boot configure, by which it is
-# replaced in-place with a version which is suitable for building all of Qt.
-QTCONFFILE="$outpath/bin/qt.conf"
-cat > "$QTCONFFILE" <<EOF
-[EffectivePaths]
-Prefix=..
-[Paths]
-TargetSpec=dummy
-HostSpec=$PLATFORM
-EOF
-if [ x"$relpath" != x"$outpath" ]; then
- cat >> "$QTCONFFILE" <<EOF
-[EffectiveSourcePaths]
-Prefix=$relpath
-EOF
+ 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
-}
-
-#-------------------------------------------------------------------------------
-# configure and build top-level makefile
-#-------------------------------------------------------------------------------
-createToplevelMakefile()
-{
-# recreate command line for qmake
-set -f
-SAVED_IFS=$IFS
-IFS='
-'
-for i in $QMAKE_CMDLINE; do
- set -- "$@" "$i"
-done
-set +f
-IFS=$SAVED_IFS
+top_level_arg=
if [ -n "$CFG_TOPLEVEL" ]; then
+ top_level_arg=-DTOP_LEVEL=TRUE
cd ..
fi
-if [ -n "$CFG_HOST_QT_TOOLS_PATH" ]; then
- "$CFG_HOST_QT_TOOLS_PATH/qmake" -qtconf "$QTCONFFILE" "$relpathMangled" -- "$@"
-else
- "$outpath/bin/qmake" "$relpathMangled" -- "$@"
-fi
-}
+exec cmake "-DOPTFILE=${optfilepath}" ${top_level_arg} ${fresh_requested_arg} -P "${relpath}/cmake/QtProcessConfigureArgs.cmake"
-runCMake()
-{
-# recreate command line for cmake
-set -f
-SAVED_IFS=$IFS
-IFS='
-'
-for i in $CMAKE_CMDLINE; do
- set -- $* "$i"
-done
-set +f
IFS=$SAVED_IFS
-cmake $* "$relpath"
-}
-
-parseCommandline "$@"
-handleHelp
-if [ "$BUILD_WITH_CMAKE" = "yes" ]; then
- getCMakeCmdLine $@
- runCMake
-else
- findPerl
- findAwk
- findMake
- checkQMakeEnv
- checkTopLevelBuild "$@"
- getOptAndQMakeCmdLines "$@"
- detectOperatingSystem
- maybeVerifyXcode
- detectQtVersion
- detectPlatform
- validateEnv
- initBuildTree
- buildQMake
- createQtConf
- createToplevelMakefile
-fi