diff --git a/devel/qt5/dynamic-openql-fixes/configure b/devel/qt5/dynamic-openql-fixes/configure new file mode 100755 index 00000000..cd348654 --- /dev/null +++ b/devel/qt5/dynamic-openql-fixes/configure @@ -0,0 +1,7763 @@ +#!/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$ +## +############################################################################# + +#------------------------------------------------------------------------------- +# script initialization +#------------------------------------------------------------------------------- + +# the name of this script +relconf=`basename $0` +# 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` + +# where to find which.. +unixtests="$relpath/config.tests/unix" +mactests="$relpath/config.tests/mac" +WHICH="$unixtests/which.test" + +PERL=`$WHICH perl 2>/dev/null` + +# find out which awk we want to use, prefer gawk, then nawk, then regular awk +AWK= +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 +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 + +# do this early so we don't store it in config.status +CFG_TOPLEVEL= +if [ x"$1" = x"-top-level" ]; then + CFG_TOPLEVEL=yes + shift +fi + +# later cache the command line in config.status +OPT_CMDLINE= +for i in "$@"; do + if [ "x$i" != "x-v" ]; then + [ -z "${i##* *}" ] && i="'$i'" + OPT_CMDLINE="$OPT_CMDLINE $i" + fi +done + +# initialize global variables +CONFIG_SEPARATORS=`printf ' \t'` +QMAKE_SWITCHES= +QMAKE_VARS= +QMAKE_CONFIG= +QTCONFIG_CONFIG= +QT_CONFIG= +SUPPORTED= +QMAKE_VARS_FILE=.qmake.vars +DEVICE_VARS_FILE=.device.vars +HOST_VARS_FILE=.host.vars + +:> "$QMAKE_VARS_FILE" +:> "$DEVICE_VARS_FILE" +:> "$HOST_VARS_FILE" + +#------------------------------------------------------------------------------- +# utility functions +#------------------------------------------------------------------------------- + +shellEscape() +{ + echo "$@" | sed 's/ /\ /g' +} + +makeabs() +{ + local FILE="$1" + local RES="$FILE" + if [ -z "${FILE##/*}" ]; then + true + elif [ "$OSTYPE" = "msys" -a -z "${FILE##[a-zA-Z]:[/\\]*}" ]; then + true + else + RES=$PWD/$FILE + fi + RES=$RES/ + while true; do + nres=`echo "$RES" | sed 's,/[^/][^/]*/\.\./,/,g; s,/\./,/,g'` + test x"$nres" = x"$RES" && break + RES=$nres + done + echo "$RES" | sed 's,//,/,g; s,/$,,' +} + +# Adds a new qmake variable to the cache +# Usage: QMakeVar mode varname contents +# where mode is one of: set, add, del +QMakeVar() +{ + case "$1" in + set) + eq="=" + ;; + add) + eq="+=" + ;; + del) + eq="-=" + ;; + *) + echo >&2 "BUG: wrong command to QMakeVar: $1" + ;; + esac + + echo "$2" "$eq" "$3" >> "$QMAKE_VARS_FILE" +} + +shellArgumentListToQMakeListHelper() +{ + local retval + for arg in "$@"; do retval="$retval \"$arg\""; done + echo "$retval" +} + +# Convert a string usable on a shell command line into word-by-word quoted +# qmake list. +shellArgumentListToQMakeList() +{ + # eval is needed for the shell to interpret the backslash escape sequences + eval shellArgumentListToQMakeListHelper "$@" +} + +# 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" "$2" + ;; + *load\(device_config\)*) + conf_file="$2" + if [ ! -f "$conf_file" ]; then + echo "WARNING: Unable to find file $conf_file" >&2 + continue + fi + expandQMakeConf "$conf_file" "$2" + ;; + *) + echo "$line" + ;; + esac; done < "$1" +} + +extractQMakeVariables() +{ + LC_ALL=C $AWK ' +BEGIN { + values["LITERAL_WHITESPACE"] = " " + values["LITERAL_DOLLAR"] = "$" +} +/^!?host_build:/ { + scopeStart = index($0, ":") + 1 + condition = substr($0, 0, scopeStart - 2) + if (condition != "'"$1"'") { next } + $0 = substr($0, scopeStart) +} +/^[_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/xcodebuild -sdk $sdk -version 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")" + ;; + *) + ;; + esac + + 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=*|QMAKE_CXXFLAGS=*) + echo "$line -isysroot $sysroot $version_min_flag" + ;; + QMAKE_LFLAGS=*) + echo "$line -Wl,-syslibroot,$sysroot $version_min_flag" + ;; + *) + echo "$line" + ;; + esac + done +} + +# 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" "$HOST_VARS_FILE" | extractQMakeVariables "host_build"` + if [ "$BUILD_ON_MAC" = "yes" ]; then specvals=$(macSDKify "$specvals"); fi + fi + getSingleQMakeVariable "$1" "$specvals" +} + +getXQMakeConf() +{ + if [ -z "$xspecvals" ]; then + xspecvals=`expandQMakeConf "$XQMAKESPEC/qmake.conf" "$DEVICE_VARS_FILE" | extractQMakeVariables "!host_build"` + if [ "$XPLATFORM_MAC" = "yes" ]; then xspecvals=$(macSDKify "$xspecvals"); fi + fi + getSingleQMakeVariable "$1" "$xspecvals" +} + +testXConfig() +{ + # Put a space on each end of the CONFIG value so that searching for the + # target with whitespace on either side will work even when it's the + # first/last/only item in the CONFIG value. + case \ `getXQMakeConf CONFIG`\ in + *[${CONFIG_SEPARATORS}]$1[${CONFIG_SEPARATORS}]*) + return 0 + ;; + *) + return 1 + ;; + esac +} + +compilerSupportsFlag() +{ + cat >conftest.cpp </dev/null 2>&1 + fi + ret=$? + rm -f conftest.cpp conftest-out + return $ret +} + +linkerSupportsFlag() +{ + compiler=$1 + shift + lflags=-Wl + for flag + do + safe_flag=`shellEscape "$flag"` + lflags=$lflags,$safe_flag + done + if [ $CFG_USE_GOLD_LINKER = yes ]; then + lflags="-fuse-ld=gold $lflags" + fi + compilerSupportsFlag $compiler $lflags +} + +# $1: newline-separated list of default paths +# stdin: input path +# stdout: input path or nothing +filterDefaultPaths() +{ + local path + path=`cat` + path=`makeabs "$path"` + echo "$1" | grep "^$path\$" > /dev/null || echo "$path" +} + +filterIncludePath() +{ + filterDefaultPaths "$DEFAULT_INCDIRS" +} + +filterLibraryPath() +{ + filterDefaultPaths "$DEFAULT_LIBDIRS" +} + +filterPathOptionsHelper() +{ + local flag defpaths sep p path + flag=$1; shift + defpaths=$1; shift + sep= + for p in "$@"; do + path=${p#$flag} + if [ "x$path" != "x$p" ]; then + path=`echo "$path" | filterDefaultPaths "$defpaths"` + test -z "$path" && continue + fi + # Re-quote for shell & qmake + p=`echo "$p" | sed 's,[^ ]* .*,"&",g'` + printf "%s%s" "$sep" "$p" + sep=" " + done + echo +} + +# $1: flag +# $2: newline-separated list of default paths +# stdin: list of command line options +# sdout: stdin without the options naming default paths +filterPathOptions() +{ + # The eval does escape interpretation for us + eval filterPathOptionsHelper $1 "\"$2\"" "`cat`" +} + +filterIncludeOptions() +{ + filterPathOptions -I "$DEFAULT_INCDIRS" +} + +filterLibraryOptions() +{ + filterPathOptions -L "$DEFAULT_LIBDIRS" +} + +#------------------------------------------------------------------------------- +# device options +#------------------------------------------------------------------------------- +DeviceVar() +{ + case "$1" in + set) + eq="=" + ;; + *) + echo >&2 "BUG: wrong command to DeviceVar: $1" + ;; + esac + + echo "$2" "$eq" "$3" >> "$DEVICE_VARS_FILE" +} + +resolveDeviceMkspec() +{ + result=$(find "$relpath/mkspecs/devices/" -type d -name "*$1*" | sed "s,^$relpath/mkspecs/,,") + match_count=$(echo "$result" | wc -w) + if [ "$match_count" -gt 1 ]; then + echo >&2 "Error: Multiple matches for device '$1'. Candidates are:" + tabbed_result=$(echo "$result" | sed 's,^, ,') + echo >&2 "$tabbed_result" + echo "undefined" + elif [ "$match_count" -eq 0 ]; then + echo >&2 "Error: No device matching '$1'" + echo "undefined" + else + echo "$result" + fi +} + +#------------------------------------------------------------------------------- +# Host options +#------------------------------------------------------------------------------- +HostVar() +{ + case "$1" in + set) + eq="=" + ;; + *) + echo >&2 "BUG: wrong command to HostVar: $1" + ;; + esac + + echo "$2" "$eq" "$3" >> "$HOST_VARS_FILE" +} + +#------------------------------------------------------------------------------- +# operating system detection +#------------------------------------------------------------------------------- + +# 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 +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# detect the "echo without newline" style. usage: echo $ECHO_N "$ECHO_C" +if echo '\c' | grep '\c' >/dev/null; then + ECHO_N=-n +else + ECHO_C='\c' +fi + +#------------------------------------------------------------------------------- +# window system detection +#------------------------------------------------------------------------------- + +BUILD_ON_MAC=no +if [ -d /System/Library/Frameworks/Carbon.framework ]; then + BUILD_ON_MAC=yes +fi +HOST_DIRLIST_SEP=":" +DEV_NULL=/dev/null +if [ "$OSTYPE" = "msys" ]; then + HOST_DIRLIST_SEP=";" + DEV_NULL=/tmp/empty-file + echo "" > $DEV_NULL + relpath=`(cd "$relpath"; pwd -W)` + outpath=`pwd -W` +fi + +#------------------------------------------------------------------------------- +# Verify Xcode installation on Mac OS +#------------------------------------------------------------------------------- + +if [ "$BUILD_ON_MAC" = "yes" ]; then + if ! /usr/bin/xcode-select --print-path >/dev/null 2>&1; then + echo >&2 + echo " No Xcode is selected. Use xcode-select -switch to choose an Xcode" >&2 + echo " version. See the xcode-select man page for more information." >&2 + echo >&2 + exit 2 + fi + + if ! /usr/bin/xcrun -find xcrun >/dev/null 2>&1; then + echo >&2 + echo " Xcode not set up properly. You may need to confirm the license" >&2 + echo " agreement by running /usr/bin/xcodebuild without arguments." >&2 + echo >&2 + exit 2 + fi +fi + +#----------------------------------------------------------------------------- +# Qt version detection +#----------------------------------------------------------------------------- +QT_VERSION= +QT_MAJOR_VERSION= +QT_MINOR_VERSION=0 +QT_PATCH_VERSION=0 +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 + +#------------------------------------------------------------------------------- +# initalize variables +#------------------------------------------------------------------------------- + +SYSTEM_VARIABLES="AR RANLIB STRIP OBJDUMP LD CC CXX CFLAGS CXXFLAGS LDFLAGS" +for varname in $SYSTEM_VARIABLES; do + qmakevarname="${varname}" + qmakecmdargs="" + # use LDFLAGS for autoconf compat, but qmake uses QMAKE_LFLAGS + if [ "${varname}" = "LDFLAGS" ]; then + qmakevarname="LFLAGS" + elif [ "${varname}" = "LD" ]; then + qmakevarname="LINK" + elif [ "${varname}" = "AR" ]; then + # QMAKE_AR needs to be set to "/path/to/ar cqs" but the + # environment variable will be set to the command only so we + # need to append " cqs" for autoconf compatibility + qmakecmdargs=" cqs" + fi + cmd=`echo \ +'if [ -n "\$'${varname}'" ]; then + QMakeVar set QMAKE_'${qmakevarname}' "\$'${varname}${qmakecmdargs}'" +fi'` + eval "$cmd" +done + +# Use CC/CXX to run config.tests +mkdir -p "$outpath/config.tests" +rm -f "$outpath/config.tests/.qmake.cache" +cp "$QMAKE_VARS_FILE" "$outpath/config.tests/.qmake.cache" + +QMakeVar add styles "mac fusion windows" + +# QTDIR may be set and point to an old or system-wide Qt installation +unset QTDIR + +# the minimum version of libdbus-1 that we require: +MIN_DBUS_1_VERSION=1.2 + +# initalize internal variables +CFG_CONFIGURE_EXIT_ON_ERROR=yes +CFG_PROFILE=no +CFG_STRIP=yes +CFG_GUI=auto # (yes|no|auto) +CFG_WIDGETS=yes +CFG_QCONFIG=full +CFG_DEBUG=auto +CFG_MYSQL_CONFIG= +CFG_PSQL_CONFIG= +CFG_DEBUG_RELEASE=no +CFG_FORCEDEBUGINFO=no +CFG_RELEASE_TOOLS=no +CFG_SHARED=yes +CFG_SM=auto +CFG_XSHAPE=auto +CFG_XSYNC=auto +CFG_XFIXES=runtime +CFG_ZLIB=auto +CFG_MTDEV=auto +CFG_JOURNALD=no +CFG_SYSLOG=no +CFG_SQLITE=qt +CFG_GIF=auto +CFG_PNG=yes +CFG_LIBPNG=auto +CFG_JPEG=auto +CFG_LIBJPEG=auto +CFG_XCURSOR=runtime +CFG_XRANDR=runtime +CFG_XRENDER=auto +CFG_MITSHM=auto +CFG_OPENGL=auto +CFG_OPENVG=auto +CFG_OPENVG_LC_INCLUDES=no +CFG_OPENVG_SHIVA=auto +CFG_OPENVG_ON_OPENGL=auto +CFG_EGL=auto +CFG_EGL_X=auto +CFG_DOUBLECONVERSION=auto +CFG_FONTCONFIG=auto +CFG_FREETYPE=auto +CFG_HARFBUZZ=auto +CFG_SQL_AVAILABLE= +QT_ALL_BUILD_PARTS=" libs tools examples tests " +QT_DEFAULT_BUILD_PARTS="libs tools examples" +CFG_BUILD_PARTS="" +CFG_NOBUILD_PARTS="" +CFG_SKIP_MODULES="" +CFG_COMPILE_EXAMPLES=yes +CFG_AUDIO_BACKEND=auto +CFG_QML_DEBUG=yes +CFG_PKGCONFIG=auto +CFG_STACK_PROTECTOR_STRONG=auto +CFG_SLOG2=auto +CFG_PPS=auto +CFG_QNX_IMF=auto +CFG_LGMON=auto +CFG_SYSTEM_PROXIES=no +CFG_ANDROID_STYLE_ASSETS=yes +CFG_GSTREAMER=auto +CFG_GSTREAMER_VERSION="" +CFG_ATOMIC64=auto + +# Target architecture +CFG_ARCH= +CFG_CPUFEATURES= +# Host architecture, same as CFG_ARCH when not cross-compiling +CFG_HOST_ARCH= +CFG_HOST_CPUFEATURES= +# Set when the -arch or -host-arch arguments are used +OPT_OBSOLETE_HOST_ARG=no + +CFG_USE_GNUMAKE=no +CFG_XINPUT2=auto +CFG_XKB=auto +CFG_XKBCOMMON=yes +CFG_XKBCOMMON_EVDEV=auto +CFG_XKB_CONFIG_ROOT=auto +CFG_XCB=auto +CFG_XCB_XLIB=auto +CFG_XCB_GLX=no +CFG_EGLFS=auto +CFG_EGLFS_BRCM=no +CFG_EGLFS_EGLDEVICE=no +CFG_EGLFS_MALI=no +CFG_EGLFS_VIV=no +CFG_EGLFS_VIV_WL=no +CFG_DIRECTFB=no +CFG_GBM=auto +CFG_LINUXFB=auto +CFG_INTEGRITYFB=no +CFG_KMS=auto +CFG_MIRCLIENT=auto +CFG_LIBUDEV=auto +CFG_LIBINPUT=auto +CFG_OBSOLETE_WAYLAND=no +CFG_EVDEV=auto +CFG_TSLIB=auto +CFG_NIS=auto +CFG_CUPS=auto +CFG_ICONV=auto +CFG_DBUS=auto +CFG_GLIB=auto +CFG_GTK=auto +CFG_LARGEFILE=auto +CFG_OPENSSL=auto +CFG_LIBPROXY=auto +CFG_SECURETRANSPORT=auto +CFG_PRECOMPILE=auto +CFG_LTCG=no +CFG_SEPARATE_DEBUG_INFO=no +CFG_REDUCE_EXPORTS=auto +CFG_SSE2=auto +CFG_SSE3=auto +CFG_SSSE3=auto +CFG_SSE4_1=auto +CFG_SSE4_2=auto +CFG_AVX=auto +CFG_AVX2=auto +CFG_AVX512=auto +CFG_REDUCE_RELOCATIONS=auto +CFG_ACCESSIBILITY=auto +CFG_ACCESSIBILITY_ATSPI_BRIDGE=no # will be enabled depending on dbus and accessibility being enabled +CFG_NEON=auto +CFG_MIPS_DSP=auto +CFG_MIPS_DSPR2=auto +CFG_CLOCK_GETTIME=auto +CFG_CLOCK_MONOTONIC=auto +CFG_POSIX_FALLOCATE=auto +CFG_MREMAP=auto +CFG_GETADDRINFO=auto +CFG_IPV6IFNAME=auto +CFG_GETIFADDRS=auto +CFG_INOTIFY=auto +CFG_EVENTFD=auto +CFG_CLOEXEC=no +CFG_POLL=auto +CFG_RPATH=yes +CFG_FRAMEWORK=auto +CFG_USE_GOLD_LINKER=auto +CFG_ENABLE_NEW_DTAGS=auto +DEFINES= +INCLUDES= +D_FLAGS= +I_FLAGS= +L_FLAGS= +RPATH_FLAGS= +W_FLAGS= +QCONFIG_FLAGS= +XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" +XPLATFORM_MAC=no # Whether target platform is OS X or iOS +XPLATFORM_IOS=no # Whether target platform is iOS +XPLATFORM_ANDROID=no +XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) +XPLATFORM_QNX=no +XPLATFORM_HAIKU=no +XPLATFORM_INTEGRITY=no +PLATFORM=$QMAKESPEC +QT_CROSS_COMPILE=no +OPT_CONFIRM_LICENSE=no +OPT_SHADOW=maybe +OPT_VERBOSE=no +OPT_HELP= +CFG_SILENT=no +CFG_ALSA=auto +CFG_PULSEAUDIO=auto +CFG_COREWLAN=auto +CFG_ICU=auto +CFG_FORCE_ASSERTS=no +CFG_SANITIZERS=none +CFG_SANITIZE_ADDRESS=no +CFG_SANITIZE_THREAD=no +CFG_SANITIZE_MEMORY=no +CFG_SANITIZE_UNDEFINED=no +CFG_PCRE=auto +QPA_PLATFORM_GUARD=yes +CFG_STDCXX=auto +CFG_DIRECTWRITE=no +CFG_DIRECTWRITE2=auto +CFG_WERROR=auto +CFG_HEADERSCLEAN=auto +CFG_QREAL=double +OPT_MAC_SDK= +COMMERCIAL_USER=ask +LICENSE_FILE= +CFG_DEV=no + +# initalize variables used for installation +QT_INSTALL_PREFIX= +QT_INSTALL_DOCS= +QT_INSTALL_HEADERS= +QT_INSTALL_LIBS= +QT_INSTALL_BINS= +QT_INSTALL_LIBEXECS= +QT_INSTALL_PLUGINS= +QT_INSTALL_IMPORTS= +QT_INSTALL_QML= +QT_INSTALL_ARCHDATA= +QT_INSTALL_DATA= +QT_INSTALL_TRANSLATIONS= +QT_INSTALL_SETTINGS= +QT_INSTALL_EXAMPLES= +QT_INSTALL_TESTS= +CFG_SYSROOT= +CFG_GCC_SYSROOT="yes" +QT_HOST_PREFIX= +QT_HOST_BINS= +QT_HOST_LIBS= +QT_HOST_DATA= +QT_EXT_PREFIX= + +#flags for SQL drivers +QT_CFLAGS_PSQL= +QT_LFLAGS_PSQL= +QT_CFLAGS_MYSQL= +QT_LFLAGS_MYSQL= +QT_LFLAGS_MYSQL_R= +QT_CFLAGS_SQLITE= +QT_LFLAGS_SQLITE= +QT_LFLAGS_ODBC="-lodbc" +QT_LFLAGS_TDS= + +# flags for libdbus-1 +QT_CFLAGS_DBUS= +QT_LIBS_DBUS= + +# flags for Glib (X11 only) +QT_CFLAGS_GLIB= +QT_LIBS_GLIB= + +# default qpa platform +QT_QPA_DEFAULT_PLATFORM= + +# Android vars +CFG_DEFAULT_ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT +CFG_DEFAULT_ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT +CFG_DEFAULT_ANDROID_PLATFORM=android-9 +CFG_DEFAULT_ANDROID_TARGET_ARCH=armeabi-v7a +CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION=4.9 +CFG_DEFAULT_ANDROID_NDK_HOST=$ANDROID_NDK_HOST + +#------------------------------------------------------------------------------- +# check SQL drivers available in this package +#------------------------------------------------------------------------------- + +# opensource version removes some drivers, so force them to be off +CFG_SQL_tds=no +CFG_SQL_oci=no +CFG_SQL_db2=no + +CFG_SQL_AVAILABLE= +if [ -d "$relpath/src/plugins/sqldrivers" ]; then + for a in "$relpath/src/plugins/sqldrivers/"*; do + if [ -d "$a" ]; then + base_a=`basename "$a"` + CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${base_a}" + eval "CFG_SQL_${base_a}=auto" + fi + done +fi + +CFG_IMAGEFORMAT_PLUGIN_AVAILABLE= +if [ -d "$relpath/src/plugins/imageformats" ]; then + for a in "$relpath/src/plugins/imageformats/"*; do + if [ -d "$a" ]; then + base_a=`basename "$a"` + CFG_IMAGEFORMAT_PLUGIN_AVAILABLE="${CFG_IMAGEFORMAT_PLUGIN_AVAILABLE} ${base_a}" + fi + done +fi + +#------------------------------------------------------------------------------- +# parse command line arguments +#------------------------------------------------------------------------------- + +# parse the arguments, setting things to "yes" or "no" +while [ "$#" -gt 0 ]; do + CURRENT_OPT="$1" + UNKNOWN_ARG=no + 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| \ + -importdir| \ + -qmldir| \ + -archdatadir| \ + -datadir| \ + -libdir| \ + -bindir| \ + -libexecdir| \ + -translationdir| \ + -sysconfdir| \ + -examplesdir| \ + -testsdir| \ + -hostdatadir| \ + -hostbindir| \ + -hostlibdir| \ + -extprefix| \ + -sysroot| \ + -external-hostbindir| \ + -depths| \ + -make| \ + -nomake| \ + -skip| \ + -platform| \ + -xplatform| \ + -device| \ + -device-option| \ + -host-option| \ + -sdk| \ + -arch| \ + -host-arch| \ + -c++std | \ + -mysql_config| \ + -psql_config| \ + -qpa| \ + -qconfig| \ + -qreal| \ + -sanitize| \ + -xkb-config-root| \ + -android-sdk| \ + -android-ndk| \ + -android-ndk-platform| \ + -android-ndk-host| \ + -android-arch| \ + -android-toolchain-version) + 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,'` + ;; + -system-proxies) + VAR=system-proxies + VAL=yes + ;; + -no-system-proxies) + VAR=system-proxies + VAL=no + ;; + #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 + -k|-continue) + VAR=fatal_error + VAL=no + ;; + -opengl) + VAR=opengl + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=yes + else + shift; + VAL=$1 + fi + ;; + -openvg) + VAR=openvg + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=yes + else + shift; + VAL=$1 + fi + ;; + -gstreamer) + VAR=gstreamer + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=yes + else + shift; + VAL=$1 + fi + ;; + -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 + ;; + -qtnamespace) + VAR="qtnamespace" + shift + VAL="$1" + ;; + -qtlibinfix) + VAR="qtlibinfix" + shift + VAL="$1" + ;; + -D?*|-D) + VAR="add_define" + if [ "$1" = "-D" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-D,,'` + fi + ;; + -fpu) + VAR="fpu" + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=no + else + shift + VAL=$1 + fi + ;; + -I?*|-I) + VAR="add_ipath" + if [ "$1" = "-I" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-I,,'` + fi + ;; + -L?*|-L) + VAR="add_lpath" + if [ "$1" = "-L" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-L,,'` + fi + ;; + -R?*|-R) + VAR="add_rpath" + if [ "$1" = "-R" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-R,,'` + fi + ;; + -l) # -lfoo is handled differently + VAR="add_link" + shift + VAL="$1" + ;; + -F?*|-F) + VAR="add_fpath" + if [ "$1" = "-F" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-F,,'` + fi + ;; + -fw) # -fwfoo is handled differently + VAR="add_framework" + shift + VAL="$1" + ;; + -W*) + VAR="add_warn" + VAL="$1" + ;; + #General options, including Qt style yes options + -*) + VAR=`echo $1 | sed 's,^-\(.*\),\1,'` + VAL="yes" + ;; + *) + UNKNOWN_ARG=yes + ;; + esac + if [ "$UNKNOWN_ARG" = "yes" ]; then + echo "$1: unknown argument" + ERROR=yes + shift + continue + fi + shift + + UNKNOWN_OPT=no + case "$VAR" in + accessibility) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ACCESSIBILITY="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + license) + LICENSE_FILE="$VAL" + ;; + gnumake) + CFG_USE_GNUMAKE="$VAL" + ;; + mysql_config) + CFG_MYSQL_CONFIG="$VAL" + ;; + psql_config) + CFG_PSQL_CONFIG="$VAL" + ;; + prefix) + QT_INSTALL_PREFIX="$VAL" + ;; + hostprefix) + QT_HOST_PREFIX="$VAL" + ;; + hostdatadir) + QT_HOST_DATA="$VAL" + ;; + hostbindir) + QT_HOST_BINS="$VAL" + ;; + hostlibdir) + QT_HOST_LIBS="$VAL" + ;; + extprefix) + QT_EXT_PREFIX="$VAL" + ;; + pkg-config) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PKGCONFIG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + force-pkg-config) + CFG_PKGCONFIG="yes" + ;; + docdir) + QT_INSTALL_DOCS="$VAL" + ;; + headerdir) + QT_INSTALL_HEADERS="$VAL" + ;; + plugindir) + QT_INSTALL_PLUGINS="$VAL" + ;; + importdir) + QT_INSTALL_IMPORTS="$VAL" + ;; + qmldir) + QT_INSTALL_QML="$VAL" + ;; + archdatadir) + QT_INSTALL_ARCHDATA="$VAL" + ;; + datadir) + QT_INSTALL_DATA="$VAL" + ;; + libdir) + QT_INSTALL_LIBS="$VAL" + ;; + qtnamespace) + QT_NAMESPACE="$VAL" + ;; + qtlibinfix) + QT_LIBINFIX="$VAL" + ;; + translationdir) + QT_INSTALL_TRANSLATIONS="$VAL" + ;; + sysconfdir|settingsdir) + QT_INSTALL_SETTINGS="$VAL" + ;; + examplesdir) + QT_INSTALL_EXAMPLES="$VAL" + ;; + testsdir) + QT_INSTALL_TESTS="$VAL" + ;; + qconfig) + CFG_QCONFIG="$VAL" + ;; + qreal) + CFG_QREAL="$VAL" + if [ "$CFG_QREAL" = "float" ]; then + CFG_QREAL_STRING="\"float\"" + elif [ "$CFG_QREAL" != "double" ]; then + if [ -z "$PERL" ]; then + echo "configure needs perl in \$PATH if the -qreal option is used with" >&2 + echo "a value different from \"float\"" >&2 + exit 1 + fi + CFG_QREAL_STRING=`perl -e '$_ = $ARGV[0]; + s/ +/ /g; s/^ +//; s/ +$//; + while (/(.)/g) { + $c = $1; + if ($c =~ /[a-zA-Z0-9]/) { $result .= $c; } + else { $result .= "_" . unpack("H*", $c); } + } + print "\"$result\"";' "$CFG_QREAL"` + fi + ;; + sanitize) + if [ "$VAL" = "address" ]; then + CFG_SANITIZE_ADDRESS=yes + elif [ "$VAL" = "thread" ]; then + CFG_SANITIZE_THREAD=yes + elif [ "$VAL" = "memory" ]; then + CFG_SANITIZE_MEMORY=yes + elif [ "$VAL" = "undefined" ]; then + CFG_SANITIZE_UNDEFINED=yes + else + echo "Unknown sanitizer: '$VAL'" + ERROR=true + fi + if [ "$CFG_SANITIZERS" = "none" ]; then + CFG_SANITIZERS=$VAL + else + CFG_SANITIZERS="$CFG_SANITIZERS $VAL" + fi + ;; + sysroot) + CFG_SYSROOT="$VAL" + ;; + gcc-sysroot) + CFG_GCC_SYSROOT="$VAL" + ;; + external-hostbindir) + CFG_HOST_QT_TOOLS_PATH="$VAL" + HostVar set HOST_QT_TOOLS "$VAL" + ;; + bindir) + QT_INSTALL_BINS="$VAL" + ;; + libexecdir) + QT_INSTALL_LIBEXECS="$VAL" + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || + [ "$VAL" = "angle" ] || [ "$VAL" = "dynamic" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + openvg) + if [ "$VAL" = "auto" ] || [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_OPENVG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + nomake) + if [ -n "${QT_ALL_BUILD_PARTS%%* $VAL *}" ]; then + echo "Unknown part $VAL passed to -nomake." >&2 + exit 1 + fi + CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS $VAL" + ;; + make) + if [ "$VAL" = "no" ]; then + UNKNOWN_OPT=yes + else + if [ -n "${QT_ALL_BUILD_PARTS%%* $VAL *}" ]; then + echo "Unknown part $VAL passed to -make." >&2 + exit 1 + fi + CFG_BUILD_PARTS="$CFG_BUILD_PARTS $VAL" + fi + ;; + skip) + VAL=qt${VAL#qt} + if ! [ -d $relpath/../$VAL ]; then + echo "Attempting to skip non-existent module $VAL." >&2 + exit 1 + fi + CFG_SKIP_MODULES="$CFG_SKIP_MODULES $VAL" + ;; + compile-examples) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_COMPILE_EXAMPLES="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sdk) + if [ "$BUILD_ON_MAC" = "yes" ]; then + DeviceVar set !host_build:QMAKE_MAC_SDK "$VAL" + OPT_MAC_SDK="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + arch|host-arch) + OPT_OBSOLETE_HOST_ARG=yes + ;; + harfbuzz) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_HARFBUZZ="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + + framework) + if [ "$BUILD_ON_MAC" = "yes" ]; then + CFG_FRAMEWORK="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + profile) + if [ "$VAL" = "yes" ]; then + CFG_PROFILE=yes + QMakeVar add QMAKE_CFLAGS -pg + QMakeVar add QMAKE_CXXFLAGS -pg + QMakeVar add QMAKE_LFLAGS -pg + QMAKE_VARS="$QMAKE_VARS CONFIG+=nostrip" + else + UNKNOWN_OPT=yes + fi + ;; + strip) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_STRIP=$VAL + else + UNKNOWN_OPT=yes + fi + ;; + testcocoon) + if [ "$VAL" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG testcocoon" + fi + ;; + gcov) + if [ "$VAL" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG gcov" + fi + ;; + platform) + PLATFORM="$VAL" + # keep compatibility with old platform names + case $PLATFORM in + aix-64) + PLATFORM=aix-xlc-64 + ;; + hpux-o64) + PLATFORM=hpux-acc-o64 + ;; + hpux-n64) + PLATFORM=hpux-acc-64 + ;; + hpux-acc-n64) + PLATFORM=hpux-acc-64 + ;; + irix-n32) + PLATFORM=irix-cc + ;; + irix-64) + PLATFORM=irix-cc-64 + ;; + irix-cc-n64) + PLATFORM=irix-cc-64 + ;; + reliant-64) + PLATFORM=reliant-cds-64 + ;; + solaris-64) + PLATFORM=solaris-cc-64 + ;; + openunix-cc) + PLATFORM=unixware-cc + ;; + openunix-g++) + PLATFORM=unixware-g++ + ;; + unixware7-cc) + PLATFORM=unixware-cc + ;; + unixware7-g++) + PLATFORM=unixware-g++ + ;; + esac + ;; + xplatform) + XPLATFORM="$VAL" + case `basename "$XPLATFORM"` in win32-g++*) + XPLATFORM_MINGW=yes + CFG_RPATH=no + CFG_REDUCE_EXPORTS=no + CFG_ICU=no + ;; + esac + ;; + device) + XPLATFORM=`resolveDeviceMkspec $VAL` + [ "$XPLATFORM" = "undefined" ] && exit 101 + ;; + device-option) + DEV_VAR=`echo $VAL | cut -d '=' -f 1` + DEV_VAL=`echo $VAL | cut -d '=' -f 2-` + DeviceVar set $DEV_VAR "$DEV_VAL" + ;; + host-option) + HOST_VAR=`echo $VAL | cut -d '=' -f 1` + HOST_VAL=`echo $VAL | cut -d '=' -f 2-` + HostVar set $HOST_VAR "$HOST_VAL" + ;; + qpa) + QT_QPA_DEFAULT_PLATFORM="$VAL" + ;; + debug-and-release) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DEBUG_RELEASE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + release) + if [ "$VAL" = "yes" ]; then + CFG_DEBUG=no + elif [ "$VAL" = "no" ]; then + CFG_DEBUG=yes + else + UNKNOWN_OPT=yes + fi + ;; + debug) + CFG_DEBUG="$VAL" + ;; + force-debug-info) + CFG_FORCEDEBUGINFO="$VAL" + ;; + optimized-qmake|optimized-tools) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_RELEASE_TOOLS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + developer-build) + CFG_DEV="yes" + ;; + commercial) + COMMERCIAL_USER="yes" + ;; + opensource) + COMMERCIAL_USER="no" + ;; + static) + if [ "$VAL" = "yes" ]; then + CFG_SHARED=no + elif [ "$VAL" = "no" ]; then + CFG_SHARED=yes + else + UNKNOWN_OPT=yes + fi + ;; + fatal_error) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_CONFIGURE_EXIT_ON_ERROR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + feature-*) + FEATURE=`echo $VAR | sed 's,^[^-]*-\([^-]*\),\1,' | tr 'abcdefghijklmnopqrstuvwxyz-' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if grep "^Feature: *${FEATURE} *\$" "$relpath"/src/corelib/global/qfeatures.txt >/dev/null 2>&1; then + if [ "$VAL" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_$FEATURE" + elif [ "$VAL" = "yes" ] || [ "$VAL" = "unknown" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_$FEATURE" + else + UNKNOWN_OPT=yes + fi + else + echo "ERROR: Unknown feature $FEATURE" + UNKNOWN_OPT=yes + fi + ;; + shared) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SHARED="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gif) + if [ "$VAL" = "no" ]; then + CFG_GIF="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sm) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SM="$VAL" + else + UNKNOWN_OPT=yes + fi + + ;; + xshape) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XSHAPE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xsync) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XSYNC="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xinput2) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XINPUT2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + egl) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EGL="$VAL" + CFG_EGL_X="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pch) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PRECOMPILE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + ltcg) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LTCG="$VAL" + else + UNKNOWN_OPT=no + fi + ;; + separate-debug-info) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SEPARATE_DEBUG_INFO="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + reduce-exports) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_REDUCE_EXPORTS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse2) + if [ "$VAL" = "no" ]; then + CFG_SSE2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse3) + if [ "$VAL" = "no" ]; then + CFG_SSE3="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + ssse3) + if [ "$VAL" = "no" ]; then + CFG_SSSE3="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse4.1) + if [ "$VAL" = "no" ]; then + CFG_SSE4_1="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse4.2) + if [ "$VAL" = "no" ]; then + CFG_SSE4_2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + avx) + if [ "$VAL" = "no" ]; then + CFG_AVX="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + avx2) + if [ "$VAL" = "no" ]; then + CFG_AVX2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + avx512) + if [ "$VAL" = "no" ]; then + CFG_AVX512="" + else + UNKNOWN_OPT=yes + fi + ;; + mips_dsp) + if [ "$VAL" = "no" ]; then + CFG_MIPS_DSP="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + mips_dspr2) + if [ "$VAL" = "no" ]; then + CFG_MIPS_DSPR2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + reduce-relocations) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_REDUCE_RELOCATIONS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + use-gold-linker) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_USE_GOLD_LINKER="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + zlib) + [ "$VAL" = "qt" ] && VAL=yes + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_ZLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + # No longer supported: + #[ "$VAL" = "no" ] && CFG_LIBPNG=no + ;; + mtdev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_MTDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + journald) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_JOURNALD="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + syslog) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SYSLOG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sqlite) + if [ "$VAL" = "system" ]; then + CFG_SQLITE=system + else + UNKNOWN_OPT=yes + fi + ;; + libpng) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_LIBPNG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libjpeg) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_LIBJPEG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xcursor) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then + CFG_XCURSOR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xfixes) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then + CFG_XFIXES="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xrandr) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then + CFG_XRANDR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xrender) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XRENDER="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + mitshm) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_MITSHM="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + doubleconversion) + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_DOUBLECONVERSION="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + fontconfig) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_FONTCONFIG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + freetype) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_FREETYPE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XKB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkbcommon-evdev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XKBCOMMON_EVDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkbcommon|xkbcommon-x11) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "qt" ] || [ "$VAL" = "system" ]; then + CFG_XKBCOMMON="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xcb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ] || [ "$VAL" = "qt" ]; then + CFG_XCB="$VAL" + if [ "$VAL" = "yes" ]; then + CFG_XCB="system" + fi + else + UNKNOWN_OPT=yes + fi + ;; + xcb-xlib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XCB_XLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + wayland) + CFG_OBSOLETE_WAYLAND=yes + ;; + eglfs) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EGLFS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + directfb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DIRECTFB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gbm) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GBM="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + linuxfb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LINUXFB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + kms) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_KMS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + mirclient) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_MIRCLIENT="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libudev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LIBUDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libinput) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LIBINPUT="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + evdev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EVDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + tslib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_TSLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + cups) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_CUPS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + iconv) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ICONV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + glib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + slog2) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SLOG2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + imf) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_QNX_IMF="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pps) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PPS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + lgmon) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LGMON="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pulseaudio) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PULSEAUDIO="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + alsa) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ALSA="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gstreamer) + if [ "$VAL" = "auto" ] || [ "$VAL" = "yes" ] || + [ "$VAL" = "0.10" ] || [ "$VAL" = "1.0" ] || + [ "$VAL" = "no" ]; then + CFG_GSTREAMER="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gtk) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GTK="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gui) + if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ]; then + CFG_GUI="yes" + else + if [ "$VAL" = "no" ]; then + CFG_GUI="no" + else + UNKNOWN_OPT=yes + fi + fi + ;; + widgets) + if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ]; then + CFG_WIDGETS="yes" + elif [ "$VAL" = "no" ]; then + CFG_WIDGETS="no" + else + UNKNOWN_OPT=yes + fi + ;; + qpa-platform-guard) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + QPA_PLATFORM_GUARD="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + dbus) + if [ "$VAL" = "no" ] || [ "$VAL" = "linked" ] || [ "$VAL" = "runtime" ]; then + CFG_DBUS="$VAL" + elif [ "$VAL" = "yes" ]; then + # keep as auto, we'll auto-detect whether to go linked or runtime later + CFG_DBUS=auto + else + UNKNOWN_OPT=yes + fi + ;; + dbus-linked) + if [ "$VAL" = "yes" ]; then + CFG_DBUS="linked" + else + UNKNOWN_OPT=yes + fi + ;; + dbus-runtime) + if [ "$VAL" = "yes" ]; then + CFG_DBUS="runtime" + else + UNKNOWN_OPT=yes + fi + ;; + nis) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_NIS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + largefile) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LARGEFILE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + openssl) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_OPENSSL="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + openssl-linked) + if [ "$VAL" = "yes" ]; then + CFG_OPENSSL="linked" + else + UNKNOWN_OPT=yes + fi + ;; + securetransport) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SECURETRANSPORT="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libproxy) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LIBPROXY="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + qml-debug) + if [ "$VAL" = "yes" ]; then + CFG_QML_DEBUG="yes" + else + if [ "$VAL" = "no" ]; then + CFG_QML_DEBUG="no" + else + UNKNOWN_OPT=yes + fi + fi + ;; + confirm-license) + if [ "$VAL" = "yes" ]; then + OPT_CONFIRM_LICENSE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + h|help) + if [ "$VAL" = "yes" ]; then + OPT_HELP="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sql-*|imageformat-*) + # if Qt style options were used, $VAL can be "no", "qt", or "plugin" + # if autoconf style options were used, $VAL can be "yes" or "no" + [ "$VAL" = "yes" ] && VAL=qt + # now $VAL should be "no", "qt", or "plugin"... double-check + if [ "$VAL" != "no" ] && [ "$VAL" != "qt" ] && [ "$VAL" != "plugin" ]; then + UNKNOWN_OPT=yes + fi + # now $VAL is "no", "qt", or "plugin" + OPT="$VAL" + VAL=`echo $VAR | sed 's,^[^-]*-\([^-]*\).*,\1,'` + VAR=`echo $VAR | sed 's,^\([^-]*\).*,\1,'` + + # Grab the available values + case "$VAR" in + sql) + avail="$CFG_SQL_AVAILABLE" + ;; + imageformat) + avail="$CFG_IMAGEFORMAT_PLUGIN_AVAILABLE" + if [ "$OPT" != "plugin" ]; then + # png is always built in + avail="$avail png" + fi + ;; + *) + avail="" + echo "BUG: Unhandled type $VAR used in $CURRENT_OPT" + ;; + esac + + # Check that that user's value is available. + found=no + for d in $avail; do + if [ "$VAL" = "$d" ]; then + found=yes + break + fi + done + if [ "$found" != "yes" ]; then + echo "$CURRENT_OPT: unknown argument" + ERROR=yes + continue + fi + + if [ "$VAR" = "sql" ]; then + # set the CFG_SQL_driver + eval "CFG_SQL_$VAL=\$OPT" + continue + elif [ "$VAR" = "imageformat" ]; then + [ "$OPT" = "qt" ] && OPT=yes + VAL="`echo $VAL |tr a-z A-Z`" + eval "CFG_$VAL=$OPT" + continue + fi + + if [ "$OPT" = "plugin" ] || [ "$OPT" = "qt" ]; then + if [ "$OPT" = "plugin" ]; then + VAR="${VAR}-${OPT}" + fi + QMakeVar add "${VAR}s" "${VAL}" + elif [ "$OPT" = "no" ]; then + PLUG_VAR="${VAR}-plugin" + IN_VAR="${VAR}" + QMakeVar del "${IN_VAR}s" "$VAL" + QMakeVar del "${PLUG_VAR}s" "$VAL" + fi + ;; + v|verbose) + if [ "$VAL" = "yes" ]; then + if [ "$OPT_VERBOSE" = "$VAL" ]; then # takes two verboses to turn on qmake debugs + QMAKE_SWITCHES="$QMAKE_SWITCHES -d" + else + OPT_VERBOSE=yes + fi + elif [ "$VAL" = "no" ]; then + if [ "$OPT_VERBOSE" = "$VAL" ] && echo "$QMAKE_SWITCHES" | grep ' -d' >/dev/null 2>&1; then + QMAKE_SWITCHES=`echo $QMAKE_SWITCHES | sed 's, -d,,'` + else + OPT_VERBOSE=no + fi + else + UNKNOWN_OPT=yes + fi + ;; + rpath) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_RPATH="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + add_define) + DEFINES="$DEFINES \"$VAL\"" + D_FLAGS="$D_FLAGS -D\"$VAL\"" + ;; + add_ipath) + INCLUDES="$INCLUDES \"$VAL\"" + I_FLAGS="$I_FLAGS -I\"${VAL}\"" + ;; + add_lpath) + L_FLAGS="$L_FLAGS -L\"${VAL}\"" + ;; + add_rpath) + RPATH_FLAGS="$RPATH_FLAGS \"${VAL}\"" + ;; + add_link) + L_FLAGS="$L_FLAGS -l\"${VAL}\"" + ;; + add_fpath) + if [ "$BUILD_ON_MAC" = "yes" ]; then + L_FLAGS="$L_FLAGS -F\"${VAL}\"" + I_FLAGS="$I_FLAGS -F\"${VAL}\"" + else + UNKNOWN_OPT=yes + fi + ;; + add_framework) + if [ "$BUILD_ON_MAC" = "yes" ]; then + L_FLAGS="$L_FLAGS -framework \"${VAL}\"" + else + UNKNOWN_OPT=yes + fi + ;; + add_warn) + W_FLAGS="$W_FLAGS \"${VAL}\"" + ;; + silent) + CFG_SILENT="$VAL" + ;; + audio-backend) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_AUDIO_BACKEND="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + icu) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ICU="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + force-asserts) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_FORCE_ASSERTS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pcre) + if [ "$VAL" = "qt" ] || [ "$VAL" = "system" ]; then + CFG_PCRE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + c++std) + case "$VAL" in + c++11|c++14|c++1z|auto) + CFG_STDCXX="$VAL" + ;; + 11|14|1z) + CFG_STDCXX="c++$VAL" + ;; + 1y|c++1y) + CFG_STDCXX="c++14" + ;; + *) + echo >&2 "Invalid C++ edition: $VAL; valid options are: c++11 c++14 c++1z auto" + ERROR=yes + ;; + esac + ;; + system-proxies) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SYSTEM_PROXIES="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + directwrite) + if [ "$XPLATFORM_MINGW" = "yes" ] ; then + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DIRECTWRITE="$VAL" + else + UNKNOWN_OPT=yes + fi + else + UNKNOWN_OPT=yes + fi + ;; + warnings-are-errors|Werror) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_WERROR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + headersclean) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_HEADERSCLEAN="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkb-config-root) + CFG_XKB_CONFIG_ROOT="$VAL" + ;; + android-sdk) + CFG_DEFAULT_ANDROID_SDK_ROOT="$VAL" + ;; + android-ndk) + CFG_DEFAULT_ANDROID_NDK_ROOT="$VAL" + ;; + android-ndk-platform) + CFG_DEFAULT_ANDROID_PLATFORM="$VAL" + ;; + android-ndk-host) + CFG_DEFAULT_ANDROID_NDK_HOST="$VAL" + ;; + android-arch) + CFG_DEFAULT_ANDROID_TARGET_ARCH="$VAL" + ;; + android-toolchain-version) + CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION="$VAL" + ;; + android-style-assets) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ANDROID_STYLE_ASSETS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + l*) # -lfoo + if [ "$VAL" = "yes" ]; then + L_FLAGS="$L_FLAGS -l\"${VAR#l}\"" + else + UNKNOWN_OPT=yes + fi + ;; + fw*) # -fwfoo + if [ "$VAL" = "yes" ]; then + if [ "$BUILD_ON_MAC" = "yes" ]; then + L_FLAGS="$L_FLAGS -framework \"${VAR#fw}\"" + else + UNKNOWN_OPT=yes + fi + else + UNKNOWN_OPT=yes + fi + ;; + *) + UNKNOWN_OPT=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 +#------------------------------------------------------------------------------- + +if [ "$OPT_HELP" = "yes" ]; then + cat < ...... The deployment directory, as seen on the target device. + (default /usr/local/Qt-${QT_VERSION}, \$PWD if -developer-build is active) + + -extprefix ... The installation directory, as seen on the host machine. + (default SYSROOT/PREFIX) + + -hostprefix [dir] .. The installation directory for build tools running on the + host machine. If [dir] is not given, the current build + directory will be used. (default EXTPREFIX) + + You may use these to change the layout of the install. Note that all directories + except -sysconfdir should be located under -prefix/-hostprefix: + + -bindir ......... User executables will be installed to + (default PREFIX/bin) + -headerdir ...... Headers will be installed to + (default PREFIX/include) + -libdir ......... Libraries will be installed to + (default PREFIX/lib) + -archdatadir .... Arch-dependent data used by Qt will be installed to + (default PREFIX) + -plugindir ...... Plugins will be installed to + (default ARCHDATADIR/plugins) + -libexecdir ..... Program executables will be installed to + (default ARCHDATADIR/libexec, ARCHDATADIR/bin for MinGW) + -importdir ...... Imports for QML1 will be installed to + (default ARCHDATADIR/imports) + -qmldir ......... Imports for QML2 will be installed to + (default ARCHDATADIR/qml) + -datadir ........ Arch-independent data used by Qt will be installed to + (default PREFIX) + -docdir ......... Documentation will be installed to + (default DATADIR/doc) + -translationdir . Translations of Qt programs will be installed to + (default DATADIR/translations) + -sysconfdir ..... Settings used by Qt programs will be looked for in + (default PREFIX/etc/xdg) + -examplesdir .... Examples will be installed to + (default PREFIX/examples) + -testsdir ....... Tests will be installed to + (default PREFIX/tests) + + -hostbindir .. Host executables will be installed to + (default HOSTPREFIX/bin) + -hostlibdir .. Host libraries will be installed to + (default HOSTPREFIX/lib) + -hostdatadir . Data used by qmake will be installed to + (default HOSTPREFIX) + +Configure options: + + The defaults (*) are usually acceptable. A plus (+) denotes a default value + that needs to be evaluated. If the evaluation succeeds, the feature is + included. Here is a short explanation of each option: + + * -release ........... Compile and link Qt with debugging turned off. + -debug ............. Compile and link Qt with debugging turned on. + -debug-and-release . Compile and link two versions of Qt, with and without + debugging turned on (Mac only). + + -force-debug-info .. Create symbol files for release builds. + + -developer-build ... Compile and link Qt with Qt developer options (including auto-tests exporting) + + * -no-optimized-tools ... Do not build optimized host tools even in debug build. + -optimized-tools ...... Build optimized host tools even in debug build. + + -opensource ........ Compile and link the Open-Source Edition of Qt. + -commercial ........ Compile and link the Commercial Edition of Qt. + + -confirm-license ... Automatically acknowledge the license (use with + either -opensource or -commercial) + + -c++std .. Compile Qt with C++ standard edition (c++11, c++14, c++1z) + Default: highest supported + + * -shared ............ Create and use shared Qt libraries. + -static ............ Create and use static Qt libraries. + + -no-largefile ...... Disables large file support. + + -largefile ......... Enables Qt to access files larger than 4 GB. + + -no-accessibility .. Do not compile Accessibility support. + Disabling accessibility is not recommended, as it will break QStyle + and may break other internal parts of Qt. + With this switch you create a source incompatible version of Qt, + which is unsupported. + + -accessibility ..... Compile Accessibility support. + + -no-sql- ... Disable SQL entirely. + -qt-sql- ... Enable a SQL in the Qt SQL module, by default + none are turned on. + -plugin-sql- Enable SQL as a plugin to be linked to + at run time. + + Possible values for : + [$CFG_SQL_AVAILABLE ] + + -system-sqlite ..... Use sqlite from the operating system. + + -no-qml-debug ...... Do not build the in-process QML debugging support. + + -qml-debug ......... Build the QML debugging support. + + -platform target ... The operating system and compiler you are building + on (default detected from host system). + + See the README file for a list of supported + operating systems and compilers. + + -no-sse2 ........... Do not compile with use of SSE2 instructions. + -no-sse3 ........... Do not compile with use of SSE3 instructions. + -no-ssse3 .......... Do not compile with use of SSSE3 instructions. + -no-sse4.1 ......... Do not compile with use of SSE4.1 instructions. + -no-sse4.2 ......... Do not compile with use of SSE4.2 instructions. + -no-avx ............ Do not compile with use of AVX instructions. + -no-avx2 ........... Do not compile with use of AVX2 instructions. + -no-avx512 ......... Do not compile with use of AVX512 instructions. + -no-mips_dsp ....... Do not compile with use of MIPS DSP instructions. + -no-mips_dspr2 ..... Do not compile with use of MIPS DSP rev2 instructions. + + -qtnamespace Wraps all Qt library code in 'namespace {...}'. + -qtlibinfix Renames all libQt*.so to libQt*.so. + + -testcocoon ........ Instrument Qt with the TestCocoon code coverage tool. + -gcov .............. Instrument Qt with the GCov code coverage tool. + + -D ........ Add an explicit define to the preprocessor. + -I ........ Add an explicit include path. + -L ........ Add an explicit library path. + + + -pkg-config ........ Use pkg-config to detect include and library paths. By default, + configure determines whether to use pkg-config or not with + some heuristics such as checking the environment variables. + -no-pkg-config ..... Disable use of pkg-config. + -force-pkg-config .. Force usage of pkg-config (skips pkg-config usability + detection heuristic). + + -help, -h .......... Display this information. + +Third Party Libraries: + + -qt-zlib ............ Use the zlib bundled with Qt. + + -system-zlib ........ Use zlib from the operating system. + See http://www.gzip.org/zlib + + -no-mtdev ........... Do not compile mtdev support. + + -mtdev .............. Enable mtdev support. + + + -no-journald ........ Do not send logging output to journald. + -journald ........... Send logging output to journald. + + + -no-syslog .......... Do not send logging output to syslog. + -syslog ............. Send logging output to syslog. + + -no-gif ............. Do not compile GIF reading support. + + -no-libpng .......... Do not compile PNG support. + -qt-libpng .......... Use the libpng bundled with Qt. + + -system-libpng ...... Use libpng from the operating system. + See http://www.libpng.org/pub/png + + -no-libjpeg ......... Do not compile JPEG support. + -qt-libjpeg ......... Use the libjpeg bundled with Qt. + + -system-libjpeg ..... Use libjpeg from the operating system. + See http://www.ijg.org + + -no-doubleconversion ..... Use sscanf_l and snprintf_l for (imprecise) double conversion. + -qt-doubleconversion ..... Use the libdouble-conversion bundled with Qt. + + -system-doubleconversion . Use the libdouble-conversion provided by the system. + See https://github.com/google/double-conversion + + -no-freetype ........ Do not compile in Freetype2 support. + -qt-freetype ........ Use the libfreetype bundled with Qt. + + -system-freetype..... Use the libfreetype provided by the system (enabled if -fontconfig is active). + See http://www.freetype.org + + -no-harfbuzz ........ Do not compile HarfBuzz-NG support. + -qt-harfbuzz ........ Use HarfBuzz-NG bundled with Qt to do text shaping. + It can still be disabled by setting + the QT_HARFBUZZ environment variable to "old". + + -system-harfbuzz .... Use HarfBuzz-NG from the operating system + to do text shaping. It can still be disabled + by setting the QT_HARFBUZZ environment variable to "old". + See http://www.harfbuzz.org + + -no-openssl ......... Do not compile support for OpenSSL. + + -openssl ............ Enable run-time OpenSSL support. + -openssl-linked ..... Enabled linked OpenSSL support. + + -no-libproxy ....... Do not compile support for libproxy + + -libproxy .......... Use libproxy from the operating system. + + -qt-pcre ............ Use the PCRE library bundled with Qt. + + -system-pcre ........ Use the PCRE library from the operating system. + + -qt-xcb ............. Use xcb- libraries bundled with Qt. + (libxcb.so will still be used from operating system). + + -system-xcb ......... Use xcb- libraries from the operating system. + + -xkb-config-root .... Set default XKB config root. This option is used only together with -qt-xkbcommon-x11. + -qt-xkbcommon-x11 ... Use the xkbcommon library bundled with Qt in combination with xcb. + + -system-xkbcommon-x11 Use the xkbcommon library from the operating system in combination with xcb. + + -no-xkbcommon-evdev . Do not use X-less xkbcommon when compiling libinput support. + * -xkbcommon-evdev .... Use X-less xkbcommon when compiling libinput support. + + -no-xinput2 ......... Do not compile XInput2 support. + * -xinput2 ............ Compile XInput2 support. + + -no-xcb-xlib......... Do not compile Xcb-Xlib support. + * -xcb-xlib............ Compile Xcb-Xlib support. + + -no-glib ............ Do not compile Glib support. + + -glib ............... Compile Glib support. + + -no-pulseaudio ...... Do not compile PulseAudio support. + + -pulseaudio ......... Compile PulseAudio support. + + -no-alsa ............ Do not compile ALSA support. + + -alsa ............... Compile ALSA support. + + -no-gtk ............. Do not compile GTK platform theme support. + + -gtk ................ Compile GTK platform theme support. + +Additional options: + + -make ....... Add part to the list of parts to be built at make time. + (defaults to: $QT_DEFAULT_BUILD_PARTS) + -nomake ..... Exclude part from the list of parts to be built. + + -skip ..... Exclude an entire module from the build. + + -no-compile-examples ... Install only the sources of examples. + + -no-gui ............ Don't build the Qt GUI module and dependencies. + + -gui ............... Build the Qt GUI module and dependencies. + + -no-widgets ........ Don't build the Qt Widgets module and dependencies. + + -widgets ........... Build the Qt Widgets module and dependencies. + + -R ........ Add an explicit runtime library path to the Qt + libraries. + -l ........ Add an explicit library. + + -no-rpath .......... Do not use the library install path as a runtime + library path. On Apple platforms, this implies using + absolute install names (based in -libdir) for dynamic + libraries and frameworks. + + -rpath ............. Link Qt libraries and executables using the library + install path as a runtime library path. Equivalent + to -R install_libpath + + -continue .......... Continue as far as possible if an error occurs. + + -verbose, -v ....... Print verbose information about each step of the + configure process. + + -silent ............ Reduce the build output so that warnings and errors + can be seen more easily. + + -no-nis ............ Do not compile NIS support. + * -nis ............... Compile NIS support. + + -no-cups ........... Do not compile CUPS support. + * -cups .............. Compile CUPS support. + Requires cups/cups.h and libcups.so.2. + + -no-iconv .......... Do not compile support for iconv(3). + * -iconv ............. Compile support for iconv(3). + + -no-evdev .......... Do not compile support for evdev. + * -evdev ............. Compile support for evdev. + + -no-tslib .......... Do not compile support for tslib. + * -tslib ............. Compile support for tslib. + + -no-icu ............ Do not compile support for ICU libraries. + + -icu ............... Compile support for ICU libraries. + + -no-fontconfig ..... Do not compile FontConfig support. + + -fontconfig ........ Compile FontConfig support. + + -no-strip .......... Do not strip binaries and libraries of unneeded symbols. + * -strip ............. Strip binaries and libraries of unneeded symbols when installing. + + * -no-pch ............ Do not use precompiled header support. + -pch ............... Use precompiled header support. + + * -no-ltcg Do not use Link Time Code Generation + -ltcg Use Link Time Code Generation. + + -no-dbus ........... Do not compile the Qt D-Bus module. + + -dbus-linked ....... Compile the Qt D-Bus module and link to libdbus-1. + -dbus-runtime ...... Compile the Qt D-Bus module and dynamically load libdbus-1. + + -reduce-relocations ..... Reduce relocations in the libraries through extra + linker optimizations (Qt/X11 and Qt for Embedded Linux only; + experimental; needs GNU ld >= 2.18). + + -no-use-gold-linker ..... Do not link using the GNU gold linker. + + -use-gold-linker ........ Link using the GNU gold linker if available. + + -force-asserts ........ Force Q_ASSERT to be enabled even in release builds. + + -sanitize [address|thread|memory|undefined] Enables the specified compiler sanitizer. + + -device ............... Cross-compile for device (experimental) + -device-option ... Add device specific options for the device mkspec + (experimental) + + -host-option ..... Add host specific options for the host mkspec + + * -no-separate-debug-info . Do not store debug information in a separate file. + -separate-debug-info .... Strip debug information into a separate file. + + -no-xcb ............ Do not compile Xcb (X protocol C-language Binding) support. + * -xcb ............... Compile Xcb support. + + -no-eglfs .......... Do not compile EGLFS (EGL Full Screen/Single Surface) support. + * -eglfs ............. Compile EGLFS support. + + -no-kms ............ Do not compile backends for KMS. + * -kms ............... Compile backends for KMS. + + -no-gbm ............ Do not compile backends for GBM. + * -gbm ............... Compile backends for GBM. + + * -no-directfb ....... Do not compile DirectFB support. + -directfb .......... Compile DirectFB support. + + -no-linuxfb ........ Do not compile Linux Framebuffer support. + * -linuxfb ........... Compile Linux Framebuffer support. + + * -no-mirclient....... Do not compile Mir client support. + -mirclient.......... Compile Mir client support. + + -qpa ......... Sets the default QPA platform (e.g xcb, cocoa, windows). + + -xplatform target ... The target platform when cross-compiling. + + -sysroot ...... Sets as the target compiler's and qmake's sysroot and also sets pkg-config paths. + -no-gcc-sysroot ..... When using -sysroot, it disables the passing of --sysroot to the compiler + + -external-hostbindir .. Path to Qt tools built for this machine. Use this when -platform + does not match the current system, i.e., to make a Canadian Cross Build. + + -no-feature- Do not compile in . + -feature- .. Compile in . The available features + are described in src/corelib/global/qfeatures.txt + + -qconfig local ...... Use src/corelib/global/qconfig-local.h rather than the + default ($CFG_QCONFIG). + + -qreal [double|float] typedef qreal to the specified type. The default is double. + Note that changing this flag affects binary compatibility. + + -no-opengl .......... Do not support OpenGL. + -opengl ....... Enable OpenGL support + With no parameter, this will attempt to auto-detect + OpenGL ES 2.0 and higher, or regular desktop OpenGL. + Use es2 for to override auto-detection. + + -no-libinput ........ Do not support libinput. + * -libinput ........... Enable libinput support. + + -no-gstreamer ....... Do not support GStreamer. + + -gstreamer Enable GStreamer support + With no parameter, this will attempt to auto-detect GStreamer 0.10 and + 1.0. GStreamer 1.0 is used by default when available. + Use 0.10 or 1.0 for to override auto-detection. + + * -no-system-proxies .. Do not use system network proxies by default. + -system-proxies ..... Use system network proxies by default. + + -no-warnings-are-errors Make warnings be treated normally + -warnings-are-errors Make warnings be treated as errors + (enabled if -developer-build is active) + +QNX options: + + -no-slog2 .......... Do not compile with slog2 support. + -slog2 ............. Compile with slog2 support. + + -no-pps ............ Do not compile with pps support. + -pps ............... Compile with pps support. + + -no-imf ............ Do not compile with imf support. + -imf ............... Compile with imf support. + + -no-lgmon .......... Do not compile with lgmon support. + -lgmon ............. Compile with lgmon support. + +MacOS/iOS options: + + -Fstring ........... Add an explicit framework path. + -fw string ......... Add an explicit framework. + + * -framework ......... Build Qt as a series of frameworks and + link tools against those frameworks. + -no-framework ...... Do not build Qt as a series of frameworks. + + * -securetransport ... Use SecureTransport instead of OpenSSL + + -no-securetransport Do not use SecureTransport, either use OpenSSL or do not use any SSL backend + at all (if combined with -no-openssl). + + -sdk ......... Build Qt using Apple provided SDK . The argument should be + one of the available SDKs as listed by 'xcodebuild -showsdks'. + Note that the argument applies only to Qt libraries and applications built + using the target mkspec - not host tools such as qmake, moc, rcc, etc. + +Android options: + + -android-sdk path .............. The Android SDK root path. + (default \$ANDROID_SDK_ROOT) + + -android-ndk path .............. The Android NDK root path. + (default \$ANDROID_NDK_ROOT) + + -android-ndk-platform .......... Sets the android platform + (default $CFG_DEFAULT_ANDROID_PLATFORM) + + -android-ndk-host .............. Sets the android NDK host (linux-x86, linux-x86_64, etc.) + (default \$ANDROID_NDK_HOST) + + -android-arch .................. Sets the android architecture (armeabi, armeabi-v7a, x86, mips, + arm64-v8a, x86_64, mips64) + (default $CFG_DEFAULT_ANDROID_TARGET_ARCH) + + -android-toolchain-version ..... Sets the android toolchain version + (default $CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION) + + -no-android-style-assets ....... Do not compile in the code which automatically extracts + style assets from the run-time device. Setting this will + make the Android style behave incorrectly, but will enable + compatibility with the LGPL2.1 license. + * -android-style-assets .......... Compile the code which automatically extracts style assets + from the run-time device. This option will make the + Android platform plugin incompatible with the LGPL2.1. +EOF + + exit 0 +fi # Help + +#------------------------------------------------------------------------------- +# platform detection +#------------------------------------------------------------------------------- + +if [ -z "$PLATFORM" ]; then + PLATFORM_NOTES= + case "$UNAME_SYSTEM:$UNAME_RELEASE" in + Darwin:*) + # Select compiler. Use g++ unless we find a usable Clang version. Note that + # we are checking the "Apple" clang/LLVM version number, not the actual + # clang/LLVM version number that the Apple version was based on. We look + # for Apple clang version 3.0 or higher, which was branched off LLVM 3.0 + # from SVN, and first included in Xcode 4.2. Also note that we do not care + # about the OS version, since we're not using the clang version that comes + # with the system. We use 'xcrun' to check the clang version that's part of + # the Xcode installation. + XCRUN=`/usr/bin/xcrun -sdk macosx clang -v 2>&1` + CLANGVERSION=`echo "$XCRUN" | sed -n 's/.*version \([0-9]\).*/\1/p'` + expr "$CLANGVERSION" : '[0-9]' > /dev/null || { echo "Unable to determine CLANG version from output of xcrun: $XCRUN" ; exit 2 ; } + if [ "$CLANGVERSION" -ge 3 ]; then + PLATFORM=macx-clang + + # Advertise g++ as an alternative on Lion and below + if [ "$(uname -r | cut -d. -f1)" -le 11 ]; then + PLATFORM_NOTES="\n - Also available for Mac OS X: macx-g++\n" + fi + else + PLATFORM=macx-g++ + fi + ;; + AIX:*) + #PLATFORM=aix-g++ + #PLATFORM=aix-g++-64 + PLATFORM=aix-xlc + #PLATFORM=aix-xlc-64 + PLATFORM_NOTES=" + - Also available for AIX: aix-g++ aix-g++-64 aix-xlc-64 + " + ;; + GNU:*) + PLATFORM=hurd-g++ + ;; + dgux:*) + PLATFORM=dgux-g++ + ;; +# DYNIX/ptx:4*) +# PLATFORM=dynix-g++ +# ;; + ULTRIX:*) + PLATFORM=ultrix-g++ + ;; + FreeBSD:*) + PLATFORM=freebsd-clang + PLATFORM_NOTES=" + - Also available for FreeBSD: freebsd-icc + " + ;; + OpenBSD:*) + PLATFORM=openbsd-g++ + ;; + NetBSD:*) + PLATFORM=netbsd-g++ + ;; + BSD/OS:*|BSD/386:*) + PLATFORM=bsdi-g++ + ;; + IRIX*:*) + #PLATFORM=irix-g++ + PLATFORM=irix-cc + #PLATFORM=irix-cc-64 + PLATFORM_NOTES=" + - Also available for IRIX: irix-g++ irix-cc-64 + " + ;; + HP-UX:*) + case "$UNAME_MACHINE" in + ia64) + #PLATFORM=hpuxi-acc-32 + PLATFORM=hpuxi-acc-64 + PLATFORM_NOTES=" + - Also available for HP-UXi: hpuxi-acc-32 + " + ;; + *) + #PLATFORM=hpux-g++ + PLATFORM=hpux-acc + #PLATFORM=hpux-acc-64 + #PLATFORM=hpux-cc + #PLATFORM=hpux-acc-o64 + PLATFORM_NOTES=" + - Also available for HP-UX: hpux-g++ hpux-acc-64 hpux-acc-o64 + " + ;; + esac + ;; + OSF1:*) + #PLATFORM=tru64-g++ + PLATFORM=tru64-cxx + PLATFORM_NOTES=" + - Also available for Tru64: tru64-g++ + " + ;; + Linux:*) + PLATFORM=linux-g++ + PLATFORM_NOTES=" + - Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx + " + ;; + SunOS:5*) + if [ "$XPLATFORM_MINGW" = "yes" ]; then + PLATFORM="solaris-g++" + else + #PLATFORM=solaris-g++ + PLATFORM=solaris-cc + #PLATFORM=solaris-cc64 + fi + PLATFORM_NOTES=" + - Also available for Solaris: solaris-g++ solaris-cc-64 + " + ;; + ReliantUNIX-*:*|SINIX-*:*) + PLATFORM=reliant-cds + #PLATFORM=reliant-cds-64 + PLATFORM_NOTES=" + - Also available for Reliant UNIX: reliant-cds-64 + " + ;; + CYGWIN*:*) + PLATFORM=cygwin-g++ + ;; + LynxOS*:*) + PLATFORM=lynxos-g++ + ;; + OpenUNIX:*) + #PLATFORM=unixware-g++ + PLATFORM=unixware-cc + PLATFORM_NOTES=" + - Also available for OpenUNIX: unixware-g++ + " + ;; + UnixWare:*) + #PLATFORM=unixware-g++ + PLATFORM=unixware-cc + PLATFORM_NOTES=" + - Also available for UnixWare: unixware-g++ + " + ;; + SCO_SV:*) + #PLATFORM=sco-g++ + PLATFORM=sco-cc + PLATFORM_NOTES=" + - Also available for SCO OpenServer: sco-g++ + " + ;; + UNIX_SV:*) + PLATFORM=unixware-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 + +[ -z "$XPLATFORM" ] && XPLATFORM="$PLATFORM" + +case "$XPLATFORM" in + *win32-g++*) + XPLATFORM_MINGW=yes + ;; + *qnx-*) + XPLATFORM_QNX=yes + ;; + *haiku-*) + XPLATFORM_HAIKU=yes + ;; + *ios*) + XPLATFORM_MAC=yes + XPLATFORM_IOS=yes + ;; + *macx*) + XPLATFORM_MAC=yes + ;; + *integrity*) + XPLATFORM_INTEGRITY=yes + ;; + # XPLATFORM_ANDROID should not be set for unsupported/android-g++ + *unsupported*) + ;; + *android-g++*) + XPLATFORM_ANDROID=yes + ;; +esac + +#------------------------------------------------------------------------------- +# check the license +#------------------------------------------------------------------------------- + +if [ "$COMMERCIAL_USER" = "ask" ]; then + while true; do + echo "Which edition of Qt do you want to use ?" + echo + echo "Type 'c' if you want to use the Commercial Edition." + echo "Type 'o' if you want to use the Open Source Edition." + echo + read commercial + echo + if [ "$commercial" = "c" ]; then + COMMERCIAL_USER="yes" + break + elif [ "$commercial" = "o" ]; then + COMMERCIAL_USER="no" + break + fi + done +fi + +if [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes" ]; then + # Commercial preview release + Licensee="Preview" + Edition="Preview" + EditionString="Technology Preview" +elif [ $COMMERCIAL_USER = "yes" ]; then + if [ $UNAME_SYSTEM = "Linux" ]; then + case "$PLATFORM" in + *-32) + Licheck=licheck32 + ;; + *-64) + Licheck=licheck64 + ;; + *) + if file -L /bin/sh | grep -q "64-bit" ; then + Licheck=licheck64 + else + Licheck=licheck32 + fi + ;; + esac + elif [ $UNAME_SYSTEM = "Darwin" ]; then + Licheck=licheck_mac + else + echo >&2 "Host operating system not supported by this edition of Qt." + exit 1 + fi + if [ -x "$relpath/bin/$Licheck" ]; then + LicheckOutput=`$relpath/bin/$Licheck $OPT_CONFIRM_LICENSE $relpath $outpath\ + $PLATFORM $XPLATFORM` + if [ $? -ne 0 ]; then + exit 1 + else + eval "$LicheckOutput" + fi + else + echo + echo "Error: This is the Open Source version of Qt." + echo "If you want to use Enterprise features of Qt," + echo "use the contact form at http://www.qt.io/contact-us" + echo "to purchase a license." + echo + exit 1 + fi +elif [ $COMMERCIAL_USER = "no" ]; then + # Open Source edition - may only be used under the terms of the LGPLv3 or GPLv2. + Licensee="Open Source" + Edition="OpenSource" + EditionString="Open Source" +fi + +if [ "$Edition" = "OpenSource" ] || [ "$Edition" = "Preview" ]; then + echo + echo "This is the Qt ${EditionString} Edition." + echo +fi + +if [ "$Edition" = "OpenSource" ]; then + while true; do + if [ "$CFG_ANDROID_STYLE_ASSETS" = "no" ] || [ "$XPLATFORM_ANDROID" = "no" ]; then + echo "You are licensed to use this software under the terms of" + echo "the GNU Lesser General Public License (LGPL) versions 3." + echo "You are also licensed to use this software under the terms of" + echo "the GNU General Public License (GPL) versions 2." + affix="either" + showGPL2="yes" + else + echo "You are licensed to use this software under the terms of" + echo "the GNU Lesser General Public License (LGPL) versions 3." + showGPL2="no" + affix="the" + fi + + echo + if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then + echo "You have already accepted the terms of the $EditionString license." + acceptance=yes + else + if [ -f "$relpath/LICENSE.LGPL3" ]; then + echo "Type 'L' to view the GNU Lesser General Public License version 3." + fi + if [ "$showGPL2" = "yes" ]; then + echo "Type 'G' to view the GNU General Public License version 2." + fi + echo "Type 'yes' to accept this license offer." + echo "Type 'no' to decline this license offer." + echo + echo $ECHO_N "Do you accept the terms of $affix license? $ECHO_C" + read acceptance + fi + echo + if [ "$acceptance" = "yes" ] || [ "$acceptance" = "y" ]; then + break + elif [ "$acceptance" = "no" ]; then + echo "You are not licensed to use this software." + echo + exit 1 + elif [ "$acceptance" = "L" ]; then + more "$relpath/LICENSE.LGPL3" + elif [ "$acceptance" = "G" ] && [ "$showGPL2" = "yes" ]; then + more "$relpath/LICENSE.GPL2" + fi + done +elif [ "$Edition" = "Preview" ]; then + TheLicense=`head -n 1 "$relpath/LICENSE.PREVIEW.COMMERCIAL"` + while true; do + + if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then + echo "You have already accepted the terms of the $EditionString license." + acceptance=yes + else + echo "You are licensed to use this software under the terms of" + echo "the $TheLicense" + echo + echo "Type '?' to read the Preview License." + echo "Type 'yes' to accept this license offer." + echo "Type 'no' to decline this license offer." + echo + echo $ECHO_N "Do you accept the terms of the license? $ECHO_C" + read acceptance + fi + echo + if [ "$acceptance" = "yes" ]; then + break + elif [ "$acceptance" = "no" ] ;then + echo "You are not licensed to use this software." + echo + exit 0 + elif [ "$acceptance" = "?" ]; then + more "$relpath/LICENSE.PREVIEW.COMMERCIAL" + fi + done +fi + +#------------------------------------------------------------------------------- +# command line and environment validation +#------------------------------------------------------------------------------- + +# update QT_CONFIG to show our current predefined configuration +CFG_QCONFIG_PATH=$relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h +case "$CFG_QCONFIG" in +minimal|small|medium|large|full) + # these are a sequence of increasing functionality + for c in minimal small medium large full; do + QT_CONFIG="$QT_CONFIG $c-config" + [ "$CFG_QCONFIG" = $c ] && break + done + [ "$CFG_QCONFIG" = full ] && CFG_QCONFIG_PATH= + ;; +*) + # not known to be sufficient for anything + if [ ! -f "$CFG_QCONFIG_PATH" ]; then + CFG_QCONFIG_PATH=`makeabs "${CFG_QCONFIG}"` + if [ ! -f "$CFG_QCONFIG_PATH" ]; then + echo >&2 "Error: configuration file not found:" + echo >&2 " $relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h" + echo >&2 " or" + echo >&2 " $CFG_QCONFIG_PATH" + exit 1 + fi + fi +esac + +if [ "$XPLATFORM_MAC" = "no" -a "$CFG_DEBUG_RELEASE" = "yes" ]; then + echo + echo "WARNING: -debug-and-release is not supported outside of Mac OS X." + echo "Qt can be built in release mode with separate debug information, so" + echo "-debug-and-release is not necessary anymore" + echo +fi + +if ( [ "$CFG_XCB" = "system" ] || [ "$CFG_XCB" = "qt" ] ) && [ "$CFG_XKBCOMMON" = "no" ]; then + echo "Error: -no-xkbcommon-x11 is not supported on XCB platform plugin." + exit 101 +fi + +if [ "$XPLATFORM_ANDROID" = "yes" ]; then + if [ "$CFG_DBUS" = "auto" ]; then + CFG_DBUS="no" + fi + if [ -z "$CFG_DEFAULT_ANDROID_NDK_HOST" ]; then + case $PLATFORM in + linux-*) + if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86 + elif [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86_64" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86_64 + fi + ;; + macx-*) + CFG_DEFAULT_ANDROID_NDK_HOST=darwin-x86 + if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/darwin-x86_64" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=darwin-x86_64 + fi + ;; + win32-*) + CFG_DEFAULT_ANDROID_NDK_HOST=windows + if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/windows-x86_64" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=windows-x86_64 + fi + ;; + esac + fi + + if [ -z "$CFG_DEFAULT_ANDROID_NDK_ROOT" ]; then + echo + echo "Can not find Android NDK. Please use -android-ndk option to specify one" + exit 1 + fi + if [ -z "$CFG_DEFAULT_ANDROID_SDK_ROOT" ]; then + echo + echo "Can not find Android SDK. Please use -android-sdk option to specify one" + exit 1 + fi + if [ -z "CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION" ] || [ ! -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt" ]; then + echo + echo "Can not detect Android NDK toolchain. Please use -android-toolchain-version to specify" + exit 1 + fi + if [ -z "$CFG_DEFAULT_ANDROID_NDK_HOST" ] || [ ! -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST" ]; then + echo + echo "Can not detect the android host. Please use -android-ndk-host option to specify one" + exit 1 + fi + + QT_QPA_DEFAULT_PLATFORM="android" + CFG_LARGEFILE="no" + + DeviceVar set DEFAULT_ANDROID_SDK_ROOT "$CFG_DEFAULT_ANDROID_SDK_ROOT" + DeviceVar set DEFAULT_ANDROID_NDK_ROOT "$CFG_DEFAULT_ANDROID_NDK_ROOT" + DeviceVar set DEFAULT_ANDROID_PLATFORM "$CFG_DEFAULT_ANDROID_PLATFORM" + DeviceVar set DEFAULT_ANDROID_NDK_HOST "$CFG_DEFAULT_ANDROID_NDK_HOST" + DeviceVar set DEFAULT_ANDROID_TARGET_ARCH "$CFG_DEFAULT_ANDROID_TARGET_ARCH" + DeviceVar set DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION "$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION" +fi + +if [ -d "$PLATFORM" ]; then + QMAKESPEC="$PLATFORM" +else + QMAKESPEC="$relpath/mkspecs/${PLATFORM}" +fi +if [ -d "$XPLATFORM" ]; then + XQMAKESPEC="$XPLATFORM" +else + XQMAKESPEC="$relpath/mkspecs/${XPLATFORM}" +fi +if [ "$PLATFORM" != "$XPLATFORM" ]; then + QT_CROSS_COMPILE=yes + QMAKE_CONFIG="$QMAKE_CONFIG cross_compile" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG cross_compile" +fi + +if [ "$BUILD_ON_MAC" = "yes" ]; then + if [ `basename $QMAKESPEC` = "macx-xcode" ] || [ `basename $XQMAKESPEC` = "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 +if [ '!' -d "$XQMAKESPEC" ]; then + echo + echo " The specified system/compiler is not supported:" + echo + echo " $XQMAKESPEC" + echo + echo " Please see the README file for a complete list." + echo + exit 2 +fi +if [ '!' -f "${XQMAKESPEC}/qplatformdefs.h" ]; then + echo + echo " The specified system/compiler port is not complete:" + echo + echo " $XQMAKESPEC/qplatformdefs.h" + echo + echo " Please information use the contact form at http://www.qt.io/contact-us" + echo + exit 2 +fi + +#------------------------------------------------------------------------------- +# build tree initialization +#------------------------------------------------------------------------------- + +# 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 the source tree is different from the build tree, +# symlink or copy part of the sources +if [ "$OPT_SHADOW" = "yes" ]; then + echo "Preparing build tree..." + + [ -d "$outpath/bin" ] || mkdir -p "$outpath/bin" + + mkdir -p "$outpath/mkspecs" +fi + +# detect build style +if [ "$CFG_DEBUG" = "auto" ]; then + if [ "$XPLATFORM_MAC" = "yes" -o "$XPLATFORM_MINGW" = "yes" ]; then + CFG_DEBUG_RELEASE=yes + CFG_DEBUG=yes + elif [ "$CFG_DEV" = "yes" ]; then + CFG_DEBUG_RELEASE=no + CFG_DEBUG=yes + else + CFG_DEBUG_RELEASE=no + CFG_DEBUG=no + fi +fi +if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG build_all debug_and_release" +fi + +if [ "$CFG_FORCEDEBUGINFO" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG force_debug_info" +fi + +if [ "$CFG_RELEASE_TOOLS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG release_tools" +fi + +if [ "$XPLATFORM_MAC" = "yes" ]; then + [ "$CFG_PKGCONFIG" = "auto" ] && CFG_PKGCONFIG="no" +fi + +if [ "$XPLATFORM_IOS" = "yes" ]; then + CFG_RPATH="no" + CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS examples" + CFG_SHARED="no" # iOS builds should be static to be able to submit to the App Store + CFG_SKIP_MODULES="$CFG_SKIP_MODULES qtdoc qtmacextras qtserialport qtwebkit qtwebkit-examples" + CFG_PRECOMPILE="no" # Precompiled headers not supported with multiple -arch arguments + + # If the user passes -sdk on the command line we build a SDK-specific Qt build. + # Otherwise we build a joined simulator and device build, which is the default. + if [ -z "$OPT_MAC_SDK" ]; then + QT_CONFIG="$QT_CONFIG build_all" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG simulator_and_device" + fi +fi + +# disable XCB and GTK support auto-detection on Mac +if [ "$XPLATFORM_MAC" = "yes" ]; then + [ "$CFG_XCB" = "auto" ] && CFG_XCB=no + [ "$CFG_GTK" = "auto" ] && CFG_GTK=no +fi + +QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX` + +TEST_COMPILER=$QMAKE_CONF_COMPILER + +if [ "$XPLATFORM_ANDROID" = "yes" ] ; then + ANDROID_NDK_TOOLCHAIN_PREFIX= + ANDROID_NDK_TOOLS_PREFIX= + ANDROID_PLATFORM_ARCH= + case $CFG_DEFAULT_ANDROID_TARGET_ARCH in + armeabi*) + ANDROID_NDK_TOOLS_PREFIX=arm-linux-androideabi + ANDROID_NDK_TOOLCHAIN_PREFIX=arm-linux-androideabi + ANDROID_PLATFORM_ARCH=arch-arm + ;; + x86) + ANDROID_NDK_TOOLS_PREFIX=i686-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=x86 + ANDROID_PLATFORM_ARCH=arch-x86 + ;; + mips) + ANDROID_NDK_TOOLS_PREFIX=mipsel-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=mipsel-linux-android + ANDROID_PLATFORM_ARCH=arch-mips + ;; + arm64-v8a) + ANDROID_NDK_TOOLS_PREFIX=aarch64-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=aarch64-linux-android + ANDROID_PLATFORM_ARCH=arch-arm64 + ;; + mips64) + ANDROID_NDK_TOOLS_PREFIX=mips64el-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=mips64el-linux-android + ANDROID_PLATFORM_ARCH=arch-mips64 + ;; + x86_64) + ANDROID_NDK_TOOLS_PREFIX=x86_64-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=x86_64 + ANDROID_PLATFORM_ARCH=arch-x86_64 + ;; + *) + echo "ERROR: Unknown android arch $CFG_DEFAULT_ANDROID_TARGET_ARCH" + exit 1 + ;; + esac + QMAKE_CONF_COMPILER=$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/$ANDROID_NDK_TOOLCHAIN_PREFIX-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST/bin/$ANDROID_NDK_TOOLS_PREFIX-g++ + TEST_COMPILER="$QMAKE_CONF_COMPILER --sysroot=$CFG_DEFAULT_ANDROID_NDK_ROOT/platforms/$CFG_DEFAULT_ANDROID_PLATFORM/$ANDROID_PLATFORM_ARCH/" + if [ "$CFG_ANDROID_STYLE_ASSETS" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG android-style-assets" + fi +fi + +TEST_COMPILER_CXXFLAGS=`getXQMakeConf QMAKE_CXXFLAGS` + +GCC_MACHINE_DUMP= +case "$TEST_COMPILER" in *g++) GCC_MACHINE_DUMP=$($TEST_COMPILER -dumpmachine);; esac +if [ -n "$GCC_MACHINE_DUMP" ]; then + DeviceVar set GCC_MACHINE_DUMP $($TEST_COMPILER -dumpmachine) +fi + +if [ -n "$CFG_SYSROOT" ] && [ "$CFG_GCC_SYSROOT" = "yes" ]; then + SYSROOT_FLAG="--sysroot=$CFG_SYSROOT" +else + SYSROOT_FLAG= +fi +export SYSROOT_FLAG # used by config.tests/unix/{compile.test,arch.test} + +# Auto-detect default include and library search paths. + +# Use intermediate variable to get around backtick/quote nesting problems. +awkprog=' +BEGIN { ORS = ""; FS = "="; incs = 0; libs = 0; } + +function normalize(dir) +{ + do { + odir = dir + sub(/\/[^\/]+\/\.\./, "", dir) + } while (dir != odir); + do { + odir = dir + gsub(/\/\./, "", dir) + } while (dir != odir); + sub("/$", "", dir); + return dir; +} + +# extract include paths from indented lines between +# #include <...> search starts here: +# and +# End of search list. +/^\#include &1 > /dev/null | $AWK "$awkprog"` +eval "$awkprog_result" +[ "$OPT_VERBOSE" = "yes" ] && echo "$awkprog_result" + +#setup the build parts +if [ -z "$CFG_BUILD_PARTS" ]; then + CFG_BUILD_PARTS="$QT_DEFAULT_BUILD_PARTS" + + # build tests by default, if a developer build + if [ "$CFG_DEV" = "yes" ]; then + CFG_BUILD_PARTS="$CFG_BUILD_PARTS tests" + fi + + # don't build tools by default when cross-compiling + if [ "$PLATFORM" != "$XPLATFORM" ]; then + CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed 's, tools,,g'` + fi +fi +for nobuild in $CFG_NOBUILD_PARTS; do + CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, $nobuild,,g"` +done +if echo $CFG_BUILD_PARTS | grep -v libs >/dev/null 2>&1; then +# echo +# echo "WARNING: libs is a required part of the build." +# echo + CFG_BUILD_PARTS="$CFG_BUILD_PARTS libs" +fi + +#------------------------------------------------------------------------------- +# postprocess installation and deployment paths +#------------------------------------------------------------------------------- + +if [ -z "$QT_INSTALL_PREFIX" ]; then + if [ "$CFG_DEV" = "yes" ]; then + QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default + else + QT_INSTALL_PREFIX="/usr/local/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Qt-$QT_VERSION + fi +fi +QT_INSTALL_PREFIX=`makeabs "$QT_INSTALL_PREFIX"` + +if [ -z "$QT_EXT_PREFIX" ]; then + QT_EXT_PREFIX=$QT_INSTALL_PREFIX + if [ -n "$CFG_SYSROOT" ]; then + QMAKE_SYSROOTIFY=true + else + QMAKE_SYSROOTIFY=false + fi +else + QT_EXT_PREFIX=`makeabs "$QT_EXT_PREFIX"` + QMAKE_SYSROOTIFY=false +fi + +if [ -z "$QT_HOST_PREFIX" ]; then + if $QMAKE_SYSROOTIFY; then + QT_HOST_PREFIX=$CFG_SYSROOT$QT_EXT_PREFIX + else + QT_HOST_PREFIX=$QT_EXT_PREFIX + fi + HAVE_HOST_PATH=false +else + QT_HOST_PREFIX=`makeabs "$QT_HOST_PREFIX"` + HAVE_HOST_PATH=true +fi + +#------- make the paths relative to the prefixes -------- + +PREFIX_COMPLAINTS= +PREFIX_REMINDER=false +while read basevar baseoption var option; do + eval path=\$QT_${basevar}_$var + [ -z "$path" ] && continue + path=`makeabs "$path"` + eval base=\$QT_${basevar}_PREFIX + rel=${path##$base} + if [ x"$rel" = x"$path" ]; then + if [ x"$option" != x"sysconf" ]; then + PREFIX_COMPLAINTS="$PREFIX_COMPLAINTS + NOTICE: -${option}dir is not a subdirectory of ${baseoption}prefix." + eval \$HAVE_${basevar}_PATH || PREFIX_REMINDER=true + fi + eval QT_REL_${basevar}_$var=\$rel + elif [ -z "$rel" ]; then + eval QT_REL_${basevar}_$var=. + else + eval QT_REL_${basevar}_$var=\${rel#/} + fi +done < "$outpath/src/corelib/global/qconfig.cpp.new" <> "$mkfile" +} + +# build qmake +if true; then ###[ '!' -f "$outpath/bin/qmake" ]; + echo "Creating qmake..." + + mkdir -p "$outpath/qmake" || exit + # fix makefiles + for mkfile in GNUmakefile Makefile; do + EXTRA_LFLAGS= + EXTRA_CFLAGS= + in_mkfile="${mkfile}.in" + if [ "$mkfile" = "Makefile" ]; then +# if which qmake >/dev/null 2>&1 && [ -f qmake/qmake.pro ]; then +# (cd qmake && qmake) >/dev/null 2>&1 && continue +# fi + in_mkfile="${mkfile}.unix" + fi + in_mkfile="$relpath/qmake/$in_mkfile" + mkfile="$outpath/qmake/$mkfile" + if [ -f "$mkfile" ]; then + [ "$CFG_DEV" = "yes" ] && "$WHICH" chflags >/dev/null 2>&1 && chflags nouchg "$mkfile" + rm -f "$mkfile" + fi + [ -f "$in_mkfile" ] || continue + + echo "########################################################################" > "$mkfile" + echo "## This file was autogenerated by configure, all changes will be lost ##" >> "$mkfile" + echo "########################################################################" >> "$mkfile" + EXTRA_OBJS= + EXTRA_SRCS= + EXTRA_CFLAGS="\$(QMAKE_CFLAGS) \$(QMAKE_CFLAGS_SPLIT_SECTIONS)" + EXTRA_CXXFLAGS="\$(QMAKE_CXXFLAGS) \$(QMAKE_CXXFLAGS_CXX11) \$(QMAKE_CXXFLAGS_SPLIT_SECTIONS)" + EXTRA_LFLAGS="\$(QMAKE_LFLAGS) \$(QMAKE_LFLAGS_GCSECTIONS)" + + if [ "$PLATFORM" = "irix-cc" ] || [ "$PLATFORM" = "irix-cc-64" ]; then + EXTRA_LFLAGS="$EXTRA_LFLAGS -lm" + fi + + [ "$CFG_SILENT" = "yes" ] && CC_TRANSFORM='s,^,\@,' || CC_TRANSFORM= + setBootstrapVariable QMAKE_CC CC "$CC_TRANSFORM" + setBootstrapVariable QMAKE_CXX CXX "$CC_TRANSFORM" + setBootstrapVariable QMAKE_CFLAGS + setBootstrapVariable QMAKE_CFLAGS_SPLIT_SECTIONS + setBootstrapVariable QMAKE_CXXFLAGS + setBootstrapVariable QMAKE_CXXFLAGS_CXX11 + setBootstrapVariable QMAKE_CXXFLAGS_SPLIT_SECTIONS + setBootstrapVariable QMAKE_LFLAGS + setBootstrapVariable QMAKE_LFLAGS_GCSECTIONS + + if [ "$CFG_DEBUG" = "no" ] || [ "$CFG_RELEASE_TOOLS" = "yes" ]; then + setBootstrapVariable QMAKE_CFLAGS_RELEASE + setBootstrapVariable QMAKE_CXXFLAGS_RELEASE + EXTRA_CFLAGS="$EXTRA_CFLAGS \$(QMAKE_CFLAGS_RELEASE)" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_RELEASE)" + else + setBootstrapVariable QMAKE_CFLAGS_DEBUG + setBootstrapVariable QMAKE_CXXFLAGS_DEBUG + EXTRA_CFLAGS="$EXTRA_CFLAGS \$(QMAKE_CFLAGS_DEBUG)" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_DEBUG)" + fi + + case `basename "$PLATFORM"` in + win32-g++*) + EXTRA_CFLAGS="$EXTRA_CFLAGS -DUNICODE" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -DUNICODE" + EXTRA_OBJS="qfilesystemengine_win.o \ + qfilesystemiterator_win.o \ + qfsfileengine_win.o \ + qlocale_win.o \ + qsettings_win.o \ + qsystemlibrary.o \ + registry.o" + EXTRA_SRCS="\"\$(SOURCE_PATH)/src/corelib/corelib/io/qfilesystemengine_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfilesystemiterator_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfsfileengine_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qsettings_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/tools/qlocale_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp\" \ + \"\$(SOURCE_PATH)/tools/shared/windows/registry.cpp\"" + EXTRA_LFLAGS="$EXTRA_LFLAGS -static -s -lole32 -luuid -ladvapi32 -lkernel32" + EXEEXT=".exe" + ;; + *) + EXTRA_OBJS="qfilesystemengine_unix.o \ + qfilesystemiterator_unix.o \ + qfsfileengine_unix.o \ + qlocale_unix.o" + EXTRA_SRCS="\"\$(SOURCE_PATH)/src/corelib/io/qfilesystemengine_unix.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfilesystemiterator_unix.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfsfileengine_unix.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/tools/qlocale_unix.cpp\"" + EXEEXT= + ;; + esac + if [ "$BUILD_ON_MAC" = "yes" ]; then + echo "COCOA_LFLAGS =-framework Foundation -framework CoreServices" >>"$mkfile" + echo "CARBON_LFLAGS =-framework ApplicationServices" >>"$mkfile" + echo "CARBON_CFLAGS =-fconstant-cfstrings" >>"$mkfile" + EXTRA_LFLAGS="$EXTRA_LFLAGS \$(COCOA_LFLAGS)" + EXTRA_LFLAGS="$EXTRA_LFLAGS \$(CARBON_LFLAGS)" + EXTRA_CFLAGS="$EXTRA_CFLAGS \$(CARBON_CFLAGS)" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(CARBON_CFLAGS)" + EXTRA_OBJS="$EXTRA_OBJS \ + qsettings_mac.o \ + qcore_mac.o \ + qcore_mac_objc.o" + EXTRA_SRCS="$EXTRA_SRCS \ + \"\$(SOURCE_PATH)/src/corelib/io/qsettings_mac.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac_objc.mm\"" + fi + + echo >>"$mkfile" + adjrelpath=`echo "$relpath" | sed 's/ /\\\\\\\\ /g'` + adjoutpath=`echo "$outpath" | sed 's/ /\\\\\\\\ /g'` + adjqmakespec=`echo "$QMAKESPEC" | sed 's/ /\\\\\\\\ /g'` + + 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 "EXTRA_CFLAGS = $EXTRA_CFLAGS" >> "$mkfile" + echo "EXTRA_CXXFLAGS = $EXTRA_CXXFLAGS" >> "$mkfile" + echo "QTOBJS =" $EXTRA_OBJS >> "$mkfile" + echo "QTSRCS =" $EXTRA_SRCS >> "$mkfile" + echo "LFLAGS = $EXTRA_LFLAGS" >> "$mkfile" + echo "EXEEXT = $EXEEXT" >> "$mkfile" + echo "RM_F = rm -f" >> "$mkfile" + echo "RM_RF = rm -rf" >> "$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 + done + + 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 +fi # Build qmake + +#------------------------------------------------------------------------------- +# create a qt.conf for the Qt build tree itself +#------------------------------------------------------------------------------- + +QTCONFFILE="$outpath/bin/qt.conf" +cat > "$QTCONFFILE" <> "$QTCONFFILE" <> "$QTCONFFILE" <> "$QTCONFFILE" </dev/null` + [ -n "$PKG_CONFIG" ] && [ "$OPT_VERBOSE" = "yes" ] && echo "Found pkg-config from \$PATH: $PKG_CONFIG" +fi + +if [ "$CFG_PKGCONFIG" = "no" ]; then + PKG_CONFIG= + [ "$OPT_VERBOSE" = "yes" ] && echo "pkg-config support disabled." +elif [ -n "$PKG_CONFIG" ]; then + # found a pkg-config + if [ "$QT_CROSS_COMPILE" = "yes" ]; then + # when xcompiling, check environment to see if it's actually usable + if [ -z "$PKG_CONFIG_LIBDIR" ]; then + if [ -n "$CFG_SYSROOT" ] && [ -d "$CFG_SYSROOT/usr/lib/pkgconfig" ]; then + PKG_CONFIG_LIBDIR=$CFG_SYSROOT/usr/lib/pkgconfig:$CFG_SYSROOT/usr/share/pkgconfig + if [ -n "$GCC_MACHINE_DUMP" ]; then + PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$CFG_SYSROOT/usr/lib/$GCC_MACHINE_DUMP/pkgconfig + fi + export PKG_CONFIG_LIBDIR + echo >&2 "Note: PKG_CONFIG_LIBDIR automatically set to $PKG_CONFIG_LIBDIR" + elif [ "$CFG_PKGCONFIG" = "auto" ]; then + PKG_CONFIG= + echo >&2 "Warning: Disabling pkg-config since PKG_CONFIG_LIBDIR is not set and" + echo >&2 "the host's .pc files would be used (even if you set PKG_CONFIG_PATH)." + echo >&2 "Set this variable to the directory that contains target .pc files" + echo >&2 "for pkg-config to function correctly when cross-compiling or" + echo >&2 "use -pkg-config to override this test." + fi + fi + if [ -z "$PKG_CONFIG_SYSROOT_DIR" ]; then + if [ -n "$CFG_SYSROOT" ]; then + PKG_CONFIG_SYSROOT_DIR=$CFG_SYSROOT + export PKG_CONFIG_SYSROOT_DIR + echo >&2 "Note: PKG_CONFIG_SYSROOT_DIR automatically set to $PKG_CONFIG_SYSROOT_DIR" + elif [ "$CFG_PKGCONFIG" = "auto" ]; then + PKG_CONFIG= + echo >&2 "Warning: Disabling pkg-config since PKG_CONFIG_SYSROOT_DIR is not set." + echo >&2 "Set this variable to your sysroot for pkg-config to function correctly when" + echo >&2 "cross-compiling or use -pkg-config to override this test." + fi + fi + fi + if [ -n "$PKG_CONFIG" ]; then + CFG_PKGCONFIG=yes + else + CFG_PKGCONFIG=no + fi +elif [ "$CFG_PKGCONFIG" = "yes" ]; then + echo >&2 "Could not detect pkg-config from mkspec or PATH." + exit 101 +fi + +if [ -z "$PKG_CONFIG" ]; then + QT_CONFIG="$QT_CONFIG no-pkg-config" +fi + +#------------------------------------------------------------------------------- +# run configure tests +#------------------------------------------------------------------------------- + +# parameters: path, name, extra args +compileTest() +{ + path=config.tests/$1 + name=$2 + shift 2 + # allow config tests which behave differently depending on the type of + # library being built (shared/static) e.g. see config.tests/unix/icu + test_config="$QMAKE_CONFIG shared" + if [ "$CFG_SHARED" = "no" ]; then + test_config="$QMAKE_CONFIG static" + fi + echo $ECHO_N "checking for $name... $ECHO_C" + "$unixtests/compile.test" "$XQMAKESPEC" "$test_config" $OPT_VERBOSE "$relpath" "$outpath" "$path" "$name" "$CFG_QMAKE_PATH" "$QTCONFFILE" $I_FLAGS $D_FLAGS $L_FLAGS "$@" +} + +compileTestWithPkgConfig() +{ + if [ $# -lt 4 ]; then + echo "CompileTestWithPkgConfig requires at least 4 arguments." + echo "compileTestWithPkgConfig pkg_name configtest configtest_name qmake_postfix + additional arguments to compileTest" + exit 1 + fi + + local pkg_name=$1 + local configtest=$2 + local configtest_name="$3" + local qmake_postfix=$4 + shift 4 + + local has_used_pkg_config="no" + + local incdir_raw incdir_mod cflags + local libdir_raw libdir_mod libs + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists $pkg_name 2>/dev/null; then + incdir_raw=`$PKG_CONFIG --cflags-only-I $pkg_name 2>/dev/null` + cflags=`$PKG_CONFIG --cflags-only-other $pkg_name 2>/dev/null` + libdir_raw=`$PKG_CONFIG --libs-only-L $pkg_name 2>/dev/null` + libs=`$PKG_CONFIG --libs-only-l --libs-only-other $pkg_name 2>/dev/null` + incdir_mod=`echo $incdir_raw | sed -e 's,^-I,,g' -e 's, -I, ,g'` + libdir_mod=`echo $libdir_raw | sed -e 's,^-L,,g' -e 's, -L, ,g'` + has_used_pkg_config="yes" + fi + if compileTest $configtest "$configtest_name" $libdir_raw $incdir_raw $libs $cflags "$@"; then + if [ "$has_used_pkg_config" = "yes" ] && [ -n "$qmake_postfix" ]; then + QMakeVar set QMAKE_INCDIR_$qmake_postfix "`shellArgumentListToQMakeList $incdir_mod`" + QMakeVar set QMAKE_LIBDIR_$qmake_postfix "`shellArgumentListToQMakeList $libdir_mod`" + QMakeVar set QMAKE_LIBS_$qmake_postfix "`shellArgumentListToQMakeList $libs`" + QMakeVar set QMAKE_CFLAGS_$qmake_postfix "`shellArgumentListToQMakeList $cflags`" + fi + return 0 + else + return 1 + fi +} + +#------------------------------------------------------------------------------- +# determine the target and host architectures +#------------------------------------------------------------------------------- + +# Use config.tests/arch/arch.pro to have the compiler tell us what the target architecture is +OUTFILE=$outpath/arch.result +"$unixtests/arch.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" "$OUTFILE" "target" $CFG_QMAKE_PATH $QTCONFFILE $I_FLAGS $D_FLAGS $L_FLAGS +if [ $? -eq 0 ]; then + eval `cat "$OUTFILE"` +else + echo + echo "Could not determine the target architecture!" + echo "Turn on verbose messaging (-v) to see the final report." +fi +rm -f "$OUTFILE" 2>/dev/null +[ -z "$CFG_ARCH" ] && CFG_ARCH="unknown" + +if [ "$QMAKESPEC" != "$XQMAKESPEC" ]; then + # Do the same test again, using the host compiler + SYSROOT_FLAG= "$unixtests/arch.test" "$QMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" "$OUTFILE" "host" $CFG_QMAKE_PATH $QTCONFFILE $I_FLAGS $D_FLAGS $L_FLAGS + if [ $? -eq 0 ]; then + eval `cat "$OUTFILE"` + else + echo + echo "Could not determine the host architecture!" + echo "Turn on verbose messaging (-v) to see the final report." + fi + rm -f "$OUTFILE" 2>/dev/null + [ -z "$CFG_HOST_ARCH" ] && CFG_HOST_ARCH="unknown" +else + # not cross compiling, host == target + CFG_HOST_ARCH="$CFG_ARCH" + CFG_HOST_CPUFEATURES="$CFG_CPUFEATURES" +fi +unset OUTFILE + +if [ "$OPT_VERBOSE" = "yes" ]; then + echo "System architecture: '$CFG_ARCH'" + echo "Host architecture: '$CFG_HOST_ARCH'" +fi + +#------------------------------------------------------------------------------- +# functionality tests +#------------------------------------------------------------------------------- + +# auto-detect precompiled header support +if [ "$CFG_PRECOMPILE" = "auto" ]; then + if "$unixtests/precomp.test" "$TEST_COMPILER" "$OPT_VERBOSE"; then + CFG_PRECOMPILE=no + else + CFG_PRECOMPILE=yes + fi +fi + +# auto-detect -fvisibility support +if [ "$CFG_REDUCE_EXPORTS" != "no" ]; then + if "$unixtests/fvisibility.test" "$TEST_COMPILER" "$OPT_VERBOSE"; then + if [ "$CFG_REDUCE_EXPORTS" = "yes" ]; then + echo "-reduce-exports was requested but this compiler does not support it" + echo "Re-run configure with -v for more information" + exit 1 + fi + CFG_REDUCE_EXPORTS=no + else + CFG_REDUCE_EXPORTS=yes + fi +fi + +# auto-detect -fuse-ld=gold support +if [ "$CFG_USE_GOLD_LINKER" != "no" ]; then + if compilerSupportsFlag $TEST_COMPILER -fuse-ld=gold; then + CFG_USE_GOLD_LINKER=yes + else + if [ "$CFG_USE_GOLD_LINKER" = "yes" ]; then + echo "-use-gold-linker was requested but this compiler does not support it" + exit 1 + fi + CFG_USE_GOLD_LINKER=no + fi +fi + +# auto-detect --enable-new-dtags support +if linkerSupportsFlag $TEST_COMPILER --enable-new-dtags; then + CFG_ENABLE_NEW_DTAGS=yes +else + CFG_ENABLE_NEW_DTAGS=no +fi + +# auto-detect -fstack-protector-strong support (for QNX only currently) +if [ "$XPLATFORM_QNX" = "yes" ]; then + if compilerSupportsFlag $TEST_COMPILER -fstack-protector-strong; then + CFG_STACK_PROTECTOR_STRONG=yes + else + CFG_STACK_PROTECTOR_STRONG=no + fi +else + CFG_STACK_PROTECTOR_STRONG=no +fi + +# detect the availability of the -Bsymbolic-functions linker optimization +if [ "$CFG_REDUCE_RELOCATIONS" != "no" ]; then + if "$unixtests/bsymbolic_functions.test" "$TEST_COMPILER" "$OPT_VERBOSE"; then + if [ "$CFG_REDUCE_RELOCATIONS" = "yes" ]; then + echo "-reduce-relocations was requested but this compiler does not support it" + echo "Re-run configure with -v for more information" + exit 1 + fi + CFG_REDUCE_RELOCATIONS=no + else + CFG_REDUCE_RELOCATIONS=yes + fi +fi + +# auto-detect GNU make support +if [ "$CFG_USE_GNUMAKE" = "auto" ] && "$MAKE" -v | grep "GNU Make" >/dev/null 2>&1; then + CFG_USE_GNUMAKE=yes +fi + +# find the default framework value +if [ "$XPLATFORM_MAC" = "yes" ]; then + if [ "$CFG_FRAMEWORK" = "auto" ]; then + CFG_FRAMEWORK="$CFG_SHARED" + elif [ "$CFG_FRAMEWORK" = "yes" ] && [ "$CFG_SHARED" = "no" ]; then + echo + echo "WARNING: Using static linking will disable the use of Mac frameworks." + echo + CFG_FRAMEWORK="no" + fi +else + CFG_FRAMEWORK=no +fi + +if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then + # sanity-check for separate debug info + if [ "$CFG_SHARED" = "no" ]; then + echo "ERROR: -separate-debug-info is incompatible with -static" + exit 1 + fi + if [ "$CFG_DEBUG" = "no" -a "$CFG_DEBUG_RELEASE" = "no" -a "$CFG_FORCEDEBUGINFO" = "no" ]; then + echo "ERROR: -separate-debug-info needs -debug, -debug-and-release, or -force-debug-info" + exit 1 + fi + + # Detect objcopy support + if [ "$XPLATFORM_MAC" = "no" ]; then + if ! compileTest unix/objcopy "objcopy"; then + echo "ERROR: -separate-debug-info was requested but this binutils does not support it." + echo "Re-run configure with -v for more information" + exit 1 + fi + fi +fi + +# Detect C++11 & up support +stdcxx_error=false +if ! compileTest common/c++11 "C++11"; then + echo "ERROR: Qt requires a C++11 compiler and yours does not seem to be that." + echo "Please upgrade." + exit 1 +elif [ "$CFG_STDCXX" = "c++11" ]; then + : # CFG_STDCXX is correct +elif ! compileTest common/c++14 "C++14"; then + if [ "$CFG_STDCXX" != "auto" ]; then + stdcxx_error=true + else + CFG_STDCXX="c++11" + fi +elif [ "$CFG_STDCXX" = "c++14" ]; then + : # CFG_STDCXX is correct +elif ! compileTest common/c++1z "C++1z"; then + if [ "$CFG_STDCXX" != "auto" ]; then + stdcxx_error=true + else + CFG_STDCXX="c++14" + fi +else + CFG_STDCXX="c++1z" +fi + +if $stdcxx_error && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "$CFG_STDCXX support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 +fi + +# Detect which edition of the C++ standard the compiler defaults to +CFG_STDCXX_DEFAULT=199711 +if compileTest common/c++default "default C++ standard edition"; then + if [ -e "$outpath/config.tests/common/c++default/c++default.ii" ]; then + CFG_STDCXX_DEFAULT=`sed -n '/^[0-9]/s/L//p' "$outpath/config.tests/common/c++default/c++default.ii"` + else + if [ "$OPT_VERBOSE" = "yes" ]; then + echo "Failed to run the preprocessor, something is wrong with your compiler" + fi + if [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + exit 101 + fi + fi +fi + +# Detect whether 64-bit std::atomic works -- some 32-bit platforms require extra library support +if compileTest common/atomic64 "64-bit std::atomic"; then + CFG_ATOMIC64=yes +elif compileTest common/atomic64 "64-bit std::atomic in -latomic" -latomic; then + CFG_ATOMIC64=libatomic +else + CFG_ATOMIC64=no +fi + +# detect sse2 support +CFG_SSE_LIST= +if [ "${CFG_SSE2}" = "auto" ]; then + if compileTest common/sse2 "sse2"; then + CFG_SSE2=yes + CFG_SSE_LIST=SSE2 + else + CFG_SSE2=no + fi +fi + +# detect sse3 support +if [ "${CFG_SSE2}" = "no" ]; then + CFG_SSE3=no +fi +if [ "${CFG_SSE3}" = "auto" ]; then + if compileTest common/sse3 "sse3"; then + CFG_SSE3=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSE3" + else + CFG_SSE3=no + fi +fi + +# detect ssse3 support +if [ "${CFG_SSE3}" = "no" ]; then + CFG_SSSE3=no +fi +if [ "${CFG_SSSE3}" = "auto" ]; then + if compileTest common/ssse3 "ssse3"; then + CFG_SSSE3=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSSE3" + else + CFG_SSSE3=no + fi +fi + +# detect sse4.1 support +if [ "${CFG_SSSE3}" = "no" ]; then + CFG_SSE4_1=no +fi +if [ "${CFG_SSE4_1}" = "auto" ]; then + if compileTest common/sse4_1 "sse4_1"; then + CFG_SSE4_1=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSE4.1" + else + CFG_SSE4_1=no + fi +fi + +# detect sse4.2 support +if [ "${CFG_SSE4_1}" = "no" ]; then + CFG_SSE4_2=no +fi +if [ "${CFG_SSE4_2}" = "auto" ]; then + if compileTest common/sse4_2 "sse4_2"; then + CFG_SSE4_2=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSE4.2" + else + CFG_SSE4_2=no + fi +fi + +# detect avx support +CFG_AVX_LIST= +if [ "${CFG_SSE4_2}" = "no" ]; then + CFG_AVX=no +fi +if [ "${CFG_AVX}" = "auto" ]; then + if compileTest common/avx "avx"; then + case "$XQMAKESPEC" in + *g++*|*-clang*) + # Some clang versions produce internal compiler errors compiling Qt AVX code + case `$TEST_COMPILER --version` in + Apple\ clang\ version\ [23]*) + CFG_AVX=no + if [ "$OPT_VERBOSE" = "yes" ]; then + echo 'AVX support disabled for blacklisted clang compiler' + fi + ;; + *) + CFG_AVX=yes + CFG_AVX_LIST=AVX + ;; + esac + ;; + *) + CFG_AVX=yes + CFG_AVX_LIST=AVX + ;; + esac + else + CFG_AVX=no + fi +fi + +# detect avx2 support +if [ "${CFG_AVX}" = "no" ]; then + CFG_AVX2=no +fi +if [ "${CFG_AVX2}" = "auto" ]; then + if compileTest common/avx2 "avx2"; then + CFG_AVX2=yes + CFG_AVX_LIST="$CFG_AVX_LIST AVX2" + else + CFG_AVX2=no + fi +fi + +# detect avx512 support +if [ "${CFG_AVX2}" = "no" ]; then + CFG_AVX512= +fi +if [ "${CFG_AVX512}" = "auto" ]; then + # First, test for AVX-512 Foundation + if compileTest common/avx512 "avx512f" AVX512=F; then + # Test for the sub-features + CFG_AVX512=f + CFG_AVX512_UPPER=AVX512F + for feature in er cd pf dq bw vl ifma vbmi; do + if [ -n "$BASH_VERSION" ] && [ "${BASH_VERSION%%.*}" -gt 3 ]; then + upper=${feature^^*} + elif [ -n "$ZSH_VERSION" ]; then + upper=${(U)feature} + else + upper=`echo $feature | tr a-z A-Z` + fi + if compileTest common/avx512 "avx512$feature" AVX512=$upper; then + CFG_AVX512="$CFG_AVX512 $feature" + CFG_AVX512_UPPER="$CFG_AVX512_UPPER AVX512$upper" + fi + done + else + CFG_AVX512= + fi +fi + +# check Neon support +if [ "$CFG_NEON" = "auto" ]; then + # no compile test, just check what the compiler has + case "$CFG_CPUFEATURES" in + *neon*) + CFG_NEON=yes + ;; + *) + CFG_NEON=no + ;; + esac +fi + +# detect mips_dsp support +if [ "$CFG_ARCH" = "mips" ] && [ "${CFG_MIPS_DSP}" = "auto" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/mips_dsp "mips_dsp" "$CFG_QMAKE_PATH" "$QTCONFFILE" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then + CFG_MIPS_DSP=yes + else + CFG_MIPS_DSP=no + fi +elif [ "$CFG_ARCH" != "mips" ]; then + CFG_MIPS_DSP=no +fi + +# detect mips_dspr2 support +if [ "$CFG_ARCH" = "mips" ] && [ "${CFG_MIPS_DSPR2}" = "auto" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/mips_dspr2 "mips_dspr2" "$CFG_QMAKE_PATH" "$QTCONFFILE" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then + CFG_MIPS_DSPR2=yes + else + CFG_MIPS_DSPR2=no + fi +elif [ "$CFG_ARCH" != "mips" ]; then + CFG_MIPS_DSPR2=no +fi + +[ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista" +[ "$XPLATFORM_ANDROID" = "yes" ] && QMakeVar add styles "android" + +# check IPC support +if ! compileTest unix/ipc_sysv "ipc_sysv" ; then + # SYSV IPC is not supported - check POSIX IPC + if compileTest unix/ipc_posix "ipc_posix" ; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_POSIX_IPC" + else + if [ "$XPLATFORM_ANDROID" = "no" ] && [ "$XPLATFORM_MINGW" = "no" ] ; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_SYSTEMSEMAPHORE QT_NO_SHAREDMEMORY" + fi + fi +fi + +# detect zlib +if [ "$CFG_ZLIB" = "no" ]; then + # Note: Qt no longer support builds without zlib + # So we force a "no" to be "auto" here. + # If you REALLY really need no zlib support, you can still disable + # it by doing the following: + # add "no-zlib" to mkspecs/qconfig.pri + # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h) + # + # There's no guarantee that Qt will build under those conditions + + CFG_ZLIB=auto + ZLIB_FORCED=yes +fi + +if [ "$XPLATFORM_QNX" = "yes" ]; then + if [ "$CFG_SLOG2" != "no" ]; then + if compileTest unix/slog2 "slog2"; then + CFG_SLOG2=yes + QMAKE_CONFIG="$QMAKE_CONFIG slog2" + else + CFG_SLOG2=no + fi + fi + if [ "$CFG_QNX_IMF" != "no" ]; then + if compileTest unix/qqnx_imf "qqnx_imf"; then + CFG_QNX_IMF=yes + QMAKE_CONFIG="$QMAKE_CONFIG qqnx_imf" + else + CFG_QNX_IMF=no + fi + fi + if [ "$CFG_PPS" != "no" ]; then + if compileTest unix/pps "pps"; then + CFG_PPS=yes + QMAKE_CONFIG="$QMAKE_CONFIG qqnx_pps" + else + CFG_PPS=no + fi + fi + + if [ "$CFG_LGMON" != "no" ]; then + if compileTest unix/lgmon "lgmon"; then + CFG_LGMON=yes + QMAKE_CONFIG="$QMAKE_CONFIG lgmon" + else + CFG_LGMON=no + fi + fi +fi + +if [ "$XPLATFORM_INTEGRITY" = "yes" ]; then + CFG_INTEGRITYFB=yes + CFG_SHARED=no + CFG_LARGEFILE=no +fi + +if [ "$CFG_ZLIB" = "auto" ]; then + if compileTest unix/zlib "zlib"; then + CFG_ZLIB=system + else + CFG_ZLIB=yes + fi +fi + +if [ "$CFG_MTDEV" != "no" ]; then + if compileTest unix/mtdev "mtdev"; then + CFG_MTDEV=yes + else + CFG_MTDEV=no + fi +fi +if [ "$CFG_MTDEV" = "no" ]; then + QMakeVar add DEFINES QT_NO_MTDEV +fi + +if [ "$CFG_JOURNALD" != "no" ]; then + if compileTest unix/journald "journald"; then + CFG_JOURNALD=yes + QMAKE_CONFIG="$QMAKE_CONFIG journald" + else + if [ "$CFG_JOURNALD" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "journald support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_JOURNALD=no + fi + fi +fi + +if [ "$CFG_SYSLOG" != "no" ]; then + if compileTest unix/syslog "syslog"; then + CFG_SYSLOG=yes + QMAKE_CONFIG="$QMAKE_CONFIG syslog" + else + if [ "$CFG_SYSLOG" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "syslog support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SYSLOG=no + fi + fi +fi + +if [ "$CFG_LARGEFILE" = "auto" ]; then + #Large files should be enabled for all Linux systems + CFG_LARGEFILE=yes +fi + +if [ "$CFG_GUI" = "no" ]; then + QPA_PLATFORM_GUARD=no +fi + +# detect how jpeg should be built +if [ "$CFG_JPEG" = "auto" ]; then + if [ "$CFG_SHARED" = "yes" ]; then + CFG_JPEG=plugin + else + CFG_JPEG=yes + fi +fi +# detect jpeg +if [ "$CFG_LIBJPEG" = "auto" ]; then + if compileTest unix/libjpeg "libjpeg"; then + CFG_LIBJPEG=system + else + CFG_LIBJPEG=qt + fi +fi + +# detect how gif should be built +if [ "$CFG_GIF" = "auto" ]; then + if [ "$CFG_SHARED" = "yes" ]; then + CFG_GIF=plugin + else + CFG_GIF=yes + fi +fi + +# detect png +if [ "$CFG_LIBPNG" = "auto" ]; then + if compileTest unix/libpng "libpng"; then + CFG_LIBPNG=system + else + CFG_LIBPNG=qt + fi +fi + +# detect dl +if ! compileTest unix/libdl "libdl"; then + QMakeVar add DEFINES QT_NO_DYNAMIC_LIBRARY + QMAKE_CONFIG="$QMAKE_CONFIG no-libdl" +fi + +if [ "$CFG_EGLFS" = "yes" ]; then + if [ "$CFG_EGL" = "no" ]; then + echo "The EGLFS plugin requires EGL support and cannot be built" + exit 101 + fi + CFG_EGL=yes +fi + +# auto-detect SQL-modules support +for _SQLDR in $CFG_SQL_AVAILABLE; do + case $_SQLDR in + mysql) + if [ "$CFG_SQL_mysql" != "no" ]; then + [ -z "$CFG_MYSQL_CONFIG" ] && CFG_MYSQL_CONFIG=`"$WHICH" mysql_config` + if [ -x "$CFG_MYSQL_CONFIG" ]; then + QT_CFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --include 2>/dev/null | filterIncludeOptions` + # -rdynamic should not be returned by mysql_config, but is on RHEL 6.6 + QT_LFLAGS_MYSQL_R=`$CFG_MYSQL_CONFIG --libs_r 2>/dev/null | filterLibraryOptions | sed "s/-rdynamic//"` + QT_LFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --libs 2>/dev/null | filterLibraryOptions | sed "s/-rdynamic//"` + QT_MYSQL_VERSION=`$CFG_MYSQL_CONFIG --version 2>/dev/null` + QT_MYSQL_VERSION_MAJOR=`echo $QT_MYSQL_VERSION | cut -d . -f 1` + fi + if [ -n "$QT_MYSQL_VERSION" ] && [ "$QT_MYSQL_VERSION_MAJOR" -lt 4 ]; then + if [ "$CFG_SQL_mysql" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "This version of MySql is not supported ($QT_MYSQL_VERSION)." + echo " You need MySql 4 or higher." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_mysql="no" + QT_LFLAGS_MYSQL="" + QT_LFLAGS_MYSQL_R="" + QT_CFLAGS_MYSQL="" + fi + else + if compileTest unix/mysql_r "MySQL (thread-safe)" $QT_LFLAGS_MYSQL_R $QT_CFLAGS_MYSQL; then + QMakeVar add CONFIG use_libmysqlclient_r + if [ "$CFG_SQL_mysql" = "auto" ]; then + CFG_SQL_mysql=plugin + fi + QT_LFLAGS_MYSQL="$QT_LFLAGS_MYSQL_R" + elif compileTest unix/mysql "MySQL (thread-unsafe)" $QT_LFLAGS_MYSQL $QT_CFLAGS_MYSQL; then + if [ "$CFG_SQL_mysql" = "auto" ]; then + CFG_SQL_mysql=plugin + fi + else + if [ "$CFG_SQL_mysql" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "MySQL support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_mysql=no + QT_LFLAGS_MYSQL="" + QT_LFLAGS_MYSQL_R="" + QT_CFLAGS_MYSQL="" + fi + fi + fi + fi + ;; + psql) + if [ "$CFG_SQL_psql" != "no" ]; then + [ -z "$CFG_PSQL_CONFIG" ] && CFG_PSQL_CONFIG=`"$WHICH" pg_config` + # Be careful not to use native pg_config when cross building. + if [ "$XPLATFORM_MINGW" != "yes" ] && [ -x "$CFG_PSQL_CONFIG" ]; then + QT_CFLAGS_PSQL=`$CFG_PSQL_CONFIG --includedir 2>/dev/null | filterIncludePath` + QT_LFLAGS_PSQL=`$CFG_PSQL_CONFIG --libdir 2>/dev/null | filterLibraryPath` + fi + [ -z "$QT_CFLAGS_PSQL" ] || QT_CFLAGS_PSQL="-I$QT_CFLAGS_PSQL" + [ -z "$QT_LFLAGS_PSQL" ] || QT_LFLAGS_PSQL="-L$QT_LFLAGS_PSQL" + # But, respect PSQL_LIBS if set + [ -z "$PSQL_LIBS" ] || QT_LFLAGS_PSQL="$PSQL_LIBS" + if compileTest unix/psql "PostgreSQL" $QT_LFLAGS_PSQL $QT_CFLAGS_PSQL; then + if [ "$CFG_SQL_psql" = "auto" ]; then + CFG_SQL_psql=plugin + fi + else + if [ "$CFG_SQL_psql" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "PostgreSQL support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_psql=no + QT_CFLAGS_PSQL="" + QT_LFLAGS_PSQL="" + fi + fi + fi + ;; + odbc) + if [ "$CFG_SQL_odbc" != "no" ]; then + if [ "$XPLATFORM_MAC" != "yes" ] && compileTest unix/odbc "ODBC"; then + if [ "$CFG_SQL_odbc" = "auto" ]; then + CFG_SQL_odbc=plugin + fi + else + if compileTest unix/iodbc "iODBC"; then + QT_LFLAGS_ODBC="-liodbc" + if [ "$CFG_SQL_odbc" = "auto" ]; then + CFG_SQL_odbc=plugin + fi + else + if [ "$CFG_SQL_odbc" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "ODBC support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_odbc=no + fi + fi + fi + fi + ;; + oci) + if [ "$CFG_SQL_oci" != "no" ]; then + if compileTest unix/oci "OCI"; then + if [ "$CFG_SQL_oci" = "auto" ]; then + CFG_SQL_oci=plugin + fi + else + if [ "$CFG_SQL_oci" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Oracle (OCI) support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_oci=no + fi + fi + fi + ;; + tds) + if [ "$CFG_SQL_tds" != "no" ]; then + [ -z "$SYBASE" ] || QT_LFLAGS_TDS="-L$SYBASE/lib" + [ -z "$SYBASE_LIBS" ] || QT_LFLAGS_TDS="$QT_LFLAGS_TDS $SYBASE_LIBS" + if compileTest unix/tds "TDS" $QT_LFLAGS_TDS; then + if [ "$CFG_SQL_tds" = "auto" ]; then + CFG_SQL_tds=plugin + fi + else + if [ "$CFG_SQL_tds" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "TDS support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_tds=no + fi + fi + fi + ;; + db2) + if [ "$CFG_SQL_db2" != "no" ]; then + if compileTest unix/db2 "DB2"; then + if [ "$CFG_SQL_db2" = "auto" ]; then + CFG_SQL_db2=plugin + fi + else + if [ "$CFG_SQL_db2" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "ODBC support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_db2=no + fi + fi + fi + ;; + ibase) + if [ "$CFG_SQL_ibase" != "no" ]; then + if compileTest unix/ibase "InterBase"; then + if [ "$CFG_SQL_ibase" = "auto" ]; then + CFG_SQL_ibase=plugin + fi + else + if [ "$CFG_SQL_ibase" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "InterBase support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_ibase=no + fi + fi + fi + ;; + sqlite2) + if [ "$CFG_SQL_sqlite2" != "no" ]; then + if compileTest unix/sqlite2 "SQLite2"; then + if [ "$CFG_SQL_sqlite2" = "auto" ]; then + CFG_SQL_sqlite2=plugin + fi + else + if [ "$CFG_SQL_sqlite2" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "SQLite2 support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_sqlite2=no + fi + fi + fi + ;; + sqlite) + if [ "$CFG_SQL_sqlite" != "no" ]; then + SQLITE_AUTODETECT_FAILED="no" + if [ "$CFG_SQLITE" = "system" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3 2>/dev/null; then + QT_CFLAGS_SQLITE=`$PKG_CONFIG --cflags sqlite3 2>/dev/null` + QT_LFLAGS_SQLITE=`$PKG_CONFIG --libs sqlite3 2>/dev/null` + else + QT_CFLAGS_SQLITE= + QT_LFLAGS_SQLITE="-lsqlite3 -lz" + fi + if compileTest unix/sqlite "SQLite" $QT_LFLAGS_SQLITE $QT_CFLAGS_SQLITE; then + if [ "$CFG_SQL_sqlite" = "auto" ]; then + CFG_SQL_sqlite=plugin + fi + QMAKE_CONFIG="$QMAKE_CONFIG system-sqlite" + else + SQLITE_AUTODETECT_FAILED="yes" + CFG_SQL_sqlite=no + fi + elif [ -f "$relpath/src/3rdparty/sqlite/sqlite3.h" ]; then + if [ "$CFG_SQL_sqlite" = "auto" ]; then + CFG_SQL_sqlite=plugin + fi + else + SQLITE_AUTODETECT_FAILED="yes" + CFG_SQL_sqlite=no + fi + + if [ "$SQLITE_AUTODETECT_FAILED" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "SQLite support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + fi + fi + ;; + *) + if [ "$OPT_VERBOSE" = "yes" ]; then + echo "unknown SQL driver: $_SQLDR" + fi + ;; + esac +done + +# auto-detect NIS support +if [ "$CFG_NIS" != "no" ]; then + if compileTest unix/nis "NIS"; then + CFG_NIS=yes + else + if [ "$CFG_NIS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "NIS support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_NIS=no + fi + fi +fi + +# auto-detect CUPS support +if [ "$CFG_CUPS" != "no" ]; then + if compileTest unix/cups "Cups"; then + CFG_CUPS=yes + else + if [ "$CFG_CUPS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Cups support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_CUPS=no + fi + fi +fi + +# auto-detect iconv(3) support +if [ "$CFG_ICONV" != "no" ]; then + if [ "$XPLATFORM_MINGW" = "yes" ]; then + CFG_ICONV=no + elif compileTest unix/iconv "POSIX iconv"; then + CFG_ICONV=yes + elif compileTest unix/sun-libiconv "SUN libiconv"; then + CFG_ICONV=sun + elif compileTest unix/gnu-libiconv "GNU libiconv"; then + CFG_ICONV=gnu + else + if [ "$CFG_ICONV" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Iconv support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_ICONV=no + fi + fi +fi + +# auto-detect libdbus-1 support +# auto: detect if libdbus-1 is present; if so, link to it +# linked: fail if libdbus-1 is not present; otherwise link to it +# runtime: no detection (cannot fail), load libdbus-1 at runtime +if [ "$CFG_DBUS" = "auto" ] || [ "$CFG_DBUS" = "linked" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --atleast-version="$MIN_DBUS_1_VERSION" dbus-1 2>/dev/null; then + QT_CFLAGS_DBUS=`$PKG_CONFIG --cflags dbus-1 2>/dev/null` + QT_LIBS_DBUS=`$PKG_CONFIG --libs dbus-1 2>/dev/null` + else + QT_LIBS_DBUS="-ldbus-1" + fi + if compileTest unix/dbus "D-Bus" $QT_CFLAGS_DBUS $QT_LIBS_DBUS; then + QMakeVar set QT_LIBS_DBUS "$QT_LIBS_DBUS" + QMakeVar set QT_CFLAGS_DBUS "$QT_CFLAGS_DBUS" + # Try find correct host configuration for dbus tools when cross-compiling + if [ "$QT_CROSS_COMPILE" = "yes" ] && env -i PATH="$PATH" \ + pkg-config --atleast-version="$MIN_DBUS_1_VERSION" dbus-1 2>/dev/null; then + QT_CFLAGS_DBUS=`env -i PATH="$PATH" pkg-config --cflags dbus-1 2>/dev/null` + fi + QMakeVar set QT_HOST_CFLAGS_DBUS "$QT_CFLAGS_DBUS" + CFG_DBUS=linked + else + # Failed to compile the test, so it's an error if CFG_DBUS is "linked" + if [ "$CFG_DBUS" = "linked" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "The Qt D-Bus module cannot be enabled because libdbus-1 version $MIN_DBUS_1_VERSION was not found." + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + # CFG_DBUS is "auto" here + CFG_DBUS=runtime + fi + fi +fi + +# auto-detect libproxy support +if [ "$CFG_LIBPROXY" != "no" ]; then + if compileTest common/libproxy "libproxy"; then + CFG_LIBPROXY=yes + else + if [ "$CFG_LIBPROXY" = "auto" ]; then + CFG_LIBPROXY=no + elif [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + # CFG_LIBPROXY is "yes" here + echo "The libproxy support cannot be enabled because libproxy was not found." + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + fi + fi +fi + +# auto-detect Glib support +if [ "$CFG_GLIB" != "no" ]; then + if [ -n "$PKG_CONFIG" ]; then + QT_CFLAGS_GLIB=`$PKG_CONFIG --cflags glib-2.0 gthread-2.0 2>/dev/null` + QT_LIBS_GLIB=`$PKG_CONFIG --libs glib-2.0 gthread-2.0 2>/dev/null` + fi + if compileTest unix/glib "Glib" $QT_CFLAGS_GLIB $QT_LIBS_GLIB; then + CFG_GLIB=yes + QMakeVar set QT_CFLAGS_GLIB "$QT_CFLAGS_GLIB" + QMakeVar set QT_LIBS_GLIB "$QT_LIBS_GLIB" + else + if [ "$CFG_GLIB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Glib support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GLIB=no + fi + fi +fi + +# auto-detect GTK style support +if [ "$CFG_GLIB" = "yes" -a "$CFG_GTK" != "no" ]; then + if [ -n "$PKG_CONFIG" ]; then + QT_CFLAGS_QGTK3=`$PKG_CONFIG --cflags gtk+-3.0 2>/dev/null` + QT_LIBS_QGTK3=`$PKG_CONFIG --libs gtk+-3.0 2>/dev/null` + QT_LIBS_QGOBJECT=`$PKG_CONFIG --libs gobject-2.0 2>/dev/null` + fi + if [ -n "$QT_CFLAGS_QGTK3" ] ; then + CFG_GTK=yes + QT_CONFIG="$QT_CONFIG gtk3" + QMakeVar set QT_CFLAGS_QGTK3 "$QT_CFLAGS_QGTK3" + QMakeVar set QT_LIBS_QGTK3 "$QT_LIBS_QGTK3" + else + if [ "$CFG_GTK" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "GTK theme support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GTK=no + fi + fi +elif [ "$CFG_GLIB" = "no" ]; then + CFG_GTK=no +fi + +# auto-detect libicu support +if [ "$CFG_ICU" != "no" ]; then + if compileTest unix/icu "ICU"; then + [ "$CFG_ICU" = "auto" ] && CFG_ICU=yes + else + if [ "$CFG_ICU" = "auto" ]; then + CFG_ICU=no + elif [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + # CFG_ICU is "yes" + + echo "The ICU library support cannot be enabled." + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + fi + fi +fi + +# Auto-detect PulseAudio support +if [ "$CFG_PULSEAUDIO" != "no" ]; then + if [ -n "$PKG_CONFIG" ]; then + QT_CFLAGS_PULSEAUDIO=`$PKG_CONFIG --cflags libpulse '>=' 0.9.10 libpulse-mainloop-glib 2>/dev/null` + QT_LIBS_PULSEAUDIO=`$PKG_CONFIG --libs libpulse '>=' 0.9.10 libpulse-mainloop-glib 2>/dev/null` + fi + if compileTest unix/pulseaudio "PulseAudio" $QT_CFLAGS_PULSEAUDIO $QT_LIBS_PULSEAUDIO; then + CFG_PULSEAUDIO=yes + QMakeVar set QT_CFLAGS_PULSEAUDIO "$QT_CFLAGS_PULSEAUDIO" + QMakeVar set QT_LIBS_PULSEAUDIO "$QT_LIBS_PULSEAUDIO" + else + if [ "$CFG_PULSEAUDIO" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "PulseAudio support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_PULSEAUDIO=no + fi + fi +fi + +# X11/MINGW OpenGL +if [ "$XPLATFORM_MINGW" = "yes" ]; then + # auto-detect OpenGL support (es2 = OpenGL ES 2.0 or higher) + if [ "$CFG_GUI" = "no" ]; then + if [ "$CFG_OPENGL" = "auto" ]; then + CFG_OPENGL=no + fi + if [ "$CFG_OPENGL" != "no" ]; then + echo "OpenGL enabled, but GUI disabled." + echo " You might need to either enable the GUI or disable OpenGL" + exit 1 + fi + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then + CFG_OPENGL=angle + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else + if [ "$CFG_OPENGL" = "yes" ]; then + echo "All the OpenGL functionality tests failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + CFG_OPENGL=no + fi + case "$PLATFORM" in + hpux*) + # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct. + if [ "$CFG_OPENGL" = "desktop" ]; then + compileTest x11/glxfbconfig "OpenGL" + if [ $? != "0" ]; then + QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT + fi + fi + ;; + *) + ;; + esac + elif [ "$CFG_OPENGL" = "es2" ]; then + #OpenGL ES 2.0 + compileTest unix/opengles2 "OpenGL ES 2.0" + if [ $? != "0" ]; then + echo "The OpenGL ES 2.0 functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in" + echo " ${XQMAKESPEC}." + exit 1 + fi + elif [ "$CFG_OPENGL" = "angle" ]; then + compileTest x11/opengl "OpenGL" + if [ $? != "0" ]; then + echo "The OpenGL functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + elif [ "$CFG_OPENGL" = "dynamic" ]; then + true # FIXME: not sure whether/which test required + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" + if [ $? != "0" ]; then + echo "The OpenGL functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + case "$PLATFORM" in + hpux*) + # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct. + compileTest x11/glxfbconfig "OpenGL" + if [ $? != "0" ]; then + QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT + fi + ;; + *) + ;; + esac + fi +fi # X11/MINGW OpenGL + +if [ "$XPLATFORM_MAC" = "yes" ]; then + if [ "$CFG_COREWLAN" = "auto" ]; then + if compileTest mac/corewlan "CoreWlan"; then + CFG_COREWLAN=yes + else + CFG_COREWLAN=no + fi + fi +fi + +# auto-detect OpenGL support (es2 = OpenGL ES 2.0 or higher) +if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTestWithPkgConfig gl unix/opengldesktop "OpenGL" OPENGL; then + CFG_OPENGL=desktop + elif compileTestWithPkgConfig glesv2 unix/opengles2 "OpenGL ES 2.0" OPENGL_ES2; then + CFG_OPENGL=es2 + else + if [ "$CFG_OPENGL" = "yes" ]; then + echo "All the OpenGL functionality tests failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + CFG_OPENGL=no + fi +elif [ "$CFG_OPENGL" = "es2" ]; then + #OpenGL ES 2.0 + + compileTestWithPkgConfig glesv2 unix/opengles2 "OpenGL ES 2.0" OPENGL_ES2 + if [ $? != "0" ]; then + echo "The OpenGL ES 2.0 functionality test failed!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in" + echo " ${XQMAKESPEC}." + exit 1 + fi +elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTestWithPkgConfig gl unix/opengldesktop "OpenGL" OPENGL + if [ $? != "0" ]; then + echo "The OpenGL functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi +fi + +# If OpenGL ES 2.0 is enabled, check for 3.0 and higher. This is used to allow +# compile-time differentiation and including the version specific (but backwards +# compatible) ES headers (for example, GLES3/gl31.h). Other than that, there is +# no difference in the configuration, even the library is the same. +if [ "$CFG_OPENGL" = "es2" ]; then + if compileTestWithPkgConfig glesv2 unix/opengles3 "OpenGL ES 3.0" ""; then + # Add a define for ES3, in addition to ES and ES2. + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES_3" + fi + if compileTestWithPkgConfig glesv2 unix/opengles31 "OpenGL ES 3.1" ""; then + # Add a define for ES31. + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES_3_1" + fi +fi + +# auto-detect FontConfig support +ORIG_CFG_FREETYPE="$CFG_FREETYPE" +if [ "$CFG_FONTCONFIG" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists fontconfig --exists freetype2 2>/dev/null; then + QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG --cflags fontconfig --cflags freetype2 2>/dev/null` + QT_LIBS_FONTCONFIG=`$PKG_CONFIG --libs fontconfig --libs freetype2 2>/dev/null` + else + QT_CFLAGS_FONTCONFIG= + QT_LIBS_FONTCONFIG="-lfreetype -lfontconfig" + fi + if compileTest unix/fontconfig "FontConfig" $QT_CFLAGS_FONTCONFIG $QT_LIBS_FONTCONFIG; then + QT_CONFIG="$QT_CONFIG fontconfig" + QMakeVar set QMAKE_CFLAGS_FONTCONFIG "$QT_CFLAGS_FONTCONFIG" + QMakeVar set QMAKE_LIBS_FONTCONFIG "$QT_LIBS_FONTCONFIG" + CFG_FONTCONFIG=yes + CFG_FREETYPE=system + else + CFG_FONTCONFIG=no + fi + +fi + +# Save these for a check later +ORIG_CFG_XCB="$CFG_XCB" +ORIG_CFG_EGLFS="$CFG_EGLFS" +ORIG_CFG_DIRECTFB="$CFG_DIRECTFB" +ORIG_CFG_LINUXFB="$CFG_LINUXFB" +ORIG_CFG_MIRCLIENT="$CFG_MIRCLIENT" + +if [ "$CFG_LIBUDEV" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists libudev 2>/dev/null; then + QMAKE_INCDIR_LIBUDEV=`$PKG_CONFIG --cflags-only-I libudev 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_LIBUDEV=`$PKG_CONFIG --libs libudev 2>/dev/null` + QMAKE_CFLAGS_LIBUDEV=`$PKG_CONFIG --cflags libudev 2>/dev/null` + QMakeVar set QMAKE_INCDIR_LIBUDEV "$QMAKE_INCDIR_LIBUDEV" + QMakeVar set QMAKE_LIBS_LIBUDEV "$QMAKE_LIBS_LIBUDEV" + fi + if compileTest unix/libudev "libudev" $QMAKE_CFLAGS_LIBUDEV $QMAKE_LIBS_LIBUDEV; then + CFG_LIBUDEV=yes + QT_CONFIG="$QT_CONFIG libudev" + elif [ "$CFG_LIBUDEV" = "yes" ]; then + echo "The libudev functionality test failed!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + exit 1 + else + CFG_LIBUDEV=no + fi +fi +if [ "$CFG_LIBUDEV" = "no" ]; then + QMakeVar add DEFINES QT_NO_LIBUDEV +fi + +if [ "$CFG_EVDEV" != "no" ]; then + if compileTest unix/evdev "evdev"; then + CFG_EVDEV=yes + QT_CONFIG="$QT_CONFIG evdev" + elif [ "$CFG_EVDEV" = "yes" ]; then + echo "The evdev functionality test failed!" + exit 1 + else + CFG_EVDEV=no + fi +fi +if [ "$CFG_EVDEV" = "no" ]; then + QMakeVar add DEFINES QT_NO_EVDEV +fi + +if [ "$CFG_TSLIB" != "no" ]; then + if compileTest unix/tslib "tslib"; then + CFG_TSLIB=yes + QT_CONFIG="$QT_CONFIG tslib" + elif [ "$CFG_TSLIB" = "yes" ]; then + echo "The tslib functionality test failed!" + exit 1 + else + CFG_TSLIB=no + fi +fi +if [ "$CFG_TSLIB" = "no" ]; then + QMakeVar add DEFINES QT_NO_TSLIB +fi + +if [ "$CFG_XKBCOMMON_EVDEV" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xkbcommon 2>/dev/null; then + QMAKE_INCDIR_XKBCOMMON_EVDEV=`$PKG_CONFIG --cflags-only-I xkbcommon 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_XKBCOMMON_EVDEV=`$PKG_CONFIG --libs xkbcommon 2>/dev/null` + QMAKE_CFLAGS_XKBCOMMON_EVDEV=`$PKG_CONFIG --cflags xkbcommon 2>/dev/null` + QMakeVar set QMAKE_INCDIR_XKBCOMMON_EVDEV "$QMAKE_INCDIR_XKBCOMMON_EVDEV" + QMakeVar set QMAKE_LIBS_XKBCOMMON_EVDEV "$QMAKE_LIBS_XKBCOMMON_EVDEV" + fi + if compileTest unix/xkbcommon "xkbcommon" $QMAKE_CFLAGS_XKBCOMMON_EVDEV $QMAKE_LIBS_XKBCOMMON_EVDEV; then + CFG_XKBCOMMON_EVDEV=yes + QT_CONFIG="$QT_CONFIG xkbcommon-evdev" + elif [ "$CFG_XKBCOMMON_EVDEV" = "yes" ]; then + echo "The xkbcommon-evdev functionality test failed!" + exit 1 + else + CFG_XKBCOMMON_EVDEV=no + fi +fi + +if [ "$CFG_LIBINPUT" != "no" ] && [ "$CFG_LIBUDEV" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists libinput 2>/dev/null; then + QMAKE_INCDIR_LIBINPUT=`$PKG_CONFIG --cflags-only-I libinput 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_LIBINPUT=`$PKG_CONFIG --libs libinput 2>/dev/null` + QMAKE_CFLAGS_LIBINPUT=`$PKG_CONFIG --cflags libinput 2>/dev/null` + QMAKE_LIBINPUT_VERSION_MAJOR=`$PKG_CONFIG --modversion libinput 2>/dev/null | cut -d . -f 1` + QMAKE_LIBINPUT_VERSION_MINOR=`$PKG_CONFIG --modversion libinput 2>/dev/null | cut -d . -f 2` + QMakeVar set QMAKE_LIBINPUT_VERSION_MAJOR "$QMAKE_LIBINPUT_VERSION_MAJOR" + QMakeVar set QMAKE_LIBINPUT_VERSION_MINOR "$QMAKE_LIBINPUT_VERSION_MINOR" + QMakeVar set QMAKE_INCDIR_LIBINPUT "$QMAKE_INCDIR_LIBINPUT" + QMakeVar set QMAKE_LIBS_LIBINPUT "$QMAKE_LIBS_LIBINPUT" + fi + if compileTest unix/libinput "libinput" $QMAKE_CFLAGS_LIBINPUT $QMAKE_LIBS_LIBINPUT; then + CFG_LIBINPUT=yes + QT_CONFIG="$QT_CONFIG libinput" + elif [ "$CFG_LIBINPUT" = "yes" ]; then + echo "The libinput functionality test failed!" + exit 1 + else + CFG_LIBINPUT=no + fi +else + CFG_LIBINPUT=no +fi +if [ "$CFG_LIBINPUT" = "no" ]; then + QMakeVar add DEFINES QT_NO_LIBINPUT +fi + +# Check we actually have X11 :-) +if compileTest x11/xlib "XLib"; then + QT_CONFIG="$QT_CONFIG xlib" +fi + +# auto-detect Xrender support +if [ "$CFG_XRENDER" != "no" ]; then + if compileTest x11/xrender "Xrender"; then + CFG_XRENDER=yes + QT_CONFIG="$QT_CONFIG xrender" + else + if [ "$CFG_XRENDER" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Xrender support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_XRENDER=no + fi + fi +fi + +# auto-detect XInput2 support +if [ "$CFG_XINPUT2" != "no" ]; then + if compileTest x11/xinput2 "XInput2"; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xi 2>/dev/null; then + QMAKE_LIBXI_VERSION_MAJOR=`$PKG_CONFIG --modversion xi 2>/dev/null | cut -d . -f 1` + QMAKE_LIBXI_VERSION_MINOR=`$PKG_CONFIG --modversion xi 2>/dev/null | cut -d . -f 2` + QMAKE_LIBXI_VERSION_PATCH=`$PKG_CONFIG --modversion xi 2>/dev/null | cut -d . -f 3` + QMakeVar set QMAKE_LIBXI_VERSION_MAJOR "$QMAKE_LIBXI_VERSION_MAJOR" + QMakeVar set QMAKE_LIBXI_VERSION_MINOR "$QMAKE_LIBXI_VERSION_MINOR" + QMakeVar set QMAKE_LIBXI_VERSION_PATCH "$QMAKE_LIBXI_VERSION_PATCH" + fi + CFG_XINPUT2=yes + else + if [ "$CFG_XINPUT2" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "XInput2 support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_XINPUT2=no + fi + fi +fi + +if [ "$CFG_XCB" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then + QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags xcb 2>/dev/null`" + QMAKE_LIBS_XCB="`$PKG_CONFIG --libs xcb 2>/dev/null`" + fi + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "x11" 2> /dev/null; then + QMAKE_X11_PREFIX="`$PKG_CONFIG --variable=prefix x11`" + else + # default to LSB prefix + QMAKE_X11_PREFIX="/usr" + fi + QMakeVar set QMAKE_X11_PREFIX "$QMAKE_X11_PREFIX" + + if [ "$CFG_XKBCOMMON" != no ] && compileTest qpa/xcb "xcb" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-plugin" + + if [ "$CFG_XCB" = "qt" ]; then + QT_CONFIG="$QT_CONFIG xcb-qt" + + if compileTest qpa/xcb-glx "xcb-glx" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + CFG_XCB_GLX=yes + QT_CONFIG="$QT_CONFIG xcb-glx" + fi + else + CFG_XCB="system" + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then + XCB_PACKAGES="xcb xcb-shm xcb-sync xcb-xfixes xcb-randr xcb-image xcb-keysyms xcb-icccm xcb-shape" + QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags $XCB_PACKAGES 2>/dev/null`" + QMAKE_LIBS_XCB="`$PKG_CONFIG --libs $XCB_PACKAGES 2>/dev/null`" + fi + + # libxcb version 1.10 was the first version that enables xcb-xkb by default, + # therefore the minimal xcb-xkb version we support is 1.10 + CFG_XKB=no + if $PKG_CONFIG --exists "xcb-xkb >= 1.10" 2>/dev/null; then + QMAKE_CFLAGS_XKB="`$PKG_CONFIG --cflags xcb xcb-xkb 2>/dev/null`" + QMAKE_LIBS_XKB="`$PKG_CONFIG --libs xcb xcb-xkb 2>/dev/null`" + if compileTest qpa/xcb-xkb "xcb-xkb" $QMAKE_CFLAGS_XKB $QMAKE_LIBS_XKB; then + CFG_XKB=yes + fi + fi + if [ "$CFG_XKB" = "no" ]; then + QMakeVar add DEFINES QT_NO_XKB + fi + + if compileTest qpa/xcb-syslibs "xcb-syslibs" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + if compileTest qpa/xcb-render "xcb-render" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-render" + fi + + if compileTest qpa/xcb-glx "xcb-glx" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + CFG_XCB_GLX=yes + QT_CONFIG="$QT_CONFIG xcb-glx" + fi + else + echo "The test for linking against libxcb and support libraries failed!" + echo " You might need to install dependency packages, or pass -qt-xcb." + echo " See src/plugins/platforms/xcb/README." + exit 1 + fi + fi + + if [ "$CFG_XCB_XLIB" != "no" ]; then + if compileTest qpa/xcb-xlib "xcb-xlib" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-xlib" + CFG_XCB_XLIB=yes + else + CFG_XCB_XLIB=no + fi + fi + + if [ "$CFG_SM" != "no" ] && [ -n "$PKG_CONFIG" ]; then + if $PKG_CONFIG --exists "sm" 2>/dev/null && $PKG_CONFIG --exists "ice" 2>/dev/null; then + QT_CONFIG="$QT_CONFIG xcb-sm" + fi + fi + else + if [ "$CFG_XCB" != "auto" ]; then + echo "The test for linking against libxcb failed!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " You might need to install dependency packages for libxcb." + echo " See src/plugins/platforms/xcb/README." + exit 1 + fi + CFG_XCB=no + fi +fi + +if [ "$CFG_DIRECTFB" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists directfb 2>/dev/null; then + QMAKE_CFLAGS_DIRECTFB=`$PKG_CONFIG --cflags directfb 2>/dev/null` + QMAKE_LIBS_DIRECTFB=`$PKG_CONFIG --libs directfb 2>/dev/null` + if compileTest qpa/directfb "DirectFB" $QMAKE_CFLAGS_DIRECTFB $QMAKE_LIBS_DIRECTFB; then + CFG_DIRECTFB=yes + elif [ "$CFG_DIRECTFB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " DirectFB support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_DIRECTFB=no + fi + else + CFG_DIRECTFB=no + fi +fi + +if [ "$CFG_GBM" != "no" ]; then + if compileTest qpa/gbm "GBM"; then + CFG_GBM=yes + elif [ "$CFG_GBM" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " GBM support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GBM=no + fi +fi + +if [ "$CFG_LINUXFB" != "no" ]; then + if compileTest qpa/linuxfb "LinuxFB"; then + CFG_LINUXFB=yes + elif [ "$CFG_LINUXFB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " Linux Framebuffer support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_LINUXFB=no + fi +fi + +if [ "$CFG_KMS" != "no" ]; then + if compileTest qpa/kms "KMS"; then + CFG_KMS=yes + elif [ "$CFG_KMS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " KMS support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_KMS=no + fi +fi + +if [ "$CFG_MIRCLIENT" != "no" ]; then + if compileTest qpa/mirclient "Mir client"; then + CFG_MIRCLIENT=yes + elif [ "$CFG_MIRCLIENT" = "yes" ]; then + echo " Mir client support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_MIRCLIENT=no + fi +fi + +# Detect libxkbcommon +MIN_REQ_XKBCOMMON="0.4.1" +# currently only xcb platform plugin supports building xkbcommon +if [ "$CFG_XCB" != "no" ]; then + if [ "$CFG_XKBCOMMON" != "no" ] && [ "$CFG_XKBCOMMON" != "qt" ]; then + # Check if there is a suitable system-wide xkbcommon + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xkbcommon xkbcommon-x11 >= $MIN_REQ_XKBCOMMON" 2>/dev/null; then + QMAKE_CFLAGS_XKBCOMMON="`$PKG_CONFIG --cflags xkbcommon xkbcommon-x11 2>/dev/null`" + QMAKE_LIBS_XKBCOMMON="`$PKG_CONFIG --libs xkbcommon xkbcommon-x11 2>/dev/null`" + + QMakeVar set QMAKE_CFLAGS_XKBCOMMON "$QMAKE_CFLAGS_XKBCOMMON" + QMakeVar set QMAKE_LIBS_XKBCOMMON "$QMAKE_LIBS_XKBCOMMON" + CFG_XKBCOMMON=system + elif [ "$CFG_XKBCOMMON" = "system" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " xkbcommon support cannot be enabled because either xkbcommon or " + echo " xkbcommon-x11 >= $MIN_REQ_XKBCOMMON was not found via pkg-config!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + # use the bundled version instead + CFG_XKBCOMMON=qt + fi + fi + if [ "$CFG_XKBCOMMON" = "qt" ]; then + QT_CONFIG="$QT_CONFIG xkbcommon-qt" + # detect XKB config root + if [ "$CFG_XKB_CONFIG_ROOT" = "auto" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xkeyboard-config" 2> /dev/null; then + CFG_XKB_CONFIG_ROOT="`$PKG_CONFIG --variable=xkb_base xkeyboard-config`" + else + # search for xkb configs in most probable locations + if [ -d "/usr/share/X11/xkb" ]; then + # Linux + CFG_XKB_CONFIG_ROOT="/usr/share/X11/xkb" + elif [ -d "/usr/local/share/X11/xkb" ]; then + # BSD UNIX + CFG_XKB_CONFIG_ROOT="/usr/local/share/X11/xkb" + fi + fi + fi + QMakeVar set QMAKE_XKB_CONFIG_ROOT "$CFG_XKB_CONFIG_ROOT" + if [ "$CFG_XKB_CONFIG_ROOT" = "auto" ]; then + CFG_XKB_CONFIG_ROOT="not found" + fi + fi +else + CFG_XKBCOMMON=no +fi + +# EGL Support +if [ "$CFG_EGL" != "no" ]; then + if [ "$CFG_EGL" = "yes" ] && [ "$CFG_OPENGL" = "no" ]; then + echo "EGL support was requested but OpenGL support is disabled." + echo "Either disable EGL support or enable OpenGL support." + exit 101 + fi + + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists egl 2>/dev/null; then + QMAKE_INCDIR_EGL=`$PKG_CONFIG --cflags-only-I egl 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_EGL=`$PKG_CONFIG --libs egl 2>/dev/null` + QMAKE_CFLAGS_EGL=`$PKG_CONFIG --cflags egl 2>/dev/null` + QMakeVar set QMAKE_INCDIR_EGL "$QMAKE_INCDIR_EGL" + QMakeVar set QMAKE_LIBS_EGL "$QMAKE_LIBS_EGL" + QMakeVar set QMAKE_CFLAGS_EGL "`echo " $QMAKE_CFLAGS_EGL " | sed -e 's, -I[^ ]* , ,g;s,^ ,,;s, $,,'`" + fi # detect EGL support + if compileTest qpa/egl "EGL" $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then + CFG_EGL=yes + if compileTest qpa/egl-x11 "EGL-X11" $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then + CFG_EGL_X=yes + else + CFG_EGL_X=no + fi + elif [ "$CFG_EGL" = "yes" ]; then + echo " The EGL functionality test failed; EGL is required by some QPA plugins to manage contexts & surfaces." + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_EGL, QMAKE_LIBDIR_EGL and QMAKE_LIBS_EGL in ${XQMAKESPEC}." + exit 1 + else + CFG_EGL=no + CFG_EGL_X=no + fi +fi + +if [ "$CFG_EGLFS" != "no" ]; then + if [ "$XPLATFORM_QNX" = "no" ] && [ "$CFG_OPENGL" != "no" ]; then + CFG_EGLFS="$CFG_EGL" + # Detect eglfs backends. + if compileTest qpa/eglfs-brcm "eglfs-brcm"; then + CFG_EGLFS_BRCM=yes + else + CFG_EGLFS_BRCM=no + fi + if compileTest qpa/eglfs-egldevice "eglfs-egldevice"; then + CFG_EGLFS_EGLDEVICE=yes + else + CFG_EGLFS_EGLDEVICE=no + fi + if compileTest qpa/eglfs-mali "eglfs-mali" \ + || compileTest qpa/eglfs-mali-2 "eglfs-mali-2"; then + CFG_EGLFS_MALI=yes + else + CFG_EGLFS_MALI=no + fi + if compileTest qpa/eglfs-viv "eglfs-viv"; then + CFG_EGLFS_VIV=yes + else + CFG_EGLFS_VIV=no + fi + if [ "$CFG_EGLFS_VIV" = "yes" ] && compileTest qpa/wayland-server "wayland-server"; then + CFG_EGLFS_VIV_WL=yes + else + CFG_EGLFS_VIV_WL=no + fi + else + CFG_EGLFS="no" + fi +fi + +# Detect accessibility support +if [ "$CFG_ACCESSIBILITY" = "no" ]; then + echo >&2 "Warning: Disabling Accessibility. This version of Qt is unsupported." +else + CFG_ACCESSIBILITY=yes + + # linux/xcb accessibility bridge needs dbus + if [ "$CFG_XCB" != "no" ]; then + if [ "$CFG_DBUS" != "no" ]; then + CFG_ACCESSIBILITY_ATSPI_BRIDGE=yes + QT_CONFIG="$QT_CONFIG accessibility-atspi-bridge" + else + echo >&2 "Warning: Disabling Linux Accessibility Bridge: DBus is missing." + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_ACCESSIBILITY_ATSPI_BRIDGE" + fi + fi +fi + +# Determine the default QPA platform +if [ -z "$QT_QPA_DEFAULT_PLATFORM" ]; then + # check the mkspec + QT_QPA_DEFAULT_PLATFORM=`getXQMakeConf QT_QPA_DEFAULT_PLATFORM` + if [ -z "$QT_QPA_DEFAULT_PLATFORM" ]; then + if [ "$XPLATFORM_MINGW" = "yes" ]; then + QT_QPA_DEFAULT_PLATFORM="windows" + elif [ "$XPLATFORM_MAC" = "yes" ]; then + QT_QPA_DEFAULT_PLATFORM="cocoa" + elif [ "$UNAME_SYSTEM" = "QNX" ]; then + QT_QPA_DEFAULT_PLATFORM="qnx" + elif [ "$XPLATFORM_INTEGRITY" = "yes" ]; then + QT_QPA_DEFAULT_PLATFORM="integrityfb" + else + QT_QPA_DEFAULT_PLATFORM="xcb" + fi + fi +fi + +if [ -n "$QMAKE_CFLAGS_XCB" ] || [ -n "$QMAKE_LIBS_XCB" ]; then + QMakeVar set QMAKE_CFLAGS_XCB "$QMAKE_CFLAGS_XCB" + QMakeVar set QMAKE_LIBS_XCB "$QMAKE_LIBS_XCB" +fi + +if [ "$CFG_DIRECTFB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG directfb" + QMakeVar set QMAKE_CFLAGS_DIRECTFB "$QMAKE_CFLAGS_DIRECTFB" + QMakeVar set QMAKE_LIBS_DIRECTFB "$QMAKE_LIBS_DIRECTFB" +fi +if [ "$CFG_GBM" = "yes" ]; then + QT_CONFIG="$QT_CONFIG gbm" +fi +if [ "$CFG_LINUXFB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG linuxfb" +fi +if [ "$CFG_INTEGRITYFB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG integrityfb" +fi +if [ "$CFG_KMS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG kms" +fi +if [ "$CFG_MIRCLIENT" = "yes" ]; then + QT_CONFIG="$QT_CONFIG mirclient" +fi + +if [ "$XPLATFORM_MAC" = "no" ] && [ "$XPLATFORM_MINGW" = "no" ] && [ "$XPLATFORM_QNX" = "no" ] && [ "$XPLATFORM_ANDROID" = "no" ] && [ "$XPLATFORM_HAIKU" = "no" ] && [ "$XPLATFORM_INTEGRITY" = "no" ]; then + if [ "$CFG_XCB" = "no" ] && [ "$CFG_EGLFS" = "no" ] && [ "$CFG_DIRECTFB" = "no" ] && [ "$CFG_LINUXFB" = "no" ] && [ "$CFG_MIRCLIENT" = "no" ]; then + if [ "$QPA_PLATFORM_GUARD" = "yes" ] && + ( [ "$ORIG_CFG_XCB" = "auto" ] || [ "$ORIG_CFG_EGLFS" = "auto" ] || [ "$ORIG_CFG_DIRECTFB" = "auto" ] || [ "$ORIG_CFG_LINUXFB" = "auto" ] || [ "$ORIG_CFG_MIRCLIENT" = "auto" ] ); then + echo "No QPA platform plugin enabled!" + echo " If you really want to build without a QPA platform plugin you must pass" + echo " -no-qpa-platform-guard to configure. Doing this will" + echo " produce a Qt that can not run GUI applications." + echo " The dependencies needed for xcb to build are listed in" + echo " src/plugins/platforms/xcb/README" + exit 1 + fi +fi + fi + +# double-conversion support +if [ "$CFG_DOUBLECONVERSION" = "no" ]; then + if ! compileTest common/xlocalescanprint "XLocaleScanPrint"; then + echo "Your C library does not provide sscanf_l or snprintf_l." + echo "You need to use libdouble-conversion for double/string conversion." + exit 1 + fi +elif [ "$CFG_DOUBLECONVERSION" != "qt" ]; then + if compileTest unix/doubleconversion "DoubleConversion"; then + CFG_DOUBLECONVERSION=system + elif [ "$CFG_DOUBLECONVERSION" = "system" ]; then + echo "No system libdouble-conversion found." + exit 1 + else + CFG_DOUBLECONVERSION=qt + fi +fi + +# freetype support +[ "$XPLATFORM_MINGW" = "yes" ] && [ "$CFG_FREETYPE" = "auto" ] && CFG_FREETYPE=no +if [ "$CFG_FREETYPE" = "auto" ]; then + if compileTest unix/freetype "FreeType"; then + CFG_FREETYPE=system + else + CFG_FREETYPE=yes + fi +fi + +# harfbuzz support +[ "$XPLATFORM_MAC" = "yes" ] && [ "$CFG_HARFBUZZ" = "auto" ] && CFG_HARFBUZZ=qt +if [ "$CFG_HARFBUZZ" = "auto" ] || [ "$CFG_HARFBUZZ" = "system" ]; then + if compileTest unix/harfbuzz "HarfBuzz"; then + CFG_HARFBUZZ=system + else + if [ "$CFG_HARFBUZZ" = "system" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " HarfBuzz system library support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_HARFBUZZ=qt + fi + fi +fi +if [ "$XPLATFORM_MAC" = "yes" -a "$CFG_HARFBUZZ" != "qt" ]; then + echo + echo "WARNING: On OS X, AAT is supported only with -qt-harfbuzz." + echo +fi + +if ! compileTest unix/stl "STL" && + [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "STL functionality check failed! Cannot build Qt with this STL library." + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 101 +fi + + +# detect POSIX clock_gettime() +if [ "$CFG_CLOCK_GETTIME" = "auto" ]; then + if compileTest unix/clock-gettime "POSIX clock_gettime()"; then + CFG_CLOCK_GETTIME=yes + else + CFG_CLOCK_GETTIME=no + fi +fi + +# detect POSIX monotonic clocks +if [ "$CFG_CLOCK_GETTIME" = "yes" ] && [ "$CFG_CLOCK_MONOTONIC" = "auto" ]; then + if compileTest unix/clock-monotonic "POSIX Monotonic Clock"; then + CFG_CLOCK_MONOTONIC=yes + else + CFG_CLOCK_MONOTONIC=no + fi +elif [ "$CFG_CLOCK_GETTIME" = "no" ]; then + CFG_CLOCK_MONOTONIC=no +fi + +# detect posix_fallocate +if [ "$CFG_POSIX_FALLOCATE" = "auto" ]; then + if compileTest unix/posix_fallocate "posix_fallocate"; then + CFG_POSIX_FALLOCATE=yes + else + CFG_POSIX_FALLOCATE=no + fi +fi + +# detect mremap +if [ "$CFG_MREMAP" = "auto" ]; then + if compileTest unix/mremap "mremap"; then + CFG_MREMAP=yes + else + CFG_MREMAP=no + fi +fi + +# find if the platform provides getaddrinfo (ipv6 dns lookups) +if [ "$CFG_GETADDRINFO" != "no" ]; then + if compileTest unix/getaddrinfo "getaddrinfo"; then + CFG_GETADDRINFO=yes + else + if [ "$CFG_GETADDRINFO" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "getaddrinfo support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GETADDRINFO=no + fi + fi +fi + +# find if the platform provides inotify +if [ "$CFG_INOTIFY" != "no" ]; then + if compileTest unix/inotify "inotify"; then + CFG_INOTIFY=yes + else + if [ "$CFG_INOTIFY" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "inotify support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_INOTIFY=no + fi + fi +fi + +# find if the platform provides eventfd +if [ "$CFG_EVENTFD" != "no" ]; then + if compileTest unix/eventfd "eventfd"; then + CFG_EVENTFD=yes + else + if [ "$CFG_EVENTFD" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "eventfd support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_EVENTFD=no + fi + fi +fi + +# find if the platform provides if_nametoindex (ipv6 interface name support) +if [ "$CFG_IPV6IFNAME" != "no" ]; then + if compileTest unix/ipv6ifname "IPv6 interface name"; then + CFG_IPV6IFNAME=yes + else + if [ "$CFG_IPV6IFNAME" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "IPv6 interface name support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_IPV6IFNAME=no + fi + fi +fi + +# find if the platform provides getifaddrs (network interface enumeration) +if [ "$CFG_GETIFADDRS" != "no" ]; then + if compileTest unix/getifaddrs "getifaddrs"; then + CFG_GETIFADDRS=yes + else + if [ "$CFG_GETIFADDRS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "getifaddrs support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GETIFADDRS=no + fi + fi +fi + +# find if the platform provides thread-safe CLOEXEC support +if compileTest unix/cloexec "cloexec"; then + CFG_CLOEXEC=yes +fi + +if compileTest unix/ppoll "ppoll"; then + CFG_POLL="ppoll" +elif compileTest unix/pollts "pollts"; then + CFG_POLL="pollts" +elif compileTest unix/poll "poll"; then + CFG_POLL="poll" +else + CFG_POLL="select" +fi + +if [ "$XPLATFORM_MAC" = "yes" ] && [ "$CFG_SECURETRANSPORT" != "no" ] && ([ "$CFG_OPENSSL" = "no" ] || [ "$CFG_OPENSSL" = "auto" ]); then + CFG_SECURETRANSPORT=yes + CFG_OPENSSL=no +else + CFG_SECURETRANSPORT=no +fi + +# detect OpenSSL +if [ "$CFG_OPENSSL" != "no" ]; then + if compileTest unix/openssl "OpenSSL"; then + if [ "$CFG_OPENSSL" = "auto" ]; then + CFG_OPENSSL=yes + fi + else + if ( [ "$CFG_OPENSSL" = "yes" ] || [ "$CFG_OPENSSL" = "linked" ] ) && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "OpenSSL support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_OPENSSL=no + fi + fi +fi + + +# detect PCRE +if [ "$CFG_PCRE" != "qt" ]; then + if compileTest unix/pcre "PCRE"; then + CFG_PCRE=system + else + if [ "$CFG_PCRE" = "system" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "PCRE support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_PCRE=qt + fi + fi +fi + +# detect OpenVG support +if [ "$CFG_OPENVG" != "no" ]; then + if compileTest unix/openvg "OpenVG"; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + elif compileTest unix/openvg "OpenVG" -config openvg_on_opengl; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + CFG_OPENVG_ON_OPENGL=yes + elif compileTest unix/openvg "OpenVG (lc includes)" -config lower_case_includes; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + CFG_OPENVG_LC_INCLUDES=yes + elif compileTest unix/openvg "OpenVG (lc includes)" -config "openvg_on_opengl lower_case_includes"; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + CFG_OPENVG_LC_INCLUDES=yes + CFG_OPENVG_ON_OPENGL=yes + else + if [ "$CFG_OPENVG" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "$CFG_OPENVG was specified for OpenVG but cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_OPENVG=no + fi + fi + if [ "$CFG_OPENVG" = "yes" ] && compileTest unix/shivavg "ShivaVG"; then + CFG_OPENVG_SHIVA=yes + fi +fi + +if [ "$CFG_ALSA" = "auto" ]; then + if compileTest unix/alsa "alsa"; then + CFG_ALSA=yes + else + CFG_ALSA=no + fi +fi + +if [ "$CFG_AUDIO_BACKEND" = "auto" ]; then + CFG_AUDIO_BACKEND=yes +fi + +# detect GStreamer support +if [ "$CFG_GSTREAMER" = "auto" ] || [ "$CFG_GSTREAMER" = "yes" ]; then + if compileTest unix/gstreamer "GStreamer 1.0" -config gst-1.0; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=1.0 + elif compileTest unix/gstreamer "GStreamer 0.10" -config gst-0.10; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=0.10 + else + if [ "$CFG_GSTREAMER" = "yes" ]; then + echo "GStreamer support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 1 + fi + CFG_GSTREAMER=no + fi +elif [ "$CFG_GSTREAMER" = "0.10" ]; then + if compileTest unix/gstreamer "GStreamer 0.10" -config gst-0.10; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=0.10 + else + echo "The GStreamer 0.10 functionality test failed!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 1 + fi +elif [ "$CFG_GSTREAMER" = "1.0" ]; then + if compileTest unix/gstreamer "GStreamer 1.0" -config gst-1.0; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=1.0 + else + echo "The GStreamer 1.0 functionality test failed!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 1 + fi +fi + +if [ "$CFG_LARGEFILE" != "yes" ] && [ "$XPLATFORM_MINGW" = "yes" ]; then + echo "Warning: largefile support cannot be disabled for win32." + CFG_LARGEFILE="yes" +fi + +# Detect DirectWrite 2 support on Windows +if [ "$CFG_DIRECTWRITE" = "no" ]; then + CFG_DIRECTWRITE2=no +fi +if [ "$CFG_DIRECTWRITE2" = "auto" ]; then + if compileTest win/directwrite2 "directwrite2"; then + CFG_DIRECTWRITE2=yes + else + CFG_DIRECTWRITE2=no + fi +fi + +#------------------------------------------------------------------------------- +# ask for all that hasn't been auto-detected or specified in the arguments +#------------------------------------------------------------------------------- + +# Set "c++11" unconditionally, as lots of code does contains(QT_CONFIG, c++11) +QT_CONFIG="$QT_CONFIG c++11" +if [ "$CFG_STDCXX" != "c++11" ]; then + QT_CONFIG="$QT_CONFIG c++14" + if [ "$CFG_STDCXX" != "c++14" ]; then + QT_CONFIG="$QT_CONFIG c++1z" + fi +fi + +if [ "$CFG_ATOMIC64" = "libatomic" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG atomic64-libatomic" +fi + +if [ "$CFG_SILENT" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG silent" +fi + +# disable accessibility +if [ "$CFG_ACCESSIBILITY" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_ACCESSIBILITY" +else + QT_CONFIG="$QT_CONFIG accessibility" +fi + +# enable egl +if [ "$CFG_EGL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG egl" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL" +fi + +# enable egl on X +if [ "$CFG_EGL_X" = "yes" ]; then + QT_CONFIG="$QT_CONFIG egl_x11" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL_X11" +fi + +# enable eglfs +if [ "$CFG_EGLFS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGLFS" +fi +# eglfs backends +if [ "$CFG_EGLFS_BRCM" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_brcm" +fi +if [ "$CFG_EGLFS_EGLDEVICE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_egldevice" +fi +if [ "$CFG_EGLFS" = "yes" ] && [ "$CFG_KMS" = "yes" ] && [ "$CFG_GBM" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_gbm" + CFG_EGLFS_GBM="yes" +else + CFG_EGLFS_GBM="no" +fi +if [ "$CFG_EGLFS_MALI" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_mali" +fi +if [ "$CFG_EGLFS_VIV" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_viv" + if [ "$CFG_EGLFS_VIV_WL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_viv_wl" + fi +fi + +# enable openvg +if [ "$CFG_OPENVG" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_OPENVG" +else + QT_CONFIG="$QT_CONFIG openvg" + if [ "$CFG_OPENVG_LC_INCLUDES" = "yes" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_LOWER_CASE_VG_INCLUDES" + fi + if [ "$CFG_OPENVG_ON_OPENGL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG openvg_on_opengl" + fi + if [ "$CFG_OPENVG_SHIVA" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shivavg" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_SHIVAVG" + fi +fi + +# enable opengl +if [ "$CFG_OPENGL" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_OPENGL" +else + QT_CONFIG="$QT_CONFIG opengl" +fi + +if [ "$CFG_OPENGL" = "es2" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" + QT_CONFIG="$QT_CONFIG opengles2" +fi + +if [ "$CFG_OPENGL" = "angle" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" + QT_CONFIG="$QT_CONFIG opengles2 egl angle" +fi + +if [ "$CFG_OPENGL" = "dynamic" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_DYNAMIC" + QT_CONFIG="$QT_CONFIG dynamicgl" +fi + +if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +elif [ "$CFG_SHARED" = "no" ]; then + QT_CONFIG="$QT_CONFIG static" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG static" +fi + +#FIXME: qpa is implicit this should all be removed +QMAKE_CONFIG="$QMAKE_CONFIG qpa" +QT_CONFIG="$QT_CONFIG qpa" +QTCONFIG_CONFIG="$QTCONFIG_CONFIG qpa" + +if [ "$CFG_LARGEFILE" = "yes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG largefile" +fi +if [ "$CFG_USE_GNUMAKE" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG GNUmake" +fi +[ "$CFG_REDUCE_EXPORTS" = "yes" ] && QT_CONFIG="$QT_CONFIG reduce_exports" +[ "$CFG_STACK_PROTECTOR_STRONG" = "yes" ] && QT_CONFIG="$QT_CONFIG stack-protector-strong" +[ "$CFG_REDUCE_RELOCATIONS" = "yes" ] && QT_CONFIG="$QT_CONFIG reduce_relocations" +[ "$CFG_STRIP" = "no" ] && QMAKE_CONFIG="$QMAKE_CONFIG nostrip" +if testXConfig precompile_header; then + [ "$CFG_PRECOMPILE" = "no" ] && QMakeVar del CONFIG precompile_header +else + [ "$CFG_PRECOMPILE" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG precompile_header" +fi +[ "$CFG_USE_GOLD_LINKER" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG use_gold_linker" +[ "$CFG_ENABLE_NEW_DTAGS" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG enable_new_dtags" +if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then + QT_CONFIG="$QT_CONFIG separate_debug_info" +fi +[ "$CFG_SSE2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse2" +[ "$CFG_SSE3" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse3" +[ "$CFG_SSSE3" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG ssse3" +[ "$CFG_SSE4_1" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse4_1" +[ "$CFG_SSE4_2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse4_2" +[ "$CFG_AVX" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx" +[ "$CFG_AVX2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx2" +for feature in $CFG_AVX512; do + QMAKE_CONFIG="$QMAKE_CONFIG avx512$feature" +done +[ "$CFG_NEON" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG neon" +if [ "$CFG_ARCH" = "mips" ]; then + [ "$CFG_MIPS_DSP" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dsp" + [ "$CFG_MIPS_DSPR2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dspr2" +fi +if [ "$CFG_CLOCK_GETTIME" = "yes" ]; then + QT_CONFIG="$QT_CONFIG clock-gettime" +fi +if [ "$CFG_CLOCK_MONOTONIC" = "yes" ]; then + QT_CONFIG="$QT_CONFIG clock-monotonic" +fi +if [ "$CFG_POSIX_FALLOCATE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG posix_fallocate" +fi +if [ "$CFG_MREMAP" = "yes" ]; then + QT_CONFIG="$QT_CONFIG mremap" +fi +if [ "$CFG_GETADDRINFO" = "yes" ]; then + QT_CONFIG="$QT_CONFIG getaddrinfo" +fi +if [ "$CFG_IPV6IFNAME" = "yes" ]; then + QT_CONFIG="$QT_CONFIG ipv6ifname" +fi +if [ "$CFG_GETIFADDRS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG getifaddrs" +fi +if [ "$CFG_INOTIFY" = "yes" ]; then + QT_CONFIG="$QT_CONFIG inotify" +fi +if [ "$CFG_EVENTFD" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eventfd" +fi +if [ "$CFG_CLOEXEC" = "yes" ]; then + QT_CONFIG="$QT_CONFIG threadsafe-cloexec" +fi +if [ "$CFG_POLL" = "select" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_NATIVE_POLL" +fi +QT_CONFIG="$QT_CONFIG poll_$CFG_POLL" +if [ "$CFG_LIBJPEG" = "no" ]; then + CFG_JPEG="no" +elif [ "$CFG_LIBJPEG" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-jpeg" +fi +if [ "$CFG_JPEG" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-jpeg" +elif [ "$CFG_JPEG" = "yes" ]; then + QT_CONFIG="$QT_CONFIG jpeg" +fi +if [ "$CFG_LIBPNG" = "no" ]; then + CFG_PNG="no" +fi +if [ "$CFG_LIBPNG" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-png" +fi +if [ "$CFG_PNG" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-png" +elif [ "$CFG_PNG" = "yes" ]; then + QT_CONFIG="$QT_CONFIG png" +fi +if [ "$CFG_GIF" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-gif" +elif [ "$CFG_GIF" = "yes" ]; then + QT_CONFIG="$QT_CONFIG gif" +fi +if [ "$CFG_DOUBLECONVERSION" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-doubleconversion" +elif [ "$CFG_DOUBLECONVERSION" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-doubleconversion" +else + QT_CONFIG="$QT_CONFIG doubleconversion" +fi +if [ "$CFG_FREETYPE" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-freetype" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_FREETYPE" +elif [ "$CFG_FREETYPE" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-freetype" +else + QT_CONFIG="$QT_CONFIG freetype" +fi +if [ "$CFG_HARFBUZZ" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-harfbuzz" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_HARFBUZZ" +elif [ "$CFG_HARFBUZZ" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-harfbuzz" +else + QT_CONFIG="$QT_CONFIG harfbuzz" +fi +if [ "$CFG_GUI" = "auto" ]; then + CFG_GUI="yes" +fi +if [ "$CFG_GUI" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-gui" + CFG_WIDGETS="no" +fi +if [ "$CFG_WIDGETS" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-widgets" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_WIDGETS" +fi + +if [ "$XPLATFORM_MAC" = "yes" ]; then + #On Mac we implicitly link against libz, so we + #never use the 3rdparty stuff. + [ "$CFG_ZLIB" = "yes" ] && CFG_ZLIB="system" +fi +if [ "$CFG_ZLIB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG zlib" +elif [ "$CFG_ZLIB" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-zlib" +fi + +[ "$CFG_MTDEV" = "yes" ] && QT_CONFIG="$QT_CONFIG mtdev" +[ "$CFG_NIS" = "yes" ] && QT_CONFIG="$QT_CONFIG nis" +[ "$CFG_CUPS" = "yes" ] && QT_CONFIG="$QT_CONFIG cups" +[ "$CFG_ICONV" = "yes" ] && QT_CONFIG="$QT_CONFIG iconv" +[ "$CFG_ICONV" = "sun" ] && QT_CONFIG="$QT_CONFIG sun-libiconv" +[ "$CFG_ICONV" = "gnu" ] && QT_CONFIG="$QT_CONFIG gnu-libiconv" +[ "$CFG_GLIB" = "yes" ] && QT_CONFIG="$QT_CONFIG glib" +[ "$CFG_DBUS" != "no" ] && QT_CONFIG="$QT_CONFIG dbus" +[ "$CFG_DBUS" = "linked" ] && QT_CONFIG="$QT_CONFIG dbus-linked" +[ "$CFG_OPENSSL" = "yes" ] && QT_CONFIG="$QT_CONFIG openssl" +[ "$CFG_OPENSSL" = "linked" ] && QT_CONFIG="$QT_CONFIG openssl-linked" +[ "$CFG_SECURETRANSPORT" = "yes" ] && QT_CONFIG="$QT_CONFIG ssl securetransport" +[ "$CFG_LIBPROXY" = "yes" ] && QT_CONFIG="$QT_CONFIG libproxy" +[ "$CFG_XCB" != "no" ] && QT_CONFIG="$QT_CONFIG xcb" +[ "$CFG_XINPUT2" = "yes" ] && QT_CONFIG="$QT_CONFIG xinput2" +[ "$CFG_SYSTEM_PROXIES" = "yes" ] && QT_CONFIG="$QT_CONFIG system-proxies" +[ "$CFG_DIRECTWRITE" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite" +[ "$CFG_DIRECTWRITE2" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite2" + +[ '!' -z "$DEFINES" ] && QMakeVar add EXTRA_DEFINES "$DEFINES" +[ '!' -z "$INCLUDES" ] && QMakeVar add EXTRA_INCLUDEPATH "$INCLUDES" +[ '!' -z "$L_FLAGS" ] && QMakeVar add EXTRA_LIBS "$L_FLAGS" + +if [ -z "`getXQMakeConf 'QMAKE_(LFLAGS_)?RPATH'`" ]; then + if [ -n "$RPATH_FLAGS" ]; then + echo + echo "ERROR: -R cannot be used on this platform as \$QMAKE_LFLAGS_RPATH is" + echo " undefined." + echo + exit 1 + elif [ "$CFG_RPATH" = "yes" ]; then + RPATH_MESSAGE=" NOTE: This platform does not support runtime library paths, using -no-rpath." + CFG_RPATH=no + fi +else + if [ -n "$RPATH_FLAGS" ]; then + # add the user defined rpaths + QMakeVar add EXTRA_RPATHS "$RPATH_FLAGS" + fi +fi +if [ "$CFG_RPATH" = "yes" ]; then + QT_CONFIG="$QT_CONFIG rpath" +fi + +if [ '!' -z "$W_FLAGS" ]; then + # add the user defined warning flags + QMakeVar add QMAKE_CFLAGS_WARN_ON "$W_FLAGS" + QMakeVar add QMAKE_CXXFLAGS_WARN_ON "$W_FLAGS" +fi + +if [ "$XPLATFORM_MINGW" = "yes" ]; then + # mkspecs/features/win32/default_pre.prf sets "no-rtti". + # Follow default behavior of configure.exe by overriding with "rtti". + QTCONFIG_CONFIG="$QTCONFIG_CONFIG rtti" +fi + +if [ "$CFG_ALSA" = "yes" ]; then + QT_CONFIG="$QT_CONFIG alsa" +fi + +if [ "$CFG_PULSEAUDIO" = "yes" ]; then + QT_CONFIG="$QT_CONFIG pulseaudio" +fi + +[ "$CFG_GSTREAMER_VERSION" = "0.10" ] && QT_CONFIG="$QT_CONFIG gstreamer-0.10" +[ "$CFG_GSTREAMER_VERSION" = "1.0" ] && QT_CONFIG="$QT_CONFIG gstreamer-1.0" + +if [ "$CFG_COREWLAN" = "yes" ]; then + QT_CONFIG="$QT_CONFIG corewlan" +fi + +if [ "$CFG_ICU" = "yes" ]; then + QT_CONFIG="$QT_CONFIG icu" +fi + +if [ "$CFG_FORCE_ASSERTS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG force_asserts" +fi + +if [ "$CFG_LTCG" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG ltcg" +fi + +if [ "$CFG_SANITIZERS" != "none" ]; then + + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitizer" + + if [ "$CFG_SANITIZE_ADDRESS" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_address" + fi + + if [ "$CFG_SANITIZE_THREAD" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_thread" + fi + + if [ "$CFG_SANITIZE_MEMORY" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_memory" + fi + + if [ "$CFG_SANITIZE_UNDEFINED" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_undefined" + fi +fi + +if [ "$CFG_PCRE" = "qt" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG pcre" +fi + +# +# Some Qt modules are too advanced in C++ for some old compilers +# Detect here the platforms where they are known to work. +# +# See Qt documentation for more information on which features are +# supported and on which compilers. +# +canBuildQtConcurrent="yes" + +case "$XPLATFORM" in + hpux-g++*) + # PA-RISC's assembly is too limited + # gcc 3.4 on that platform can't build QtXmlPatterns + # the assembly it generates cannot be compiled + + # Check gcc's version + case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in + 4*) + ;; + 3.4*) + canBuildQtXmlPatterns="no" + ;; + *) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + ;; + esac + ;; + unsupported/vxworks-*-g++*) + canBuildWebKit="no" + ;; + unsupported/vxworks-*-dcc*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + ;; + *-g++*) + # Check gcc's version + case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in + 4*|3.4*) + ;; + 3.3*) + canBuildWebKit="no" + ;; + *) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + ;; + esac + ;; + solaris-cc*) + # Check the compiler version + case `${QMAKE_CONF_COMPILER} -V 2>&1 | $AWK '{print $4}'` in + 5.[012345678]) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + 5.*) + canBuildWebKit="no" + canBuildQtConcurrent="no" + ;; + esac + ;; + hpux-acc*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + hpuxi-acc*) + canBuildWebKit="no" + ;; + aix-xlc*) + # Get the xlC version + cat > xlcver.c < +int main() +{ + printf("%d.%d\n", __xlC__ >> 8, __xlC__ & 0xFF); + return 0; +} +EOF + xlcver= + if ${QMAKE_CONF_COMPILER} -o xlcver xlcver.c >/dev/null 2>/dev/null; then + xlcver=`./xlcver 2>/dev/null` + rm -f ./xlcver + fi + if [ "$OPT_VERBOSE" = "yes" ]; then + if [ -n "$xlcver" ]; then + echo Found IBM xlC version: $xlcver. + else + echo Could not determine IBM xlC version, assuming oldest supported. + fi + fi + + case "$xlcver" in + [123456].*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + *) + canBuildWebKit="no" + canBuildQtConcurrent="no" + ;; + esac + ;; + irix-cc*) + canBuildWebKit="no" + canBuildQtConcurrent="no" + ;; +esac + +if [ "$CFG_GUI" = "no" ]; then + # WebKit requires Qt GUI + canBuildWebKit="no" +fi + +if [ "$CFG_SHARED" = "no" ]; then + echo + echo "WARNING: Using static linking will disable the WebKit module." + echo + canBuildWebKit="no" +fi + +CFG_CONCURRENT="yes" +if [ "$canBuildQtConcurrent" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_CONCURRENT" + CFG_CONCURRENT="no" +else + QT_CONFIG="$QT_CONFIG concurrent" +fi + +# ### Vestige +if [ "$CFG_AUDIO_BACKEND" = "yes" ]; then + QT_CONFIG="$QT_CONFIG audio-backend" +fi + +# ### Vestige +if [ "$CFG_WEBKIT" = "debug" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG webkit-debug" +fi + +# ### Vestige +if [ "$CFG_QML_DEBUG" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-qml-debug" +fi + +case "$QMAKE_CONF_COMPILER" in +*clang*) + # Clang + COMPILER_VERSION=`${QMAKE_CONF_COMPILER} -v 2>&1 | sed -n -E ' +/^Apple (clang|LLVM) version /{s///; s/^([0-9]*)\.([0-9]*).*$/QT_APPLE_CLANG_MAJOR_VERSION=\1; QT_APPLE_CLANG_MINOR_VERSION=\2/;p;q;} +/^clang version /{s///; s/^([0-9]*)\.([0-9]*).*$/QT_CLANG_MAJOR_VERSION=\1; QT_CLANG_MINOR_VERSION=\2/;p;q;}'` + eval "$COMPILER_VERSION" + ;; +*icpc) + # Intel CC + COMPILER_VERSION=`${QMAKE_CONF_COMPILER} -v 2>&1 | sed -n ' +s/icpc version \([0-9]*\)\.\([0-9]*\)\.\([0-9]*\) .*$/QT_ICC_MAJOR_VERSION=\1; QT_ICC_MINOR_VERSION=\2; QT_ICC_PATCH_VERSION=\3/p'` + eval "$COMPILER_VERSION" + ;; +*g++*) + # GNU C++ + COMPILER_VERSION=`${QMAKE_CONF_COMPILER} -dumpversion 2>/dev/null` + + case "$COMPILER_VERSION" in + *.*.*) + QT_GCC_MAJOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\1,'` + QT_GCC_MINOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\2,'` + QT_GCC_PATCH_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\3,'` + ;; + *.*) + QT_GCC_MAJOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\).*,\1,'` + QT_GCC_MINOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\).*,\2,'` + QT_GCC_PATCH_VERSION=0 + ;; + *) + QT_GCC_MAJOR_VERSION=$COMPILER_VERSION + QT_GCC_MINOR_VERSION=0 + QT_GCC_PATCH_VERSION=0 + esac + + ;; +*) + # + ;; +esac + +echo "Done running configuration tests." + +# Save stdout in fd 3 +exec 3>&1 + +#------------------------------------------------------------------------------- +# part of configuration information goes into qconfig.h +#------------------------------------------------------------------------------- + +# Open qconfig.h.new +exec > "$outpath/src/corelib/global/qconfig.h.new" + +# start with Qt's version number +cat </dev/null 2>&1; then + # QT_NO_option can be forcefully turned on by QT_option + cfgdNeg=`echo $cfgd | sed 's,QT_NO_,QT_,'` + elif [ true ] && echo "$cfgd" | grep 'QT_' >/dev/null 2>&1; then + # QT_option can be forcefully turned off by QT_NO_option + cfgdNeg=`echo $cfgd | sed 's,QT_,QT_NO_,'` + fi + + if [ -z $cfgdNeg ]; then +cat << EOF +#ifndef $cfgd +# define $cfg +#endif + +EOF + else +cat << EOF +#if defined($cfgd) && defined($cfgdNeg) +# undef $cfgd +#elif !defined($cfgd) && !defined($cfgdNeg) +# define $cfg +#endif + +EOF + fi + done +cat << EOF +#endif // QT_BOOTSTRAPPED + +EOF +fi + +if [ "$CFG_REDUCE_EXPORTS" = "yes" ]; then +cat << EOF +#define QT_VISIBILITY_AVAILABLE + +EOF +fi + +if [ -n "$QT_LIBINFIX" ]; then +cat << EOF +#define QT_LIBINFIX "$QT_LIBINFIX" + +EOF +fi + +echo "#define QT_QPA_DEFAULT_PLATFORM_NAME \"$QT_QPA_DEFAULT_PLATFORM\"" + +# Close qconfig.h.new (by restoring the original stdout) +exec >&3 + +# avoid unecessary rebuilds by copying only if qconfig.h has changed +if cmp -s "$outpath/src/corelib/global/qconfig.h" "$outpath/src/corelib/global/qconfig.h.new"; then + rm -f "$outpath/src/corelib/global/qconfig.h.new" +else + mv -f "$outpath/src/corelib/global/qconfig.h.new" "$outpath/src/corelib/global/qconfig.h" +fi + +#------------------------------------------------------------------------------- +# save configuration into qconfig.pri +#------------------------------------------------------------------------------- + +# open qconfig.pri +QTCONFIG="$outpath/mkspecs/qconfig.pri" +exec > "$QTCONFIG.tmp" + +if [ "$CFG_DEBUG" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG debug" + if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG release" + fi + QT_CONFIG="$QT_CONFIG debug" +elif [ "$CFG_DEBUG" = "no" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG release" + if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG debug" + fi + QT_CONFIG="$QT_CONFIG release" +fi +if [ "$CFG_FRAMEWORK" = "no" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG qt_no_framework" +else + QT_CONFIG="$QT_CONFIG qt_framework" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG qt_framework" +fi +if [ "$CFG_DEV" = "yes" ]; then + QT_CONFIG="$QT_CONFIG private_tests" + if [ "$CFG_WERROR" != "no" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG warnings_are_errors" + fi + if [ "$CFG_HEADERSCLEAN" != "no" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG headersclean" + fi +else + if [ "$CFG_WERROR" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG warnings_are_errors" + fi + if [ "$CFG_HEADERSCLEAN" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG headersclean" + fi +fi + +cat <&3 + +# replace qconfig.pri if it differs from the newly created temp file +if cmp -s "$QTCONFIG.tmp" "$QTCONFIG"; then + rm -f "$QTCONFIG.tmp" +else + mv -f "$QTCONFIG.tmp" "$QTCONFIG" +fi + +#------------------------------------------------------------------------------- +# save configuration into qmodule.pri +#------------------------------------------------------------------------------- + +# open qmodule.pri +QTMODULE="$outpath/mkspecs/qmodule.pri" +exec > "$QTMODULE.tmp" + +echo "CONFIG += $QMAKE_CONFIG" +echo "QT_BUILD_PARTS += $CFG_BUILD_PARTS" +if [ -n "$CFG_SKIP_MODULES" ]; then + echo "QT_SKIP_MODULES += $CFG_SKIP_MODULES" +fi +DISABLED_FEATURES= +for cfg in $QCONFIG_FLAGS; do + ncfg=${cfg#QT_NO_} + if [ x$ncfg != x$cfg ]; then + DISABLED_FEATURES="$DISABLED_FEATURES $ncfg" + fi +done +if [ -n "$DISABLED_FEATURES" ]; then + echo "QT_NO_DEFINES = $DISABLED_FEATURES" +fi +echo "QT_QCONFIG_PATH = ${CFG_QCONFIG_PATH#$relpath/src/corelib/global/}" + +cat <&3 + +# replace qmodule.pri if it differs from the newly created temp file +if cmp -s "$QTMODULE.tmp" "$QTMODULE"; then + rm -f "$QTMODULE.tmp" +else + mv -f "$QTMODULE.tmp" "$QTMODULE" +fi + +#------------------------------------------------------------------------------- +# give feedback on configuration +#------------------------------------------------------------------------------- +exec 1>$outpath/config.summary # redirect output temporarily to config.summary + +report_support() +{ + case "$#,$2" in + 2,auto) + # 2 arguments and the result is "auto", so just say "yes" + # this is usually an error in the configure script, but oh well.. + echo "$1 yes" + return + ;; + [012],* | *,no*) + # 0, 1 or 2 arguments, or anything starting with "no" + # print just the first part of the argument (before the dash) + echo "$1 ${2%%-*}" + return + :; + esac + heading=$1 + shift + + value=$1 + shift + + while [ $# -gt 0 ]; do + if [ "$value" = "$1" ]; then + echo "$heading yes ($2)" + return + fi + shift + shift + done + echo "$heading $value" +} + +report_support_plugin() +{ + report_support "$1" "$2-$3" \ + yes-qt "in $4, using bundled copy" \ + yes-system "in $4, using system library" \ + plugin-qt "plugin, using bundled copy" \ + plugin-system "plugin, using system library" +} + +echo +echo " Configure summary" +echo +if [ "$XPLATFORM" = "$PLATFORM" ]; then + # the missing space before $CFG_FEATURES is intentional + echo "Build type: $PLATFORM ($CFG_ARCH, CPU features:${CFG_CPUFEATURES:- none detected})" +else + echo "Building on: $PLATFORM ($CFG_HOST_ARCH, CPU features:${CFG_HOST_CPUFEATURES:- none detected})" + echo "Building for: $XPLATFORM ($CFG_ARCH, CPU features:${CFG_CPUFEATURES:- none detected})" +fi + + +if [ -n "$PLATFORM_NOTES" ]; then + echo "Platform notes:" + echo "$PLATFORM_NOTES" +else + echo +fi + +if [ "$OPT_VERBOSE" = "yes" ]; then + echo $ECHO_N "qmake vars .......... $ECHO_C" + cat "$QMAKE_VARS_FILE" | tr '\n' ' ' + echo "qmake switches ......... $QMAKE_SWITCHES" + echo +fi + +# Build configuration +echo "Build options:" +echo $ECHO_N " Configuration .......... $ECHO_C" +echo $QMAKE_CONFIG $QT_CONFIG | tr ' ' '\n' | sort | tr '\n' ' ' +echo +echo " Build parts ............ $CFG_BUILD_PARTS" +release="release" +[ "$CFG_FORCEDEBUGINFO" = "yes" ] && release="release (with debug info)" +[ "$CFG_DEBUG" = "yes" ] && build_mode="debug" || build_mode=$release +if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + build_mode="debug and $release; default link: $build_mode" +fi +if [ "$CFG_RELEASE_TOOLS" = "yes" ]; then + build_mode="$build_mode; optimized tools" +fi +echo " Mode ................... $build_mode" +unset build_mode release +echo " Using sanitizer(s)...... $CFG_SANITIZERS" +echo " Using C++ standard ..... $CFG_STDCXX" +echo " Using gold linker....... $CFG_USE_GOLD_LINKER" +echo " Using new DTAGS ........ $CFG_ENABLE_NEW_DTAGS" +echo " Using PCH .............. $CFG_PRECOMPILE" +echo " Using LTCG ............. $CFG_LTCG" +echo " Target compiler supports:" +if [ "$CFG_ARCH" = "i386" -o "$CFG_ARCH" = "x86_64" ]; then + echo " SSE .................. ${CFG_SSE_LIST:-}" + echo " AVX .................. ${CFG_AVX_LIST:-}" + echo " AVX512 ............... ${CFG_AVX512_UPPER:-}" +elif [ "$CFG_ARCH" = "arm" ]; then + echo " Neon ................. ${CFG_NEON}" +elif [ "$CFG_ARCH" = "mips" ]; then + echo " DSP/DSPr2 ............ ${CFG_MIPS_DSP}/${CFG_MIPS_DSPR2}" +fi + +# Qt modules +echo +echo "Qt modules and options:" +report_support " Qt D-Bus ..............." "$CFG_DBUS" runtime "loading dbus-1 at runtime" linked "linked to dbus-1" +report_support " Qt Concurrent .........." "$CFG_CONCURRENT" +report_support " Qt GUI ................." "$CFG_GUI" +report_support " Qt Widgets ............." "$CFG_WIDGETS" +report_support " Large File ............." "$CFG_LARGEFILE" +report_support " QML debugging .........." "$CFG_QML_DEBUG" +report_support " Use system proxies ....." "$CFG_SYSTEM_PROXIES" + +# Other things +# Please keep sorted and properly grouped! The output is quite long, so it's +# hard to find something you're searching for if it's not sorted. +echo +echo "Support enabled for:" +report_support " Accessibility .........." "$CFG_ACCESSIBILITY" +report_support " ALSA ..................." "$CFG_ALSA" +report_support " CUPS ..................." "$CFG_CUPS" +[ "$XPLATFORM_MINGW" = "yes" ] && \ + report_support " DirectWrite ............" "$CFG_DIRECTWRITE" +report_support " DoubleConversion........" "$CFG_DOUBLECONVERSION" no "libc" system "system library" qt "bundled copy" +report_support " Evdev .................." "$CFG_EVDEV" +report_support " FontConfig ............." "$CFG_FONTCONFIG" +report_support " FreeType ..............." "$CFG_FREETYPE" system "system library" yes "bundled copy" +report_support " Glib ..................." "$CFG_GLIB" +report_support " GStreamer .............." "$CFG_GSTREAMER" yes "$CFG_GSTREAMER_VERSION" +report_support " GTK platformtheme ......" "$CFG_GTK" +report_support " HarfBuzz ..............." "$CFG_HARFBUZZ" system "system library" qt "bundled copy" +report_support " Iconv .................." "$CFG_ICONV" +report_support " ICU ...................." "$CFG_ICU" +report_support " Image formats:" +report_support_plugin " GIF .................." "$CFG_GIF" qt QtGui +report_support_plugin " JPEG ................." "$CFG_JPEG" "$CFG_LIBJPEG" QtGui +report_support_plugin " PNG .................." "$CFG_PNG" "$CFG_LIBPNG" QtGui +report_support " libinput................" "$CFG_LIBINPUT" +report_support " Logging backends:" +report_support " journald ..............." "$CFG_JOURNALD" +report_support " syslog ..............." "$CFG_SYSLOG" +report_support " mtdev .................." "$CFG_MTDEV" yes "system library" +report_support " Networking:" +[ "$XPLATFORM_MAC" = "yes" ] && \ + report_support " CoreWlan ............." "$CFG_COREWLAN" +report_support " getaddrinfo .........." "$CFG_GETADDRINFO" +report_support " getifaddrs ..........." "$CFG_GETIFADDRS" +report_support " IPv6 ifname .........." "$CFG_IPV6IFNAME" +report_support " libproxy.............." "$CFG_LIBPROXY" +report_support " OpenSSL .............." "$CFG_OPENSSL" yes "loading libraries at run-time" linked "linked to the libraries" +[ "$XPLATFORM_MAC" = "yes" ] && \ + report_support " SecureTransport ......" "$CFG_SECURETRANSPORT" +report_support " NIS ...................." "$CFG_NIS" +report_support " OpenGL / OpenVG:" +report_support " EGL .................." "$CFG_EGL" +report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" dynamic "Dynamic OpenGL" +report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" +report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" +if [ -n "$PKG_CONFIG" ]; then + report_support " pkg-config ............. yes" +else + report_support " pkg-config ............. no" +fi +report_support " PulseAudio ............." "$CFG_PULSEAUDIO" +report_support " QPA backends:" +report_support " DirectFB ............." "$CFG_DIRECTFB" +report_support " EGLFS ................" "$CFG_EGLFS" +report_support " EGLFS i.MX6 ........" "$CFG_EGLFS_VIV" +report_support " EGLFS i.MX6 Wayland." "$CFG_EGLFS_VIV_WL" +report_support " EGLFS EGLDevice ...." "$CFG_EGLFS_EGLDEVICE" +report_support " EGLFS GBM .........." "$CFG_EGLFS_GBM" +report_support " EGLFS Mali ........." "$CFG_EGLFS_MALI" +report_support " EGLFS Raspberry Pi ." "$CFG_EGLFS_BRCM" +report_support " EGLFS X11 .........." "$CFG_EGL_X" +if [ "$XPLATFORM_INTEGRITY" = "yes" ]; then + report_support " INTEGRITY Framebuffer " "$CFG_INTEGRITYFB" +fi +report_support " LinuxFB .............." "$CFG_LINUXFB" +report_support " Mir client............" "$CFG_MIRCLIENT" +report_support " XCB .................." "$CFG_XCB" system "system library" qt "bundled copy" +if [ "$CFG_XCB" != "no" ]; then + report_support " EGL on X ..........." "$CFG_EGL_X" + report_support " GLX ................" "$CFG_XCB_GLX" + report_support " MIT-SHM ............" "$CFG_MITSHM" + report_support " Xcb-Xlib ..........." "$CFG_XCB_XLIB" + report_support " Xcursor ............" "$CFG_XCURSOR" runtime "loaded at runtime" + report_support " Xfixes ............." "$CFG_XFIXES" runtime "loaded at runtime" + report_support " Xi2 ................" "$CFG_XINPUT2" runtime "loaded at runtime" + report_support " Xrandr ............." "$CFG_XRANDR" runtime "loaded at runtime" + report_support " Xrender ............" "$CFG_XRENDER" + report_support " XKB ................" "$CFG_XKB" + report_support " XShape ............." "$CFG_XSHAPE" + report_support " XSync .............." "$CFG_XSYNC" +fi +report_support " Session management ....." "$CFG_SM" +if [ "$XPLATFORM_QNX" = "yes" ]; then + report_support " SLOG2 .................." "$CFG_SLOG2" + report_support " IMF ...................." "$CFG_QNX_IMF" + report_support " PPS ...................." "$CFG_PPS" + report_support " LGMON .................." "$CFG_LGMON" +fi +report_support " SQL drivers:" +report_support " DB2 .................." "$CFG_SQL_db2" plugin "plugin" yes "built into QtSql" +report_support " InterBase ............" "$CFG_SQL_ibase" plugin "plugin" yes "built into QtSql" +report_support " MySQL ................" "$CFG_SQL_mysql" plugin "plugin" yes "built into QtSql" +report_support " OCI .................." "$CFG_SQL_oci" plugin "plugin" yes "built into QtSql" +report_support " ODBC ................." "$CFG_SQL_odbc" plugin "plugin" yes "built into QtSql" +report_support " PostgreSQL ..........." "$CFG_SQL_psql" plugin "plugin" yes "built into QtSql" +report_support " SQLite 2 ............." "$CFG_SQL_sqlite2" plugin "plugin" yes "built into QtSql" +report_support_plugin " SQLite ..............." "$CFG_SQL_sqlite" "$CFG_SQLITE" QtSql +report_support " TDS .................." "$CFG_SQL_tds" plugin "plugin" yes "built into QtSql" +report_support " tslib .................." "$CFG_TSLIB" +report_support " udev ..................." "$CFG_LIBUDEV" +report_support " xkbcommon-x11..........." "$CFG_XKBCOMMON" system "system library" qt "bundled copy, XKB config root: $CFG_XKB_CONFIG_ROOT" +report_support " xkbcommon-evdev........." "$CFG_XKBCOMMON_EVDEV" +report_support " zlib ..................." "$CFG_ZLIB" system "system library" yes "bundled copy" + +echo + +# complain about not being able to use dynamic plugins if we are using a static build +if [ "$CFG_SHARED" = "no" ]; then + echo + echo "WARNING: Using static linking will disable the use of dynamically" + echo "loaded plugins. Make sure to import all needed static plugins," + echo "or compile needed modules into the library." +fi +if [ "$CFG_FREETYPE" = "system" ]; then + if [ "$ORIG_CFG_FREETYPE" = "qt" ]; then + echo + echo "WARNING: Bundled FreeType can't be used. FontConfig use requires system FreeType." + elif [ "$ORIG_CFG_FREETYPE" = "no" ]; then + echo + echo "WARNING: FreeType can't be disabled. FontConfig use requires system FreeType." + fi +fi +if [ "$CFG_OPENSSL" = "linked" ] && [ "$OPENSSL_LIBS" = "" ]; then + echo + echo "NOTE: When linking against OpenSSL, you can override the default" + echo "library names through OPENSSL_LIBS." + echo "For example:" + echo " OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked" +fi +if [ "$CFG_JOURNALD" = "yes" ] || [ "$CFG_SYSLOG" = "yes" ] || [ "$CFG_SLOG2" = "yes" ]; then + echo + echo "NOTE: journald, syslog or slog2 integration is enabled." + echo "If your users intend on developing applications against this build," + echo "ensure that the IDEs they use either set QT_LOGGING_TO_CONSOLE to 1" + echo "or the IDE is able to read the logged output from journald, syslog or slog2." +fi +if [ "$CFG_XKBCOMMON" = "qt" ] && [ "$CFG_XKB_CONFIG_ROOT" = "not found" ]; then + echo + echo "WARNING: Could not find XKB config root, use -xkb-config-root to set a path to " + echo "XKB configuration data. This is required for keyboard input support." +fi +if [ "$CFG_QREAL" = double ] && [ "$CFG_ARCH" = arm ]; then + echo + echo "NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1." + echo "Configure with '-qreal float' to create a build that is binary compatible with 5.1." +fi +if [ "$CFG_RELEASE_TOOLS" = "yes" -a \( "$CFG_DEBUG" = "no" -o "$CFG_DEBUG_RELEASE" = "yes" \) ]; then + echo + echo "NOTE: -optimized-tools is not useful in -release mode." + echo +fi + +exec 1>&3 3>&- # restore stdout +cat $outpath/config.summary # display config feedback to user + +if [ "$XPLATFORM_MAC" = "yes" ] && [ "$CFG_FRAMEWORK" = "yes" ] && [ "$CFG_DEBUG" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "no" ]; then + echo + echo "Error: debug-only framework builds are not supported. Configure with -no-framework" + echo "if you want a pure debug build." + echo + exit 1 +fi + +sepath=`echo "$relpath" | sed -e 's/\\./\\\\./g'` +PROCS=1 +EXEC="" + +rm -f "$QMAKE_VARS_FILE" 2>/dev/null + +#------------------------------------------------------------------------------- +# build makefiles based on the configuration +#------------------------------------------------------------------------------- + +( # fork to make the cd stay local + + relpathMangled=$relpath + if [ -n "$CFG_TOPLEVEL" ]; then + relpathMangled=`dirname "$relpath"` + cd .. + fi + + "$CFG_QMAKE_PATH" -qtconf "$QTCONFFILE" "$relpathMangled" + +) || exit + +#------------------------------------------------------------------------------- +# check for platforms that we don't yet know about +#------------------------------------------------------------------------------- +if [ "$CFG_ARCH" = "unknown" ]; then +cat < will be used (when + available). The generic implementations are generally as fast + as and always as safe as a specialized implementation. + + If no generic implementation is available, Qt will use a + fallback UNIX implementation which uses a single + pthread_mutex_t to protect all atomic operations. This + implementation is the slow (but safe) fallback implementation + for architectures Qt does not yet support. +EOF +fi + +#------------------------------------------------------------------------------- +# check if the user passed the -no-zlib option, which is no longer supported +#------------------------------------------------------------------------------- +if [ -n "$ZLIB_FORCED" ]; then + which_zlib="supplied" + if [ "$CFG_ZLIB" = "system" ]; then + which_zlib="system" + fi + +cat </dev/null 2>&1 || CONFIG_STATUS="$CONFIG_STATUS -confirm-license" + + [ -f "$outpath/config.status" ] && rm -f "$outpath/config.status" + echo "#!/bin/sh" > "$outpath/config.status" + [ -n "$PKG_CONFIG_SYSROOT_DIR" ] && \ + echo "export PKG_CONFIG_SYSROOT_DIR=$PKG_CONFIG_SYSROOT_DIR" >> "$outpath/config.status" + [ -n "$PKG_CONFIG_LIBDIR" ] && \ + echo "export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR" >> "$outpath/config.status" + echo "$CONFIG_STATUS \"\$@\"" >> "$outpath/config.status" + chmod +x "$outpath/config.status" +fi + +if [ -n "$RPATH_MESSAGE" ]; then + echo + echo "$RPATH_MESSAGE" +fi + +if [ -n "$PREFIX_COMPLAINTS" ]; then + echo + echo "$PREFIX_COMPLAINTS" + echo +fi + +MAKE=`basename "$MAKE"` +echo +echo Qt is now configured for building. Just run \'$MAKE\'. +if [ "$outpath" = "$QT_INSTALL_PREFIX" ]; then + echo Once everything is built, Qt is installed. + echo You should not run \'$MAKE install\'. +else + echo Once everything is built, you must run \'$MAKE install\'. + echo Qt will be installed into $QT_INSTALL_PREFIX +fi +echo +echo Prior to reconfiguration, make sure you remove any leftovers from +echo the previous build. +echo diff --git a/devel/qt5/dynamic-openql-fixes/configure.orig b/devel/qt5/dynamic-openql-fixes/configure.orig new file mode 100755 index 00000000..43b55f07 --- /dev/null +++ b/devel/qt5/dynamic-openql-fixes/configure.orig @@ -0,0 +1,7741 @@ +#!/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$ +## +############################################################################# + +#------------------------------------------------------------------------------- +# script initialization +#------------------------------------------------------------------------------- + +# the name of this script +relconf=`basename $0` +# 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` + +# where to find which.. +unixtests="$relpath/config.tests/unix" +mactests="$relpath/config.tests/mac" +WHICH="$unixtests/which.test" + +PERL=`$WHICH perl 2>/dev/null` + +# find out which awk we want to use, prefer gawk, then nawk, then regular awk +AWK= +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 +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 + +# do this early so we don't store it in config.status +CFG_TOPLEVEL= +if [ x"$1" = x"-top-level" ]; then + CFG_TOPLEVEL=yes + shift +fi + +# later cache the command line in config.status +OPT_CMDLINE= +for i in "$@"; do + if [ "x$i" != "x-v" ]; then + [ -z "${i##* *}" ] && i="'$i'" + OPT_CMDLINE="$OPT_CMDLINE $i" + fi +done + +# initialize global variables +CONFIG_SEPARATORS=`printf ' \t'` +QMAKE_SWITCHES= +QMAKE_VARS= +QMAKE_CONFIG= +QTCONFIG_CONFIG= +QT_CONFIG= +SUPPORTED= +QMAKE_VARS_FILE=.qmake.vars +DEVICE_VARS_FILE=.device.vars +HOST_VARS_FILE=.host.vars + +:> "$QMAKE_VARS_FILE" +:> "$DEVICE_VARS_FILE" +:> "$HOST_VARS_FILE" + +#------------------------------------------------------------------------------- +# utility functions +#------------------------------------------------------------------------------- + +shellEscape() +{ + echo "$@" | sed 's/ /\ /g' +} + +makeabs() +{ + local FILE="$1" + local RES="$FILE" + if [ -z "${FILE##/*}" ]; then + true + elif [ "$OSTYPE" = "msys" -a -z "${FILE##[a-zA-Z]:[/\\]*}" ]; then + true + else + RES=$PWD/$FILE + fi + RES=$RES/ + while true; do + nres=`echo "$RES" | sed 's,/[^/][^/]*/\.\./,/,g; s,/\./,/,g'` + test x"$nres" = x"$RES" && break + RES=$nres + done + echo "$RES" | sed 's,//,/,g; s,/$,,' +} + +# Adds a new qmake variable to the cache +# Usage: QMakeVar mode varname contents +# where mode is one of: set, add, del +QMakeVar() +{ + case "$1" in + set) + eq="=" + ;; + add) + eq="+=" + ;; + del) + eq="-=" + ;; + *) + echo >&2 "BUG: wrong command to QMakeVar: $1" + ;; + esac + + echo "$2" "$eq" "$3" >> "$QMAKE_VARS_FILE" +} + +shellArgumentListToQMakeListHelper() +{ + local retval + for arg in "$@"; do retval="$retval \"$arg\""; done + echo "$retval" +} + +# Convert a string usable on a shell command line into word-by-word quoted +# qmake list. +shellArgumentListToQMakeList() +{ + # eval is needed for the shell to interpret the backslash escape sequences + eval shellArgumentListToQMakeListHelper "$@" +} + +# 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" "$2" + ;; + *load\(device_config\)*) + conf_file="$2" + if [ ! -f "$conf_file" ]; then + echo "WARNING: Unable to find file $conf_file" >&2 + continue + fi + expandQMakeConf "$conf_file" "$2" + ;; + *) + echo "$line" + ;; + esac; done < "$1" +} + +extractQMakeVariables() +{ + LC_ALL=C $AWK ' +BEGIN { + values["LITERAL_WHITESPACE"] = " " + values["LITERAL_DOLLAR"] = "$" +} +/^!?host_build:/ { + scopeStart = index($0, ":") + 1 + condition = substr($0, 0, scopeStart - 2) + if (condition != "'"$1"'") { next } + $0 = substr($0, scopeStart) +} +/^[_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/xcodebuild -sdk $sdk -version 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")" + ;; + *) + ;; + esac + + 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=*|QMAKE_CXXFLAGS=*) + echo "$line -isysroot $sysroot $version_min_flag" + ;; + QMAKE_LFLAGS=*) + echo "$line -Wl,-syslibroot,$sysroot $version_min_flag" + ;; + *) + echo "$line" + ;; + esac + done +} + +# 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" "$HOST_VARS_FILE" | extractQMakeVariables "host_build"` + if [ "$BUILD_ON_MAC" = "yes" ]; then specvals=$(macSDKify "$specvals"); fi + fi + getSingleQMakeVariable "$1" "$specvals" +} + +getXQMakeConf() +{ + if [ -z "$xspecvals" ]; then + xspecvals=`expandQMakeConf "$XQMAKESPEC/qmake.conf" "$DEVICE_VARS_FILE" | extractQMakeVariables "!host_build"` + if [ "$XPLATFORM_MAC" = "yes" ]; then xspecvals=$(macSDKify "$xspecvals"); fi + fi + getSingleQMakeVariable "$1" "$xspecvals" +} + +testXConfig() +{ + # Put a space on each end of the CONFIG value so that searching for the + # target with whitespace on either side will work even when it's the + # first/last/only item in the CONFIG value. + case \ `getXQMakeConf CONFIG`\ in + *[${CONFIG_SEPARATORS}]$1[${CONFIG_SEPARATORS}]*) + return 0 + ;; + *) + return 1 + ;; + esac +} + +compilerSupportsFlag() +{ + cat >conftest.cpp </dev/null 2>&1 + fi + ret=$? + rm -f conftest.cpp conftest-out + return $ret +} + +linkerSupportsFlag() +{ + compiler=$1 + shift + lflags=-Wl + for flag + do + safe_flag=`shellEscape "$flag"` + lflags=$lflags,$safe_flag + done + if [ $CFG_USE_GOLD_LINKER = yes ]; then + lflags="-fuse-ld=gold $lflags" + fi + compilerSupportsFlag $compiler $lflags +} + +# $1: newline-separated list of default paths +# stdin: input path +# stdout: input path or nothing +filterDefaultPaths() +{ + local path + path=`cat` + path=`makeabs "$path"` + echo "$1" | grep "^$path\$" > /dev/null || echo "$path" +} + +filterIncludePath() +{ + filterDefaultPaths "$DEFAULT_INCDIRS" +} + +filterLibraryPath() +{ + filterDefaultPaths "$DEFAULT_LIBDIRS" +} + +filterPathOptionsHelper() +{ + local flag defpaths sep p path + flag=$1; shift + defpaths=$1; shift + sep= + for p in "$@"; do + path=${p#$flag} + if [ "x$path" != "x$p" ]; then + path=`echo "$path" | filterDefaultPaths "$defpaths"` + test -z "$path" && continue + fi + # Re-quote for shell & qmake + p=`echo "$p" | sed 's,[^ ]* .*,"&",g'` + printf "%s%s" "$sep" "$p" + sep=" " + done + echo +} + +# $1: flag +# $2: newline-separated list of default paths +# stdin: list of command line options +# sdout: stdin without the options naming default paths +filterPathOptions() +{ + # The eval does escape interpretation for us + eval filterPathOptionsHelper $1 "\"$2\"" "`cat`" +} + +filterIncludeOptions() +{ + filterPathOptions -I "$DEFAULT_INCDIRS" +} + +filterLibraryOptions() +{ + filterPathOptions -L "$DEFAULT_LIBDIRS" +} + +#------------------------------------------------------------------------------- +# device options +#------------------------------------------------------------------------------- +DeviceVar() +{ + case "$1" in + set) + eq="=" + ;; + *) + echo >&2 "BUG: wrong command to DeviceVar: $1" + ;; + esac + + echo "$2" "$eq" "$3" >> "$DEVICE_VARS_FILE" +} + +resolveDeviceMkspec() +{ + result=$(find "$relpath/mkspecs/devices/" -type d -name "*$1*" | sed "s,^$relpath/mkspecs/,,") + match_count=$(echo "$result" | wc -w) + if [ "$match_count" -gt 1 ]; then + echo >&2 "Error: Multiple matches for device '$1'. Candidates are:" + tabbed_result=$(echo "$result" | sed 's,^, ,') + echo >&2 "$tabbed_result" + echo "undefined" + elif [ "$match_count" -eq 0 ]; then + echo >&2 "Error: No device matching '$1'" + echo "undefined" + else + echo "$result" + fi +} + +#------------------------------------------------------------------------------- +# Host options +#------------------------------------------------------------------------------- +HostVar() +{ + case "$1" in + set) + eq="=" + ;; + *) + echo >&2 "BUG: wrong command to HostVar: $1" + ;; + esac + + echo "$2" "$eq" "$3" >> "$HOST_VARS_FILE" +} + +#------------------------------------------------------------------------------- +# operating system detection +#------------------------------------------------------------------------------- + +# 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 +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# detect the "echo without newline" style. usage: echo $ECHO_N "$ECHO_C" +if echo '\c' | grep '\c' >/dev/null; then + ECHO_N=-n +else + ECHO_C='\c' +fi + +#------------------------------------------------------------------------------- +# window system detection +#------------------------------------------------------------------------------- + +BUILD_ON_MAC=no +if [ -d /System/Library/Frameworks/Carbon.framework ]; then + BUILD_ON_MAC=yes +fi +HOST_DIRLIST_SEP=":" +DEV_NULL=/dev/null +if [ "$OSTYPE" = "msys" ]; then + HOST_DIRLIST_SEP=";" + DEV_NULL=/tmp/empty-file + echo "" > $DEV_NULL + relpath=`(cd "$relpath"; pwd -W)` + outpath=`pwd -W` +fi + +#------------------------------------------------------------------------------- +# Verify Xcode installation on Mac OS +#------------------------------------------------------------------------------- + +if [ "$BUILD_ON_MAC" = "yes" ]; then + if ! /usr/bin/xcode-select --print-path >/dev/null 2>&1; then + echo >&2 + echo " No Xcode is selected. Use xcode-select -switch to choose an Xcode" >&2 + echo " version. See the xcode-select man page for more information." >&2 + echo >&2 + exit 2 + fi + + if ! /usr/bin/xcrun -find xcrun >/dev/null 2>&1; then + echo >&2 + echo " Xcode not set up properly. You may need to confirm the license" >&2 + echo " agreement by running /usr/bin/xcodebuild without arguments." >&2 + echo >&2 + exit 2 + fi +fi + +#----------------------------------------------------------------------------- +# Qt version detection +#----------------------------------------------------------------------------- +QT_VERSION= +QT_MAJOR_VERSION= +QT_MINOR_VERSION=0 +QT_PATCH_VERSION=0 +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 + +#------------------------------------------------------------------------------- +# initalize variables +#------------------------------------------------------------------------------- + +SYSTEM_VARIABLES="AR RANLIB STRIP OBJDUMP LD CC CXX CFLAGS CXXFLAGS LDFLAGS" +for varname in $SYSTEM_VARIABLES; do + qmakevarname="${varname}" + qmakecmdargs="" + # use LDFLAGS for autoconf compat, but qmake uses QMAKE_LFLAGS + if [ "${varname}" = "LDFLAGS" ]; then + qmakevarname="LFLAGS" + elif [ "${varname}" = "LD" ]; then + qmakevarname="LINK" + elif [ "${varname}" = "AR" ]; then + # QMAKE_AR needs to be set to "/path/to/ar cqs" but the + # environment variable will be set to the command only so we + # need to append " cqs" for autoconf compatibility + qmakecmdargs=" cqs" + fi + cmd=`echo \ +'if [ -n "\$'${varname}'" ]; then + QMakeVar set QMAKE_'${qmakevarname}' "\$'${varname}${qmakecmdargs}'" +fi'` + eval "$cmd" +done + +# Use CC/CXX to run config.tests +mkdir -p "$outpath/config.tests" +rm -f "$outpath/config.tests/.qmake.cache" +cp "$QMAKE_VARS_FILE" "$outpath/config.tests/.qmake.cache" + +QMakeVar add styles "mac fusion windows" + +# QTDIR may be set and point to an old or system-wide Qt installation +unset QTDIR + +# the minimum version of libdbus-1 that we require: +MIN_DBUS_1_VERSION=1.2 + +# initalize internal variables +CFG_CONFIGURE_EXIT_ON_ERROR=yes +CFG_PROFILE=no +CFG_STRIP=yes +CFG_GUI=auto # (yes|no|auto) +CFG_WIDGETS=yes +CFG_QCONFIG=full +CFG_DEBUG=auto +CFG_MYSQL_CONFIG= +CFG_PSQL_CONFIG= +CFG_DEBUG_RELEASE=no +CFG_FORCEDEBUGINFO=no +CFG_RELEASE_TOOLS=no +CFG_SHARED=yes +CFG_SM=auto +CFG_XSHAPE=auto +CFG_XSYNC=auto +CFG_XFIXES=runtime +CFG_ZLIB=auto +CFG_MTDEV=auto +CFG_JOURNALD=no +CFG_SYSLOG=no +CFG_SQLITE=qt +CFG_GIF=auto +CFG_PNG=yes +CFG_LIBPNG=auto +CFG_JPEG=auto +CFG_LIBJPEG=auto +CFG_XCURSOR=runtime +CFG_XRANDR=runtime +CFG_XRENDER=auto +CFG_MITSHM=auto +CFG_OPENGL=auto +CFG_OPENVG=auto +CFG_OPENVG_LC_INCLUDES=no +CFG_OPENVG_SHIVA=auto +CFG_OPENVG_ON_OPENGL=auto +CFG_EGL=auto +CFG_EGL_X=auto +CFG_DOUBLECONVERSION=auto +CFG_FONTCONFIG=auto +CFG_FREETYPE=auto +CFG_HARFBUZZ=auto +CFG_SQL_AVAILABLE= +QT_ALL_BUILD_PARTS=" libs tools examples tests " +QT_DEFAULT_BUILD_PARTS="libs tools examples" +CFG_BUILD_PARTS="" +CFG_NOBUILD_PARTS="" +CFG_SKIP_MODULES="" +CFG_COMPILE_EXAMPLES=yes +CFG_AUDIO_BACKEND=auto +CFG_QML_DEBUG=yes +CFG_PKGCONFIG=auto +CFG_STACK_PROTECTOR_STRONG=auto +CFG_SLOG2=auto +CFG_PPS=auto +CFG_QNX_IMF=auto +CFG_LGMON=auto +CFG_SYSTEM_PROXIES=no +CFG_ANDROID_STYLE_ASSETS=yes +CFG_GSTREAMER=auto +CFG_GSTREAMER_VERSION="" +CFG_ATOMIC64=auto + +# Target architecture +CFG_ARCH= +CFG_CPUFEATURES= +# Host architecture, same as CFG_ARCH when not cross-compiling +CFG_HOST_ARCH= +CFG_HOST_CPUFEATURES= +# Set when the -arch or -host-arch arguments are used +OPT_OBSOLETE_HOST_ARG=no + +CFG_USE_GNUMAKE=no +CFG_XINPUT2=auto +CFG_XKB=auto +CFG_XKBCOMMON=yes +CFG_XKBCOMMON_EVDEV=auto +CFG_XKB_CONFIG_ROOT=auto +CFG_XCB=auto +CFG_XCB_XLIB=auto +CFG_XCB_GLX=no +CFG_EGLFS=auto +CFG_EGLFS_BRCM=no +CFG_EGLFS_EGLDEVICE=no +CFG_EGLFS_MALI=no +CFG_EGLFS_VIV=no +CFG_EGLFS_VIV_WL=no +CFG_DIRECTFB=no +CFG_GBM=auto +CFG_LINUXFB=auto +CFG_INTEGRITYFB=no +CFG_KMS=auto +CFG_MIRCLIENT=auto +CFG_LIBUDEV=auto +CFG_LIBINPUT=auto +CFG_OBSOLETE_WAYLAND=no +CFG_EVDEV=auto +CFG_TSLIB=auto +CFG_NIS=auto +CFG_CUPS=auto +CFG_ICONV=auto +CFG_DBUS=auto +CFG_GLIB=auto +CFG_GTK=auto +CFG_LARGEFILE=auto +CFG_OPENSSL=auto +CFG_LIBPROXY=auto +CFG_SECURETRANSPORT=auto +CFG_PRECOMPILE=auto +CFG_LTCG=no +CFG_SEPARATE_DEBUG_INFO=no +CFG_REDUCE_EXPORTS=auto +CFG_SSE2=auto +CFG_SSE3=auto +CFG_SSSE3=auto +CFG_SSE4_1=auto +CFG_SSE4_2=auto +CFG_AVX=auto +CFG_AVX2=auto +CFG_AVX512=auto +CFG_REDUCE_RELOCATIONS=auto +CFG_ACCESSIBILITY=auto +CFG_ACCESSIBILITY_ATSPI_BRIDGE=no # will be enabled depending on dbus and accessibility being enabled +CFG_NEON=auto +CFG_MIPS_DSP=auto +CFG_MIPS_DSPR2=auto +CFG_CLOCK_GETTIME=auto +CFG_CLOCK_MONOTONIC=auto +CFG_POSIX_FALLOCATE=auto +CFG_MREMAP=auto +CFG_GETADDRINFO=auto +CFG_IPV6IFNAME=auto +CFG_GETIFADDRS=auto +CFG_INOTIFY=auto +CFG_EVENTFD=auto +CFG_CLOEXEC=no +CFG_POLL=auto +CFG_RPATH=yes +CFG_FRAMEWORK=auto +CFG_USE_GOLD_LINKER=auto +CFG_ENABLE_NEW_DTAGS=auto +DEFINES= +INCLUDES= +D_FLAGS= +I_FLAGS= +L_FLAGS= +RPATH_FLAGS= +W_FLAGS= +QCONFIG_FLAGS= +XPLATFORM= # This seems to be the QMAKESPEC, like "linux-g++" +XPLATFORM_MAC=no # Whether target platform is OS X or iOS +XPLATFORM_IOS=no # Whether target platform is iOS +XPLATFORM_ANDROID=no +XPLATFORM_MINGW=no # Whether target platform is MinGW (win32-g++*) +XPLATFORM_QNX=no +XPLATFORM_HAIKU=no +XPLATFORM_INTEGRITY=no +PLATFORM=$QMAKESPEC +QT_CROSS_COMPILE=no +OPT_CONFIRM_LICENSE=no +OPT_SHADOW=maybe +OPT_VERBOSE=no +OPT_HELP= +CFG_SILENT=no +CFG_ALSA=auto +CFG_PULSEAUDIO=auto +CFG_COREWLAN=auto +CFG_ICU=auto +CFG_FORCE_ASSERTS=no +CFG_SANITIZERS=none +CFG_SANITIZE_ADDRESS=no +CFG_SANITIZE_THREAD=no +CFG_SANITIZE_MEMORY=no +CFG_SANITIZE_UNDEFINED=no +CFG_PCRE=auto +QPA_PLATFORM_GUARD=yes +CFG_STDCXX=auto +CFG_DIRECTWRITE=no +CFG_DIRECTWRITE2=auto +CFG_WERROR=auto +CFG_HEADERSCLEAN=auto +CFG_QREAL=double +OPT_MAC_SDK= +COMMERCIAL_USER=ask +LICENSE_FILE= +CFG_DEV=no + +# initalize variables used for installation +QT_INSTALL_PREFIX= +QT_INSTALL_DOCS= +QT_INSTALL_HEADERS= +QT_INSTALL_LIBS= +QT_INSTALL_BINS= +QT_INSTALL_LIBEXECS= +QT_INSTALL_PLUGINS= +QT_INSTALL_IMPORTS= +QT_INSTALL_QML= +QT_INSTALL_ARCHDATA= +QT_INSTALL_DATA= +QT_INSTALL_TRANSLATIONS= +QT_INSTALL_SETTINGS= +QT_INSTALL_EXAMPLES= +QT_INSTALL_TESTS= +CFG_SYSROOT= +CFG_GCC_SYSROOT="yes" +QT_HOST_PREFIX= +QT_HOST_BINS= +QT_HOST_LIBS= +QT_HOST_DATA= +QT_EXT_PREFIX= + +#flags for SQL drivers +QT_CFLAGS_PSQL= +QT_LFLAGS_PSQL= +QT_CFLAGS_MYSQL= +QT_LFLAGS_MYSQL= +QT_LFLAGS_MYSQL_R= +QT_CFLAGS_SQLITE= +QT_LFLAGS_SQLITE= +QT_LFLAGS_ODBC="-lodbc" +QT_LFLAGS_TDS= + +# flags for libdbus-1 +QT_CFLAGS_DBUS= +QT_LIBS_DBUS= + +# flags for Glib (X11 only) +QT_CFLAGS_GLIB= +QT_LIBS_GLIB= + +# default qpa platform +QT_QPA_DEFAULT_PLATFORM= + +# Android vars +CFG_DEFAULT_ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT +CFG_DEFAULT_ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT +CFG_DEFAULT_ANDROID_PLATFORM=android-9 +CFG_DEFAULT_ANDROID_TARGET_ARCH=armeabi-v7a +CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION=4.9 +CFG_DEFAULT_ANDROID_NDK_HOST=$ANDROID_NDK_HOST + +#------------------------------------------------------------------------------- +# check SQL drivers available in this package +#------------------------------------------------------------------------------- + +# opensource version removes some drivers, so force them to be off +CFG_SQL_tds=no +CFG_SQL_oci=no +CFG_SQL_db2=no + +CFG_SQL_AVAILABLE= +if [ -d "$relpath/src/plugins/sqldrivers" ]; then + for a in "$relpath/src/plugins/sqldrivers/"*; do + if [ -d "$a" ]; then + base_a=`basename "$a"` + CFG_SQL_AVAILABLE="${CFG_SQL_AVAILABLE} ${base_a}" + eval "CFG_SQL_${base_a}=auto" + fi + done +fi + +CFG_IMAGEFORMAT_PLUGIN_AVAILABLE= +if [ -d "$relpath/src/plugins/imageformats" ]; then + for a in "$relpath/src/plugins/imageformats/"*; do + if [ -d "$a" ]; then + base_a=`basename "$a"` + CFG_IMAGEFORMAT_PLUGIN_AVAILABLE="${CFG_IMAGEFORMAT_PLUGIN_AVAILABLE} ${base_a}" + fi + done +fi + +#------------------------------------------------------------------------------- +# parse command line arguments +#------------------------------------------------------------------------------- + +# parse the arguments, setting things to "yes" or "no" +while [ "$#" -gt 0 ]; do + CURRENT_OPT="$1" + UNKNOWN_ARG=no + 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| \ + -importdir| \ + -qmldir| \ + -archdatadir| \ + -datadir| \ + -libdir| \ + -bindir| \ + -libexecdir| \ + -translationdir| \ + -sysconfdir| \ + -examplesdir| \ + -testsdir| \ + -hostdatadir| \ + -hostbindir| \ + -hostlibdir| \ + -extprefix| \ + -sysroot| \ + -external-hostbindir| \ + -depths| \ + -make| \ + -nomake| \ + -skip| \ + -platform| \ + -xplatform| \ + -device| \ + -device-option| \ + -host-option| \ + -sdk| \ + -arch| \ + -host-arch| \ + -c++std | \ + -mysql_config| \ + -psql_config| \ + -qpa| \ + -qconfig| \ + -qreal| \ + -sanitize| \ + -xkb-config-root| \ + -android-sdk| \ + -android-ndk| \ + -android-ndk-platform| \ + -android-ndk-host| \ + -android-arch| \ + -android-toolchain-version) + 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,'` + ;; + -system-proxies) + VAR=system-proxies + VAL=yes + ;; + -no-system-proxies) + VAR=system-proxies + VAL=no + ;; + #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 + -k|-continue) + VAR=fatal_error + VAL=no + ;; + -opengl) + VAR=opengl + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=yes + else + shift; + VAL=$1 + fi + ;; + -openvg) + VAR=openvg + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=yes + else + shift; + VAL=$1 + fi + ;; + -gstreamer) + VAR=gstreamer + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=yes + else + shift; + VAL=$1 + fi + ;; + -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 + ;; + -qtnamespace) + VAR="qtnamespace" + shift + VAL="$1" + ;; + -qtlibinfix) + VAR="qtlibinfix" + shift + VAL="$1" + ;; + -D?*|-D) + VAR="add_define" + if [ "$1" = "-D" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-D,,'` + fi + ;; + -fpu) + VAR="fpu" + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=no + else + shift + VAL=$1 + fi + ;; + -I?*|-I) + VAR="add_ipath" + if [ "$1" = "-I" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-I,,'` + fi + ;; + -L?*|-L) + VAR="add_lpath" + if [ "$1" = "-L" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-L,,'` + fi + ;; + -R?*|-R) + VAR="add_rpath" + if [ "$1" = "-R" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-R,,'` + fi + ;; + -l) # -lfoo is handled differently + VAR="add_link" + shift + VAL="$1" + ;; + -F?*|-F) + VAR="add_fpath" + if [ "$1" = "-F" ]; then + shift + VAL="$1" + else + VAL=`echo $1 | sed 's,-F,,'` + fi + ;; + -fw) # -fwfoo is handled differently + VAR="add_framework" + shift + VAL="$1" + ;; + -W*) + VAR="add_warn" + VAL="$1" + ;; + #General options, including Qt style yes options + -*) + VAR=`echo $1 | sed 's,^-\(.*\),\1,'` + VAL="yes" + ;; + *) + UNKNOWN_ARG=yes + ;; + esac + if [ "$UNKNOWN_ARG" = "yes" ]; then + echo "$1: unknown argument" + ERROR=yes + shift + continue + fi + shift + + UNKNOWN_OPT=no + case "$VAR" in + accessibility) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ACCESSIBILITY="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + license) + LICENSE_FILE="$VAL" + ;; + gnumake) + CFG_USE_GNUMAKE="$VAL" + ;; + mysql_config) + CFG_MYSQL_CONFIG="$VAL" + ;; + psql_config) + CFG_PSQL_CONFIG="$VAL" + ;; + prefix) + QT_INSTALL_PREFIX="$VAL" + ;; + hostprefix) + QT_HOST_PREFIX="$VAL" + ;; + hostdatadir) + QT_HOST_DATA="$VAL" + ;; + hostbindir) + QT_HOST_BINS="$VAL" + ;; + hostlibdir) + QT_HOST_LIBS="$VAL" + ;; + extprefix) + QT_EXT_PREFIX="$VAL" + ;; + pkg-config) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PKGCONFIG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + force-pkg-config) + CFG_PKGCONFIG="yes" + ;; + docdir) + QT_INSTALL_DOCS="$VAL" + ;; + headerdir) + QT_INSTALL_HEADERS="$VAL" + ;; + plugindir) + QT_INSTALL_PLUGINS="$VAL" + ;; + importdir) + QT_INSTALL_IMPORTS="$VAL" + ;; + qmldir) + QT_INSTALL_QML="$VAL" + ;; + archdatadir) + QT_INSTALL_ARCHDATA="$VAL" + ;; + datadir) + QT_INSTALL_DATA="$VAL" + ;; + libdir) + QT_INSTALL_LIBS="$VAL" + ;; + qtnamespace) + QT_NAMESPACE="$VAL" + ;; + qtlibinfix) + QT_LIBINFIX="$VAL" + ;; + translationdir) + QT_INSTALL_TRANSLATIONS="$VAL" + ;; + sysconfdir|settingsdir) + QT_INSTALL_SETTINGS="$VAL" + ;; + examplesdir) + QT_INSTALL_EXAMPLES="$VAL" + ;; + testsdir) + QT_INSTALL_TESTS="$VAL" + ;; + qconfig) + CFG_QCONFIG="$VAL" + ;; + qreal) + CFG_QREAL="$VAL" + if [ "$CFG_QREAL" = "float" ]; then + CFG_QREAL_STRING="\"float\"" + elif [ "$CFG_QREAL" != "double" ]; then + if [ -z "$PERL" ]; then + echo "configure needs perl in \$PATH if the -qreal option is used with" >&2 + echo "a value different from \"float\"" >&2 + exit 1 + fi + CFG_QREAL_STRING=`perl -e '$_ = $ARGV[0]; + s/ +/ /g; s/^ +//; s/ +$//; + while (/(.)/g) { + $c = $1; + if ($c =~ /[a-zA-Z0-9]/) { $result .= $c; } + else { $result .= "_" . unpack("H*", $c); } + } + print "\"$result\"";' "$CFG_QREAL"` + fi + ;; + sanitize) + if [ "$VAL" = "address" ]; then + CFG_SANITIZE_ADDRESS=yes + elif [ "$VAL" = "thread" ]; then + CFG_SANITIZE_THREAD=yes + elif [ "$VAL" = "memory" ]; then + CFG_SANITIZE_MEMORY=yes + elif [ "$VAL" = "undefined" ]; then + CFG_SANITIZE_UNDEFINED=yes + else + echo "Unknown sanitizer: '$VAL'" + ERROR=true + fi + if [ "$CFG_SANITIZERS" = "none" ]; then + CFG_SANITIZERS=$VAL + else + CFG_SANITIZERS="$CFG_SANITIZERS $VAL" + fi + ;; + sysroot) + CFG_SYSROOT="$VAL" + ;; + gcc-sysroot) + CFG_GCC_SYSROOT="$VAL" + ;; + external-hostbindir) + CFG_HOST_QT_TOOLS_PATH="$VAL" + HostVar set HOST_QT_TOOLS "$VAL" + ;; + bindir) + QT_INSTALL_BINS="$VAL" + ;; + libexecdir) + QT_INSTALL_LIBEXECS="$VAL" + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + openvg) + if [ "$VAL" = "auto" ] || [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_OPENVG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + nomake) + if [ -n "${QT_ALL_BUILD_PARTS%%* $VAL *}" ]; then + echo "Unknown part $VAL passed to -nomake." >&2 + exit 1 + fi + CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS $VAL" + ;; + make) + if [ "$VAL" = "no" ]; then + UNKNOWN_OPT=yes + else + if [ -n "${QT_ALL_BUILD_PARTS%%* $VAL *}" ]; then + echo "Unknown part $VAL passed to -make." >&2 + exit 1 + fi + CFG_BUILD_PARTS="$CFG_BUILD_PARTS $VAL" + fi + ;; + skip) + VAL=qt${VAL#qt} + if ! [ -d $relpath/../$VAL ]; then + echo "Attempting to skip non-existent module $VAL." >&2 + exit 1 + fi + CFG_SKIP_MODULES="$CFG_SKIP_MODULES $VAL" + ;; + compile-examples) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_COMPILE_EXAMPLES="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sdk) + if [ "$BUILD_ON_MAC" = "yes" ]; then + DeviceVar set !host_build:QMAKE_MAC_SDK "$VAL" + OPT_MAC_SDK="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + arch|host-arch) + OPT_OBSOLETE_HOST_ARG=yes + ;; + harfbuzz) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_HARFBUZZ="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + + framework) + if [ "$BUILD_ON_MAC" = "yes" ]; then + CFG_FRAMEWORK="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + profile) + if [ "$VAL" = "yes" ]; then + CFG_PROFILE=yes + QMakeVar add QMAKE_CFLAGS -pg + QMakeVar add QMAKE_CXXFLAGS -pg + QMakeVar add QMAKE_LFLAGS -pg + QMAKE_VARS="$QMAKE_VARS CONFIG+=nostrip" + else + UNKNOWN_OPT=yes + fi + ;; + strip) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_STRIP=$VAL + else + UNKNOWN_OPT=yes + fi + ;; + testcocoon) + if [ "$VAL" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG testcocoon" + fi + ;; + gcov) + if [ "$VAL" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG gcov" + fi + ;; + platform) + PLATFORM="$VAL" + # keep compatibility with old platform names + case $PLATFORM in + aix-64) + PLATFORM=aix-xlc-64 + ;; + hpux-o64) + PLATFORM=hpux-acc-o64 + ;; + hpux-n64) + PLATFORM=hpux-acc-64 + ;; + hpux-acc-n64) + PLATFORM=hpux-acc-64 + ;; + irix-n32) + PLATFORM=irix-cc + ;; + irix-64) + PLATFORM=irix-cc-64 + ;; + irix-cc-n64) + PLATFORM=irix-cc-64 + ;; + reliant-64) + PLATFORM=reliant-cds-64 + ;; + solaris-64) + PLATFORM=solaris-cc-64 + ;; + openunix-cc) + PLATFORM=unixware-cc + ;; + openunix-g++) + PLATFORM=unixware-g++ + ;; + unixware7-cc) + PLATFORM=unixware-cc + ;; + unixware7-g++) + PLATFORM=unixware-g++ + ;; + esac + ;; + xplatform) + XPLATFORM="$VAL" + case `basename "$XPLATFORM"` in win32-g++*) + XPLATFORM_MINGW=yes + CFG_RPATH=no + CFG_REDUCE_EXPORTS=no + CFG_ICU=no + ;; + esac + ;; + device) + XPLATFORM=`resolveDeviceMkspec $VAL` + [ "$XPLATFORM" = "undefined" ] && exit 101 + ;; + device-option) + DEV_VAR=`echo $VAL | cut -d '=' -f 1` + DEV_VAL=`echo $VAL | cut -d '=' -f 2-` + DeviceVar set $DEV_VAR "$DEV_VAL" + ;; + host-option) + HOST_VAR=`echo $VAL | cut -d '=' -f 1` + HOST_VAL=`echo $VAL | cut -d '=' -f 2-` + HostVar set $HOST_VAR "$HOST_VAL" + ;; + qpa) + QT_QPA_DEFAULT_PLATFORM="$VAL" + ;; + debug-and-release) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DEBUG_RELEASE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + release) + if [ "$VAL" = "yes" ]; then + CFG_DEBUG=no + elif [ "$VAL" = "no" ]; then + CFG_DEBUG=yes + else + UNKNOWN_OPT=yes + fi + ;; + debug) + CFG_DEBUG="$VAL" + ;; + force-debug-info) + CFG_FORCEDEBUGINFO="$VAL" + ;; + optimized-qmake|optimized-tools) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_RELEASE_TOOLS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + developer-build) + CFG_DEV="yes" + ;; + commercial) + COMMERCIAL_USER="yes" + ;; + opensource) + COMMERCIAL_USER="no" + ;; + static) + if [ "$VAL" = "yes" ]; then + CFG_SHARED=no + elif [ "$VAL" = "no" ]; then + CFG_SHARED=yes + else + UNKNOWN_OPT=yes + fi + ;; + fatal_error) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_CONFIGURE_EXIT_ON_ERROR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + feature-*) + FEATURE=`echo $VAR | sed 's,^[^-]*-\([^-]*\),\1,' | tr 'abcdefghijklmnopqrstuvwxyz-' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if grep "^Feature: *${FEATURE} *\$" "$relpath"/src/corelib/global/qfeatures.txt >/dev/null 2>&1; then + if [ "$VAL" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_$FEATURE" + elif [ "$VAL" = "yes" ] || [ "$VAL" = "unknown" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_$FEATURE" + else + UNKNOWN_OPT=yes + fi + else + echo "ERROR: Unknown feature $FEATURE" + UNKNOWN_OPT=yes + fi + ;; + shared) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SHARED="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gif) + if [ "$VAL" = "no" ]; then + CFG_GIF="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sm) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SM="$VAL" + else + UNKNOWN_OPT=yes + fi + + ;; + xshape) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XSHAPE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xsync) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XSYNC="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xinput2) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XINPUT2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + egl) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EGL="$VAL" + CFG_EGL_X="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pch) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PRECOMPILE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + ltcg) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LTCG="$VAL" + else + UNKNOWN_OPT=no + fi + ;; + separate-debug-info) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SEPARATE_DEBUG_INFO="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + reduce-exports) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_REDUCE_EXPORTS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse2) + if [ "$VAL" = "no" ]; then + CFG_SSE2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse3) + if [ "$VAL" = "no" ]; then + CFG_SSE3="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + ssse3) + if [ "$VAL" = "no" ]; then + CFG_SSSE3="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse4.1) + if [ "$VAL" = "no" ]; then + CFG_SSE4_1="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sse4.2) + if [ "$VAL" = "no" ]; then + CFG_SSE4_2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + avx) + if [ "$VAL" = "no" ]; then + CFG_AVX="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + avx2) + if [ "$VAL" = "no" ]; then + CFG_AVX2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + avx512) + if [ "$VAL" = "no" ]; then + CFG_AVX512="" + else + UNKNOWN_OPT=yes + fi + ;; + mips_dsp) + if [ "$VAL" = "no" ]; then + CFG_MIPS_DSP="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + mips_dspr2) + if [ "$VAL" = "no" ]; then + CFG_MIPS_DSPR2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + reduce-relocations) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_REDUCE_RELOCATIONS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + use-gold-linker) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_USE_GOLD_LINKER="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + zlib) + [ "$VAL" = "qt" ] && VAL=yes + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_ZLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + # No longer supported: + #[ "$VAL" = "no" ] && CFG_LIBPNG=no + ;; + mtdev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_MTDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + journald) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_JOURNALD="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + syslog) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SYSLOG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sqlite) + if [ "$VAL" = "system" ]; then + CFG_SQLITE=system + else + UNKNOWN_OPT=yes + fi + ;; + libpng) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_LIBPNG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libjpeg) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_LIBJPEG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xcursor) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then + CFG_XCURSOR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xfixes) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then + CFG_XFIXES="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xrandr) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then + CFG_XRANDR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xrender) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XRENDER="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + mitshm) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_MITSHM="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + doubleconversion) + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_DOUBLECONVERSION="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + fontconfig) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_FONTCONFIG="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + freetype) + [ "$VAL" = "yes" ] && VAL=qt + if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then + CFG_FREETYPE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XKB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkbcommon-evdev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XKBCOMMON_EVDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkbcommon|xkbcommon-x11) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "qt" ] || [ "$VAL" = "system" ]; then + CFG_XKBCOMMON="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xcb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ] || [ "$VAL" = "qt" ]; then + CFG_XCB="$VAL" + if [ "$VAL" = "yes" ]; then + CFG_XCB="system" + fi + else + UNKNOWN_OPT=yes + fi + ;; + xcb-xlib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XCB_XLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + wayland) + CFG_OBSOLETE_WAYLAND=yes + ;; + eglfs) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EGLFS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + directfb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DIRECTFB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gbm) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GBM="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + linuxfb) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LINUXFB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + kms) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_KMS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + mirclient) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_MIRCLIENT="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libudev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LIBUDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libinput) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LIBINPUT="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + evdev) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_EVDEV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + tslib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_TSLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + cups) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_CUPS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + iconv) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ICONV="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + glib) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GLIB="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + slog2) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SLOG2="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + imf) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_QNX_IMF="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pps) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PPS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + lgmon) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LGMON="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pulseaudio) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_PULSEAUDIO="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + alsa) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ALSA="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gstreamer) + if [ "$VAL" = "auto" ] || [ "$VAL" = "yes" ] || + [ "$VAL" = "0.10" ] || [ "$VAL" = "1.0" ] || + [ "$VAL" = "no" ]; then + CFG_GSTREAMER="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gtk) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_GTK="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + gui) + if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ]; then + CFG_GUI="yes" + else + if [ "$VAL" = "no" ]; then + CFG_GUI="no" + else + UNKNOWN_OPT=yes + fi + fi + ;; + widgets) + if [ "$VAL" = "yes" ] || [ "$VAL" = "auto" ]; then + CFG_WIDGETS="yes" + elif [ "$VAL" = "no" ]; then + CFG_WIDGETS="no" + else + UNKNOWN_OPT=yes + fi + ;; + qpa-platform-guard) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + QPA_PLATFORM_GUARD="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + dbus) + if [ "$VAL" = "no" ] || [ "$VAL" = "linked" ] || [ "$VAL" = "runtime" ]; then + CFG_DBUS="$VAL" + elif [ "$VAL" = "yes" ]; then + # keep as auto, we'll auto-detect whether to go linked or runtime later + CFG_DBUS=auto + else + UNKNOWN_OPT=yes + fi + ;; + dbus-linked) + if [ "$VAL" = "yes" ]; then + CFG_DBUS="linked" + else + UNKNOWN_OPT=yes + fi + ;; + dbus-runtime) + if [ "$VAL" = "yes" ]; then + CFG_DBUS="runtime" + else + UNKNOWN_OPT=yes + fi + ;; + nis) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_NIS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + largefile) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LARGEFILE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + openssl) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_OPENSSL="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + openssl-linked) + if [ "$VAL" = "yes" ]; then + CFG_OPENSSL="linked" + else + UNKNOWN_OPT=yes + fi + ;; + securetransport) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SECURETRANSPORT="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + libproxy) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_LIBPROXY="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + qml-debug) + if [ "$VAL" = "yes" ]; then + CFG_QML_DEBUG="yes" + else + if [ "$VAL" = "no" ]; then + CFG_QML_DEBUG="no" + else + UNKNOWN_OPT=yes + fi + fi + ;; + confirm-license) + if [ "$VAL" = "yes" ]; then + OPT_CONFIRM_LICENSE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + h|help) + if [ "$VAL" = "yes" ]; then + OPT_HELP="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + sql-*|imageformat-*) + # if Qt style options were used, $VAL can be "no", "qt", or "plugin" + # if autoconf style options were used, $VAL can be "yes" or "no" + [ "$VAL" = "yes" ] && VAL=qt + # now $VAL should be "no", "qt", or "plugin"... double-check + if [ "$VAL" != "no" ] && [ "$VAL" != "qt" ] && [ "$VAL" != "plugin" ]; then + UNKNOWN_OPT=yes + fi + # now $VAL is "no", "qt", or "plugin" + OPT="$VAL" + VAL=`echo $VAR | sed 's,^[^-]*-\([^-]*\).*,\1,'` + VAR=`echo $VAR | sed 's,^\([^-]*\).*,\1,'` + + # Grab the available values + case "$VAR" in + sql) + avail="$CFG_SQL_AVAILABLE" + ;; + imageformat) + avail="$CFG_IMAGEFORMAT_PLUGIN_AVAILABLE" + if [ "$OPT" != "plugin" ]; then + # png is always built in + avail="$avail png" + fi + ;; + *) + avail="" + echo "BUG: Unhandled type $VAR used in $CURRENT_OPT" + ;; + esac + + # Check that that user's value is available. + found=no + for d in $avail; do + if [ "$VAL" = "$d" ]; then + found=yes + break + fi + done + if [ "$found" != "yes" ]; then + echo "$CURRENT_OPT: unknown argument" + ERROR=yes + continue + fi + + if [ "$VAR" = "sql" ]; then + # set the CFG_SQL_driver + eval "CFG_SQL_$VAL=\$OPT" + continue + elif [ "$VAR" = "imageformat" ]; then + [ "$OPT" = "qt" ] && OPT=yes + VAL="`echo $VAL |tr a-z A-Z`" + eval "CFG_$VAL=$OPT" + continue + fi + + if [ "$OPT" = "plugin" ] || [ "$OPT" = "qt" ]; then + if [ "$OPT" = "plugin" ]; then + VAR="${VAR}-${OPT}" + fi + QMakeVar add "${VAR}s" "${VAL}" + elif [ "$OPT" = "no" ]; then + PLUG_VAR="${VAR}-plugin" + IN_VAR="${VAR}" + QMakeVar del "${IN_VAR}s" "$VAL" + QMakeVar del "${PLUG_VAR}s" "$VAL" + fi + ;; + v|verbose) + if [ "$VAL" = "yes" ]; then + if [ "$OPT_VERBOSE" = "$VAL" ]; then # takes two verboses to turn on qmake debugs + QMAKE_SWITCHES="$QMAKE_SWITCHES -d" + else + OPT_VERBOSE=yes + fi + elif [ "$VAL" = "no" ]; then + if [ "$OPT_VERBOSE" = "$VAL" ] && echo "$QMAKE_SWITCHES" | grep ' -d' >/dev/null 2>&1; then + QMAKE_SWITCHES=`echo $QMAKE_SWITCHES | sed 's, -d,,'` + else + OPT_VERBOSE=no + fi + else + UNKNOWN_OPT=yes + fi + ;; + rpath) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_RPATH="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + add_define) + DEFINES="$DEFINES \"$VAL\"" + D_FLAGS="$D_FLAGS -D\"$VAL\"" + ;; + add_ipath) + INCLUDES="$INCLUDES \"$VAL\"" + I_FLAGS="$I_FLAGS -I\"${VAL}\"" + ;; + add_lpath) + L_FLAGS="$L_FLAGS -L\"${VAL}\"" + ;; + add_rpath) + RPATH_FLAGS="$RPATH_FLAGS \"${VAL}\"" + ;; + add_link) + L_FLAGS="$L_FLAGS -l\"${VAL}\"" + ;; + add_fpath) + if [ "$BUILD_ON_MAC" = "yes" ]; then + L_FLAGS="$L_FLAGS -F\"${VAL}\"" + I_FLAGS="$I_FLAGS -F\"${VAL}\"" + else + UNKNOWN_OPT=yes + fi + ;; + add_framework) + if [ "$BUILD_ON_MAC" = "yes" ]; then + L_FLAGS="$L_FLAGS -framework \"${VAL}\"" + else + UNKNOWN_OPT=yes + fi + ;; + add_warn) + W_FLAGS="$W_FLAGS \"${VAL}\"" + ;; + silent) + CFG_SILENT="$VAL" + ;; + audio-backend) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_AUDIO_BACKEND="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + icu) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ICU="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + force-asserts) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_FORCE_ASSERTS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + pcre) + if [ "$VAL" = "qt" ] || [ "$VAL" = "system" ]; then + CFG_PCRE="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + c++std) + case "$VAL" in + c++11|c++14|c++1z|auto) + CFG_STDCXX="$VAL" + ;; + 11|14|1z) + CFG_STDCXX="c++$VAL" + ;; + 1y|c++1y) + CFG_STDCXX="c++14" + ;; + *) + echo >&2 "Invalid C++ edition: $VAL; valid options are: c++11 c++14 c++1z auto" + ERROR=yes + ;; + esac + ;; + system-proxies) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_SYSTEM_PROXIES="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + directwrite) + if [ "$XPLATFORM_MINGW" = "yes" ] ; then + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_DIRECTWRITE="$VAL" + else + UNKNOWN_OPT=yes + fi + else + UNKNOWN_OPT=yes + fi + ;; + warnings-are-errors|Werror) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_WERROR="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + headersclean) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_HEADERSCLEAN="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + xkb-config-root) + CFG_XKB_CONFIG_ROOT="$VAL" + ;; + android-sdk) + CFG_DEFAULT_ANDROID_SDK_ROOT="$VAL" + ;; + android-ndk) + CFG_DEFAULT_ANDROID_NDK_ROOT="$VAL" + ;; + android-ndk-platform) + CFG_DEFAULT_ANDROID_PLATFORM="$VAL" + ;; + android-ndk-host) + CFG_DEFAULT_ANDROID_NDK_HOST="$VAL" + ;; + android-arch) + CFG_DEFAULT_ANDROID_TARGET_ARCH="$VAL" + ;; + android-toolchain-version) + CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION="$VAL" + ;; + android-style-assets) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_ANDROID_STYLE_ASSETS="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; + l*) # -lfoo + if [ "$VAL" = "yes" ]; then + L_FLAGS="$L_FLAGS -l\"${VAR#l}\"" + else + UNKNOWN_OPT=yes + fi + ;; + fw*) # -fwfoo + if [ "$VAL" = "yes" ]; then + if [ "$BUILD_ON_MAC" = "yes" ]; then + L_FLAGS="$L_FLAGS -framework \"${VAR#fw}\"" + else + UNKNOWN_OPT=yes + fi + else + UNKNOWN_OPT=yes + fi + ;; + *) + UNKNOWN_OPT=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 +#------------------------------------------------------------------------------- + +if [ "$OPT_HELP" = "yes" ]; then + cat < ...... The deployment directory, as seen on the target device. + (default /usr/local/Qt-${QT_VERSION}, \$PWD if -developer-build is active) + + -extprefix ... The installation directory, as seen on the host machine. + (default SYSROOT/PREFIX) + + -hostprefix [dir] .. The installation directory for build tools running on the + host machine. If [dir] is not given, the current build + directory will be used. (default EXTPREFIX) + + You may use these to change the layout of the install. Note that all directories + except -sysconfdir should be located under -prefix/-hostprefix: + + -bindir ......... User executables will be installed to + (default PREFIX/bin) + -headerdir ...... Headers will be installed to + (default PREFIX/include) + -libdir ......... Libraries will be installed to + (default PREFIX/lib) + -archdatadir .... Arch-dependent data used by Qt will be installed to + (default PREFIX) + -plugindir ...... Plugins will be installed to + (default ARCHDATADIR/plugins) + -libexecdir ..... Program executables will be installed to + (default ARCHDATADIR/libexec, ARCHDATADIR/bin for MinGW) + -importdir ...... Imports for QML1 will be installed to + (default ARCHDATADIR/imports) + -qmldir ......... Imports for QML2 will be installed to + (default ARCHDATADIR/qml) + -datadir ........ Arch-independent data used by Qt will be installed to + (default PREFIX) + -docdir ......... Documentation will be installed to + (default DATADIR/doc) + -translationdir . Translations of Qt programs will be installed to + (default DATADIR/translations) + -sysconfdir ..... Settings used by Qt programs will be looked for in + (default PREFIX/etc/xdg) + -examplesdir .... Examples will be installed to + (default PREFIX/examples) + -testsdir ....... Tests will be installed to + (default PREFIX/tests) + + -hostbindir .. Host executables will be installed to + (default HOSTPREFIX/bin) + -hostlibdir .. Host libraries will be installed to + (default HOSTPREFIX/lib) + -hostdatadir . Data used by qmake will be installed to + (default HOSTPREFIX) + +Configure options: + + The defaults (*) are usually acceptable. A plus (+) denotes a default value + that needs to be evaluated. If the evaluation succeeds, the feature is + included. Here is a short explanation of each option: + + * -release ........... Compile and link Qt with debugging turned off. + -debug ............. Compile and link Qt with debugging turned on. + -debug-and-release . Compile and link two versions of Qt, with and without + debugging turned on (Mac only). + + -force-debug-info .. Create symbol files for release builds. + + -developer-build ... Compile and link Qt with Qt developer options (including auto-tests exporting) + + * -no-optimized-tools ... Do not build optimized host tools even in debug build. + -optimized-tools ...... Build optimized host tools even in debug build. + + -opensource ........ Compile and link the Open-Source Edition of Qt. + -commercial ........ Compile and link the Commercial Edition of Qt. + + -confirm-license ... Automatically acknowledge the license (use with + either -opensource or -commercial) + + -c++std .. Compile Qt with C++ standard edition (c++11, c++14, c++1z) + Default: highest supported + + * -shared ............ Create and use shared Qt libraries. + -static ............ Create and use static Qt libraries. + + -no-largefile ...... Disables large file support. + + -largefile ......... Enables Qt to access files larger than 4 GB. + + -no-accessibility .. Do not compile Accessibility support. + Disabling accessibility is not recommended, as it will break QStyle + and may break other internal parts of Qt. + With this switch you create a source incompatible version of Qt, + which is unsupported. + + -accessibility ..... Compile Accessibility support. + + -no-sql- ... Disable SQL entirely. + -qt-sql- ... Enable a SQL in the Qt SQL module, by default + none are turned on. + -plugin-sql- Enable SQL as a plugin to be linked to + at run time. + + Possible values for : + [$CFG_SQL_AVAILABLE ] + + -system-sqlite ..... Use sqlite from the operating system. + + -no-qml-debug ...... Do not build the in-process QML debugging support. + + -qml-debug ......... Build the QML debugging support. + + -platform target ... The operating system and compiler you are building + on (default detected from host system). + + See the README file for a list of supported + operating systems and compilers. + + -no-sse2 ........... Do not compile with use of SSE2 instructions. + -no-sse3 ........... Do not compile with use of SSE3 instructions. + -no-ssse3 .......... Do not compile with use of SSSE3 instructions. + -no-sse4.1 ......... Do not compile with use of SSE4.1 instructions. + -no-sse4.2 ......... Do not compile with use of SSE4.2 instructions. + -no-avx ............ Do not compile with use of AVX instructions. + -no-avx2 ........... Do not compile with use of AVX2 instructions. + -no-avx512 ......... Do not compile with use of AVX512 instructions. + -no-mips_dsp ....... Do not compile with use of MIPS DSP instructions. + -no-mips_dspr2 ..... Do not compile with use of MIPS DSP rev2 instructions. + + -qtnamespace Wraps all Qt library code in 'namespace {...}'. + -qtlibinfix Renames all libQt*.so to libQt*.so. + + -testcocoon ........ Instrument Qt with the TestCocoon code coverage tool. + -gcov .............. Instrument Qt with the GCov code coverage tool. + + -D ........ Add an explicit define to the preprocessor. + -I ........ Add an explicit include path. + -L ........ Add an explicit library path. + + + -pkg-config ........ Use pkg-config to detect include and library paths. By default, + configure determines whether to use pkg-config or not with + some heuristics such as checking the environment variables. + -no-pkg-config ..... Disable use of pkg-config. + -force-pkg-config .. Force usage of pkg-config (skips pkg-config usability + detection heuristic). + + -help, -h .......... Display this information. + +Third Party Libraries: + + -qt-zlib ............ Use the zlib bundled with Qt. + + -system-zlib ........ Use zlib from the operating system. + See http://www.gzip.org/zlib + + -no-mtdev ........... Do not compile mtdev support. + + -mtdev .............. Enable mtdev support. + + + -no-journald ........ Do not send logging output to journald. + -journald ........... Send logging output to journald. + + + -no-syslog .......... Do not send logging output to syslog. + -syslog ............. Send logging output to syslog. + + -no-gif ............. Do not compile GIF reading support. + + -no-libpng .......... Do not compile PNG support. + -qt-libpng .......... Use the libpng bundled with Qt. + + -system-libpng ...... Use libpng from the operating system. + See http://www.libpng.org/pub/png + + -no-libjpeg ......... Do not compile JPEG support. + -qt-libjpeg ......... Use the libjpeg bundled with Qt. + + -system-libjpeg ..... Use libjpeg from the operating system. + See http://www.ijg.org + + -no-doubleconversion ..... Use sscanf_l and snprintf_l for (imprecise) double conversion. + -qt-doubleconversion ..... Use the libdouble-conversion bundled with Qt. + + -system-doubleconversion . Use the libdouble-conversion provided by the system. + See https://github.com/google/double-conversion + + -no-freetype ........ Do not compile in Freetype2 support. + -qt-freetype ........ Use the libfreetype bundled with Qt. + + -system-freetype..... Use the libfreetype provided by the system (enabled if -fontconfig is active). + See http://www.freetype.org + + -no-harfbuzz ........ Do not compile HarfBuzz-NG support. + -qt-harfbuzz ........ Use HarfBuzz-NG bundled with Qt to do text shaping. + It can still be disabled by setting + the QT_HARFBUZZ environment variable to "old". + + -system-harfbuzz .... Use HarfBuzz-NG from the operating system + to do text shaping. It can still be disabled + by setting the QT_HARFBUZZ environment variable to "old". + See http://www.harfbuzz.org + + -no-openssl ......... Do not compile support for OpenSSL. + + -openssl ............ Enable run-time OpenSSL support. + -openssl-linked ..... Enabled linked OpenSSL support. + + -no-libproxy ....... Do not compile support for libproxy + + -libproxy .......... Use libproxy from the operating system. + + -qt-pcre ............ Use the PCRE library bundled with Qt. + + -system-pcre ........ Use the PCRE library from the operating system. + + -qt-xcb ............. Use xcb- libraries bundled with Qt. + (libxcb.so will still be used from operating system). + + -system-xcb ......... Use xcb- libraries from the operating system. + + -xkb-config-root .... Set default XKB config root. This option is used only together with -qt-xkbcommon-x11. + -qt-xkbcommon-x11 ... Use the xkbcommon library bundled with Qt in combination with xcb. + + -system-xkbcommon-x11 Use the xkbcommon library from the operating system in combination with xcb. + + -no-xkbcommon-evdev . Do not use X-less xkbcommon when compiling libinput support. + * -xkbcommon-evdev .... Use X-less xkbcommon when compiling libinput support. + + -no-xinput2 ......... Do not compile XInput2 support. + * -xinput2 ............ Compile XInput2 support. + + -no-xcb-xlib......... Do not compile Xcb-Xlib support. + * -xcb-xlib............ Compile Xcb-Xlib support. + + -no-glib ............ Do not compile Glib support. + + -glib ............... Compile Glib support. + + -no-pulseaudio ...... Do not compile PulseAudio support. + + -pulseaudio ......... Compile PulseAudio support. + + -no-alsa ............ Do not compile ALSA support. + + -alsa ............... Compile ALSA support. + + -no-gtk ............. Do not compile GTK platform theme support. + + -gtk ................ Compile GTK platform theme support. + +Additional options: + + -make ....... Add part to the list of parts to be built at make time. + (defaults to: $QT_DEFAULT_BUILD_PARTS) + -nomake ..... Exclude part from the list of parts to be built. + + -skip ..... Exclude an entire module from the build. + + -no-compile-examples ... Install only the sources of examples. + + -no-gui ............ Don't build the Qt GUI module and dependencies. + + -gui ............... Build the Qt GUI module and dependencies. + + -no-widgets ........ Don't build the Qt Widgets module and dependencies. + + -widgets ........... Build the Qt Widgets module and dependencies. + + -R ........ Add an explicit runtime library path to the Qt + libraries. + -l ........ Add an explicit library. + + -no-rpath .......... Do not use the library install path as a runtime + library path. On Apple platforms, this implies using + absolute install names (based in -libdir) for dynamic + libraries and frameworks. + + -rpath ............. Link Qt libraries and executables using the library + install path as a runtime library path. Equivalent + to -R install_libpath + + -continue .......... Continue as far as possible if an error occurs. + + -verbose, -v ....... Print verbose information about each step of the + configure process. + + -silent ............ Reduce the build output so that warnings and errors + can be seen more easily. + + -no-nis ............ Do not compile NIS support. + * -nis ............... Compile NIS support. + + -no-cups ........... Do not compile CUPS support. + * -cups .............. Compile CUPS support. + Requires cups/cups.h and libcups.so.2. + + -no-iconv .......... Do not compile support for iconv(3). + * -iconv ............. Compile support for iconv(3). + + -no-evdev .......... Do not compile support for evdev. + * -evdev ............. Compile support for evdev. + + -no-tslib .......... Do not compile support for tslib. + * -tslib ............. Compile support for tslib. + + -no-icu ............ Do not compile support for ICU libraries. + + -icu ............... Compile support for ICU libraries. + + -no-fontconfig ..... Do not compile FontConfig support. + + -fontconfig ........ Compile FontConfig support. + + -no-strip .......... Do not strip binaries and libraries of unneeded symbols. + * -strip ............. Strip binaries and libraries of unneeded symbols when installing. + + * -no-pch ............ Do not use precompiled header support. + -pch ............... Use precompiled header support. + + * -no-ltcg Do not use Link Time Code Generation + -ltcg Use Link Time Code Generation. + + -no-dbus ........... Do not compile the Qt D-Bus module. + + -dbus-linked ....... Compile the Qt D-Bus module and link to libdbus-1. + -dbus-runtime ...... Compile the Qt D-Bus module and dynamically load libdbus-1. + + -reduce-relocations ..... Reduce relocations in the libraries through extra + linker optimizations (Qt/X11 and Qt for Embedded Linux only; + experimental; needs GNU ld >= 2.18). + + -no-use-gold-linker ..... Do not link using the GNU gold linker. + + -use-gold-linker ........ Link using the GNU gold linker if available. + + -force-asserts ........ Force Q_ASSERT to be enabled even in release builds. + + -sanitize [address|thread|memory|undefined] Enables the specified compiler sanitizer. + + -device ............... Cross-compile for device (experimental) + -device-option ... Add device specific options for the device mkspec + (experimental) + + -host-option ..... Add host specific options for the host mkspec + + * -no-separate-debug-info . Do not store debug information in a separate file. + -separate-debug-info .... Strip debug information into a separate file. + + -no-xcb ............ Do not compile Xcb (X protocol C-language Binding) support. + * -xcb ............... Compile Xcb support. + + -no-eglfs .......... Do not compile EGLFS (EGL Full Screen/Single Surface) support. + * -eglfs ............. Compile EGLFS support. + + -no-kms ............ Do not compile backends for KMS. + * -kms ............... Compile backends for KMS. + + -no-gbm ............ Do not compile backends for GBM. + * -gbm ............... Compile backends for GBM. + + * -no-directfb ....... Do not compile DirectFB support. + -directfb .......... Compile DirectFB support. + + -no-linuxfb ........ Do not compile Linux Framebuffer support. + * -linuxfb ........... Compile Linux Framebuffer support. + + * -no-mirclient....... Do not compile Mir client support. + -mirclient.......... Compile Mir client support. + + -qpa ......... Sets the default QPA platform (e.g xcb, cocoa, windows). + + -xplatform target ... The target platform when cross-compiling. + + -sysroot ...... Sets as the target compiler's and qmake's sysroot and also sets pkg-config paths. + -no-gcc-sysroot ..... When using -sysroot, it disables the passing of --sysroot to the compiler + + -external-hostbindir .. Path to Qt tools built for this machine. Use this when -platform + does not match the current system, i.e., to make a Canadian Cross Build. + + -no-feature- Do not compile in . + -feature- .. Compile in . The available features + are described in src/corelib/global/qfeatures.txt + + -qconfig local ...... Use src/corelib/global/qconfig-local.h rather than the + default ($CFG_QCONFIG). + + -qreal [double|float] typedef qreal to the specified type. The default is double. + Note that changing this flag affects binary compatibility. + + -no-opengl .......... Do not support OpenGL. + -opengl ....... Enable OpenGL support + With no parameter, this will attempt to auto-detect + OpenGL ES 2.0 and higher, or regular desktop OpenGL. + Use es2 for to override auto-detection. + + -no-libinput ........ Do not support libinput. + * -libinput ........... Enable libinput support. + + -no-gstreamer ....... Do not support GStreamer. + + -gstreamer Enable GStreamer support + With no parameter, this will attempt to auto-detect GStreamer 0.10 and + 1.0. GStreamer 1.0 is used by default when available. + Use 0.10 or 1.0 for to override auto-detection. + + * -no-system-proxies .. Do not use system network proxies by default. + -system-proxies ..... Use system network proxies by default. + + -no-warnings-are-errors Make warnings be treated normally + -warnings-are-errors Make warnings be treated as errors + (enabled if -developer-build is active) + +QNX options: + + -no-slog2 .......... Do not compile with slog2 support. + -slog2 ............. Compile with slog2 support. + + -no-pps ............ Do not compile with pps support. + -pps ............... Compile with pps support. + + -no-imf ............ Do not compile with imf support. + -imf ............... Compile with imf support. + + -no-lgmon .......... Do not compile with lgmon support. + -lgmon ............. Compile with lgmon support. + +MacOS/iOS options: + + -Fstring ........... Add an explicit framework path. + -fw string ......... Add an explicit framework. + + * -framework ......... Build Qt as a series of frameworks and + link tools against those frameworks. + -no-framework ...... Do not build Qt as a series of frameworks. + + * -securetransport ... Use SecureTransport instead of OpenSSL + + -no-securetransport Do not use SecureTransport, either use OpenSSL or do not use any SSL backend + at all (if combined with -no-openssl). + + -sdk ......... Build Qt using Apple provided SDK . The argument should be + one of the available SDKs as listed by 'xcodebuild -showsdks'. + Note that the argument applies only to Qt libraries and applications built + using the target mkspec - not host tools such as qmake, moc, rcc, etc. + +Android options: + + -android-sdk path .............. The Android SDK root path. + (default \$ANDROID_SDK_ROOT) + + -android-ndk path .............. The Android NDK root path. + (default \$ANDROID_NDK_ROOT) + + -android-ndk-platform .......... Sets the android platform + (default $CFG_DEFAULT_ANDROID_PLATFORM) + + -android-ndk-host .............. Sets the android NDK host (linux-x86, linux-x86_64, etc.) + (default \$ANDROID_NDK_HOST) + + -android-arch .................. Sets the android architecture (armeabi, armeabi-v7a, x86, mips, + arm64-v8a, x86_64, mips64) + (default $CFG_DEFAULT_ANDROID_TARGET_ARCH) + + -android-toolchain-version ..... Sets the android toolchain version + (default $CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION) + + -no-android-style-assets ....... Do not compile in the code which automatically extracts + style assets from the run-time device. Setting this will + make the Android style behave incorrectly, but will enable + compatibility with the LGPL2.1 license. + * -android-style-assets .......... Compile the code which automatically extracts style assets + from the run-time device. This option will make the + Android platform plugin incompatible with the LGPL2.1. +EOF + + exit 0 +fi # Help + +#------------------------------------------------------------------------------- +# platform detection +#------------------------------------------------------------------------------- + +if [ -z "$PLATFORM" ]; then + PLATFORM_NOTES= + case "$UNAME_SYSTEM:$UNAME_RELEASE" in + Darwin:*) + # Select compiler. Use g++ unless we find a usable Clang version. Note that + # we are checking the "Apple" clang/LLVM version number, not the actual + # clang/LLVM version number that the Apple version was based on. We look + # for Apple clang version 3.0 or higher, which was branched off LLVM 3.0 + # from SVN, and first included in Xcode 4.2. Also note that we do not care + # about the OS version, since we're not using the clang version that comes + # with the system. We use 'xcrun' to check the clang version that's part of + # the Xcode installation. + XCRUN=`/usr/bin/xcrun -sdk macosx clang -v 2>&1` + CLANGVERSION=`echo "$XCRUN" | sed -n 's/.*version \([0-9]\).*/\1/p'` + expr "$CLANGVERSION" : '[0-9]' > /dev/null || { echo "Unable to determine CLANG version from output of xcrun: $XCRUN" ; exit 2 ; } + if [ "$CLANGVERSION" -ge 3 ]; then + PLATFORM=macx-clang + + # Advertise g++ as an alternative on Lion and below + if [ "$(uname -r | cut -d. -f1)" -le 11 ]; then + PLATFORM_NOTES="\n - Also available for Mac OS X: macx-g++\n" + fi + else + PLATFORM=macx-g++ + fi + ;; + AIX:*) + #PLATFORM=aix-g++ + #PLATFORM=aix-g++-64 + PLATFORM=aix-xlc + #PLATFORM=aix-xlc-64 + PLATFORM_NOTES=" + - Also available for AIX: aix-g++ aix-g++-64 aix-xlc-64 + " + ;; + GNU:*) + PLATFORM=hurd-g++ + ;; + dgux:*) + PLATFORM=dgux-g++ + ;; +# DYNIX/ptx:4*) +# PLATFORM=dynix-g++ +# ;; + ULTRIX:*) + PLATFORM=ultrix-g++ + ;; + FreeBSD:*) + PLATFORM=freebsd-clang + PLATFORM_NOTES=" + - Also available for FreeBSD: freebsd-icc + " + ;; + OpenBSD:*) + PLATFORM=openbsd-g++ + ;; + NetBSD:*) + PLATFORM=netbsd-g++ + ;; + BSD/OS:*|BSD/386:*) + PLATFORM=bsdi-g++ + ;; + IRIX*:*) + #PLATFORM=irix-g++ + PLATFORM=irix-cc + #PLATFORM=irix-cc-64 + PLATFORM_NOTES=" + - Also available for IRIX: irix-g++ irix-cc-64 + " + ;; + HP-UX:*) + case "$UNAME_MACHINE" in + ia64) + #PLATFORM=hpuxi-acc-32 + PLATFORM=hpuxi-acc-64 + PLATFORM_NOTES=" + - Also available for HP-UXi: hpuxi-acc-32 + " + ;; + *) + #PLATFORM=hpux-g++ + PLATFORM=hpux-acc + #PLATFORM=hpux-acc-64 + #PLATFORM=hpux-cc + #PLATFORM=hpux-acc-o64 + PLATFORM_NOTES=" + - Also available for HP-UX: hpux-g++ hpux-acc-64 hpux-acc-o64 + " + ;; + esac + ;; + OSF1:*) + #PLATFORM=tru64-g++ + PLATFORM=tru64-cxx + PLATFORM_NOTES=" + - Also available for Tru64: tru64-g++ + " + ;; + Linux:*) + PLATFORM=linux-g++ + PLATFORM_NOTES=" + - Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx + " + ;; + SunOS:5*) + if [ "$XPLATFORM_MINGW" = "yes" ]; then + PLATFORM="solaris-g++" + else + #PLATFORM=solaris-g++ + PLATFORM=solaris-cc + #PLATFORM=solaris-cc64 + fi + PLATFORM_NOTES=" + - Also available for Solaris: solaris-g++ solaris-cc-64 + " + ;; + ReliantUNIX-*:*|SINIX-*:*) + PLATFORM=reliant-cds + #PLATFORM=reliant-cds-64 + PLATFORM_NOTES=" + - Also available for Reliant UNIX: reliant-cds-64 + " + ;; + CYGWIN*:*) + PLATFORM=cygwin-g++ + ;; + LynxOS*:*) + PLATFORM=lynxos-g++ + ;; + OpenUNIX:*) + #PLATFORM=unixware-g++ + PLATFORM=unixware-cc + PLATFORM_NOTES=" + - Also available for OpenUNIX: unixware-g++ + " + ;; + UnixWare:*) + #PLATFORM=unixware-g++ + PLATFORM=unixware-cc + PLATFORM_NOTES=" + - Also available for UnixWare: unixware-g++ + " + ;; + SCO_SV:*) + #PLATFORM=sco-g++ + PLATFORM=sco-cc + PLATFORM_NOTES=" + - Also available for SCO OpenServer: sco-g++ + " + ;; + UNIX_SV:*) + PLATFORM=unixware-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 + +[ -z "$XPLATFORM" ] && XPLATFORM="$PLATFORM" + +case "$XPLATFORM" in + *win32-g++*) + XPLATFORM_MINGW=yes + ;; + *qnx-*) + XPLATFORM_QNX=yes + ;; + *haiku-*) + XPLATFORM_HAIKU=yes + ;; + *ios*) + XPLATFORM_MAC=yes + XPLATFORM_IOS=yes + ;; + *macx*) + XPLATFORM_MAC=yes + ;; + *integrity*) + XPLATFORM_INTEGRITY=yes + ;; + # XPLATFORM_ANDROID should not be set for unsupported/android-g++ + *unsupported*) + ;; + *android-g++*) + XPLATFORM_ANDROID=yes + ;; +esac + +#------------------------------------------------------------------------------- +# check the license +#------------------------------------------------------------------------------- + +if [ "$COMMERCIAL_USER" = "ask" ]; then + while true; do + echo "Which edition of Qt do you want to use ?" + echo + echo "Type 'c' if you want to use the Commercial Edition." + echo "Type 'o' if you want to use the Open Source Edition." + echo + read commercial + echo + if [ "$commercial" = "c" ]; then + COMMERCIAL_USER="yes" + break + elif [ "$commercial" = "o" ]; then + COMMERCIAL_USER="no" + break + fi + done +fi + +if [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes" ]; then + # Commercial preview release + Licensee="Preview" + Edition="Preview" + EditionString="Technology Preview" +elif [ $COMMERCIAL_USER = "yes" ]; then + if [ $UNAME_SYSTEM = "Linux" ]; then + case "$PLATFORM" in + *-32) + Licheck=licheck32 + ;; + *-64) + Licheck=licheck64 + ;; + *) + if file -L /bin/sh | grep -q "64-bit" ; then + Licheck=licheck64 + else + Licheck=licheck32 + fi + ;; + esac + elif [ $UNAME_SYSTEM = "Darwin" ]; then + Licheck=licheck_mac + else + echo >&2 "Host operating system not supported by this edition of Qt." + exit 1 + fi + if [ -x "$relpath/bin/$Licheck" ]; then + LicheckOutput=`$relpath/bin/$Licheck $OPT_CONFIRM_LICENSE $relpath $outpath\ + $PLATFORM $XPLATFORM` + if [ $? -ne 0 ]; then + exit 1 + else + eval "$LicheckOutput" + fi + else + echo + echo "Error: This is the Open Source version of Qt." + echo "If you want to use Enterprise features of Qt," + echo "use the contact form at http://www.qt.io/contact-us" + echo "to purchase a license." + echo + exit 1 + fi +elif [ $COMMERCIAL_USER = "no" ]; then + # Open Source edition - may only be used under the terms of the LGPLv3 or GPLv2. + Licensee="Open Source" + Edition="OpenSource" + EditionString="Open Source" +fi + +if [ "$Edition" = "OpenSource" ] || [ "$Edition" = "Preview" ]; then + echo + echo "This is the Qt ${EditionString} Edition." + echo +fi + +if [ "$Edition" = "OpenSource" ]; then + while true; do + if [ "$CFG_ANDROID_STYLE_ASSETS" = "no" ] || [ "$XPLATFORM_ANDROID" = "no" ]; then + echo "You are licensed to use this software under the terms of" + echo "the GNU Lesser General Public License (LGPL) versions 3." + echo "You are also licensed to use this software under the terms of" + echo "the GNU General Public License (GPL) versions 2." + affix="either" + showGPL2="yes" + else + echo "You are licensed to use this software under the terms of" + echo "the GNU Lesser General Public License (LGPL) versions 3." + showGPL2="no" + affix="the" + fi + + echo + if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then + echo "You have already accepted the terms of the $EditionString license." + acceptance=yes + else + if [ -f "$relpath/LICENSE.LGPL3" ]; then + echo "Type 'L' to view the GNU Lesser General Public License version 3." + fi + if [ "$showGPL2" = "yes" ]; then + echo "Type 'G' to view the GNU General Public License version 2." + fi + echo "Type 'yes' to accept this license offer." + echo "Type 'no' to decline this license offer." + echo + echo $ECHO_N "Do you accept the terms of $affix license? $ECHO_C" + read acceptance + fi + echo + if [ "$acceptance" = "yes" ] || [ "$acceptance" = "y" ]; then + break + elif [ "$acceptance" = "no" ]; then + echo "You are not licensed to use this software." + echo + exit 1 + elif [ "$acceptance" = "L" ]; then + more "$relpath/LICENSE.LGPL3" + elif [ "$acceptance" = "G" ] && [ "$showGPL2" = "yes" ]; then + more "$relpath/LICENSE.GPL2" + fi + done +elif [ "$Edition" = "Preview" ]; then + TheLicense=`head -n 1 "$relpath/LICENSE.PREVIEW.COMMERCIAL"` + while true; do + + if [ "$OPT_CONFIRM_LICENSE" = "yes" ]; then + echo "You have already accepted the terms of the $EditionString license." + acceptance=yes + else + echo "You are licensed to use this software under the terms of" + echo "the $TheLicense" + echo + echo "Type '?' to read the Preview License." + echo "Type 'yes' to accept this license offer." + echo "Type 'no' to decline this license offer." + echo + echo $ECHO_N "Do you accept the terms of the license? $ECHO_C" + read acceptance + fi + echo + if [ "$acceptance" = "yes" ]; then + break + elif [ "$acceptance" = "no" ] ;then + echo "You are not licensed to use this software." + echo + exit 0 + elif [ "$acceptance" = "?" ]; then + more "$relpath/LICENSE.PREVIEW.COMMERCIAL" + fi + done +fi + +#------------------------------------------------------------------------------- +# command line and environment validation +#------------------------------------------------------------------------------- + +# update QT_CONFIG to show our current predefined configuration +CFG_QCONFIG_PATH=$relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h +case "$CFG_QCONFIG" in +minimal|small|medium|large|full) + # these are a sequence of increasing functionality + for c in minimal small medium large full; do + QT_CONFIG="$QT_CONFIG $c-config" + [ "$CFG_QCONFIG" = $c ] && break + done + [ "$CFG_QCONFIG" = full ] && CFG_QCONFIG_PATH= + ;; +*) + # not known to be sufficient for anything + if [ ! -f "$CFG_QCONFIG_PATH" ]; then + CFG_QCONFIG_PATH=`makeabs "${CFG_QCONFIG}"` + if [ ! -f "$CFG_QCONFIG_PATH" ]; then + echo >&2 "Error: configuration file not found:" + echo >&2 " $relpath/src/corelib/global/qconfig-${CFG_QCONFIG}.h" + echo >&2 " or" + echo >&2 " $CFG_QCONFIG_PATH" + exit 1 + fi + fi +esac + +if [ "$XPLATFORM_MAC" = "no" -a "$CFG_DEBUG_RELEASE" = "yes" ]; then + echo + echo "WARNING: -debug-and-release is not supported outside of Mac OS X." + echo "Qt can be built in release mode with separate debug information, so" + echo "-debug-and-release is not necessary anymore" + echo +fi + +if ( [ "$CFG_XCB" = "system" ] || [ "$CFG_XCB" = "qt" ] ) && [ "$CFG_XKBCOMMON" = "no" ]; then + echo "Error: -no-xkbcommon-x11 is not supported on XCB platform plugin." + exit 101 +fi + +if [ "$XPLATFORM_ANDROID" = "yes" ]; then + if [ "$CFG_DBUS" = "auto" ]; then + CFG_DBUS="no" + fi + if [ -z "$CFG_DEFAULT_ANDROID_NDK_HOST" ]; then + case $PLATFORM in + linux-*) + if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86 + elif [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/linux-x86_64" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=linux-x86_64 + fi + ;; + macx-*) + CFG_DEFAULT_ANDROID_NDK_HOST=darwin-x86 + if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/darwin-x86_64" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=darwin-x86_64 + fi + ;; + win32-*) + CFG_DEFAULT_ANDROID_NDK_HOST=windows + if [ -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/windows-x86_64" ]; then + CFG_DEFAULT_ANDROID_NDK_HOST=windows-x86_64 + fi + ;; + esac + fi + + if [ -z "$CFG_DEFAULT_ANDROID_NDK_ROOT" ]; then + echo + echo "Can not find Android NDK. Please use -android-ndk option to specify one" + exit 1 + fi + if [ -z "$CFG_DEFAULT_ANDROID_SDK_ROOT" ]; then + echo + echo "Can not find Android SDK. Please use -android-sdk option to specify one" + exit 1 + fi + if [ -z "CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION" ] || [ ! -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt" ]; then + echo + echo "Can not detect Android NDK toolchain. Please use -android-toolchain-version to specify" + exit 1 + fi + if [ -z "$CFG_DEFAULT_ANDROID_NDK_HOST" ] || [ ! -d "$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST" ]; then + echo + echo "Can not detect the android host. Please use -android-ndk-host option to specify one" + exit 1 + fi + + QT_QPA_DEFAULT_PLATFORM="android" + CFG_LARGEFILE="no" + + DeviceVar set DEFAULT_ANDROID_SDK_ROOT "$CFG_DEFAULT_ANDROID_SDK_ROOT" + DeviceVar set DEFAULT_ANDROID_NDK_ROOT "$CFG_DEFAULT_ANDROID_NDK_ROOT" + DeviceVar set DEFAULT_ANDROID_PLATFORM "$CFG_DEFAULT_ANDROID_PLATFORM" + DeviceVar set DEFAULT_ANDROID_NDK_HOST "$CFG_DEFAULT_ANDROID_NDK_HOST" + DeviceVar set DEFAULT_ANDROID_TARGET_ARCH "$CFG_DEFAULT_ANDROID_TARGET_ARCH" + DeviceVar set DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION "$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION" +fi + +if [ -d "$PLATFORM" ]; then + QMAKESPEC="$PLATFORM" +else + QMAKESPEC="$relpath/mkspecs/${PLATFORM}" +fi +if [ -d "$XPLATFORM" ]; then + XQMAKESPEC="$XPLATFORM" +else + XQMAKESPEC="$relpath/mkspecs/${XPLATFORM}" +fi +if [ "$PLATFORM" != "$XPLATFORM" ]; then + QT_CROSS_COMPILE=yes + QMAKE_CONFIG="$QMAKE_CONFIG cross_compile" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG cross_compile" +fi + +if [ "$BUILD_ON_MAC" = "yes" ]; then + if [ `basename $QMAKESPEC` = "macx-xcode" ] || [ `basename $XQMAKESPEC` = "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 +if [ '!' -d "$XQMAKESPEC" ]; then + echo + echo " The specified system/compiler is not supported:" + echo + echo " $XQMAKESPEC" + echo + echo " Please see the README file for a complete list." + echo + exit 2 +fi +if [ '!' -f "${XQMAKESPEC}/qplatformdefs.h" ]; then + echo + echo " The specified system/compiler port is not complete:" + echo + echo " $XQMAKESPEC/qplatformdefs.h" + echo + echo " Please information use the contact form at http://www.qt.io/contact-us" + echo + exit 2 +fi + +#------------------------------------------------------------------------------- +# build tree initialization +#------------------------------------------------------------------------------- + +# 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 the source tree is different from the build tree, +# symlink or copy part of the sources +if [ "$OPT_SHADOW" = "yes" ]; then + echo "Preparing build tree..." + + [ -d "$outpath/bin" ] || mkdir -p "$outpath/bin" + + mkdir -p "$outpath/mkspecs" +fi + +# detect build style +if [ "$CFG_DEBUG" = "auto" ]; then + if [ "$XPLATFORM_MAC" = "yes" -o "$XPLATFORM_MINGW" = "yes" ]; then + CFG_DEBUG_RELEASE=yes + CFG_DEBUG=yes + elif [ "$CFG_DEV" = "yes" ]; then + CFG_DEBUG_RELEASE=no + CFG_DEBUG=yes + else + CFG_DEBUG_RELEASE=no + CFG_DEBUG=no + fi +fi +if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG build_all debug_and_release" +fi + +if [ "$CFG_FORCEDEBUGINFO" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG force_debug_info" +fi + +if [ "$CFG_RELEASE_TOOLS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG release_tools" +fi + +if [ "$XPLATFORM_MAC" = "yes" ]; then + [ "$CFG_PKGCONFIG" = "auto" ] && CFG_PKGCONFIG="no" +fi + +if [ "$XPLATFORM_IOS" = "yes" ]; then + CFG_RPATH="no" + CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS examples" + CFG_SHARED="no" # iOS builds should be static to be able to submit to the App Store + CFG_SKIP_MODULES="$CFG_SKIP_MODULES qtdoc qtmacextras qtserialport qtwebkit qtwebkit-examples" + CFG_PRECOMPILE="no" # Precompiled headers not supported with multiple -arch arguments + + # If the user passes -sdk on the command line we build a SDK-specific Qt build. + # Otherwise we build a joined simulator and device build, which is the default. + if [ -z "$OPT_MAC_SDK" ]; then + QT_CONFIG="$QT_CONFIG build_all" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG simulator_and_device" + fi +fi + +# disable XCB and GTK support auto-detection on Mac +if [ "$XPLATFORM_MAC" = "yes" ]; then + [ "$CFG_XCB" = "auto" ] && CFG_XCB=no + [ "$CFG_GTK" = "auto" ] && CFG_GTK=no +fi + +QMAKE_CONF_COMPILER=`getXQMakeConf QMAKE_CXX` + +TEST_COMPILER=$QMAKE_CONF_COMPILER + +if [ "$XPLATFORM_ANDROID" = "yes" ] ; then + ANDROID_NDK_TOOLCHAIN_PREFIX= + ANDROID_NDK_TOOLS_PREFIX= + ANDROID_PLATFORM_ARCH= + case $CFG_DEFAULT_ANDROID_TARGET_ARCH in + armeabi*) + ANDROID_NDK_TOOLS_PREFIX=arm-linux-androideabi + ANDROID_NDK_TOOLCHAIN_PREFIX=arm-linux-androideabi + ANDROID_PLATFORM_ARCH=arch-arm + ;; + x86) + ANDROID_NDK_TOOLS_PREFIX=i686-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=x86 + ANDROID_PLATFORM_ARCH=arch-x86 + ;; + mips) + ANDROID_NDK_TOOLS_PREFIX=mipsel-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=mipsel-linux-android + ANDROID_PLATFORM_ARCH=arch-mips + ;; + arm64-v8a) + ANDROID_NDK_TOOLS_PREFIX=aarch64-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=aarch64-linux-android + ANDROID_PLATFORM_ARCH=arch-arm64 + ;; + mips64) + ANDROID_NDK_TOOLS_PREFIX=mips64el-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=mips64el-linux-android + ANDROID_PLATFORM_ARCH=arch-mips64 + ;; + x86_64) + ANDROID_NDK_TOOLS_PREFIX=x86_64-linux-android + ANDROID_NDK_TOOLCHAIN_PREFIX=x86_64 + ANDROID_PLATFORM_ARCH=arch-x86_64 + ;; + *) + echo "ERROR: Unknown android arch $CFG_DEFAULT_ANDROID_TARGET_ARCH" + exit 1 + ;; + esac + QMAKE_CONF_COMPILER=$CFG_DEFAULT_ANDROID_NDK_ROOT/toolchains/$ANDROID_NDK_TOOLCHAIN_PREFIX-$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/prebuilt/$CFG_DEFAULT_ANDROID_NDK_HOST/bin/$ANDROID_NDK_TOOLS_PREFIX-g++ + TEST_COMPILER="$QMAKE_CONF_COMPILER --sysroot=$CFG_DEFAULT_ANDROID_NDK_ROOT/platforms/$CFG_DEFAULT_ANDROID_PLATFORM/$ANDROID_PLATFORM_ARCH/" + if [ "$CFG_ANDROID_STYLE_ASSETS" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG android-style-assets" + fi +fi + +TEST_COMPILER_CXXFLAGS=`getXQMakeConf QMAKE_CXXFLAGS` + +GCC_MACHINE_DUMP= +case "$TEST_COMPILER" in *g++) GCC_MACHINE_DUMP=$($TEST_COMPILER -dumpmachine);; esac +if [ -n "$GCC_MACHINE_DUMP" ]; then + DeviceVar set GCC_MACHINE_DUMP $($TEST_COMPILER -dumpmachine) +fi + +if [ -n "$CFG_SYSROOT" ] && [ "$CFG_GCC_SYSROOT" = "yes" ]; then + SYSROOT_FLAG="--sysroot=$CFG_SYSROOT" +else + SYSROOT_FLAG= +fi +export SYSROOT_FLAG # used by config.tests/unix/{compile.test,arch.test} + +# Auto-detect default include and library search paths. + +# Use intermediate variable to get around backtick/quote nesting problems. +awkprog=' +BEGIN { ORS = ""; FS = "="; incs = 0; libs = 0; } + +function normalize(dir) +{ + do { + odir = dir + sub(/\/[^\/]+\/\.\./, "", dir) + } while (dir != odir); + do { + odir = dir + gsub(/\/\./, "", dir) + } while (dir != odir); + sub("/$", "", dir); + return dir; +} + +# extract include paths from indented lines between +# #include <...> search starts here: +# and +# End of search list. +/^\#include &1 > /dev/null | $AWK "$awkprog"` +eval "$awkprog_result" +[ "$OPT_VERBOSE" = "yes" ] && echo "$awkprog_result" + +#setup the build parts +if [ -z "$CFG_BUILD_PARTS" ]; then + CFG_BUILD_PARTS="$QT_DEFAULT_BUILD_PARTS" + + # build tests by default, if a developer build + if [ "$CFG_DEV" = "yes" ]; then + CFG_BUILD_PARTS="$CFG_BUILD_PARTS tests" + fi + + # don't build tools by default when cross-compiling + if [ "$PLATFORM" != "$XPLATFORM" ]; then + CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed 's, tools,,g'` + fi +fi +for nobuild in $CFG_NOBUILD_PARTS; do + CFG_BUILD_PARTS=`echo "$CFG_BUILD_PARTS" | sed "s, $nobuild,,g"` +done +if echo $CFG_BUILD_PARTS | grep -v libs >/dev/null 2>&1; then +# echo +# echo "WARNING: libs is a required part of the build." +# echo + CFG_BUILD_PARTS="$CFG_BUILD_PARTS libs" +fi + +#------------------------------------------------------------------------------- +# postprocess installation and deployment paths +#------------------------------------------------------------------------------- + +if [ -z "$QT_INSTALL_PREFIX" ]; then + if [ "$CFG_DEV" = "yes" ]; then + QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default + else + QT_INSTALL_PREFIX="/usr/local/Qt-${QT_VERSION}" # the default install prefix is /usr/local/Qt-$QT_VERSION + fi +fi +QT_INSTALL_PREFIX=`makeabs "$QT_INSTALL_PREFIX"` + +if [ -z "$QT_EXT_PREFIX" ]; then + QT_EXT_PREFIX=$QT_INSTALL_PREFIX + if [ -n "$CFG_SYSROOT" ]; then + QMAKE_SYSROOTIFY=true + else + QMAKE_SYSROOTIFY=false + fi +else + QT_EXT_PREFIX=`makeabs "$QT_EXT_PREFIX"` + QMAKE_SYSROOTIFY=false +fi + +if [ -z "$QT_HOST_PREFIX" ]; then + if $QMAKE_SYSROOTIFY; then + QT_HOST_PREFIX=$CFG_SYSROOT$QT_EXT_PREFIX + else + QT_HOST_PREFIX=$QT_EXT_PREFIX + fi + HAVE_HOST_PATH=false +else + QT_HOST_PREFIX=`makeabs "$QT_HOST_PREFIX"` + HAVE_HOST_PATH=true +fi + +#------- make the paths relative to the prefixes -------- + +PREFIX_COMPLAINTS= +PREFIX_REMINDER=false +while read basevar baseoption var option; do + eval path=\$QT_${basevar}_$var + [ -z "$path" ] && continue + path=`makeabs "$path"` + eval base=\$QT_${basevar}_PREFIX + rel=${path##$base} + if [ x"$rel" = x"$path" ]; then + if [ x"$option" != x"sysconf" ]; then + PREFIX_COMPLAINTS="$PREFIX_COMPLAINTS + NOTICE: -${option}dir is not a subdirectory of ${baseoption}prefix." + eval \$HAVE_${basevar}_PATH || PREFIX_REMINDER=true + fi + eval QT_REL_${basevar}_$var=\$rel + elif [ -z "$rel" ]; then + eval QT_REL_${basevar}_$var=. + else + eval QT_REL_${basevar}_$var=\${rel#/} + fi +done < "$outpath/src/corelib/global/qconfig.cpp.new" <> "$mkfile" +} + +# build qmake +if true; then ###[ '!' -f "$outpath/bin/qmake" ]; + echo "Creating qmake..." + + mkdir -p "$outpath/qmake" || exit + # fix makefiles + for mkfile in GNUmakefile Makefile; do + EXTRA_LFLAGS= + EXTRA_CFLAGS= + in_mkfile="${mkfile}.in" + if [ "$mkfile" = "Makefile" ]; then +# if which qmake >/dev/null 2>&1 && [ -f qmake/qmake.pro ]; then +# (cd qmake && qmake) >/dev/null 2>&1 && continue +# fi + in_mkfile="${mkfile}.unix" + fi + in_mkfile="$relpath/qmake/$in_mkfile" + mkfile="$outpath/qmake/$mkfile" + if [ -f "$mkfile" ]; then + [ "$CFG_DEV" = "yes" ] && "$WHICH" chflags >/dev/null 2>&1 && chflags nouchg "$mkfile" + rm -f "$mkfile" + fi + [ -f "$in_mkfile" ] || continue + + echo "########################################################################" > "$mkfile" + echo "## This file was autogenerated by configure, all changes will be lost ##" >> "$mkfile" + echo "########################################################################" >> "$mkfile" + EXTRA_OBJS= + EXTRA_SRCS= + EXTRA_CFLAGS="\$(QMAKE_CFLAGS) \$(QMAKE_CFLAGS_SPLIT_SECTIONS)" + EXTRA_CXXFLAGS="\$(QMAKE_CXXFLAGS) \$(QMAKE_CXXFLAGS_CXX11) \$(QMAKE_CXXFLAGS_SPLIT_SECTIONS)" + EXTRA_LFLAGS="\$(QMAKE_LFLAGS) \$(QMAKE_LFLAGS_GCSECTIONS)" + + if [ "$PLATFORM" = "irix-cc" ] || [ "$PLATFORM" = "irix-cc-64" ]; then + EXTRA_LFLAGS="$EXTRA_LFLAGS -lm" + fi + + [ "$CFG_SILENT" = "yes" ] && CC_TRANSFORM='s,^,\@,' || CC_TRANSFORM= + setBootstrapVariable QMAKE_CC CC "$CC_TRANSFORM" + setBootstrapVariable QMAKE_CXX CXX "$CC_TRANSFORM" + setBootstrapVariable QMAKE_CFLAGS + setBootstrapVariable QMAKE_CFLAGS_SPLIT_SECTIONS + setBootstrapVariable QMAKE_CXXFLAGS + setBootstrapVariable QMAKE_CXXFLAGS_CXX11 + setBootstrapVariable QMAKE_CXXFLAGS_SPLIT_SECTIONS + setBootstrapVariable QMAKE_LFLAGS + setBootstrapVariable QMAKE_LFLAGS_GCSECTIONS + + if [ "$CFG_DEBUG" = "no" ] || [ "$CFG_RELEASE_TOOLS" = "yes" ]; then + setBootstrapVariable QMAKE_CFLAGS_RELEASE + setBootstrapVariable QMAKE_CXXFLAGS_RELEASE + EXTRA_CFLAGS="$EXTRA_CFLAGS \$(QMAKE_CFLAGS_RELEASE)" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_RELEASE)" + else + setBootstrapVariable QMAKE_CFLAGS_DEBUG + setBootstrapVariable QMAKE_CXXFLAGS_DEBUG + EXTRA_CFLAGS="$EXTRA_CFLAGS \$(QMAKE_CFLAGS_DEBUG)" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(QMAKE_CXXFLAGS_DEBUG)" + fi + + case `basename "$PLATFORM"` in + win32-g++*) + EXTRA_CFLAGS="$EXTRA_CFLAGS -DUNICODE" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -DUNICODE" + EXTRA_OBJS="qfilesystemengine_win.o \ + qfilesystemiterator_win.o \ + qfsfileengine_win.o \ + qlocale_win.o \ + qsettings_win.o \ + qsystemlibrary.o \ + registry.o" + EXTRA_SRCS="\"\$(SOURCE_PATH)/src/corelib/corelib/io/qfilesystemengine_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfilesystemiterator_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfsfileengine_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qsettings_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/tools/qlocale_win.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp\" \ + \"\$(SOURCE_PATH)/tools/shared/windows/registry.cpp\"" + EXTRA_LFLAGS="$EXTRA_LFLAGS -static -s -lole32 -luuid -ladvapi32 -lkernel32" + EXEEXT=".exe" + ;; + *) + EXTRA_OBJS="qfilesystemengine_unix.o \ + qfilesystemiterator_unix.o \ + qfsfileengine_unix.o \ + qlocale_unix.o" + EXTRA_SRCS="\"\$(SOURCE_PATH)/src/corelib/io/qfilesystemengine_unix.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfilesystemiterator_unix.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/io/qfsfileengine_unix.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/tools/qlocale_unix.cpp\"" + EXEEXT= + ;; + esac + if [ "$BUILD_ON_MAC" = "yes" ]; then + echo "COCOA_LFLAGS =-framework Foundation -framework CoreServices" >>"$mkfile" + echo "CARBON_LFLAGS =-framework ApplicationServices" >>"$mkfile" + echo "CARBON_CFLAGS =-fconstant-cfstrings" >>"$mkfile" + EXTRA_LFLAGS="$EXTRA_LFLAGS \$(COCOA_LFLAGS)" + EXTRA_LFLAGS="$EXTRA_LFLAGS \$(CARBON_LFLAGS)" + EXTRA_CFLAGS="$EXTRA_CFLAGS \$(CARBON_CFLAGS)" + EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS \$(CARBON_CFLAGS)" + EXTRA_OBJS="$EXTRA_OBJS \ + qsettings_mac.o \ + qcore_mac.o \ + qcore_mac_objc.o" + EXTRA_SRCS="$EXTRA_SRCS \ + \"\$(SOURCE_PATH)/src/corelib/io/qsettings_mac.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac.cpp\" \ + \"\$(SOURCE_PATH)/src/corelib/kernel/qcore_mac_objc.mm\"" + fi + + echo >>"$mkfile" + adjrelpath=`echo "$relpath" | sed 's/ /\\\\\\\\ /g'` + adjoutpath=`echo "$outpath" | sed 's/ /\\\\\\\\ /g'` + adjqmakespec=`echo "$QMAKESPEC" | sed 's/ /\\\\\\\\ /g'` + + 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 "EXTRA_CFLAGS = $EXTRA_CFLAGS" >> "$mkfile" + echo "EXTRA_CXXFLAGS = $EXTRA_CXXFLAGS" >> "$mkfile" + echo "QTOBJS =" $EXTRA_OBJS >> "$mkfile" + echo "QTSRCS =" $EXTRA_SRCS >> "$mkfile" + echo "LFLAGS = $EXTRA_LFLAGS" >> "$mkfile" + echo "EXEEXT = $EXEEXT" >> "$mkfile" + echo "RM_F = rm -f" >> "$mkfile" + echo "RM_RF = rm -rf" >> "$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 + done + + 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 +fi # Build qmake + +#------------------------------------------------------------------------------- +# create a qt.conf for the Qt build tree itself +#------------------------------------------------------------------------------- + +QTCONFFILE="$outpath/bin/qt.conf" +cat > "$QTCONFFILE" <> "$QTCONFFILE" <> "$QTCONFFILE" <> "$QTCONFFILE" </dev/null` + [ -n "$PKG_CONFIG" ] && [ "$OPT_VERBOSE" = "yes" ] && echo "Found pkg-config from \$PATH: $PKG_CONFIG" +fi + +if [ "$CFG_PKGCONFIG" = "no" ]; then + PKG_CONFIG= + [ "$OPT_VERBOSE" = "yes" ] && echo "pkg-config support disabled." +elif [ -n "$PKG_CONFIG" ]; then + # found a pkg-config + if [ "$QT_CROSS_COMPILE" = "yes" ]; then + # when xcompiling, check environment to see if it's actually usable + if [ -z "$PKG_CONFIG_LIBDIR" ]; then + if [ -n "$CFG_SYSROOT" ] && [ -d "$CFG_SYSROOT/usr/lib/pkgconfig" ]; then + PKG_CONFIG_LIBDIR=$CFG_SYSROOT/usr/lib/pkgconfig:$CFG_SYSROOT/usr/share/pkgconfig + if [ -n "$GCC_MACHINE_DUMP" ]; then + PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:$CFG_SYSROOT/usr/lib/$GCC_MACHINE_DUMP/pkgconfig + fi + export PKG_CONFIG_LIBDIR + echo >&2 "Note: PKG_CONFIG_LIBDIR automatically set to $PKG_CONFIG_LIBDIR" + elif [ "$CFG_PKGCONFIG" = "auto" ]; then + PKG_CONFIG= + echo >&2 "Warning: Disabling pkg-config since PKG_CONFIG_LIBDIR is not set and" + echo >&2 "the host's .pc files would be used (even if you set PKG_CONFIG_PATH)." + echo >&2 "Set this variable to the directory that contains target .pc files" + echo >&2 "for pkg-config to function correctly when cross-compiling or" + echo >&2 "use -pkg-config to override this test." + fi + fi + if [ -z "$PKG_CONFIG_SYSROOT_DIR" ]; then + if [ -n "$CFG_SYSROOT" ]; then + PKG_CONFIG_SYSROOT_DIR=$CFG_SYSROOT + export PKG_CONFIG_SYSROOT_DIR + echo >&2 "Note: PKG_CONFIG_SYSROOT_DIR automatically set to $PKG_CONFIG_SYSROOT_DIR" + elif [ "$CFG_PKGCONFIG" = "auto" ]; then + PKG_CONFIG= + echo >&2 "Warning: Disabling pkg-config since PKG_CONFIG_SYSROOT_DIR is not set." + echo >&2 "Set this variable to your sysroot for pkg-config to function correctly when" + echo >&2 "cross-compiling or use -pkg-config to override this test." + fi + fi + fi + if [ -n "$PKG_CONFIG" ]; then + CFG_PKGCONFIG=yes + else + CFG_PKGCONFIG=no + fi +elif [ "$CFG_PKGCONFIG" = "yes" ]; then + echo >&2 "Could not detect pkg-config from mkspec or PATH." + exit 101 +fi + +if [ -z "$PKG_CONFIG" ]; then + QT_CONFIG="$QT_CONFIG no-pkg-config" +fi + +#------------------------------------------------------------------------------- +# run configure tests +#------------------------------------------------------------------------------- + +# parameters: path, name, extra args +compileTest() +{ + path=config.tests/$1 + name=$2 + shift 2 + # allow config tests which behave differently depending on the type of + # library being built (shared/static) e.g. see config.tests/unix/icu + test_config="$QMAKE_CONFIG shared" + if [ "$CFG_SHARED" = "no" ]; then + test_config="$QMAKE_CONFIG static" + fi + echo $ECHO_N "checking for $name... $ECHO_C" + "$unixtests/compile.test" "$XQMAKESPEC" "$test_config" $OPT_VERBOSE "$relpath" "$outpath" "$path" "$name" "$CFG_QMAKE_PATH" "$QTCONFFILE" $I_FLAGS $D_FLAGS $L_FLAGS "$@" +} + +compileTestWithPkgConfig() +{ + if [ $# -lt 4 ]; then + echo "CompileTestWithPkgConfig requires at least 4 arguments." + echo "compileTestWithPkgConfig pkg_name configtest configtest_name qmake_postfix + additional arguments to compileTest" + exit 1 + fi + + local pkg_name=$1 + local configtest=$2 + local configtest_name="$3" + local qmake_postfix=$4 + shift 4 + + local has_used_pkg_config="no" + + local incdir_raw incdir_mod cflags + local libdir_raw libdir_mod libs + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists $pkg_name 2>/dev/null; then + incdir_raw=`$PKG_CONFIG --cflags-only-I $pkg_name 2>/dev/null` + cflags=`$PKG_CONFIG --cflags-only-other $pkg_name 2>/dev/null` + libdir_raw=`$PKG_CONFIG --libs-only-L $pkg_name 2>/dev/null` + libs=`$PKG_CONFIG --libs-only-l --libs-only-other $pkg_name 2>/dev/null` + incdir_mod=`echo $incdir_raw | sed -e 's,^-I,,g' -e 's, -I, ,g'` + libdir_mod=`echo $libdir_raw | sed -e 's,^-L,,g' -e 's, -L, ,g'` + has_used_pkg_config="yes" + fi + if compileTest $configtest "$configtest_name" $libdir_raw $incdir_raw $libs $cflags "$@"; then + if [ "$has_used_pkg_config" = "yes" ] && [ -n "$qmake_postfix" ]; then + QMakeVar set QMAKE_INCDIR_$qmake_postfix "`shellArgumentListToQMakeList $incdir_mod`" + QMakeVar set QMAKE_LIBDIR_$qmake_postfix "`shellArgumentListToQMakeList $libdir_mod`" + QMakeVar set QMAKE_LIBS_$qmake_postfix "`shellArgumentListToQMakeList $libs`" + QMakeVar set QMAKE_CFLAGS_$qmake_postfix "`shellArgumentListToQMakeList $cflags`" + fi + return 0 + else + return 1 + fi +} + +#------------------------------------------------------------------------------- +# determine the target and host architectures +#------------------------------------------------------------------------------- + +# Use config.tests/arch/arch.pro to have the compiler tell us what the target architecture is +OUTFILE=$outpath/arch.result +"$unixtests/arch.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" "$OUTFILE" "target" $CFG_QMAKE_PATH $QTCONFFILE $I_FLAGS $D_FLAGS $L_FLAGS +if [ $? -eq 0 ]; then + eval `cat "$OUTFILE"` +else + echo + echo "Could not determine the target architecture!" + echo "Turn on verbose messaging (-v) to see the final report." +fi +rm -f "$OUTFILE" 2>/dev/null +[ -z "$CFG_ARCH" ] && CFG_ARCH="unknown" + +if [ "$QMAKESPEC" != "$XQMAKESPEC" ]; then + # Do the same test again, using the host compiler + SYSROOT_FLAG= "$unixtests/arch.test" "$QMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" "$OUTFILE" "host" $CFG_QMAKE_PATH $QTCONFFILE $I_FLAGS $D_FLAGS $L_FLAGS + if [ $? -eq 0 ]; then + eval `cat "$OUTFILE"` + else + echo + echo "Could not determine the host architecture!" + echo "Turn on verbose messaging (-v) to see the final report." + fi + rm -f "$OUTFILE" 2>/dev/null + [ -z "$CFG_HOST_ARCH" ] && CFG_HOST_ARCH="unknown" +else + # not cross compiling, host == target + CFG_HOST_ARCH="$CFG_ARCH" + CFG_HOST_CPUFEATURES="$CFG_CPUFEATURES" +fi +unset OUTFILE + +if [ "$OPT_VERBOSE" = "yes" ]; then + echo "System architecture: '$CFG_ARCH'" + echo "Host architecture: '$CFG_HOST_ARCH'" +fi + +#------------------------------------------------------------------------------- +# functionality tests +#------------------------------------------------------------------------------- + +# auto-detect precompiled header support +if [ "$CFG_PRECOMPILE" = "auto" ]; then + if "$unixtests/precomp.test" "$TEST_COMPILER" "$OPT_VERBOSE"; then + CFG_PRECOMPILE=no + else + CFG_PRECOMPILE=yes + fi +fi + +# auto-detect -fvisibility support +if [ "$CFG_REDUCE_EXPORTS" != "no" ]; then + if "$unixtests/fvisibility.test" "$TEST_COMPILER" "$OPT_VERBOSE"; then + if [ "$CFG_REDUCE_EXPORTS" = "yes" ]; then + echo "-reduce-exports was requested but this compiler does not support it" + echo "Re-run configure with -v for more information" + exit 1 + fi + CFG_REDUCE_EXPORTS=no + else + CFG_REDUCE_EXPORTS=yes + fi +fi + +# auto-detect -fuse-ld=gold support +if [ "$CFG_USE_GOLD_LINKER" != "no" ]; then + if compilerSupportsFlag $TEST_COMPILER -fuse-ld=gold; then + CFG_USE_GOLD_LINKER=yes + else + if [ "$CFG_USE_GOLD_LINKER" = "yes" ]; then + echo "-use-gold-linker was requested but this compiler does not support it" + exit 1 + fi + CFG_USE_GOLD_LINKER=no + fi +fi + +# auto-detect --enable-new-dtags support +if linkerSupportsFlag $TEST_COMPILER --enable-new-dtags; then + CFG_ENABLE_NEW_DTAGS=yes +else + CFG_ENABLE_NEW_DTAGS=no +fi + +# auto-detect -fstack-protector-strong support (for QNX only currently) +if [ "$XPLATFORM_QNX" = "yes" ]; then + if compilerSupportsFlag $TEST_COMPILER -fstack-protector-strong; then + CFG_STACK_PROTECTOR_STRONG=yes + else + CFG_STACK_PROTECTOR_STRONG=no + fi +else + CFG_STACK_PROTECTOR_STRONG=no +fi + +# detect the availability of the -Bsymbolic-functions linker optimization +if [ "$CFG_REDUCE_RELOCATIONS" != "no" ]; then + if "$unixtests/bsymbolic_functions.test" "$TEST_COMPILER" "$OPT_VERBOSE"; then + if [ "$CFG_REDUCE_RELOCATIONS" = "yes" ]; then + echo "-reduce-relocations was requested but this compiler does not support it" + echo "Re-run configure with -v for more information" + exit 1 + fi + CFG_REDUCE_RELOCATIONS=no + else + CFG_REDUCE_RELOCATIONS=yes + fi +fi + +# auto-detect GNU make support +if [ "$CFG_USE_GNUMAKE" = "auto" ] && "$MAKE" -v | grep "GNU Make" >/dev/null 2>&1; then + CFG_USE_GNUMAKE=yes +fi + +# find the default framework value +if [ "$XPLATFORM_MAC" = "yes" ]; then + if [ "$CFG_FRAMEWORK" = "auto" ]; then + CFG_FRAMEWORK="$CFG_SHARED" + elif [ "$CFG_FRAMEWORK" = "yes" ] && [ "$CFG_SHARED" = "no" ]; then + echo + echo "WARNING: Using static linking will disable the use of Mac frameworks." + echo + CFG_FRAMEWORK="no" + fi +else + CFG_FRAMEWORK=no +fi + +if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then + # sanity-check for separate debug info + if [ "$CFG_SHARED" = "no" ]; then + echo "ERROR: -separate-debug-info is incompatible with -static" + exit 1 + fi + if [ "$CFG_DEBUG" = "no" -a "$CFG_DEBUG_RELEASE" = "no" -a "$CFG_FORCEDEBUGINFO" = "no" ]; then + echo "ERROR: -separate-debug-info needs -debug, -debug-and-release, or -force-debug-info" + exit 1 + fi + + # Detect objcopy support + if [ "$XPLATFORM_MAC" = "no" ]; then + if ! compileTest unix/objcopy "objcopy"; then + echo "ERROR: -separate-debug-info was requested but this binutils does not support it." + echo "Re-run configure with -v for more information" + exit 1 + fi + fi +fi + +# Detect C++11 & up support +stdcxx_error=false +if ! compileTest common/c++11 "C++11"; then + echo "ERROR: Qt requires a C++11 compiler and yours does not seem to be that." + echo "Please upgrade." + exit 1 +elif [ "$CFG_STDCXX" = "c++11" ]; then + : # CFG_STDCXX is correct +elif ! compileTest common/c++14 "C++14"; then + if [ "$CFG_STDCXX" != "auto" ]; then + stdcxx_error=true + else + CFG_STDCXX="c++11" + fi +elif [ "$CFG_STDCXX" = "c++14" ]; then + : # CFG_STDCXX is correct +elif ! compileTest common/c++1z "C++1z"; then + if [ "$CFG_STDCXX" != "auto" ]; then + stdcxx_error=true + else + CFG_STDCXX="c++14" + fi +else + CFG_STDCXX="c++1z" +fi + +if $stdcxx_error && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "$CFG_STDCXX support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 +fi + +# Detect which edition of the C++ standard the compiler defaults to +CFG_STDCXX_DEFAULT=199711 +if compileTest common/c++default "default C++ standard edition"; then + if [ -e "$outpath/config.tests/common/c++default/c++default.ii" ]; then + CFG_STDCXX_DEFAULT=`sed -n '/^[0-9]/s/L//p' "$outpath/config.tests/common/c++default/c++default.ii"` + else + if [ "$OPT_VERBOSE" = "yes" ]; then + echo "Failed to run the preprocessor, something is wrong with your compiler" + fi + if [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + exit 101 + fi + fi +fi + +# Detect whether 64-bit std::atomic works -- some 32-bit platforms require extra library support +if compileTest common/atomic64 "64-bit std::atomic"; then + CFG_ATOMIC64=yes +elif compileTest common/atomic64 "64-bit std::atomic in -latomic" -latomic; then + CFG_ATOMIC64=libatomic +else + CFG_ATOMIC64=no +fi + +# detect sse2 support +CFG_SSE_LIST= +if [ "${CFG_SSE2}" = "auto" ]; then + if compileTest common/sse2 "sse2"; then + CFG_SSE2=yes + CFG_SSE_LIST=SSE2 + else + CFG_SSE2=no + fi +fi + +# detect sse3 support +if [ "${CFG_SSE2}" = "no" ]; then + CFG_SSE3=no +fi +if [ "${CFG_SSE3}" = "auto" ]; then + if compileTest common/sse3 "sse3"; then + CFG_SSE3=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSE3" + else + CFG_SSE3=no + fi +fi + +# detect ssse3 support +if [ "${CFG_SSE3}" = "no" ]; then + CFG_SSSE3=no +fi +if [ "${CFG_SSSE3}" = "auto" ]; then + if compileTest common/ssse3 "ssse3"; then + CFG_SSSE3=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSSE3" + else + CFG_SSSE3=no + fi +fi + +# detect sse4.1 support +if [ "${CFG_SSSE3}" = "no" ]; then + CFG_SSE4_1=no +fi +if [ "${CFG_SSE4_1}" = "auto" ]; then + if compileTest common/sse4_1 "sse4_1"; then + CFG_SSE4_1=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSE4.1" + else + CFG_SSE4_1=no + fi +fi + +# detect sse4.2 support +if [ "${CFG_SSE4_1}" = "no" ]; then + CFG_SSE4_2=no +fi +if [ "${CFG_SSE4_2}" = "auto" ]; then + if compileTest common/sse4_2 "sse4_2"; then + CFG_SSE4_2=yes + CFG_SSE_LIST="$CFG_SSE_LIST SSE4.2" + else + CFG_SSE4_2=no + fi +fi + +# detect avx support +CFG_AVX_LIST= +if [ "${CFG_SSE4_2}" = "no" ]; then + CFG_AVX=no +fi +if [ "${CFG_AVX}" = "auto" ]; then + if compileTest common/avx "avx"; then + case "$XQMAKESPEC" in + *g++*|*-clang*) + # Some clang versions produce internal compiler errors compiling Qt AVX code + case `$TEST_COMPILER --version` in + Apple\ clang\ version\ [23]*) + CFG_AVX=no + if [ "$OPT_VERBOSE" = "yes" ]; then + echo 'AVX support disabled for blacklisted clang compiler' + fi + ;; + *) + CFG_AVX=yes + CFG_AVX_LIST=AVX + ;; + esac + ;; + *) + CFG_AVX=yes + CFG_AVX_LIST=AVX + ;; + esac + else + CFG_AVX=no + fi +fi + +# detect avx2 support +if [ "${CFG_AVX}" = "no" ]; then + CFG_AVX2=no +fi +if [ "${CFG_AVX2}" = "auto" ]; then + if compileTest common/avx2 "avx2"; then + CFG_AVX2=yes + CFG_AVX_LIST="$CFG_AVX_LIST AVX2" + else + CFG_AVX2=no + fi +fi + +# detect avx512 support +if [ "${CFG_AVX2}" = "no" ]; then + CFG_AVX512= +fi +if [ "${CFG_AVX512}" = "auto" ]; then + # First, test for AVX-512 Foundation + if compileTest common/avx512 "avx512f" AVX512=F; then + # Test for the sub-features + CFG_AVX512=f + CFG_AVX512_UPPER=AVX512F + for feature in er cd pf dq bw vl ifma vbmi; do + if [ -n "$BASH_VERSION" ] && [ "${BASH_VERSION%%.*}" -gt 3 ]; then + upper=${feature^^*} + elif [ -n "$ZSH_VERSION" ]; then + upper=${(U)feature} + else + upper=`echo $feature | tr a-z A-Z` + fi + if compileTest common/avx512 "avx512$feature" AVX512=$upper; then + CFG_AVX512="$CFG_AVX512 $feature" + CFG_AVX512_UPPER="$CFG_AVX512_UPPER AVX512$upper" + fi + done + else + CFG_AVX512= + fi +fi + +# check Neon support +if [ "$CFG_NEON" = "auto" ]; then + # no compile test, just check what the compiler has + case "$CFG_CPUFEATURES" in + *neon*) + CFG_NEON=yes + ;; + *) + CFG_NEON=no + ;; + esac +fi + +# detect mips_dsp support +if [ "$CFG_ARCH" = "mips" ] && [ "${CFG_MIPS_DSP}" = "auto" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/mips_dsp "mips_dsp" "$CFG_QMAKE_PATH" "$QTCONFFILE" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then + CFG_MIPS_DSP=yes + else + CFG_MIPS_DSP=no + fi +elif [ "$CFG_ARCH" != "mips" ]; then + CFG_MIPS_DSP=no +fi + +# detect mips_dspr2 support +if [ "$CFG_ARCH" = "mips" ] && [ "${CFG_MIPS_DSPR2}" = "auto" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/mips_dspr2 "mips_dspr2" "$CFG_QMAKE_PATH" "$QTCONFFILE" $L_FLAGS $I_FLAGS $D_FLAGS $l_FLAGS; then + CFG_MIPS_DSPR2=yes + else + CFG_MIPS_DSPR2=no + fi +elif [ "$CFG_ARCH" != "mips" ]; then + CFG_MIPS_DSPR2=no +fi + +[ "$XPLATFORM_MINGW" = "yes" ] && QMakeVar add styles "windowsxp windowsvista" +[ "$XPLATFORM_ANDROID" = "yes" ] && QMakeVar add styles "android" + +# check IPC support +if ! compileTest unix/ipc_sysv "ipc_sysv" ; then + # SYSV IPC is not supported - check POSIX IPC + if compileTest unix/ipc_posix "ipc_posix" ; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_POSIX_IPC" + else + if [ "$XPLATFORM_ANDROID" = "no" ] && [ "$XPLATFORM_MINGW" = "no" ] ; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_SYSTEMSEMAPHORE QT_NO_SHAREDMEMORY" + fi + fi +fi + +# detect zlib +if [ "$CFG_ZLIB" = "no" ]; then + # Note: Qt no longer support builds without zlib + # So we force a "no" to be "auto" here. + # If you REALLY really need no zlib support, you can still disable + # it by doing the following: + # add "no-zlib" to mkspecs/qconfig.pri + # #define QT_NO_COMPRESS (probably by adding to src/corelib/global/qconfig.h) + # + # There's no guarantee that Qt will build under those conditions + + CFG_ZLIB=auto + ZLIB_FORCED=yes +fi + +if [ "$XPLATFORM_QNX" = "yes" ]; then + if [ "$CFG_SLOG2" != "no" ]; then + if compileTest unix/slog2 "slog2"; then + CFG_SLOG2=yes + QMAKE_CONFIG="$QMAKE_CONFIG slog2" + else + CFG_SLOG2=no + fi + fi + if [ "$CFG_QNX_IMF" != "no" ]; then + if compileTest unix/qqnx_imf "qqnx_imf"; then + CFG_QNX_IMF=yes + QMAKE_CONFIG="$QMAKE_CONFIG qqnx_imf" + else + CFG_QNX_IMF=no + fi + fi + if [ "$CFG_PPS" != "no" ]; then + if compileTest unix/pps "pps"; then + CFG_PPS=yes + QMAKE_CONFIG="$QMAKE_CONFIG qqnx_pps" + else + CFG_PPS=no + fi + fi + + if [ "$CFG_LGMON" != "no" ]; then + if compileTest unix/lgmon "lgmon"; then + CFG_LGMON=yes + QMAKE_CONFIG="$QMAKE_CONFIG lgmon" + else + CFG_LGMON=no + fi + fi +fi + +if [ "$XPLATFORM_INTEGRITY" = "yes" ]; then + CFG_INTEGRITYFB=yes + CFG_SHARED=no + CFG_LARGEFILE=no +fi + +if [ "$CFG_ZLIB" = "auto" ]; then + if compileTest unix/zlib "zlib"; then + CFG_ZLIB=system + else + CFG_ZLIB=yes + fi +fi + +if [ "$CFG_MTDEV" != "no" ]; then + if compileTest unix/mtdev "mtdev"; then + CFG_MTDEV=yes + else + CFG_MTDEV=no + fi +fi +if [ "$CFG_MTDEV" = "no" ]; then + QMakeVar add DEFINES QT_NO_MTDEV +fi + +if [ "$CFG_JOURNALD" != "no" ]; then + if compileTest unix/journald "journald"; then + CFG_JOURNALD=yes + QMAKE_CONFIG="$QMAKE_CONFIG journald" + else + if [ "$CFG_JOURNALD" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "journald support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_JOURNALD=no + fi + fi +fi + +if [ "$CFG_SYSLOG" != "no" ]; then + if compileTest unix/syslog "syslog"; then + CFG_SYSLOG=yes + QMAKE_CONFIG="$QMAKE_CONFIG syslog" + else + if [ "$CFG_SYSLOG" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "syslog support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SYSLOG=no + fi + fi +fi + +if [ "$CFG_LARGEFILE" = "auto" ]; then + #Large files should be enabled for all Linux systems + CFG_LARGEFILE=yes +fi + +if [ "$CFG_GUI" = "no" ]; then + QPA_PLATFORM_GUARD=no +fi + +# detect how jpeg should be built +if [ "$CFG_JPEG" = "auto" ]; then + if [ "$CFG_SHARED" = "yes" ]; then + CFG_JPEG=plugin + else + CFG_JPEG=yes + fi +fi +# detect jpeg +if [ "$CFG_LIBJPEG" = "auto" ]; then + if compileTest unix/libjpeg "libjpeg"; then + CFG_LIBJPEG=system + else + CFG_LIBJPEG=qt + fi +fi + +# detect how gif should be built +if [ "$CFG_GIF" = "auto" ]; then + if [ "$CFG_SHARED" = "yes" ]; then + CFG_GIF=plugin + else + CFG_GIF=yes + fi +fi + +# detect png +if [ "$CFG_LIBPNG" = "auto" ]; then + if compileTest unix/libpng "libpng"; then + CFG_LIBPNG=system + else + CFG_LIBPNG=qt + fi +fi + +# detect dl +if ! compileTest unix/libdl "libdl"; then + QMakeVar add DEFINES QT_NO_DYNAMIC_LIBRARY + QMAKE_CONFIG="$QMAKE_CONFIG no-libdl" +fi + +if [ "$CFG_EGLFS" = "yes" ]; then + if [ "$CFG_EGL" = "no" ]; then + echo "The EGLFS plugin requires EGL support and cannot be built" + exit 101 + fi + CFG_EGL=yes +fi + +# auto-detect SQL-modules support +for _SQLDR in $CFG_SQL_AVAILABLE; do + case $_SQLDR in + mysql) + if [ "$CFG_SQL_mysql" != "no" ]; then + [ -z "$CFG_MYSQL_CONFIG" ] && CFG_MYSQL_CONFIG=`"$WHICH" mysql_config` + if [ -x "$CFG_MYSQL_CONFIG" ]; then + QT_CFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --include 2>/dev/null | filterIncludeOptions` + # -rdynamic should not be returned by mysql_config, but is on RHEL 6.6 + QT_LFLAGS_MYSQL_R=`$CFG_MYSQL_CONFIG --libs_r 2>/dev/null | filterLibraryOptions | sed "s/-rdynamic//"` + QT_LFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --libs 2>/dev/null | filterLibraryOptions | sed "s/-rdynamic//"` + QT_MYSQL_VERSION=`$CFG_MYSQL_CONFIG --version 2>/dev/null` + QT_MYSQL_VERSION_MAJOR=`echo $QT_MYSQL_VERSION | cut -d . -f 1` + fi + if [ -n "$QT_MYSQL_VERSION" ] && [ "$QT_MYSQL_VERSION_MAJOR" -lt 4 ]; then + if [ "$CFG_SQL_mysql" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "This version of MySql is not supported ($QT_MYSQL_VERSION)." + echo " You need MySql 4 or higher." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_mysql="no" + QT_LFLAGS_MYSQL="" + QT_LFLAGS_MYSQL_R="" + QT_CFLAGS_MYSQL="" + fi + else + if compileTest unix/mysql_r "MySQL (thread-safe)" $QT_LFLAGS_MYSQL_R $QT_CFLAGS_MYSQL; then + QMakeVar add CONFIG use_libmysqlclient_r + if [ "$CFG_SQL_mysql" = "auto" ]; then + CFG_SQL_mysql=plugin + fi + QT_LFLAGS_MYSQL="$QT_LFLAGS_MYSQL_R" + elif compileTest unix/mysql "MySQL (thread-unsafe)" $QT_LFLAGS_MYSQL $QT_CFLAGS_MYSQL; then + if [ "$CFG_SQL_mysql" = "auto" ]; then + CFG_SQL_mysql=plugin + fi + else + if [ "$CFG_SQL_mysql" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "MySQL support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_mysql=no + QT_LFLAGS_MYSQL="" + QT_LFLAGS_MYSQL_R="" + QT_CFLAGS_MYSQL="" + fi + fi + fi + fi + ;; + psql) + if [ "$CFG_SQL_psql" != "no" ]; then + [ -z "$CFG_PSQL_CONFIG" ] && CFG_PSQL_CONFIG=`"$WHICH" pg_config` + # Be careful not to use native pg_config when cross building. + if [ "$XPLATFORM_MINGW" != "yes" ] && [ -x "$CFG_PSQL_CONFIG" ]; then + QT_CFLAGS_PSQL=`$CFG_PSQL_CONFIG --includedir 2>/dev/null | filterIncludePath` + QT_LFLAGS_PSQL=`$CFG_PSQL_CONFIG --libdir 2>/dev/null | filterLibraryPath` + fi + [ -z "$QT_CFLAGS_PSQL" ] || QT_CFLAGS_PSQL="-I$QT_CFLAGS_PSQL" + [ -z "$QT_LFLAGS_PSQL" ] || QT_LFLAGS_PSQL="-L$QT_LFLAGS_PSQL" + # But, respect PSQL_LIBS if set + [ -z "$PSQL_LIBS" ] || QT_LFLAGS_PSQL="$PSQL_LIBS" + if compileTest unix/psql "PostgreSQL" $QT_LFLAGS_PSQL $QT_CFLAGS_PSQL; then + if [ "$CFG_SQL_psql" = "auto" ]; then + CFG_SQL_psql=plugin + fi + else + if [ "$CFG_SQL_psql" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "PostgreSQL support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_psql=no + QT_CFLAGS_PSQL="" + QT_LFLAGS_PSQL="" + fi + fi + fi + ;; + odbc) + if [ "$CFG_SQL_odbc" != "no" ]; then + if [ "$XPLATFORM_MAC" != "yes" ] && compileTest unix/odbc "ODBC"; then + if [ "$CFG_SQL_odbc" = "auto" ]; then + CFG_SQL_odbc=plugin + fi + else + if compileTest unix/iodbc "iODBC"; then + QT_LFLAGS_ODBC="-liodbc" + if [ "$CFG_SQL_odbc" = "auto" ]; then + CFG_SQL_odbc=plugin + fi + else + if [ "$CFG_SQL_odbc" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "ODBC support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_odbc=no + fi + fi + fi + fi + ;; + oci) + if [ "$CFG_SQL_oci" != "no" ]; then + if compileTest unix/oci "OCI"; then + if [ "$CFG_SQL_oci" = "auto" ]; then + CFG_SQL_oci=plugin + fi + else + if [ "$CFG_SQL_oci" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Oracle (OCI) support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_oci=no + fi + fi + fi + ;; + tds) + if [ "$CFG_SQL_tds" != "no" ]; then + [ -z "$SYBASE" ] || QT_LFLAGS_TDS="-L$SYBASE/lib" + [ -z "$SYBASE_LIBS" ] || QT_LFLAGS_TDS="$QT_LFLAGS_TDS $SYBASE_LIBS" + if compileTest unix/tds "TDS" $QT_LFLAGS_TDS; then + if [ "$CFG_SQL_tds" = "auto" ]; then + CFG_SQL_tds=plugin + fi + else + if [ "$CFG_SQL_tds" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "TDS support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_tds=no + fi + fi + fi + ;; + db2) + if [ "$CFG_SQL_db2" != "no" ]; then + if compileTest unix/db2 "DB2"; then + if [ "$CFG_SQL_db2" = "auto" ]; then + CFG_SQL_db2=plugin + fi + else + if [ "$CFG_SQL_db2" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "ODBC support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_db2=no + fi + fi + fi + ;; + ibase) + if [ "$CFG_SQL_ibase" != "no" ]; then + if compileTest unix/ibase "InterBase"; then + if [ "$CFG_SQL_ibase" = "auto" ]; then + CFG_SQL_ibase=plugin + fi + else + if [ "$CFG_SQL_ibase" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "InterBase support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_ibase=no + fi + fi + fi + ;; + sqlite2) + if [ "$CFG_SQL_sqlite2" != "no" ]; then + if compileTest unix/sqlite2 "SQLite2"; then + if [ "$CFG_SQL_sqlite2" = "auto" ]; then + CFG_SQL_sqlite2=plugin + fi + else + if [ "$CFG_SQL_sqlite2" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "SQLite2 support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_SQL_sqlite2=no + fi + fi + fi + ;; + sqlite) + if [ "$CFG_SQL_sqlite" != "no" ]; then + SQLITE_AUTODETECT_FAILED="no" + if [ "$CFG_SQLITE" = "system" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3 2>/dev/null; then + QT_CFLAGS_SQLITE=`$PKG_CONFIG --cflags sqlite3 2>/dev/null` + QT_LFLAGS_SQLITE=`$PKG_CONFIG --libs sqlite3 2>/dev/null` + else + QT_CFLAGS_SQLITE= + QT_LFLAGS_SQLITE="-lsqlite3 -lz" + fi + if compileTest unix/sqlite "SQLite" $QT_LFLAGS_SQLITE $QT_CFLAGS_SQLITE; then + if [ "$CFG_SQL_sqlite" = "auto" ]; then + CFG_SQL_sqlite=plugin + fi + QMAKE_CONFIG="$QMAKE_CONFIG system-sqlite" + else + SQLITE_AUTODETECT_FAILED="yes" + CFG_SQL_sqlite=no + fi + elif [ -f "$relpath/src/3rdparty/sqlite/sqlite3.h" ]; then + if [ "$CFG_SQL_sqlite" = "auto" ]; then + CFG_SQL_sqlite=plugin + fi + else + SQLITE_AUTODETECT_FAILED="yes" + CFG_SQL_sqlite=no + fi + + if [ "$SQLITE_AUTODETECT_FAILED" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "SQLite support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + fi + fi + ;; + *) + if [ "$OPT_VERBOSE" = "yes" ]; then + echo "unknown SQL driver: $_SQLDR" + fi + ;; + esac +done + +# auto-detect NIS support +if [ "$CFG_NIS" != "no" ]; then + if compileTest unix/nis "NIS"; then + CFG_NIS=yes + else + if [ "$CFG_NIS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "NIS support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_NIS=no + fi + fi +fi + +# auto-detect CUPS support +if [ "$CFG_CUPS" != "no" ]; then + if compileTest unix/cups "Cups"; then + CFG_CUPS=yes + else + if [ "$CFG_CUPS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Cups support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_CUPS=no + fi + fi +fi + +# auto-detect iconv(3) support +if [ "$CFG_ICONV" != "no" ]; then + if [ "$XPLATFORM_MINGW" = "yes" ]; then + CFG_ICONV=no + elif compileTest unix/iconv "POSIX iconv"; then + CFG_ICONV=yes + elif compileTest unix/sun-libiconv "SUN libiconv"; then + CFG_ICONV=sun + elif compileTest unix/gnu-libiconv "GNU libiconv"; then + CFG_ICONV=gnu + else + if [ "$CFG_ICONV" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Iconv support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_ICONV=no + fi + fi +fi + +# auto-detect libdbus-1 support +# auto: detect if libdbus-1 is present; if so, link to it +# linked: fail if libdbus-1 is not present; otherwise link to it +# runtime: no detection (cannot fail), load libdbus-1 at runtime +if [ "$CFG_DBUS" = "auto" ] || [ "$CFG_DBUS" = "linked" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --atleast-version="$MIN_DBUS_1_VERSION" dbus-1 2>/dev/null; then + QT_CFLAGS_DBUS=`$PKG_CONFIG --cflags dbus-1 2>/dev/null` + QT_LIBS_DBUS=`$PKG_CONFIG --libs dbus-1 2>/dev/null` + else + QT_LIBS_DBUS="-ldbus-1" + fi + if compileTest unix/dbus "D-Bus" $QT_CFLAGS_DBUS $QT_LIBS_DBUS; then + QMakeVar set QT_LIBS_DBUS "$QT_LIBS_DBUS" + QMakeVar set QT_CFLAGS_DBUS "$QT_CFLAGS_DBUS" + # Try find correct host configuration for dbus tools when cross-compiling + if [ "$QT_CROSS_COMPILE" = "yes" ] && env -i PATH="$PATH" \ + pkg-config --atleast-version="$MIN_DBUS_1_VERSION" dbus-1 2>/dev/null; then + QT_CFLAGS_DBUS=`env -i PATH="$PATH" pkg-config --cflags dbus-1 2>/dev/null` + fi + QMakeVar set QT_HOST_CFLAGS_DBUS "$QT_CFLAGS_DBUS" + CFG_DBUS=linked + else + # Failed to compile the test, so it's an error if CFG_DBUS is "linked" + if [ "$CFG_DBUS" = "linked" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "The Qt D-Bus module cannot be enabled because libdbus-1 version $MIN_DBUS_1_VERSION was not found." + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + # CFG_DBUS is "auto" here + CFG_DBUS=runtime + fi + fi +fi + +# auto-detect libproxy support +if [ "$CFG_LIBPROXY" != "no" ]; then + if compileTest common/libproxy "libproxy"; then + CFG_LIBPROXY=yes + else + if [ "$CFG_LIBPROXY" = "auto" ]; then + CFG_LIBPROXY=no + elif [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + # CFG_LIBPROXY is "yes" here + echo "The libproxy support cannot be enabled because libproxy was not found." + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + fi + fi +fi + +# auto-detect Glib support +if [ "$CFG_GLIB" != "no" ]; then + if [ -n "$PKG_CONFIG" ]; then + QT_CFLAGS_GLIB=`$PKG_CONFIG --cflags glib-2.0 gthread-2.0 2>/dev/null` + QT_LIBS_GLIB=`$PKG_CONFIG --libs glib-2.0 gthread-2.0 2>/dev/null` + fi + if compileTest unix/glib "Glib" $QT_CFLAGS_GLIB $QT_LIBS_GLIB; then + CFG_GLIB=yes + QMakeVar set QT_CFLAGS_GLIB "$QT_CFLAGS_GLIB" + QMakeVar set QT_LIBS_GLIB "$QT_LIBS_GLIB" + else + if [ "$CFG_GLIB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Glib support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GLIB=no + fi + fi +fi + +# auto-detect GTK style support +if [ "$CFG_GLIB" = "yes" -a "$CFG_GTK" != "no" ]; then + if [ -n "$PKG_CONFIG" ]; then + QT_CFLAGS_QGTK3=`$PKG_CONFIG --cflags gtk+-3.0 2>/dev/null` + QT_LIBS_QGTK3=`$PKG_CONFIG --libs gtk+-3.0 2>/dev/null` + QT_LIBS_QGOBJECT=`$PKG_CONFIG --libs gobject-2.0 2>/dev/null` + fi + if [ -n "$QT_CFLAGS_QGTK3" ] ; then + CFG_GTK=yes + QT_CONFIG="$QT_CONFIG gtk3" + QMakeVar set QT_CFLAGS_QGTK3 "$QT_CFLAGS_QGTK3" + QMakeVar set QT_LIBS_QGTK3 "$QT_LIBS_QGTK3" + else + if [ "$CFG_GTK" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "GTK theme support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GTK=no + fi + fi +elif [ "$CFG_GLIB" = "no" ]; then + CFG_GTK=no +fi + +# auto-detect libicu support +if [ "$CFG_ICU" != "no" ]; then + if compileTest unix/icu "ICU"; then + [ "$CFG_ICU" = "auto" ] && CFG_ICU=yes + else + if [ "$CFG_ICU" = "auto" ]; then + CFG_ICU=no + elif [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + # CFG_ICU is "yes" + + echo "The ICU library support cannot be enabled." + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + fi + fi +fi + +# Auto-detect PulseAudio support +if [ "$CFG_PULSEAUDIO" != "no" ]; then + if [ -n "$PKG_CONFIG" ]; then + QT_CFLAGS_PULSEAUDIO=`$PKG_CONFIG --cflags libpulse '>=' 0.9.10 libpulse-mainloop-glib 2>/dev/null` + QT_LIBS_PULSEAUDIO=`$PKG_CONFIG --libs libpulse '>=' 0.9.10 libpulse-mainloop-glib 2>/dev/null` + fi + if compileTest unix/pulseaudio "PulseAudio" $QT_CFLAGS_PULSEAUDIO $QT_LIBS_PULSEAUDIO; then + CFG_PULSEAUDIO=yes + QMakeVar set QT_CFLAGS_PULSEAUDIO "$QT_CFLAGS_PULSEAUDIO" + QMakeVar set QT_LIBS_PULSEAUDIO "$QT_LIBS_PULSEAUDIO" + else + if [ "$CFG_PULSEAUDIO" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "PulseAudio support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_PULSEAUDIO=no + fi + fi +fi + +# X11/MINGW OpenGL +if [ "$XPLATFORM_MINGW" = "yes" ]; then + # auto-detect OpenGL support (es2 = OpenGL ES 2.0 or higher) + if [ "$CFG_GUI" = "no" ]; then + if [ "$CFG_OPENGL" = "auto" ]; then + CFG_OPENGL=no + fi + if [ "$CFG_OPENGL" != "no" ]; then + echo "OpenGL enabled, but GUI disabled." + echo " You might need to either enable the GUI or disable OpenGL" + exit 1 + fi + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then + CFG_OPENGL=desktop + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else + if [ "$CFG_OPENGL" = "yes" ]; then + echo "All the OpenGL functionality tests failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + CFG_OPENGL=no + fi + case "$PLATFORM" in + hpux*) + # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct. + if [ "$CFG_OPENGL" = "desktop" ]; then + compileTest x11/glxfbconfig "OpenGL" + if [ $? != "0" ]; then + QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT + fi + fi + ;; + *) + ;; + esac + elif [ "$CFG_OPENGL" = "es2" ]; then + #OpenGL ES 2.0 + compileTest unix/opengles2 "OpenGL ES 2.0" + if [ $? != "0" ]; then + echo "The OpenGL ES 2.0 functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in" + echo " ${XQMAKESPEC}." + exit 1 + fi + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" + if [ $? != "0" ]; then + echo "The OpenGL functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + case "$PLATFORM" in + hpux*) + # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct. + compileTest x11/glxfbconfig "OpenGL" + if [ $? != "0" ]; then + QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT + fi + ;; + *) + ;; + esac + fi +fi # X11/MINGW OpenGL + +if [ "$XPLATFORM_MAC" = "yes" ]; then + if [ "$CFG_COREWLAN" = "auto" ]; then + if compileTest mac/corewlan "CoreWlan"; then + CFG_COREWLAN=yes + else + CFG_COREWLAN=no + fi + fi +fi + +# auto-detect OpenGL support (es2 = OpenGL ES 2.0 or higher) +if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTestWithPkgConfig gl unix/opengldesktop "OpenGL" OPENGL; then + CFG_OPENGL=desktop + elif compileTestWithPkgConfig glesv2 unix/opengles2 "OpenGL ES 2.0" OPENGL_ES2; then + CFG_OPENGL=es2 + else + if [ "$CFG_OPENGL" = "yes" ]; then + echo "All the OpenGL functionality tests failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + CFG_OPENGL=no + fi +elif [ "$CFG_OPENGL" = "es2" ]; then + #OpenGL ES 2.0 + + compileTestWithPkgConfig glesv2 unix/opengles2 "OpenGL ES 2.0" OPENGL_ES2 + if [ $? != "0" ]; then + echo "The OpenGL ES 2.0 functionality test failed!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in" + echo " ${XQMAKESPEC}." + exit 1 + fi +elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTestWithPkgConfig gl unix/opengldesktop "OpenGL" OPENGL + if [ $? != "0" ]; then + echo "The OpenGL functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi +fi + +# If OpenGL ES 2.0 is enabled, check for 3.0 and higher. This is used to allow +# compile-time differentiation and including the version specific (but backwards +# compatible) ES headers (for example, GLES3/gl31.h). Other than that, there is +# no difference in the configuration, even the library is the same. +if [ "$CFG_OPENGL" = "es2" ]; then + if compileTestWithPkgConfig glesv2 unix/opengles3 "OpenGL ES 3.0" ""; then + # Add a define for ES3, in addition to ES and ES2. + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES_3" + fi + if compileTestWithPkgConfig glesv2 unix/opengles31 "OpenGL ES 3.1" ""; then + # Add a define for ES31. + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES_3_1" + fi +fi + +# auto-detect FontConfig support +ORIG_CFG_FREETYPE="$CFG_FREETYPE" +if [ "$CFG_FONTCONFIG" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists fontconfig --exists freetype2 2>/dev/null; then + QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG --cflags fontconfig --cflags freetype2 2>/dev/null` + QT_LIBS_FONTCONFIG=`$PKG_CONFIG --libs fontconfig --libs freetype2 2>/dev/null` + else + QT_CFLAGS_FONTCONFIG= + QT_LIBS_FONTCONFIG="-lfreetype -lfontconfig" + fi + if compileTest unix/fontconfig "FontConfig" $QT_CFLAGS_FONTCONFIG $QT_LIBS_FONTCONFIG; then + QT_CONFIG="$QT_CONFIG fontconfig" + QMakeVar set QMAKE_CFLAGS_FONTCONFIG "$QT_CFLAGS_FONTCONFIG" + QMakeVar set QMAKE_LIBS_FONTCONFIG "$QT_LIBS_FONTCONFIG" + CFG_FONTCONFIG=yes + CFG_FREETYPE=system + else + CFG_FONTCONFIG=no + fi + +fi + +# Save these for a check later +ORIG_CFG_XCB="$CFG_XCB" +ORIG_CFG_EGLFS="$CFG_EGLFS" +ORIG_CFG_DIRECTFB="$CFG_DIRECTFB" +ORIG_CFG_LINUXFB="$CFG_LINUXFB" +ORIG_CFG_MIRCLIENT="$CFG_MIRCLIENT" + +if [ "$CFG_LIBUDEV" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists libudev 2>/dev/null; then + QMAKE_INCDIR_LIBUDEV=`$PKG_CONFIG --cflags-only-I libudev 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_LIBUDEV=`$PKG_CONFIG --libs libudev 2>/dev/null` + QMAKE_CFLAGS_LIBUDEV=`$PKG_CONFIG --cflags libudev 2>/dev/null` + QMakeVar set QMAKE_INCDIR_LIBUDEV "$QMAKE_INCDIR_LIBUDEV" + QMakeVar set QMAKE_LIBS_LIBUDEV "$QMAKE_LIBS_LIBUDEV" + fi + if compileTest unix/libudev "libudev" $QMAKE_CFLAGS_LIBUDEV $QMAKE_LIBS_LIBUDEV; then + CFG_LIBUDEV=yes + QT_CONFIG="$QT_CONFIG libudev" + elif [ "$CFG_LIBUDEV" = "yes" ]; then + echo "The libudev functionality test failed!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + exit 1 + else + CFG_LIBUDEV=no + fi +fi +if [ "$CFG_LIBUDEV" = "no" ]; then + QMakeVar add DEFINES QT_NO_LIBUDEV +fi + +if [ "$CFG_EVDEV" != "no" ]; then + if compileTest unix/evdev "evdev"; then + CFG_EVDEV=yes + QT_CONFIG="$QT_CONFIG evdev" + elif [ "$CFG_EVDEV" = "yes" ]; then + echo "The evdev functionality test failed!" + exit 1 + else + CFG_EVDEV=no + fi +fi +if [ "$CFG_EVDEV" = "no" ]; then + QMakeVar add DEFINES QT_NO_EVDEV +fi + +if [ "$CFG_TSLIB" != "no" ]; then + if compileTest unix/tslib "tslib"; then + CFG_TSLIB=yes + QT_CONFIG="$QT_CONFIG tslib" + elif [ "$CFG_TSLIB" = "yes" ]; then + echo "The tslib functionality test failed!" + exit 1 + else + CFG_TSLIB=no + fi +fi +if [ "$CFG_TSLIB" = "no" ]; then + QMakeVar add DEFINES QT_NO_TSLIB +fi + +if [ "$CFG_XKBCOMMON_EVDEV" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xkbcommon 2>/dev/null; then + QMAKE_INCDIR_XKBCOMMON_EVDEV=`$PKG_CONFIG --cflags-only-I xkbcommon 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_XKBCOMMON_EVDEV=`$PKG_CONFIG --libs xkbcommon 2>/dev/null` + QMAKE_CFLAGS_XKBCOMMON_EVDEV=`$PKG_CONFIG --cflags xkbcommon 2>/dev/null` + QMakeVar set QMAKE_INCDIR_XKBCOMMON_EVDEV "$QMAKE_INCDIR_XKBCOMMON_EVDEV" + QMakeVar set QMAKE_LIBS_XKBCOMMON_EVDEV "$QMAKE_LIBS_XKBCOMMON_EVDEV" + fi + if compileTest unix/xkbcommon "xkbcommon" $QMAKE_CFLAGS_XKBCOMMON_EVDEV $QMAKE_LIBS_XKBCOMMON_EVDEV; then + CFG_XKBCOMMON_EVDEV=yes + QT_CONFIG="$QT_CONFIG xkbcommon-evdev" + elif [ "$CFG_XKBCOMMON_EVDEV" = "yes" ]; then + echo "The xkbcommon-evdev functionality test failed!" + exit 1 + else + CFG_XKBCOMMON_EVDEV=no + fi +fi + +if [ "$CFG_LIBINPUT" != "no" ] && [ "$CFG_LIBUDEV" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists libinput 2>/dev/null; then + QMAKE_INCDIR_LIBINPUT=`$PKG_CONFIG --cflags-only-I libinput 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_LIBINPUT=`$PKG_CONFIG --libs libinput 2>/dev/null` + QMAKE_CFLAGS_LIBINPUT=`$PKG_CONFIG --cflags libinput 2>/dev/null` + QMAKE_LIBINPUT_VERSION_MAJOR=`$PKG_CONFIG --modversion libinput 2>/dev/null | cut -d . -f 1` + QMAKE_LIBINPUT_VERSION_MINOR=`$PKG_CONFIG --modversion libinput 2>/dev/null | cut -d . -f 2` + QMakeVar set QMAKE_LIBINPUT_VERSION_MAJOR "$QMAKE_LIBINPUT_VERSION_MAJOR" + QMakeVar set QMAKE_LIBINPUT_VERSION_MINOR "$QMAKE_LIBINPUT_VERSION_MINOR" + QMakeVar set QMAKE_INCDIR_LIBINPUT "$QMAKE_INCDIR_LIBINPUT" + QMakeVar set QMAKE_LIBS_LIBINPUT "$QMAKE_LIBS_LIBINPUT" + fi + if compileTest unix/libinput "libinput" $QMAKE_CFLAGS_LIBINPUT $QMAKE_LIBS_LIBINPUT; then + CFG_LIBINPUT=yes + QT_CONFIG="$QT_CONFIG libinput" + elif [ "$CFG_LIBINPUT" = "yes" ]; then + echo "The libinput functionality test failed!" + exit 1 + else + CFG_LIBINPUT=no + fi +else + CFG_LIBINPUT=no +fi +if [ "$CFG_LIBINPUT" = "no" ]; then + QMakeVar add DEFINES QT_NO_LIBINPUT +fi + +# Check we actually have X11 :-) +if compileTest x11/xlib "XLib"; then + QT_CONFIG="$QT_CONFIG xlib" +fi + +# auto-detect Xrender support +if [ "$CFG_XRENDER" != "no" ]; then + if compileTest x11/xrender "Xrender"; then + CFG_XRENDER=yes + QT_CONFIG="$QT_CONFIG xrender" + else + if [ "$CFG_XRENDER" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "Xrender support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_XRENDER=no + fi + fi +fi + +# auto-detect XInput2 support +if [ "$CFG_XINPUT2" != "no" ]; then + if compileTest x11/xinput2 "XInput2"; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists xi 2>/dev/null; then + QMAKE_LIBXI_VERSION_MAJOR=`$PKG_CONFIG --modversion xi 2>/dev/null | cut -d . -f 1` + QMAKE_LIBXI_VERSION_MINOR=`$PKG_CONFIG --modversion xi 2>/dev/null | cut -d . -f 2` + QMAKE_LIBXI_VERSION_PATCH=`$PKG_CONFIG --modversion xi 2>/dev/null | cut -d . -f 3` + QMakeVar set QMAKE_LIBXI_VERSION_MAJOR "$QMAKE_LIBXI_VERSION_MAJOR" + QMakeVar set QMAKE_LIBXI_VERSION_MINOR "$QMAKE_LIBXI_VERSION_MINOR" + QMakeVar set QMAKE_LIBXI_VERSION_PATCH "$QMAKE_LIBXI_VERSION_PATCH" + fi + CFG_XINPUT2=yes + else + if [ "$CFG_XINPUT2" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "XInput2 support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_XINPUT2=no + fi + fi +fi + +if [ "$CFG_XCB" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then + QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags xcb 2>/dev/null`" + QMAKE_LIBS_XCB="`$PKG_CONFIG --libs xcb 2>/dev/null`" + fi + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "x11" 2> /dev/null; then + QMAKE_X11_PREFIX="`$PKG_CONFIG --variable=prefix x11`" + else + # default to LSB prefix + QMAKE_X11_PREFIX="/usr" + fi + QMakeVar set QMAKE_X11_PREFIX "$QMAKE_X11_PREFIX" + + if [ "$CFG_XKBCOMMON" != no ] && compileTest qpa/xcb "xcb" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-plugin" + + if [ "$CFG_XCB" = "qt" ]; then + QT_CONFIG="$QT_CONFIG xcb-qt" + + if compileTest qpa/xcb-glx "xcb-glx" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + CFG_XCB_GLX=yes + QT_CONFIG="$QT_CONFIG xcb-glx" + fi + else + CFG_XCB="system" + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then + XCB_PACKAGES="xcb xcb-shm xcb-sync xcb-xfixes xcb-randr xcb-image xcb-keysyms xcb-icccm xcb-shape" + QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags $XCB_PACKAGES 2>/dev/null`" + QMAKE_LIBS_XCB="`$PKG_CONFIG --libs $XCB_PACKAGES 2>/dev/null`" + fi + + # libxcb version 1.10 was the first version that enables xcb-xkb by default, + # therefore the minimal xcb-xkb version we support is 1.10 + CFG_XKB=no + if $PKG_CONFIG --exists "xcb-xkb >= 1.10" 2>/dev/null; then + QMAKE_CFLAGS_XKB="`$PKG_CONFIG --cflags xcb xcb-xkb 2>/dev/null`" + QMAKE_LIBS_XKB="`$PKG_CONFIG --libs xcb xcb-xkb 2>/dev/null`" + if compileTest qpa/xcb-xkb "xcb-xkb" $QMAKE_CFLAGS_XKB $QMAKE_LIBS_XKB; then + CFG_XKB=yes + fi + fi + if [ "$CFG_XKB" = "no" ]; then + QMakeVar add DEFINES QT_NO_XKB + fi + + if compileTest qpa/xcb-syslibs "xcb-syslibs" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + if compileTest qpa/xcb-render "xcb-render" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-render" + fi + + if compileTest qpa/xcb-glx "xcb-glx" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + CFG_XCB_GLX=yes + QT_CONFIG="$QT_CONFIG xcb-glx" + fi + else + echo "The test for linking against libxcb and support libraries failed!" + echo " You might need to install dependency packages, or pass -qt-xcb." + echo " See src/plugins/platforms/xcb/README." + exit 1 + fi + fi + + if [ "$CFG_XCB_XLIB" != "no" ]; then + if compileTest qpa/xcb-xlib "xcb-xlib" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then + QT_CONFIG="$QT_CONFIG xcb-xlib" + CFG_XCB_XLIB=yes + else + CFG_XCB_XLIB=no + fi + fi + + if [ "$CFG_SM" != "no" ] && [ -n "$PKG_CONFIG" ]; then + if $PKG_CONFIG --exists "sm" 2>/dev/null && $PKG_CONFIG --exists "ice" 2>/dev/null; then + QT_CONFIG="$QT_CONFIG xcb-sm" + fi + fi + else + if [ "$CFG_XCB" != "auto" ]; then + echo "The test for linking against libxcb failed!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " You might need to install dependency packages for libxcb." + echo " See src/plugins/platforms/xcb/README." + exit 1 + fi + CFG_XCB=no + fi +fi + +if [ "$CFG_DIRECTFB" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists directfb 2>/dev/null; then + QMAKE_CFLAGS_DIRECTFB=`$PKG_CONFIG --cflags directfb 2>/dev/null` + QMAKE_LIBS_DIRECTFB=`$PKG_CONFIG --libs directfb 2>/dev/null` + if compileTest qpa/directfb "DirectFB" $QMAKE_CFLAGS_DIRECTFB $QMAKE_LIBS_DIRECTFB; then + CFG_DIRECTFB=yes + elif [ "$CFG_DIRECTFB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " DirectFB support cannot be enabled due to functionality tests!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_DIRECTFB=no + fi + else + CFG_DIRECTFB=no + fi +fi + +if [ "$CFG_GBM" != "no" ]; then + if compileTest qpa/gbm "GBM"; then + CFG_GBM=yes + elif [ "$CFG_GBM" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " GBM support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GBM=no + fi +fi + +if [ "$CFG_LINUXFB" != "no" ]; then + if compileTest qpa/linuxfb "LinuxFB"; then + CFG_LINUXFB=yes + elif [ "$CFG_LINUXFB" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " Linux Framebuffer support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_LINUXFB=no + fi +fi + +if [ "$CFG_KMS" != "no" ]; then + if compileTest qpa/kms "KMS"; then + CFG_KMS=yes + elif [ "$CFG_KMS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " KMS support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_KMS=no + fi +fi + +if [ "$CFG_MIRCLIENT" != "no" ]; then + if compileTest qpa/mirclient "Mir client"; then + CFG_MIRCLIENT=yes + elif [ "$CFG_MIRCLIENT" = "yes" ]; then + echo " Mir client support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_MIRCLIENT=no + fi +fi + +# Detect libxkbcommon +MIN_REQ_XKBCOMMON="0.4.1" +# currently only xcb platform plugin supports building xkbcommon +if [ "$CFG_XCB" != "no" ]; then + if [ "$CFG_XKBCOMMON" != "no" ] && [ "$CFG_XKBCOMMON" != "qt" ]; then + # Check if there is a suitable system-wide xkbcommon + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xkbcommon xkbcommon-x11 >= $MIN_REQ_XKBCOMMON" 2>/dev/null; then + QMAKE_CFLAGS_XKBCOMMON="`$PKG_CONFIG --cflags xkbcommon xkbcommon-x11 2>/dev/null`" + QMAKE_LIBS_XKBCOMMON="`$PKG_CONFIG --libs xkbcommon xkbcommon-x11 2>/dev/null`" + + QMakeVar set QMAKE_CFLAGS_XKBCOMMON "$QMAKE_CFLAGS_XKBCOMMON" + QMakeVar set QMAKE_LIBS_XKBCOMMON "$QMAKE_LIBS_XKBCOMMON" + CFG_XKBCOMMON=system + elif [ "$CFG_XKBCOMMON" = "system" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " xkbcommon support cannot be enabled because either xkbcommon or " + echo " xkbcommon-x11 >= $MIN_REQ_XKBCOMMON was not found via pkg-config!" + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + # use the bundled version instead + CFG_XKBCOMMON=qt + fi + fi + if [ "$CFG_XKBCOMMON" = "qt" ]; then + QT_CONFIG="$QT_CONFIG xkbcommon-qt" + # detect XKB config root + if [ "$CFG_XKB_CONFIG_ROOT" = "auto" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xkeyboard-config" 2> /dev/null; then + CFG_XKB_CONFIG_ROOT="`$PKG_CONFIG --variable=xkb_base xkeyboard-config`" + else + # search for xkb configs in most probable locations + if [ -d "/usr/share/X11/xkb" ]; then + # Linux + CFG_XKB_CONFIG_ROOT="/usr/share/X11/xkb" + elif [ -d "/usr/local/share/X11/xkb" ]; then + # BSD UNIX + CFG_XKB_CONFIG_ROOT="/usr/local/share/X11/xkb" + fi + fi + fi + QMakeVar set QMAKE_XKB_CONFIG_ROOT "$CFG_XKB_CONFIG_ROOT" + if [ "$CFG_XKB_CONFIG_ROOT" = "auto" ]; then + CFG_XKB_CONFIG_ROOT="not found" + fi + fi +else + CFG_XKBCOMMON=no +fi + +# EGL Support +if [ "$CFG_EGL" != "no" ]; then + if [ "$CFG_EGL" = "yes" ] && [ "$CFG_OPENGL" = "no" ]; then + echo "EGL support was requested but OpenGL support is disabled." + echo "Either disable EGL support or enable OpenGL support." + exit 101 + fi + + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists egl 2>/dev/null; then + QMAKE_INCDIR_EGL=`$PKG_CONFIG --cflags-only-I egl 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'` + QMAKE_LIBS_EGL=`$PKG_CONFIG --libs egl 2>/dev/null` + QMAKE_CFLAGS_EGL=`$PKG_CONFIG --cflags egl 2>/dev/null` + QMakeVar set QMAKE_INCDIR_EGL "$QMAKE_INCDIR_EGL" + QMakeVar set QMAKE_LIBS_EGL "$QMAKE_LIBS_EGL" + QMakeVar set QMAKE_CFLAGS_EGL "`echo " $QMAKE_CFLAGS_EGL " | sed -e 's, -I[^ ]* , ,g;s,^ ,,;s, $,,'`" + fi # detect EGL support + if compileTest qpa/egl "EGL" $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then + CFG_EGL=yes + if compileTest qpa/egl-x11 "EGL-X11" $QMAKE_CFLAGS_EGL $QMAKE_LIBS_EGL; then + CFG_EGL_X=yes + else + CFG_EGL_X=no + fi + elif [ "$CFG_EGL" = "yes" ]; then + echo " The EGL functionality test failed; EGL is required by some QPA plugins to manage contexts & surfaces." + [ -z "$PKG_CONFIG" ] && echo " Use of pkg-config is not enabled, maybe you want to pass -pkg-config?" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_EGL, QMAKE_LIBDIR_EGL and QMAKE_LIBS_EGL in ${XQMAKESPEC}." + exit 1 + else + CFG_EGL=no + CFG_EGL_X=no + fi +fi + +if [ "$CFG_EGLFS" != "no" ]; then + if [ "$XPLATFORM_QNX" = "no" ] && [ "$CFG_OPENGL" != "no" ]; then + CFG_EGLFS="$CFG_EGL" + # Detect eglfs backends. + if compileTest qpa/eglfs-brcm "eglfs-brcm"; then + CFG_EGLFS_BRCM=yes + else + CFG_EGLFS_BRCM=no + fi + if compileTest qpa/eglfs-egldevice "eglfs-egldevice"; then + CFG_EGLFS_EGLDEVICE=yes + else + CFG_EGLFS_EGLDEVICE=no + fi + if compileTest qpa/eglfs-mali "eglfs-mali" \ + || compileTest qpa/eglfs-mali-2 "eglfs-mali-2"; then + CFG_EGLFS_MALI=yes + else + CFG_EGLFS_MALI=no + fi + if compileTest qpa/eglfs-viv "eglfs-viv"; then + CFG_EGLFS_VIV=yes + else + CFG_EGLFS_VIV=no + fi + if [ "$CFG_EGLFS_VIV" = "yes" ] && compileTest qpa/wayland-server "wayland-server"; then + CFG_EGLFS_VIV_WL=yes + else + CFG_EGLFS_VIV_WL=no + fi + else + CFG_EGLFS="no" + fi +fi + +# Detect accessibility support +if [ "$CFG_ACCESSIBILITY" = "no" ]; then + echo >&2 "Warning: Disabling Accessibility. This version of Qt is unsupported." +else + CFG_ACCESSIBILITY=yes + + # linux/xcb accessibility bridge needs dbus + if [ "$CFG_XCB" != "no" ]; then + if [ "$CFG_DBUS" != "no" ]; then + CFG_ACCESSIBILITY_ATSPI_BRIDGE=yes + QT_CONFIG="$QT_CONFIG accessibility-atspi-bridge" + else + echo >&2 "Warning: Disabling Linux Accessibility Bridge: DBus is missing." + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_ACCESSIBILITY_ATSPI_BRIDGE" + fi + fi +fi + +# Determine the default QPA platform +if [ -z "$QT_QPA_DEFAULT_PLATFORM" ]; then + # check the mkspec + QT_QPA_DEFAULT_PLATFORM=`getXQMakeConf QT_QPA_DEFAULT_PLATFORM` + if [ -z "$QT_QPA_DEFAULT_PLATFORM" ]; then + if [ "$XPLATFORM_MINGW" = "yes" ]; then + QT_QPA_DEFAULT_PLATFORM="windows" + elif [ "$XPLATFORM_MAC" = "yes" ]; then + QT_QPA_DEFAULT_PLATFORM="cocoa" + elif [ "$UNAME_SYSTEM" = "QNX" ]; then + QT_QPA_DEFAULT_PLATFORM="qnx" + elif [ "$XPLATFORM_INTEGRITY" = "yes" ]; then + QT_QPA_DEFAULT_PLATFORM="integrityfb" + else + QT_QPA_DEFAULT_PLATFORM="xcb" + fi + fi +fi + +if [ -n "$QMAKE_CFLAGS_XCB" ] || [ -n "$QMAKE_LIBS_XCB" ]; then + QMakeVar set QMAKE_CFLAGS_XCB "$QMAKE_CFLAGS_XCB" + QMakeVar set QMAKE_LIBS_XCB "$QMAKE_LIBS_XCB" +fi + +if [ "$CFG_DIRECTFB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG directfb" + QMakeVar set QMAKE_CFLAGS_DIRECTFB "$QMAKE_CFLAGS_DIRECTFB" + QMakeVar set QMAKE_LIBS_DIRECTFB "$QMAKE_LIBS_DIRECTFB" +fi +if [ "$CFG_GBM" = "yes" ]; then + QT_CONFIG="$QT_CONFIG gbm" +fi +if [ "$CFG_LINUXFB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG linuxfb" +fi +if [ "$CFG_INTEGRITYFB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG integrityfb" +fi +if [ "$CFG_KMS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG kms" +fi +if [ "$CFG_MIRCLIENT" = "yes" ]; then + QT_CONFIG="$QT_CONFIG mirclient" +fi + +if [ "$XPLATFORM_MAC" = "no" ] && [ "$XPLATFORM_MINGW" = "no" ] && [ "$XPLATFORM_QNX" = "no" ] && [ "$XPLATFORM_ANDROID" = "no" ] && [ "$XPLATFORM_HAIKU" = "no" ] && [ "$XPLATFORM_INTEGRITY" = "no" ]; then + if [ "$CFG_XCB" = "no" ] && [ "$CFG_EGLFS" = "no" ] && [ "$CFG_DIRECTFB" = "no" ] && [ "$CFG_LINUXFB" = "no" ] && [ "$CFG_MIRCLIENT" = "no" ]; then + if [ "$QPA_PLATFORM_GUARD" = "yes" ] && + ( [ "$ORIG_CFG_XCB" = "auto" ] || [ "$ORIG_CFG_EGLFS" = "auto" ] || [ "$ORIG_CFG_DIRECTFB" = "auto" ] || [ "$ORIG_CFG_LINUXFB" = "auto" ] || [ "$ORIG_CFG_MIRCLIENT" = "auto" ] ); then + echo "No QPA platform plugin enabled!" + echo " If you really want to build without a QPA platform plugin you must pass" + echo " -no-qpa-platform-guard to configure. Doing this will" + echo " produce a Qt that can not run GUI applications." + echo " The dependencies needed for xcb to build are listed in" + echo " src/plugins/platforms/xcb/README" + exit 1 + fi +fi + fi + +# double-conversion support +if [ "$CFG_DOUBLECONVERSION" = "no" ]; then + if ! compileTest common/xlocalescanprint "XLocaleScanPrint"; then + echo "Your C library does not provide sscanf_l or snprintf_l." + echo "You need to use libdouble-conversion for double/string conversion." + exit 1 + fi +elif [ "$CFG_DOUBLECONVERSION" != "qt" ]; then + if compileTest unix/doubleconversion "DoubleConversion"; then + CFG_DOUBLECONVERSION=system + elif [ "$CFG_DOUBLECONVERSION" = "system" ]; then + echo "No system libdouble-conversion found." + exit 1 + else + CFG_DOUBLECONVERSION=qt + fi +fi + +# freetype support +[ "$XPLATFORM_MINGW" = "yes" ] && [ "$CFG_FREETYPE" = "auto" ] && CFG_FREETYPE=no +if [ "$CFG_FREETYPE" = "auto" ]; then + if compileTest unix/freetype "FreeType"; then + CFG_FREETYPE=system + else + CFG_FREETYPE=yes + fi +fi + +# harfbuzz support +[ "$XPLATFORM_MAC" = "yes" ] && [ "$CFG_HARFBUZZ" = "auto" ] && CFG_HARFBUZZ=qt +if [ "$CFG_HARFBUZZ" = "auto" ] || [ "$CFG_HARFBUZZ" = "system" ]; then + if compileTest unix/harfbuzz "HarfBuzz"; then + CFG_HARFBUZZ=system + else + if [ "$CFG_HARFBUZZ" = "system" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo " HarfBuzz system library support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_HARFBUZZ=qt + fi + fi +fi +if [ "$XPLATFORM_MAC" = "yes" -a "$CFG_HARFBUZZ" != "qt" ]; then + echo + echo "WARNING: On OS X, AAT is supported only with -qt-harfbuzz." + echo +fi + +if ! compileTest unix/stl "STL" && + [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "STL functionality check failed! Cannot build Qt with this STL library." + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 101 +fi + + +# detect POSIX clock_gettime() +if [ "$CFG_CLOCK_GETTIME" = "auto" ]; then + if compileTest unix/clock-gettime "POSIX clock_gettime()"; then + CFG_CLOCK_GETTIME=yes + else + CFG_CLOCK_GETTIME=no + fi +fi + +# detect POSIX monotonic clocks +if [ "$CFG_CLOCK_GETTIME" = "yes" ] && [ "$CFG_CLOCK_MONOTONIC" = "auto" ]; then + if compileTest unix/clock-monotonic "POSIX Monotonic Clock"; then + CFG_CLOCK_MONOTONIC=yes + else + CFG_CLOCK_MONOTONIC=no + fi +elif [ "$CFG_CLOCK_GETTIME" = "no" ]; then + CFG_CLOCK_MONOTONIC=no +fi + +# detect posix_fallocate +if [ "$CFG_POSIX_FALLOCATE" = "auto" ]; then + if compileTest unix/posix_fallocate "posix_fallocate"; then + CFG_POSIX_FALLOCATE=yes + else + CFG_POSIX_FALLOCATE=no + fi +fi + +# detect mremap +if [ "$CFG_MREMAP" = "auto" ]; then + if compileTest unix/mremap "mremap"; then + CFG_MREMAP=yes + else + CFG_MREMAP=no + fi +fi + +# find if the platform provides getaddrinfo (ipv6 dns lookups) +if [ "$CFG_GETADDRINFO" != "no" ]; then + if compileTest unix/getaddrinfo "getaddrinfo"; then + CFG_GETADDRINFO=yes + else + if [ "$CFG_GETADDRINFO" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "getaddrinfo support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GETADDRINFO=no + fi + fi +fi + +# find if the platform provides inotify +if [ "$CFG_INOTIFY" != "no" ]; then + if compileTest unix/inotify "inotify"; then + CFG_INOTIFY=yes + else + if [ "$CFG_INOTIFY" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "inotify support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_INOTIFY=no + fi + fi +fi + +# find if the platform provides eventfd +if [ "$CFG_EVENTFD" != "no" ]; then + if compileTest unix/eventfd "eventfd"; then + CFG_EVENTFD=yes + else + if [ "$CFG_EVENTFD" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "eventfd support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_EVENTFD=no + fi + fi +fi + +# find if the platform provides if_nametoindex (ipv6 interface name support) +if [ "$CFG_IPV6IFNAME" != "no" ]; then + if compileTest unix/ipv6ifname "IPv6 interface name"; then + CFG_IPV6IFNAME=yes + else + if [ "$CFG_IPV6IFNAME" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "IPv6 interface name support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_IPV6IFNAME=no + fi + fi +fi + +# find if the platform provides getifaddrs (network interface enumeration) +if [ "$CFG_GETIFADDRS" != "no" ]; then + if compileTest unix/getifaddrs "getifaddrs"; then + CFG_GETIFADDRS=yes + else + if [ "$CFG_GETIFADDRS" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "getifaddrs support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_GETIFADDRS=no + fi + fi +fi + +# find if the platform provides thread-safe CLOEXEC support +if compileTest unix/cloexec "cloexec"; then + CFG_CLOEXEC=yes +fi + +if compileTest unix/ppoll "ppoll"; then + CFG_POLL="ppoll" +elif compileTest unix/pollts "pollts"; then + CFG_POLL="pollts" +elif compileTest unix/poll "poll"; then + CFG_POLL="poll" +else + CFG_POLL="select" +fi + +if [ "$XPLATFORM_MAC" = "yes" ] && [ "$CFG_SECURETRANSPORT" != "no" ] && ([ "$CFG_OPENSSL" = "no" ] || [ "$CFG_OPENSSL" = "auto" ]); then + CFG_SECURETRANSPORT=yes + CFG_OPENSSL=no +else + CFG_SECURETRANSPORT=no +fi + +# detect OpenSSL +if [ "$CFG_OPENSSL" != "no" ]; then + if compileTest unix/openssl "OpenSSL"; then + if [ "$CFG_OPENSSL" = "auto" ]; then + CFG_OPENSSL=yes + fi + else + if ( [ "$CFG_OPENSSL" = "yes" ] || [ "$CFG_OPENSSL" = "linked" ] ) && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "OpenSSL support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_OPENSSL=no + fi + fi +fi + + +# detect PCRE +if [ "$CFG_PCRE" != "qt" ]; then + if compileTest unix/pcre "PCRE"; then + CFG_PCRE=system + else + if [ "$CFG_PCRE" = "system" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "PCRE support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_PCRE=qt + fi + fi +fi + +# detect OpenVG support +if [ "$CFG_OPENVG" != "no" ]; then + if compileTest unix/openvg "OpenVG"; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + elif compileTest unix/openvg "OpenVG" -config openvg_on_opengl; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + CFG_OPENVG_ON_OPENGL=yes + elif compileTest unix/openvg "OpenVG (lc includes)" -config lower_case_includes; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + CFG_OPENVG_LC_INCLUDES=yes + elif compileTest unix/openvg "OpenVG (lc includes)" -config "openvg_on_opengl lower_case_includes"; then + if [ "$CFG_OPENVG" = "auto" ]; then + CFG_OPENVG=yes + fi + CFG_OPENVG_LC_INCLUDES=yes + CFG_OPENVG_ON_OPENGL=yes + else + if [ "$CFG_OPENVG" != "auto" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "$CFG_OPENVG was specified for OpenVG but cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_OPENVG=no + fi + fi + if [ "$CFG_OPENVG" = "yes" ] && compileTest unix/shivavg "ShivaVG"; then + CFG_OPENVG_SHIVA=yes + fi +fi + +if [ "$CFG_ALSA" = "auto" ]; then + if compileTest unix/alsa "alsa"; then + CFG_ALSA=yes + else + CFG_ALSA=no + fi +fi + +if [ "$CFG_AUDIO_BACKEND" = "auto" ]; then + CFG_AUDIO_BACKEND=yes +fi + +# detect GStreamer support +if [ "$CFG_GSTREAMER" = "auto" ] || [ "$CFG_GSTREAMER" = "yes" ]; then + if compileTest unix/gstreamer "GStreamer 1.0" -config gst-1.0; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=1.0 + elif compileTest unix/gstreamer "GStreamer 0.10" -config gst-0.10; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=0.10 + else + if [ "$CFG_GSTREAMER" = "yes" ]; then + echo "GStreamer support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 1 + fi + CFG_GSTREAMER=no + fi +elif [ "$CFG_GSTREAMER" = "0.10" ]; then + if compileTest unix/gstreamer "GStreamer 0.10" -config gst-0.10; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=0.10 + else + echo "The GStreamer 0.10 functionality test failed!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 1 + fi +elif [ "$CFG_GSTREAMER" = "1.0" ]; then + if compileTest unix/gstreamer "GStreamer 1.0" -config gst-1.0; then + CFG_GSTREAMER=yes + CFG_GSTREAMER_VERSION=1.0 + else + echo "The GStreamer 1.0 functionality test failed!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + exit 1 + fi +fi + +if [ "$CFG_LARGEFILE" != "yes" ] && [ "$XPLATFORM_MINGW" = "yes" ]; then + echo "Warning: largefile support cannot be disabled for win32." + CFG_LARGEFILE="yes" +fi + +# Detect DirectWrite 2 support on Windows +if [ "$CFG_DIRECTWRITE" = "no" ]; then + CFG_DIRECTWRITE2=no +fi +if [ "$CFG_DIRECTWRITE2" = "auto" ]; then + if compileTest win/directwrite2 "directwrite2"; then + CFG_DIRECTWRITE2=yes + else + CFG_DIRECTWRITE2=no + fi +fi + +#------------------------------------------------------------------------------- +# ask for all that hasn't been auto-detected or specified in the arguments +#------------------------------------------------------------------------------- + +# Set "c++11" unconditionally, as lots of code does contains(QT_CONFIG, c++11) +QT_CONFIG="$QT_CONFIG c++11" +if [ "$CFG_STDCXX" != "c++11" ]; then + QT_CONFIG="$QT_CONFIG c++14" + if [ "$CFG_STDCXX" != "c++14" ]; then + QT_CONFIG="$QT_CONFIG c++1z" + fi +fi + +if [ "$CFG_ATOMIC64" = "libatomic" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG atomic64-libatomic" +fi + +if [ "$CFG_SILENT" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG silent" +fi + +# disable accessibility +if [ "$CFG_ACCESSIBILITY" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_ACCESSIBILITY" +else + QT_CONFIG="$QT_CONFIG accessibility" +fi + +# enable egl +if [ "$CFG_EGL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG egl" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL" +fi + +# enable egl on X +if [ "$CFG_EGL_X" = "yes" ]; then + QT_CONFIG="$QT_CONFIG egl_x11" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL_X11" +fi + +# enable eglfs +if [ "$CFG_EGLFS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs" +else + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGLFS" +fi +# eglfs backends +if [ "$CFG_EGLFS_BRCM" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_brcm" +fi +if [ "$CFG_EGLFS_EGLDEVICE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_egldevice" +fi +if [ "$CFG_EGLFS" = "yes" ] && [ "$CFG_KMS" = "yes" ] && [ "$CFG_GBM" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_gbm" + CFG_EGLFS_GBM="yes" +else + CFG_EGLFS_GBM="no" +fi +if [ "$CFG_EGLFS_MALI" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_mali" +fi +if [ "$CFG_EGLFS_VIV" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_viv" + if [ "$CFG_EGLFS_VIV_WL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eglfs_viv_wl" + fi +fi + +# enable openvg +if [ "$CFG_OPENVG" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_OPENVG" +else + QT_CONFIG="$QT_CONFIG openvg" + if [ "$CFG_OPENVG_LC_INCLUDES" = "yes" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_LOWER_CASE_VG_INCLUDES" + fi + if [ "$CFG_OPENVG_ON_OPENGL" = "yes" ]; then + QT_CONFIG="$QT_CONFIG openvg_on_opengl" + fi + if [ "$CFG_OPENVG_SHIVA" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shivavg" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_SHIVAVG" + fi +fi + +# enable opengl +if [ "$CFG_OPENGL" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_OPENGL" +else + QT_CONFIG="$QT_CONFIG opengl" +fi + +if [ "$CFG_OPENGL" = "es2" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" + QT_CONFIG="$QT_CONFIG opengles2" +fi + +if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +elif [ "$CFG_SHARED" = "no" ]; then + QT_CONFIG="$QT_CONFIG static" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG static" +fi + +#FIXME: qpa is implicit this should all be removed +QMAKE_CONFIG="$QMAKE_CONFIG qpa" +QT_CONFIG="$QT_CONFIG qpa" +QTCONFIG_CONFIG="$QTCONFIG_CONFIG qpa" + +if [ "$CFG_LARGEFILE" = "yes" ] && [ "$XPLATFORM_MINGW" != "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG largefile" +fi +if [ "$CFG_USE_GNUMAKE" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG GNUmake" +fi +[ "$CFG_REDUCE_EXPORTS" = "yes" ] && QT_CONFIG="$QT_CONFIG reduce_exports" +[ "$CFG_STACK_PROTECTOR_STRONG" = "yes" ] && QT_CONFIG="$QT_CONFIG stack-protector-strong" +[ "$CFG_REDUCE_RELOCATIONS" = "yes" ] && QT_CONFIG="$QT_CONFIG reduce_relocations" +[ "$CFG_STRIP" = "no" ] && QMAKE_CONFIG="$QMAKE_CONFIG nostrip" +if testXConfig precompile_header; then + [ "$CFG_PRECOMPILE" = "no" ] && QMakeVar del CONFIG precompile_header +else + [ "$CFG_PRECOMPILE" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG precompile_header" +fi +[ "$CFG_USE_GOLD_LINKER" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG use_gold_linker" +[ "$CFG_ENABLE_NEW_DTAGS" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG enable_new_dtags" +if [ "$CFG_SEPARATE_DEBUG_INFO" = "yes" ]; then + QT_CONFIG="$QT_CONFIG separate_debug_info" +fi +[ "$CFG_SSE2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse2" +[ "$CFG_SSE3" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse3" +[ "$CFG_SSSE3" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG ssse3" +[ "$CFG_SSE4_1" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse4_1" +[ "$CFG_SSE4_2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG sse4_2" +[ "$CFG_AVX" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx" +[ "$CFG_AVX2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG avx2" +for feature in $CFG_AVX512; do + QMAKE_CONFIG="$QMAKE_CONFIG avx512$feature" +done +[ "$CFG_NEON" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG neon" +if [ "$CFG_ARCH" = "mips" ]; then + [ "$CFG_MIPS_DSP" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dsp" + [ "$CFG_MIPS_DSPR2" = "yes" ] && QMAKE_CONFIG="$QMAKE_CONFIG mips_dspr2" +fi +if [ "$CFG_CLOCK_GETTIME" = "yes" ]; then + QT_CONFIG="$QT_CONFIG clock-gettime" +fi +if [ "$CFG_CLOCK_MONOTONIC" = "yes" ]; then + QT_CONFIG="$QT_CONFIG clock-monotonic" +fi +if [ "$CFG_POSIX_FALLOCATE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG posix_fallocate" +fi +if [ "$CFG_MREMAP" = "yes" ]; then + QT_CONFIG="$QT_CONFIG mremap" +fi +if [ "$CFG_GETADDRINFO" = "yes" ]; then + QT_CONFIG="$QT_CONFIG getaddrinfo" +fi +if [ "$CFG_IPV6IFNAME" = "yes" ]; then + QT_CONFIG="$QT_CONFIG ipv6ifname" +fi +if [ "$CFG_GETIFADDRS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG getifaddrs" +fi +if [ "$CFG_INOTIFY" = "yes" ]; then + QT_CONFIG="$QT_CONFIG inotify" +fi +if [ "$CFG_EVENTFD" = "yes" ]; then + QT_CONFIG="$QT_CONFIG eventfd" +fi +if [ "$CFG_CLOEXEC" = "yes" ]; then + QT_CONFIG="$QT_CONFIG threadsafe-cloexec" +fi +if [ "$CFG_POLL" = "select" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_NATIVE_POLL" +fi +QT_CONFIG="$QT_CONFIG poll_$CFG_POLL" +if [ "$CFG_LIBJPEG" = "no" ]; then + CFG_JPEG="no" +elif [ "$CFG_LIBJPEG" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-jpeg" +fi +if [ "$CFG_JPEG" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-jpeg" +elif [ "$CFG_JPEG" = "yes" ]; then + QT_CONFIG="$QT_CONFIG jpeg" +fi +if [ "$CFG_LIBPNG" = "no" ]; then + CFG_PNG="no" +fi +if [ "$CFG_LIBPNG" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-png" +fi +if [ "$CFG_PNG" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-png" +elif [ "$CFG_PNG" = "yes" ]; then + QT_CONFIG="$QT_CONFIG png" +fi +if [ "$CFG_GIF" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-gif" +elif [ "$CFG_GIF" = "yes" ]; then + QT_CONFIG="$QT_CONFIG gif" +fi +if [ "$CFG_DOUBLECONVERSION" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-doubleconversion" +elif [ "$CFG_DOUBLECONVERSION" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-doubleconversion" +else + QT_CONFIG="$QT_CONFIG doubleconversion" +fi +if [ "$CFG_FREETYPE" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-freetype" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_FREETYPE" +elif [ "$CFG_FREETYPE" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-freetype" +else + QT_CONFIG="$QT_CONFIG freetype" +fi +if [ "$CFG_HARFBUZZ" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-harfbuzz" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_HARFBUZZ" +elif [ "$CFG_HARFBUZZ" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-harfbuzz" +else + QT_CONFIG="$QT_CONFIG harfbuzz" +fi +if [ "$CFG_GUI" = "auto" ]; then + CFG_GUI="yes" +fi +if [ "$CFG_GUI" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-gui" + CFG_WIDGETS="no" +fi +if [ "$CFG_WIDGETS" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-widgets" + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_WIDGETS" +fi + +if [ "$XPLATFORM_MAC" = "yes" ]; then + #On Mac we implicitly link against libz, so we + #never use the 3rdparty stuff. + [ "$CFG_ZLIB" = "yes" ] && CFG_ZLIB="system" +fi +if [ "$CFG_ZLIB" = "yes" ]; then + QT_CONFIG="$QT_CONFIG zlib" +elif [ "$CFG_ZLIB" = "system" ]; then + QT_CONFIG="$QT_CONFIG system-zlib" +fi + +[ "$CFG_MTDEV" = "yes" ] && QT_CONFIG="$QT_CONFIG mtdev" +[ "$CFG_NIS" = "yes" ] && QT_CONFIG="$QT_CONFIG nis" +[ "$CFG_CUPS" = "yes" ] && QT_CONFIG="$QT_CONFIG cups" +[ "$CFG_ICONV" = "yes" ] && QT_CONFIG="$QT_CONFIG iconv" +[ "$CFG_ICONV" = "sun" ] && QT_CONFIG="$QT_CONFIG sun-libiconv" +[ "$CFG_ICONV" = "gnu" ] && QT_CONFIG="$QT_CONFIG gnu-libiconv" +[ "$CFG_GLIB" = "yes" ] && QT_CONFIG="$QT_CONFIG glib" +[ "$CFG_DBUS" != "no" ] && QT_CONFIG="$QT_CONFIG dbus" +[ "$CFG_DBUS" = "linked" ] && QT_CONFIG="$QT_CONFIG dbus-linked" +[ "$CFG_OPENSSL" = "yes" ] && QT_CONFIG="$QT_CONFIG openssl" +[ "$CFG_OPENSSL" = "linked" ] && QT_CONFIG="$QT_CONFIG openssl-linked" +[ "$CFG_SECURETRANSPORT" = "yes" ] && QT_CONFIG="$QT_CONFIG ssl securetransport" +[ "$CFG_LIBPROXY" = "yes" ] && QT_CONFIG="$QT_CONFIG libproxy" +[ "$CFG_XCB" != "no" ] && QT_CONFIG="$QT_CONFIG xcb" +[ "$CFG_XINPUT2" = "yes" ] && QT_CONFIG="$QT_CONFIG xinput2" +[ "$CFG_SYSTEM_PROXIES" = "yes" ] && QT_CONFIG="$QT_CONFIG system-proxies" +[ "$CFG_DIRECTWRITE" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite" +[ "$CFG_DIRECTWRITE2" = "yes" ] && QT_CONFIG="$QT_CONFIG directwrite2" + +[ '!' -z "$DEFINES" ] && QMakeVar add EXTRA_DEFINES "$DEFINES" +[ '!' -z "$INCLUDES" ] && QMakeVar add EXTRA_INCLUDEPATH "$INCLUDES" +[ '!' -z "$L_FLAGS" ] && QMakeVar add EXTRA_LIBS "$L_FLAGS" + +if [ -z "`getXQMakeConf 'QMAKE_(LFLAGS_)?RPATH'`" ]; then + if [ -n "$RPATH_FLAGS" ]; then + echo + echo "ERROR: -R cannot be used on this platform as \$QMAKE_LFLAGS_RPATH is" + echo " undefined." + echo + exit 1 + elif [ "$CFG_RPATH" = "yes" ]; then + RPATH_MESSAGE=" NOTE: This platform does not support runtime library paths, using -no-rpath." + CFG_RPATH=no + fi +else + if [ -n "$RPATH_FLAGS" ]; then + # add the user defined rpaths + QMakeVar add EXTRA_RPATHS "$RPATH_FLAGS" + fi +fi +if [ "$CFG_RPATH" = "yes" ]; then + QT_CONFIG="$QT_CONFIG rpath" +fi + +if [ '!' -z "$W_FLAGS" ]; then + # add the user defined warning flags + QMakeVar add QMAKE_CFLAGS_WARN_ON "$W_FLAGS" + QMakeVar add QMAKE_CXXFLAGS_WARN_ON "$W_FLAGS" +fi + +if [ "$XPLATFORM_MINGW" = "yes" ]; then + # mkspecs/features/win32/default_pre.prf sets "no-rtti". + # Follow default behavior of configure.exe by overriding with "rtti". + QTCONFIG_CONFIG="$QTCONFIG_CONFIG rtti" +fi + +if [ "$CFG_ALSA" = "yes" ]; then + QT_CONFIG="$QT_CONFIG alsa" +fi + +if [ "$CFG_PULSEAUDIO" = "yes" ]; then + QT_CONFIG="$QT_CONFIG pulseaudio" +fi + +[ "$CFG_GSTREAMER_VERSION" = "0.10" ] && QT_CONFIG="$QT_CONFIG gstreamer-0.10" +[ "$CFG_GSTREAMER_VERSION" = "1.0" ] && QT_CONFIG="$QT_CONFIG gstreamer-1.0" + +if [ "$CFG_COREWLAN" = "yes" ]; then + QT_CONFIG="$QT_CONFIG corewlan" +fi + +if [ "$CFG_ICU" = "yes" ]; then + QT_CONFIG="$QT_CONFIG icu" +fi + +if [ "$CFG_FORCE_ASSERTS" = "yes" ]; then + QT_CONFIG="$QT_CONFIG force_asserts" +fi + +if [ "$CFG_LTCG" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG ltcg" +fi + +if [ "$CFG_SANITIZERS" != "none" ]; then + + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitizer" + + if [ "$CFG_SANITIZE_ADDRESS" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_address" + fi + + if [ "$CFG_SANITIZE_THREAD" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_thread" + fi + + if [ "$CFG_SANITIZE_MEMORY" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_memory" + fi + + if [ "$CFG_SANITIZE_UNDEFINED" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG sanitize_undefined" + fi +fi + +if [ "$CFG_PCRE" = "qt" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG pcre" +fi + +# +# Some Qt modules are too advanced in C++ for some old compilers +# Detect here the platforms where they are known to work. +# +# See Qt documentation for more information on which features are +# supported and on which compilers. +# +canBuildQtConcurrent="yes" + +case "$XPLATFORM" in + hpux-g++*) + # PA-RISC's assembly is too limited + # gcc 3.4 on that platform can't build QtXmlPatterns + # the assembly it generates cannot be compiled + + # Check gcc's version + case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in + 4*) + ;; + 3.4*) + canBuildQtXmlPatterns="no" + ;; + *) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + ;; + esac + ;; + unsupported/vxworks-*-g++*) + canBuildWebKit="no" + ;; + unsupported/vxworks-*-dcc*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + ;; + *-g++*) + # Check gcc's version + case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in + 4*|3.4*) + ;; + 3.3*) + canBuildWebKit="no" + ;; + *) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + ;; + esac + ;; + solaris-cc*) + # Check the compiler version + case `${QMAKE_CONF_COMPILER} -V 2>&1 | $AWK '{print $4}'` in + 5.[012345678]) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + 5.*) + canBuildWebKit="no" + canBuildQtConcurrent="no" + ;; + esac + ;; + hpux-acc*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + hpuxi-acc*) + canBuildWebKit="no" + ;; + aix-xlc*) + # Get the xlC version + cat > xlcver.c < +int main() +{ + printf("%d.%d\n", __xlC__ >> 8, __xlC__ & 0xFF); + return 0; +} +EOF + xlcver= + if ${QMAKE_CONF_COMPILER} -o xlcver xlcver.c >/dev/null 2>/dev/null; then + xlcver=`./xlcver 2>/dev/null` + rm -f ./xlcver + fi + if [ "$OPT_VERBOSE" = "yes" ]; then + if [ -n "$xlcver" ]; then + echo Found IBM xlC version: $xlcver. + else + echo Could not determine IBM xlC version, assuming oldest supported. + fi + fi + + case "$xlcver" in + [123456].*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + *) + canBuildWebKit="no" + canBuildQtConcurrent="no" + ;; + esac + ;; + irix-cc*) + canBuildWebKit="no" + canBuildQtConcurrent="no" + ;; +esac + +if [ "$CFG_GUI" = "no" ]; then + # WebKit requires Qt GUI + canBuildWebKit="no" +fi + +if [ "$CFG_SHARED" = "no" ]; then + echo + echo "WARNING: Using static linking will disable the WebKit module." + echo + canBuildWebKit="no" +fi + +CFG_CONCURRENT="yes" +if [ "$canBuildQtConcurrent" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_CONCURRENT" + CFG_CONCURRENT="no" +else + QT_CONFIG="$QT_CONFIG concurrent" +fi + +# ### Vestige +if [ "$CFG_AUDIO_BACKEND" = "yes" ]; then + QT_CONFIG="$QT_CONFIG audio-backend" +fi + +# ### Vestige +if [ "$CFG_WEBKIT" = "debug" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG webkit-debug" +fi + +# ### Vestige +if [ "$CFG_QML_DEBUG" = "no" ]; then + QT_CONFIG="$QT_CONFIG no-qml-debug" +fi + +case "$QMAKE_CONF_COMPILER" in +*clang*) + # Clang + COMPILER_VERSION=`${QMAKE_CONF_COMPILER} -v 2>&1 | sed -n -E ' +/^Apple (clang|LLVM) version /{s///; s/^([0-9]*)\.([0-9]*).*$/QT_APPLE_CLANG_MAJOR_VERSION=\1; QT_APPLE_CLANG_MINOR_VERSION=\2/;p;q;} +/^clang version /{s///; s/^([0-9]*)\.([0-9]*).*$/QT_CLANG_MAJOR_VERSION=\1; QT_CLANG_MINOR_VERSION=\2/;p;q;}'` + eval "$COMPILER_VERSION" + ;; +*icpc) + # Intel CC + COMPILER_VERSION=`${QMAKE_CONF_COMPILER} -v 2>&1 | sed -n ' +s/icpc version \([0-9]*\)\.\([0-9]*\)\.\([0-9]*\) .*$/QT_ICC_MAJOR_VERSION=\1; QT_ICC_MINOR_VERSION=\2; QT_ICC_PATCH_VERSION=\3/p'` + eval "$COMPILER_VERSION" + ;; +*g++*) + # GNU C++ + COMPILER_VERSION=`${QMAKE_CONF_COMPILER} -dumpversion 2>/dev/null` + + case "$COMPILER_VERSION" in + *.*.*) + QT_GCC_MAJOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\1,'` + QT_GCC_MINOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\2,'` + QT_GCC_PATCH_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*,\3,'` + ;; + *.*) + QT_GCC_MAJOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\).*,\1,'` + QT_GCC_MINOR_VERSION=`echo $COMPILER_VERSION | sed 's,^\([0-9]*\)\.\([0-9]*\).*,\2,'` + QT_GCC_PATCH_VERSION=0 + ;; + *) + QT_GCC_MAJOR_VERSION=$COMPILER_VERSION + QT_GCC_MINOR_VERSION=0 + QT_GCC_PATCH_VERSION=0 + esac + + ;; +*) + # + ;; +esac + +echo "Done running configuration tests." + +# Save stdout in fd 3 +exec 3>&1 + +#------------------------------------------------------------------------------- +# part of configuration information goes into qconfig.h +#------------------------------------------------------------------------------- + +# Open qconfig.h.new +exec > "$outpath/src/corelib/global/qconfig.h.new" + +# start with Qt's version number +cat </dev/null 2>&1; then + # QT_NO_option can be forcefully turned on by QT_option + cfgdNeg=`echo $cfgd | sed 's,QT_NO_,QT_,'` + elif [ true ] && echo "$cfgd" | grep 'QT_' >/dev/null 2>&1; then + # QT_option can be forcefully turned off by QT_NO_option + cfgdNeg=`echo $cfgd | sed 's,QT_,QT_NO_,'` + fi + + if [ -z $cfgdNeg ]; then +cat << EOF +#ifndef $cfgd +# define $cfg +#endif + +EOF + else +cat << EOF +#if defined($cfgd) && defined($cfgdNeg) +# undef $cfgd +#elif !defined($cfgd) && !defined($cfgdNeg) +# define $cfg +#endif + +EOF + fi + done +cat << EOF +#endif // QT_BOOTSTRAPPED + +EOF +fi + +if [ "$CFG_REDUCE_EXPORTS" = "yes" ]; then +cat << EOF +#define QT_VISIBILITY_AVAILABLE + +EOF +fi + +if [ -n "$QT_LIBINFIX" ]; then +cat << EOF +#define QT_LIBINFIX "$QT_LIBINFIX" + +EOF +fi + +echo "#define QT_QPA_DEFAULT_PLATFORM_NAME \"$QT_QPA_DEFAULT_PLATFORM\"" + +# Close qconfig.h.new (by restoring the original stdout) +exec >&3 + +# avoid unecessary rebuilds by copying only if qconfig.h has changed +if cmp -s "$outpath/src/corelib/global/qconfig.h" "$outpath/src/corelib/global/qconfig.h.new"; then + rm -f "$outpath/src/corelib/global/qconfig.h.new" +else + mv -f "$outpath/src/corelib/global/qconfig.h.new" "$outpath/src/corelib/global/qconfig.h" +fi + +#------------------------------------------------------------------------------- +# save configuration into qconfig.pri +#------------------------------------------------------------------------------- + +# open qconfig.pri +QTCONFIG="$outpath/mkspecs/qconfig.pri" +exec > "$QTCONFIG.tmp" + +if [ "$CFG_DEBUG" = "yes" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG debug" + if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG release" + fi + QT_CONFIG="$QT_CONFIG debug" +elif [ "$CFG_DEBUG" = "no" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG release" + if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + QT_CONFIG="$QT_CONFIG debug" + fi + QT_CONFIG="$QT_CONFIG release" +fi +if [ "$CFG_FRAMEWORK" = "no" ]; then + QTCONFIG_CONFIG="$QTCONFIG_CONFIG qt_no_framework" +else + QT_CONFIG="$QT_CONFIG qt_framework" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG qt_framework" +fi +if [ "$CFG_DEV" = "yes" ]; then + QT_CONFIG="$QT_CONFIG private_tests" + if [ "$CFG_WERROR" != "no" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG warnings_are_errors" + fi + if [ "$CFG_HEADERSCLEAN" != "no" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG headersclean" + fi +else + if [ "$CFG_WERROR" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG warnings_are_errors" + fi + if [ "$CFG_HEADERSCLEAN" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG headersclean" + fi +fi + +cat <&3 + +# replace qconfig.pri if it differs from the newly created temp file +if cmp -s "$QTCONFIG.tmp" "$QTCONFIG"; then + rm -f "$QTCONFIG.tmp" +else + mv -f "$QTCONFIG.tmp" "$QTCONFIG" +fi + +#------------------------------------------------------------------------------- +# save configuration into qmodule.pri +#------------------------------------------------------------------------------- + +# open qmodule.pri +QTMODULE="$outpath/mkspecs/qmodule.pri" +exec > "$QTMODULE.tmp" + +echo "CONFIG += $QMAKE_CONFIG" +echo "QT_BUILD_PARTS += $CFG_BUILD_PARTS" +if [ -n "$CFG_SKIP_MODULES" ]; then + echo "QT_SKIP_MODULES += $CFG_SKIP_MODULES" +fi +DISABLED_FEATURES= +for cfg in $QCONFIG_FLAGS; do + ncfg=${cfg#QT_NO_} + if [ x$ncfg != x$cfg ]; then + DISABLED_FEATURES="$DISABLED_FEATURES $ncfg" + fi +done +if [ -n "$DISABLED_FEATURES" ]; then + echo "QT_NO_DEFINES = $DISABLED_FEATURES" +fi +echo "QT_QCONFIG_PATH = ${CFG_QCONFIG_PATH#$relpath/src/corelib/global/}" + +cat <&3 + +# replace qmodule.pri if it differs from the newly created temp file +if cmp -s "$QTMODULE.tmp" "$QTMODULE"; then + rm -f "$QTMODULE.tmp" +else + mv -f "$QTMODULE.tmp" "$QTMODULE" +fi + +#------------------------------------------------------------------------------- +# give feedback on configuration +#------------------------------------------------------------------------------- +exec 1>$outpath/config.summary # redirect output temporarily to config.summary + +report_support() +{ + case "$#,$2" in + 2,auto) + # 2 arguments and the result is "auto", so just say "yes" + # this is usually an error in the configure script, but oh well.. + echo "$1 yes" + return + ;; + [012],* | *,no*) + # 0, 1 or 2 arguments, or anything starting with "no" + # print just the first part of the argument (before the dash) + echo "$1 ${2%%-*}" + return + :; + esac + heading=$1 + shift + + value=$1 + shift + + while [ $# -gt 0 ]; do + if [ "$value" = "$1" ]; then + echo "$heading yes ($2)" + return + fi + shift + shift + done + echo "$heading $value" +} + +report_support_plugin() +{ + report_support "$1" "$2-$3" \ + yes-qt "in $4, using bundled copy" \ + yes-system "in $4, using system library" \ + plugin-qt "plugin, using bundled copy" \ + plugin-system "plugin, using system library" +} + +echo +echo " Configure summary" +echo +if [ "$XPLATFORM" = "$PLATFORM" ]; then + # the missing space before $CFG_FEATURES is intentional + echo "Build type: $PLATFORM ($CFG_ARCH, CPU features:${CFG_CPUFEATURES:- none detected})" +else + echo "Building on: $PLATFORM ($CFG_HOST_ARCH, CPU features:${CFG_HOST_CPUFEATURES:- none detected})" + echo "Building for: $XPLATFORM ($CFG_ARCH, CPU features:${CFG_CPUFEATURES:- none detected})" +fi + + +if [ -n "$PLATFORM_NOTES" ]; then + echo "Platform notes:" + echo "$PLATFORM_NOTES" +else + echo +fi + +if [ "$OPT_VERBOSE" = "yes" ]; then + echo $ECHO_N "qmake vars .......... $ECHO_C" + cat "$QMAKE_VARS_FILE" | tr '\n' ' ' + echo "qmake switches ......... $QMAKE_SWITCHES" + echo +fi + +# Build configuration +echo "Build options:" +echo $ECHO_N " Configuration .......... $ECHO_C" +echo $QMAKE_CONFIG $QT_CONFIG | tr ' ' '\n' | sort | tr '\n' ' ' +echo +echo " Build parts ............ $CFG_BUILD_PARTS" +release="release" +[ "$CFG_FORCEDEBUGINFO" = "yes" ] && release="release (with debug info)" +[ "$CFG_DEBUG" = "yes" ] && build_mode="debug" || build_mode=$release +if [ "$CFG_DEBUG_RELEASE" = "yes" ]; then + build_mode="debug and $release; default link: $build_mode" +fi +if [ "$CFG_RELEASE_TOOLS" = "yes" ]; then + build_mode="$build_mode; optimized tools" +fi +echo " Mode ................... $build_mode" +unset build_mode release +echo " Using sanitizer(s)...... $CFG_SANITIZERS" +echo " Using C++ standard ..... $CFG_STDCXX" +echo " Using gold linker....... $CFG_USE_GOLD_LINKER" +echo " Using new DTAGS ........ $CFG_ENABLE_NEW_DTAGS" +echo " Using PCH .............. $CFG_PRECOMPILE" +echo " Using LTCG ............. $CFG_LTCG" +echo " Target compiler supports:" +if [ "$CFG_ARCH" = "i386" -o "$CFG_ARCH" = "x86_64" ]; then + echo " SSE .................. ${CFG_SSE_LIST:-}" + echo " AVX .................. ${CFG_AVX_LIST:-}" + echo " AVX512 ............... ${CFG_AVX512_UPPER:-}" +elif [ "$CFG_ARCH" = "arm" ]; then + echo " Neon ................. ${CFG_NEON}" +elif [ "$CFG_ARCH" = "mips" ]; then + echo " DSP/DSPr2 ............ ${CFG_MIPS_DSP}/${CFG_MIPS_DSPR2}" +fi + +# Qt modules +echo +echo "Qt modules and options:" +report_support " Qt D-Bus ..............." "$CFG_DBUS" runtime "loading dbus-1 at runtime" linked "linked to dbus-1" +report_support " Qt Concurrent .........." "$CFG_CONCURRENT" +report_support " Qt GUI ................." "$CFG_GUI" +report_support " Qt Widgets ............." "$CFG_WIDGETS" +report_support " Large File ............." "$CFG_LARGEFILE" +report_support " QML debugging .........." "$CFG_QML_DEBUG" +report_support " Use system proxies ....." "$CFG_SYSTEM_PROXIES" + +# Other things +# Please keep sorted and properly grouped! The output is quite long, so it's +# hard to find something you're searching for if it's not sorted. +echo +echo "Support enabled for:" +report_support " Accessibility .........." "$CFG_ACCESSIBILITY" +report_support " ALSA ..................." "$CFG_ALSA" +report_support " CUPS ..................." "$CFG_CUPS" +[ "$XPLATFORM_MINGW" = "yes" ] && \ + report_support " DirectWrite ............" "$CFG_DIRECTWRITE" +report_support " DoubleConversion........" "$CFG_DOUBLECONVERSION" no "libc" system "system library" qt "bundled copy" +report_support " Evdev .................." "$CFG_EVDEV" +report_support " FontConfig ............." "$CFG_FONTCONFIG" +report_support " FreeType ..............." "$CFG_FREETYPE" system "system library" yes "bundled copy" +report_support " Glib ..................." "$CFG_GLIB" +report_support " GStreamer .............." "$CFG_GSTREAMER" yes "$CFG_GSTREAMER_VERSION" +report_support " GTK platformtheme ......" "$CFG_GTK" +report_support " HarfBuzz ..............." "$CFG_HARFBUZZ" system "system library" qt "bundled copy" +report_support " Iconv .................." "$CFG_ICONV" +report_support " ICU ...................." "$CFG_ICU" +report_support " Image formats:" +report_support_plugin " GIF .................." "$CFG_GIF" qt QtGui +report_support_plugin " JPEG ................." "$CFG_JPEG" "$CFG_LIBJPEG" QtGui +report_support_plugin " PNG .................." "$CFG_PNG" "$CFG_LIBPNG" QtGui +report_support " libinput................" "$CFG_LIBINPUT" +report_support " Logging backends:" +report_support " journald ..............." "$CFG_JOURNALD" +report_support " syslog ..............." "$CFG_SYSLOG" +report_support " mtdev .................." "$CFG_MTDEV" yes "system library" +report_support " Networking:" +[ "$XPLATFORM_MAC" = "yes" ] && \ + report_support " CoreWlan ............." "$CFG_COREWLAN" +report_support " getaddrinfo .........." "$CFG_GETADDRINFO" +report_support " getifaddrs ..........." "$CFG_GETIFADDRS" +report_support " IPv6 ifname .........." "$CFG_IPV6IFNAME" +report_support " libproxy.............." "$CFG_LIBPROXY" +report_support " OpenSSL .............." "$CFG_OPENSSL" yes "loading libraries at run-time" linked "linked to the libraries" +[ "$XPLATFORM_MAC" = "yes" ] && \ + report_support " SecureTransport ......" "$CFG_SECURETRANSPORT" +report_support " NIS ...................." "$CFG_NIS" +report_support " OpenGL / OpenVG:" +report_support " EGL .................." "$CFG_EGL" +report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" +report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" +report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" +if [ -n "$PKG_CONFIG" ]; then + report_support " pkg-config ............. yes" +else + report_support " pkg-config ............. no" +fi +report_support " PulseAudio ............." "$CFG_PULSEAUDIO" +report_support " QPA backends:" +report_support " DirectFB ............." "$CFG_DIRECTFB" +report_support " EGLFS ................" "$CFG_EGLFS" +report_support " EGLFS i.MX6 ........" "$CFG_EGLFS_VIV" +report_support " EGLFS i.MX6 Wayland." "$CFG_EGLFS_VIV_WL" +report_support " EGLFS EGLDevice ...." "$CFG_EGLFS_EGLDEVICE" +report_support " EGLFS GBM .........." "$CFG_EGLFS_GBM" +report_support " EGLFS Mali ........." "$CFG_EGLFS_MALI" +report_support " EGLFS Raspberry Pi ." "$CFG_EGLFS_BRCM" +report_support " EGLFS X11 .........." "$CFG_EGL_X" +if [ "$XPLATFORM_INTEGRITY" = "yes" ]; then + report_support " INTEGRITY Framebuffer " "$CFG_INTEGRITYFB" +fi +report_support " LinuxFB .............." "$CFG_LINUXFB" +report_support " Mir client............" "$CFG_MIRCLIENT" +report_support " XCB .................." "$CFG_XCB" system "system library" qt "bundled copy" +if [ "$CFG_XCB" != "no" ]; then + report_support " EGL on X ..........." "$CFG_EGL_X" + report_support " GLX ................" "$CFG_XCB_GLX" + report_support " MIT-SHM ............" "$CFG_MITSHM" + report_support " Xcb-Xlib ..........." "$CFG_XCB_XLIB" + report_support " Xcursor ............" "$CFG_XCURSOR" runtime "loaded at runtime" + report_support " Xfixes ............." "$CFG_XFIXES" runtime "loaded at runtime" + report_support " Xi2 ................" "$CFG_XINPUT2" runtime "loaded at runtime" + report_support " Xrandr ............." "$CFG_XRANDR" runtime "loaded at runtime" + report_support " Xrender ............" "$CFG_XRENDER" + report_support " XKB ................" "$CFG_XKB" + report_support " XShape ............." "$CFG_XSHAPE" + report_support " XSync .............." "$CFG_XSYNC" +fi +report_support " Session management ....." "$CFG_SM" +if [ "$XPLATFORM_QNX" = "yes" ]; then + report_support " SLOG2 .................." "$CFG_SLOG2" + report_support " IMF ...................." "$CFG_QNX_IMF" + report_support " PPS ...................." "$CFG_PPS" + report_support " LGMON .................." "$CFG_LGMON" +fi +report_support " SQL drivers:" +report_support " DB2 .................." "$CFG_SQL_db2" plugin "plugin" yes "built into QtSql" +report_support " InterBase ............" "$CFG_SQL_ibase" plugin "plugin" yes "built into QtSql" +report_support " MySQL ................" "$CFG_SQL_mysql" plugin "plugin" yes "built into QtSql" +report_support " OCI .................." "$CFG_SQL_oci" plugin "plugin" yes "built into QtSql" +report_support " ODBC ................." "$CFG_SQL_odbc" plugin "plugin" yes "built into QtSql" +report_support " PostgreSQL ..........." "$CFG_SQL_psql" plugin "plugin" yes "built into QtSql" +report_support " SQLite 2 ............." "$CFG_SQL_sqlite2" plugin "plugin" yes "built into QtSql" +report_support_plugin " SQLite ..............." "$CFG_SQL_sqlite" "$CFG_SQLITE" QtSql +report_support " TDS .................." "$CFG_SQL_tds" plugin "plugin" yes "built into QtSql" +report_support " tslib .................." "$CFG_TSLIB" +report_support " udev ..................." "$CFG_LIBUDEV" +report_support " xkbcommon-x11..........." "$CFG_XKBCOMMON" system "system library" qt "bundled copy, XKB config root: $CFG_XKB_CONFIG_ROOT" +report_support " xkbcommon-evdev........." "$CFG_XKBCOMMON_EVDEV" +report_support " zlib ..................." "$CFG_ZLIB" system "system library" yes "bundled copy" + +echo + +# complain about not being able to use dynamic plugins if we are using a static build +if [ "$CFG_SHARED" = "no" ]; then + echo + echo "WARNING: Using static linking will disable the use of dynamically" + echo "loaded plugins. Make sure to import all needed static plugins," + echo "or compile needed modules into the library." +fi +if [ "$CFG_FREETYPE" = "system" ]; then + if [ "$ORIG_CFG_FREETYPE" = "qt" ]; then + echo + echo "WARNING: Bundled FreeType can't be used. FontConfig use requires system FreeType." + elif [ "$ORIG_CFG_FREETYPE" = "no" ]; then + echo + echo "WARNING: FreeType can't be disabled. FontConfig use requires system FreeType." + fi +fi +if [ "$CFG_OPENSSL" = "linked" ] && [ "$OPENSSL_LIBS" = "" ]; then + echo + echo "NOTE: When linking against OpenSSL, you can override the default" + echo "library names through OPENSSL_LIBS." + echo "For example:" + echo " OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked" +fi +if [ "$CFG_JOURNALD" = "yes" ] || [ "$CFG_SYSLOG" = "yes" ] || [ "$CFG_SLOG2" = "yes" ]; then + echo + echo "NOTE: journald, syslog or slog2 integration is enabled." + echo "If your users intend on developing applications against this build," + echo "ensure that the IDEs they use either set QT_LOGGING_TO_CONSOLE to 1" + echo "or the IDE is able to read the logged output from journald, syslog or slog2." +fi +if [ "$CFG_XKBCOMMON" = "qt" ] && [ "$CFG_XKB_CONFIG_ROOT" = "not found" ]; then + echo + echo "WARNING: Could not find XKB config root, use -xkb-config-root to set a path to " + echo "XKB configuration data. This is required for keyboard input support." +fi +if [ "$CFG_QREAL" = double ] && [ "$CFG_ARCH" = arm ]; then + echo + echo "NOTE: Qt is using double for qreal on this system. This is binary incompatible against Qt 5.1." + echo "Configure with '-qreal float' to create a build that is binary compatible with 5.1." +fi +if [ "$CFG_RELEASE_TOOLS" = "yes" -a \( "$CFG_DEBUG" = "no" -o "$CFG_DEBUG_RELEASE" = "yes" \) ]; then + echo + echo "NOTE: -optimized-tools is not useful in -release mode." + echo +fi + +exec 1>&3 3>&- # restore stdout +cat $outpath/config.summary # display config feedback to user + +if [ "$XPLATFORM_MAC" = "yes" ] && [ "$CFG_FRAMEWORK" = "yes" ] && [ "$CFG_DEBUG" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "no" ]; then + echo + echo "Error: debug-only framework builds are not supported. Configure with -no-framework" + echo "if you want a pure debug build." + echo + exit 1 +fi + +sepath=`echo "$relpath" | sed -e 's/\\./\\\\./g'` +PROCS=1 +EXEC="" + +rm -f "$QMAKE_VARS_FILE" 2>/dev/null + +#------------------------------------------------------------------------------- +# build makefiles based on the configuration +#------------------------------------------------------------------------------- + +( # fork to make the cd stay local + + relpathMangled=$relpath + if [ -n "$CFG_TOPLEVEL" ]; then + relpathMangled=`dirname "$relpath"` + cd .. + fi + + "$CFG_QMAKE_PATH" -qtconf "$QTCONFFILE" "$relpathMangled" + +) || exit + +#------------------------------------------------------------------------------- +# check for platforms that we don't yet know about +#------------------------------------------------------------------------------- +if [ "$CFG_ARCH" = "unknown" ]; then +cat < will be used (when + available). The generic implementations are generally as fast + as and always as safe as a specialized implementation. + + If no generic implementation is available, Qt will use a + fallback UNIX implementation which uses a single + pthread_mutex_t to protect all atomic operations. This + implementation is the slow (but safe) fallback implementation + for architectures Qt does not yet support. +EOF +fi + +#------------------------------------------------------------------------------- +# check if the user passed the -no-zlib option, which is no longer supported +#------------------------------------------------------------------------------- +if [ -n "$ZLIB_FORCED" ]; then + which_zlib="supplied" + if [ "$CFG_ZLIB" = "system" ]; then + which_zlib="system" + fi + +cat </dev/null 2>&1 || CONFIG_STATUS="$CONFIG_STATUS -confirm-license" + + [ -f "$outpath/config.status" ] && rm -f "$outpath/config.status" + echo "#!/bin/sh" > "$outpath/config.status" + [ -n "$PKG_CONFIG_SYSROOT_DIR" ] && \ + echo "export PKG_CONFIG_SYSROOT_DIR=$PKG_CONFIG_SYSROOT_DIR" >> "$outpath/config.status" + [ -n "$PKG_CONFIG_LIBDIR" ] && \ + echo "export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR" >> "$outpath/config.status" + echo "$CONFIG_STATUS \"\$@\"" >> "$outpath/config.status" + chmod +x "$outpath/config.status" +fi + +if [ -n "$RPATH_MESSAGE" ]; then + echo + echo "$RPATH_MESSAGE" +fi + +if [ -n "$PREFIX_COMPLAINTS" ]; then + echo + echo "$PREFIX_COMPLAINTS" + echo +fi + +MAKE=`basename "$MAKE"` +echo +echo Qt is now configured for building. Just run \'$MAKE\'. +if [ "$outpath" = "$QT_INSTALL_PREFIX" ]; then + echo Once everything is built, Qt is installed. + echo You should not run \'$MAKE install\'. +else + echo Once everything is built, you must run \'$MAKE install\'. + echo Qt will be installed into $QT_INSTALL_PREFIX +fi +echo +echo Prior to reconfiguration, make sure you remove any leftovers from +echo the previous build. +echo diff --git a/devel/qt5/dynamic-openql-fixes/create_patch.sh b/devel/qt5/dynamic-openql-fixes/create_patch.sh new file mode 100755 index 00000000..a31c200f --- /dev/null +++ b/devel/qt5/dynamic-openql-fixes/create_patch.sh @@ -0,0 +1,3 @@ +f=qt5-add-angle-and-dynamic-support.patch +diff -Naur configure{.orig,} > $f +diff -Naur src/gui/opengl/qopenglfunctions.h{.orig,} >> $f diff --git a/devel/qt5/dynamic-openql-fixes/qt5-add-angle-and-dynamic-support.patch b/devel/qt5/dynamic-openql-fixes/qt5-add-angle-and-dynamic-support.patch new file mode 100644 index 00000000..f9b88685 --- /dev/null +++ b/devel/qt5/dynamic-openql-fixes/qt5-add-angle-and-dynamic-support.patch @@ -0,0 +1,75 @@ +--- configure.orig 2016-06-10 08:48:56.000000000 +0200 ++++ configure 2016-09-04 20:38:55.345362982 +0200 +@@ -1287,6 +1287,7 @@ + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || ++ [ "$VAL" = "angle" ] || [ "$VAL" = "dynamic" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" +@@ -5312,7 +5313,7 @@ + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then +- CFG_OPENGL=desktop ++ CFG_OPENGL=angle + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else +@@ -5348,6 +5349,17 @@ + echo " ${XQMAKESPEC}." + exit 1 + fi ++ elif [ "$CFG_OPENGL" = "angle" ]; then ++ compileTest x11/opengl "OpenGL" ++ if [ $? != "0" ]; then ++ echo "The OpenGL functionality test failed!" ++ echo " You might need to modify the include and library search paths by editing" ++ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" ++ echo " ${XQMAKESPEC}." ++ exit 1 ++ fi ++ elif [ "$CFG_OPENGL" = "dynamic" ]; then ++ true # FIXME: not sure whether/which test required + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" +@@ -6423,6 +6435,16 @@ + QT_CONFIG="$QT_CONFIG opengles2" + fi + ++if [ "$CFG_OPENGL" = "angle" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" ++ QT_CONFIG="$QT_CONFIG opengles2 egl angle" ++fi ++ ++if [ "$CFG_OPENGL" = "dynamic" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_DYNAMIC" ++ QT_CONFIG="$QT_CONFIG dynamicgl" ++fi ++ + if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +@@ -7474,7 +7496,7 @@ + report_support " NIS ...................." "$CFG_NIS" + report_support " OpenGL / OpenVG:" + report_support " EGL .................." "$CFG_EGL" +-report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" ++report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" dynamic "Dynamic OpenGL" + report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" + report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" + if [ -n "$PKG_CONFIG" ]; then +--- src/gui/opengl/qopenglfunctions.h.orig 2016-06-10 08:48:56.000000000 +0200 ++++ src/gui/opengl/qopenglfunctions.h 2016-09-04 20:36:07.801522904 +0200 +@@ -56,9 +56,7 @@ + + //#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +-#ifdef QT_OPENGL_ES + typedef double GLdouble; +-#endif + + #ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + #include diff --git a/devel/qt5/dynamic-openql-fixes/src/gui/opengl/qopenglfunctions.h b/devel/qt5/dynamic-openql-fixes/src/gui/opengl/qopenglfunctions.h new file mode 100644 index 00000000..17214a05 --- /dev/null +++ b/devel/qt5/dynamic-openql-fixes/src/gui/opengl/qopenglfunctions.h @@ -0,0 +1,2177 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** 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-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENGLFUNCTIONS_H +#define QOPENGLFUNCTIONS_H + +#include + +#ifndef QT_NO_OPENGL + +#ifdef __GLEW_H__ +#if defined(Q_CC_GNU) +#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined +#warning To use GLEW with Qt, do not include or after glew.h +#endif +#endif + +#include +#include + +//#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +typedef double GLdouble; + +#ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG +#include +#define Q_OPENGL_FUNCTIONS_DEBUG \ + GLenum error = glGetError(); \ + if (error != GL_NO_ERROR) { \ + unsigned clamped = qMin(unsigned(error - GL_INVALID_ENUM), 4U); \ + const char *errors[] = { "GL_INVALID_ENUM", "GL_INVALID_VALUE", "GL_INVALID_OPERATION", "Unknown" }; \ + printf("GL error at %s:%d: %s\n", __FILE__, __LINE__, errors[clamped]); \ + int *value = 0; \ + *value = 0; \ + } +#else +#define Q_OPENGL_FUNCTIONS_DEBUG +#endif + +QT_BEGIN_NAMESPACE + +struct QOpenGLFunctionsPrivate; + +// Undefine any macros from GLEW, qopenglextensions_p.h, etc that +// may interfere with the definition of QOpenGLFunctions. +#undef glBindTexture +#undef glBlendFunc +#undef glClear +#undef glClearColor +#undef glClearStencil +#undef glColorMask +#undef glCopyTexImage2D +#undef glCopyTexSubImage2D +#undef glCullFace +#undef glDeleteTextures +#undef glDepthFunc +#undef glDepthMask +#undef glDisable +#undef glDrawArrays +#undef glDrawElements +#undef glEnable +#undef glFinish +#undef glFlush +#undef glFrontFace +#undef glGenTextures +#undef glGetBooleanv +#undef glGetError +#undef glGetFloatv +#undef glGetIntegerv +#undef glGetString +#undef glGetTexParameterfv +#undef glGetTexParameteriv +#undef glHint +#undef glIsEnabled +#undef glIsTexture +#undef glLineWidth +#undef glPixelStorei +#undef glPolygonOffset +#undef glReadPixels +#undef glScissor +#undef glStencilFunc +#undef glStencilMask +#undef glStencilOp +#undef glTexImage2D +#undef glTexParameterf +#undef glTexParameterfv +#undef glTexParameteri +#undef glTexParameteriv +#undef glTexSubImage2D +#undef glViewport + +#undef glActiveTexture +#undef glAttachShader +#undef glBindAttribLocation +#undef glBindBuffer +#undef glBindFramebuffer +#undef glBindRenderbuffer +#undef glBlendColor +#undef glBlendEquation +#undef glBlendEquationSeparate +#undef glBlendFuncSeparate +#undef glBufferData +#undef glBufferSubData +#undef glCheckFramebufferStatus +#undef glClearDepthf +#undef glCompileShader +#undef glCompressedTexImage2D +#undef glCompressedTexSubImage2D +#undef glCreateProgram +#undef glCreateShader +#undef glDeleteBuffers +#undef glDeleteFramebuffers +#undef glDeleteProgram +#undef glDeleteRenderbuffers +#undef glDeleteShader +#undef glDepthRangef +#undef glDetachShader +#undef glDisableVertexAttribArray +#undef glEnableVertexAttribArray +#undef glFramebufferRenderbuffer +#undef glFramebufferTexture2D +#undef glGenBuffers +#undef glGenerateMipmap +#undef glGenFramebuffers +#undef glGenRenderbuffers +#undef glGetActiveAttrib +#undef glGetActiveUniform +#undef glGetAttachedShaders +#undef glGetAttribLocation +#undef glGetBufferParameteriv +#undef glGetFramebufferAttachmentParameteriv +#undef glGetProgramiv +#undef glGetProgramInfoLog +#undef glGetRenderbufferParameteriv +#undef glGetShaderiv +#undef glGetShaderInfoLog +#undef glGetShaderPrecisionFormat +#undef glGetShaderSource +#undef glGetUniformfv +#undef glGetUniformiv +#undef glGetUniformLocation +#undef glGetVertexAttribfv +#undef glGetVertexAttribiv +#undef glGetVertexAttribPointerv +#undef glIsBuffer +#undef glIsFramebuffer +#undef glIsProgram +#undef glIsRenderbuffer +#undef glIsShader +#undef glLinkProgram +#undef glReleaseShaderCompiler +#undef glRenderbufferStorage +#undef glSampleCoverage +#undef glShaderBinary +#undef glShaderSource +#undef glStencilFuncSeparate +#undef glStencilMaskSeparate +#undef glStencilOpSeparate +#undef glUniform1f +#undef glUniform1fv +#undef glUniform1i +#undef glUniform1iv +#undef glUniform2f +#undef glUniform2fv +#undef glUniform2i +#undef glUniform2iv +#undef glUniform3f +#undef glUniform3fv +#undef glUniform3i +#undef glUniform3iv +#undef glUniform4f +#undef glUniform4fv +#undef glUniform4i +#undef glUniform4iv +#undef glUniformMatrix2fv +#undef glUniformMatrix3fv +#undef glUniformMatrix4fv +#undef glUseProgram +#undef glValidateProgram +#undef glVertexAttrib1f +#undef glVertexAttrib1fv +#undef glVertexAttrib2f +#undef glVertexAttrib2fv +#undef glVertexAttrib3f +#undef glVertexAttrib3fv +#undef glVertexAttrib4f +#undef glVertexAttrib4fv +#undef glVertexAttribPointer + +#undef glTexLevelParameteriv + +class Q_GUI_EXPORT QOpenGLFunctions +{ +public: + QOpenGLFunctions(); + explicit QOpenGLFunctions(QOpenGLContext *context); + ~QOpenGLFunctions() {} + + enum OpenGLFeature + { + Multitexture = 0x0001, + Shaders = 0x0002, + Buffers = 0x0004, + Framebuffers = 0x0008, + BlendColor = 0x0010, + BlendEquation = 0x0020, + BlendEquationSeparate = 0x0040, + BlendFuncSeparate = 0x0080, + BlendSubtract = 0x0100, + CompressedTextures = 0x0200, + Multisample = 0x0400, + StencilSeparate = 0x0800, + NPOTTextures = 0x1000, + NPOTTextureRepeat = 0x2000, + FixedFunctionPipeline = 0x4000, + TextureRGFormats = 0x8000, + MultipleRenderTargets = 0x10000 + }; + Q_DECLARE_FLAGS(OpenGLFeatures, OpenGLFeature) + + QOpenGLFunctions::OpenGLFeatures openGLFeatures() const; + bool hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature) const; + + void initializeOpenGLFunctions(); + +#if QT_DEPRECATED_SINCE(5, 0) + QT_DEPRECATED void initializeGLFunctions() { initializeOpenGLFunctions(); } +#endif + + // GLES2 + OpenGL1 common subset + void glBindTexture(GLenum target, GLuint texture); + void glBlendFunc(GLenum sfactor, GLenum dfactor); + void glClear(GLbitfield mask); + void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + void glClearStencil(GLint s); + void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + void glCullFace(GLenum mode); + void glDeleteTextures(GLsizei n, const GLuint* textures); + void glDepthFunc(GLenum func); + void glDepthMask(GLboolean flag); + void glDisable(GLenum cap); + void glDrawArrays(GLenum mode, GLint first, GLsizei count); + void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); + void glEnable(GLenum cap); + void glFinish(); + void glFlush(); + void glFrontFace(GLenum mode); + void glGenTextures(GLsizei n, GLuint* textures); + void glGetBooleanv(GLenum pname, GLboolean* params); + GLenum glGetError(); + void glGetFloatv(GLenum pname, GLfloat* params); + void glGetIntegerv(GLenum pname, GLint* params); + const GLubyte *glGetString(GLenum name); + void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params); + void glGetTexParameteriv(GLenum target, GLenum pname, GLint* params); + void glHint(GLenum target, GLenum mode); + GLboolean glIsEnabled(GLenum cap); + GLboolean glIsTexture(GLuint texture); + void glLineWidth(GLfloat width); + void glPixelStorei(GLenum pname, GLint param); + void glPolygonOffset(GLfloat factor, GLfloat units); + void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); + void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); + void glStencilFunc(GLenum func, GLint ref, GLuint mask); + void glStencilMask(GLuint mask); + void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); + void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); + void glTexParameterf(GLenum target, GLenum pname, GLfloat param); + void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params); + void glTexParameteri(GLenum target, GLenum pname, GLint param); + void glTexParameteriv(GLenum target, GLenum pname, const GLint* params); + void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); + void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); + + // GL(ES)2 + void glActiveTexture(GLenum texture); + void glAttachShader(GLuint program, GLuint shader); + void glBindAttribLocation(GLuint program, GLuint index, const char* name); + void glBindBuffer(GLenum target, GLuint buffer); + void glBindFramebuffer(GLenum target, GLuint framebuffer); + void glBindRenderbuffer(GLenum target, GLuint renderbuffer); + void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + void glBlendEquation(GLenum mode); + void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); + void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + void glBufferData(GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage); + void glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data); + GLenum glCheckFramebufferStatus(GLenum target); + void glClearDepthf(GLclampf depth); + void glCompileShader(GLuint shader); + void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); + void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); + GLuint glCreateProgram(); + GLuint glCreateShader(GLenum type); + void glDeleteBuffers(GLsizei n, const GLuint* buffers); + void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers); + void glDeleteProgram(GLuint program); + void glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers); + void glDeleteShader(GLuint shader); + void glDepthRangef(GLclampf zNear, GLclampf zFar); + void glDetachShader(GLuint program, GLuint shader); + void glDisableVertexAttribArray(GLuint index); + void glEnableVertexAttribArray(GLuint index); + void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + void glGenBuffers(GLsizei n, GLuint* buffers); + void glGenerateMipmap(GLenum target); + void glGenFramebuffers(GLsizei n, GLuint* framebuffers); + void glGenRenderbuffers(GLsizei n, GLuint* renderbuffers); + void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name); + void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name); + void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); + GLint glGetAttribLocation(GLuint program, const char* name); + void glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params); + void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params); + void glGetProgramiv(GLuint program, GLenum pname, GLint* params); + void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog); + void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params); + void glGetShaderiv(GLuint shader, GLenum pname, GLint* params); + void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog); + void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); + void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source); + void glGetUniformfv(GLuint program, GLint location, GLfloat* params); + void glGetUniformiv(GLuint program, GLint location, GLint* params); + GLint glGetUniformLocation(GLuint program, const char* name); + void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params); + void glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params); + void glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer); + GLboolean glIsBuffer(GLuint buffer); + GLboolean glIsFramebuffer(GLuint framebuffer); + GLboolean glIsProgram(GLuint program); + GLboolean glIsRenderbuffer(GLuint renderbuffer); + GLboolean glIsShader(GLuint shader); + void glLinkProgram(GLuint program); + void glReleaseShaderCompiler(); + void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + void glSampleCoverage(GLclampf value, GLboolean invert); + void glShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length); + void glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length); + void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); + void glStencilMaskSeparate(GLenum face, GLuint mask); + void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); + void glUniform1f(GLint location, GLfloat x); + void glUniform1fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform1i(GLint location, GLint x); + void glUniform1iv(GLint location, GLsizei count, const GLint* v); + void glUniform2f(GLint location, GLfloat x, GLfloat y); + void glUniform2fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform2i(GLint location, GLint x, GLint y); + void glUniform2iv(GLint location, GLsizei count, const GLint* v); + void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z); + void glUniform3fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform3i(GLint location, GLint x, GLint y, GLint z); + void glUniform3iv(GLint location, GLsizei count, const GLint* v); + void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void glUniform4fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w); + void glUniform4iv(GLint location, GLsizei count, const GLint* v); + void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + void glUseProgram(GLuint program); + void glValidateProgram(GLuint program); + void glVertexAttrib1f(GLuint indx, GLfloat x); + void glVertexAttrib1fv(GLuint indx, const GLfloat* values); + void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y); + void glVertexAttrib2fv(GLuint indx, const GLfloat* values); + void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z); + void glVertexAttrib3fv(GLuint indx, const GLfloat* values); + void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void glVertexAttrib4fv(GLuint indx, const GLfloat* values); + void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr); + +protected: + QOpenGLFunctionsPrivate *d_ptr; + static bool isInitialized(const QOpenGLFunctionsPrivate *d) { return d != Q_NULLPTR; } +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLFunctions::OpenGLFeatures) + +#define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \ + ret (QOPENGLF_APIENTRYP name)args; +#define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1 + +#define QT_OPENGL_DECLARE(FUNCTIONS) \ +public: \ + struct Functions { \ + FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \ + }; \ + union { \ + QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \ + Functions f; \ + }; \ +private: \ + void init(QOpenGLContext *context); + +struct QOpenGLFunctionsPrivate +{ + QOpenGLFunctionsPrivate(QOpenGLContext *ctx); + +#define QT_OPENGL_FUNCTIONS(F) \ + F(void, BindTexture, (GLenum target, GLuint texture)) \ + F(void, BlendFunc, (GLenum sfactor, GLenum dfactor)) \ + F(void, Clear, (GLbitfield mask)) \ + F(void, ClearColor, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)) \ + F(void, ClearDepthf, (GLclampf depth)) \ + F(void, ClearStencil, (GLint s)) \ + F(void, ColorMask, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)) \ + F(void, CopyTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)) \ + F(void, CopyTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \ + F(void, CullFace, (GLenum mode)) \ + F(void, DeleteTextures, (GLsizei n, const GLuint* textures)) \ + F(void, DepthFunc, (GLenum func)) \ + F(void, DepthMask, (GLboolean flag)) \ + F(void, DepthRangef, (GLclampf nearVal, GLclampf farVal)) \ + F(void, Disable, (GLenum cap)) \ + F(void, DrawArrays, (GLenum mode, GLint first, GLsizei count)) \ + F(void, DrawElements, (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)) \ + F(void, Enable, (GLenum cap)) \ + F(void, Finish, ()) \ + F(void, Flush, ()) \ + F(void, FrontFace, (GLenum mode)) \ + F(void, GenTextures, (GLsizei n, GLuint* textures)) \ + F(void, GetBooleanv, (GLenum pname, GLboolean* params)) \ + F(GLenum, GetError, ()) \ + F(void, GetFloatv, (GLenum pname, GLfloat* params)) \ + F(void, GetIntegerv, (GLenum pname, GLint* params)) \ + F(const GLubyte *, GetString, (GLenum name)) \ + F(void, GetTexParameterfv, (GLenum target, GLenum pname, GLfloat* params)) \ + F(void, GetTexParameteriv, (GLenum target, GLenum pname, GLint* params)) \ + F(void, Hint, (GLenum target, GLenum mode)) \ + F(GLboolean, IsEnabled, (GLenum cap)) \ + F(GLboolean, IsTexture, (GLuint texture)) \ + F(void, LineWidth, (GLfloat width)) \ + F(void, PixelStorei, (GLenum pname, GLint param)) \ + F(void, PolygonOffset, (GLfloat factor, GLfloat units)) \ + F(void, ReadPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)) \ + F(void, Scissor, (GLint x, GLint y, GLsizei width, GLsizei height)) \ + F(void, StencilFunc, (GLenum func, GLint ref, GLuint mask)) \ + F(void, StencilMask, (GLuint mask)) \ + F(void, StencilOp, (GLenum fail, GLenum zfail, GLenum zpass)) \ + F(void, TexImage2D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)) \ + F(void, TexParameterf, (GLenum target, GLenum pname, GLfloat param)) \ + F(void, TexParameterfv, (GLenum target, GLenum pname, const GLfloat* params)) \ + F(void, TexParameteri, (GLenum target, GLenum pname, GLint param)) \ + F(void, TexParameteriv, (GLenum target, GLenum pname, const GLint* params)) \ + F(void, TexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)) \ + F(void, Viewport, (GLint x, GLint y, GLsizei width, GLsizei height)) \ + F(void, ActiveTexture, (GLenum texture)) \ + F(void, AttachShader, (GLuint program, GLuint shader)) \ + F(void, BindAttribLocation, (GLuint program, GLuint index, const char* name)) \ + F(void, BindBuffer, (GLenum target, GLuint buffer)) \ + F(void, BindFramebuffer, (GLenum target, GLuint framebuffer)) \ + F(void, BindRenderbuffer, (GLenum target, GLuint renderbuffer)) \ + F(void, BlendColor, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)) \ + F(void, BlendEquation, (GLenum mode)) \ + F(void, BlendEquationSeparate, (GLenum modeRGB, GLenum modeAlpha)) \ + F(void, BlendFuncSeparate, (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)) \ + F(void, BufferData, (GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage)) \ + F(void, BufferSubData, (GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data)) \ + F(GLenum, CheckFramebufferStatus, (GLenum target)) \ + F(void, CompileShader, (GLuint shader)) \ + F(void, CompressedTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)) \ + F(void, CompressedTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)) \ + F(GLuint, CreateProgram, ()) \ + F(GLuint, CreateShader, (GLenum type)) \ + F(void, DeleteBuffers, (GLsizei n, const GLuint* buffers)) \ + F(void, DeleteFramebuffers, (GLsizei n, const GLuint* framebuffers)) \ + F(void, DeleteProgram, (GLuint program)) \ + F(void, DeleteRenderbuffers, (GLsizei n, const GLuint* renderbuffers)) \ + F(void, DeleteShader, (GLuint shader)) \ + F(void, DetachShader, (GLuint program, GLuint shader)) \ + F(void, DisableVertexAttribArray, (GLuint index)) \ + F(void, EnableVertexAttribArray, (GLuint index)) \ + F(void, FramebufferRenderbuffer, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)) \ + F(void, FramebufferTexture2D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)) \ + F(void, GenBuffers, (GLsizei n, GLuint* buffers)) \ + F(void, GenerateMipmap, (GLenum target)) \ + F(void, GenFramebuffers, (GLsizei n, GLuint* framebuffers)) \ + F(void, GenRenderbuffers, (GLsizei n, GLuint* renderbuffers)) \ + F(void, GetActiveAttrib, (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)) \ + F(void, GetActiveUniform, (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)) \ + F(void, GetAttachedShaders, (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)) \ + F(GLint, GetAttribLocation, (GLuint program, const char* name)) \ + F(void, GetBufferParameteriv, (GLenum target, GLenum pname, GLint* params)) \ + F(void, GetFramebufferAttachmentParameteriv, (GLenum target, GLenum attachment, GLenum pname, GLint* params)) \ + F(void, GetProgramiv, (GLuint program, GLenum pname, GLint* params)) \ + F(void, GetProgramInfoLog, (GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)) \ + F(void, GetRenderbufferParameteriv, (GLenum target, GLenum pname, GLint* params)) \ + F(void, GetShaderiv, (GLuint shader, GLenum pname, GLint* params)) \ + F(void, GetShaderInfoLog, (GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)) \ + F(void, GetShaderPrecisionFormat, (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)) \ + F(void, GetShaderSource, (GLuint shader, GLsizei bufsize, GLsizei* length, char* source)) \ + F(void, GetUniformfv, (GLuint program, GLint location, GLfloat* params)) \ + F(void, GetUniformiv, (GLuint program, GLint location, GLint* params)) \ + F(GLint, GetUniformLocation, (GLuint program, const char* name)) \ + F(void, GetVertexAttribfv, (GLuint index, GLenum pname, GLfloat* params)) \ + F(void, GetVertexAttribiv, (GLuint index, GLenum pname, GLint* params)) \ + F(void, GetVertexAttribPointerv, (GLuint index, GLenum pname, void** pointer)) \ + F(GLboolean, IsBuffer, (GLuint buffer)) \ + F(GLboolean, IsFramebuffer, (GLuint framebuffer)) \ + F(GLboolean, IsProgram, (GLuint program)) \ + F(GLboolean, IsRenderbuffer, (GLuint renderbuffer)) \ + F(GLboolean, IsShader, (GLuint shader)) \ + F(void, LinkProgram, (GLuint program)) \ + F(void, ReleaseShaderCompiler, ()) \ + F(void, RenderbufferStorage, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)) \ + F(void, SampleCoverage, (GLclampf value, GLboolean invert)) \ + F(void, ShaderBinary, (GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length)) \ + F(void, ShaderSource, (GLuint shader, GLsizei count, const char** string, const GLint* length)) \ + F(void, StencilFuncSeparate, (GLenum face, GLenum func, GLint ref, GLuint mask)) \ + F(void, StencilMaskSeparate, (GLenum face, GLuint mask)) \ + F(void, StencilOpSeparate, (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)) \ + F(void, Uniform1f, (GLint location, GLfloat x)) \ + F(void, Uniform1fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform1i, (GLint location, GLint x)) \ + F(void, Uniform1iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, Uniform2f, (GLint location, GLfloat x, GLfloat y)) \ + F(void, Uniform2fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform2i, (GLint location, GLint x, GLint y)) \ + F(void, Uniform2iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, Uniform3f, (GLint location, GLfloat x, GLfloat y, GLfloat z)) \ + F(void, Uniform3fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform3i, (GLint location, GLint x, GLint y, GLint z)) \ + F(void, Uniform3iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, Uniform4f, (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)) \ + F(void, Uniform4fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform4i, (GLint location, GLint x, GLint y, GLint z, GLint w)) \ + F(void, Uniform4iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, UniformMatrix2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)) \ + F(void, UniformMatrix3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)) \ + F(void, UniformMatrix4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)) \ + F(void, UseProgram, (GLuint program)) \ + F(void, ValidateProgram, (GLuint program)) \ + F(void, VertexAttrib1f, (GLuint indx, GLfloat x)) \ + F(void, VertexAttrib1fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttrib2f, (GLuint indx, GLfloat x, GLfloat y)) \ + F(void, VertexAttrib2fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttrib3f, (GLuint indx, GLfloat x, GLfloat y, GLfloat z)) \ + F(void, VertexAttrib3fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttrib4f, (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)) \ + F(void, VertexAttrib4fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttribPointer, (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)) \ + F(void, ClearDepth, (GLdouble depth)) \ + F(void, DepthRange, (GLdouble zNear, GLdouble zFar)) \ + + QT_OPENGL_DECLARE(QT_OPENGL_FUNCTIONS) +}; + +// GLES2 + OpenGL1 common subset + +inline void QOpenGLFunctions::glBindTexture(GLenum target, GLuint texture) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindTexture(target, texture); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindTexture(target, texture); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendFunc(GLenum sfactor, GLenum dfactor) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendFunc(sfactor, dfactor); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendFunc(sfactor, dfactor); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glClear(GLbitfield mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glClear(mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Clear(mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glClearColor(red, green, blue, alpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ClearColor(red, green, blue, alpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glClearStencil(GLint s) +{ +#ifdef QT_OPENGL_ES_2 + ::glClearStencil(s); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ClearStencil(s); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glColorMask(red, green, blue, alpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ColorMask(red, green, blue, alpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) +{ +#ifdef QT_OPENGL_ES_2 + ::glCopyTexImage2D(target, level, internalformat, x, y, width,height, border); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CopyTexImage2D(target, level, internalformat, x, y, width,height, border); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCullFace(GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glCullFace(mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CullFace(mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteTextures(GLsizei n, const GLuint* textures) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteTextures(n, textures); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteTextures(n, textures); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDepthFunc(GLenum func) +{ +#ifdef QT_OPENGL_ES_2 + ::glDepthFunc(func); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DepthFunc(func); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDepthMask(GLboolean flag) +{ +#ifdef QT_OPENGL_ES_2 + ::glDepthMask(flag); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DepthMask(flag); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDisable(GLenum cap) +{ +#ifdef QT_OPENGL_ES_2 + ::glDisable(cap); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Disable(cap); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDrawArrays(GLenum mode, GLint first, GLsizei count) +{ +#ifdef QT_OPENGL_ES_2 + ::glDrawArrays(mode, first, count); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DrawArrays(mode, first, count); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) +{ +#ifdef QT_OPENGL_ES_2 + ::glDrawElements(mode, count, type, indices); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DrawElements(mode, count, type, indices); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glEnable(GLenum cap) +{ +#ifdef QT_OPENGL_ES_2 + ::glEnable(cap); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Enable(cap); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFinish() +{ +#ifdef QT_OPENGL_ES_2 + ::glFinish(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Finish(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFlush() +{ +#ifdef QT_OPENGL_ES_2 + ::glFlush(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Flush(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFrontFace(GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glFrontFace(mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.FrontFace(mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenTextures(GLsizei n, GLuint* textures) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenTextures(n, textures); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenTextures(n, textures); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetBooleanv(GLenum pname, GLboolean* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetBooleanv(pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetBooleanv(pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLenum QOpenGLFunctions::glGetError() +{ +#ifdef QT_OPENGL_ES_2 + GLenum result = ::glGetError(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLenum result = d_ptr->f.GetError(); +#endif + return result; +} + +inline void QOpenGLFunctions::glGetFloatv(GLenum pname, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetFloatv(pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetFloatv(pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetIntegerv(GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetIntegerv(pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetIntegerv(pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline const GLubyte *QOpenGLFunctions::glGetString(GLenum name) +{ +#ifdef QT_OPENGL_ES_2 + const GLubyte *result = ::glGetString(name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + const GLubyte *result = d_ptr->f.GetString(name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetTexParameterfv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetTexParameterfv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetTexParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetTexParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glHint(GLenum target, GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glHint(target, mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Hint(target, mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLboolean QOpenGLFunctions::glIsEnabled(GLenum cap) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsEnabled(cap); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsEnabled(cap); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsTexture(GLuint texture) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsTexture(texture); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsTexture(texture); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glLineWidth(GLfloat width) +{ +#ifdef QT_OPENGL_ES_2 + ::glLineWidth(width); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.LineWidth(width); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glPixelStorei(GLenum pname, GLint param) +{ +#ifdef QT_OPENGL_ES_2 + ::glPixelStorei(pname, param); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.PixelStorei(pname, param); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glPolygonOffset(GLfloat factor, GLfloat units) +{ +#ifdef QT_OPENGL_ES_2 + ::glPolygonOffset(factor, units); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.PolygonOffset(factor, units); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) +{ +#ifdef QT_OPENGL_ES_2 + ::glReadPixels(x, y, width, height, format, type, pixels); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ReadPixels(x, y, width, height, format, type, pixels); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glScissor(GLint x, GLint y, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glScissor(x, y, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Scissor(x, y, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilFunc(GLenum func, GLint ref, GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilFunc(func, ref, mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilFunc(func, ref, mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilMask(GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilMask(mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilMask(mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilOp(fail, zfail, zpass); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilOp(fail, zfail, zpass); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexImage2D(target, level, internalformat, width,height, border, format, type, pixels); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexImage2D(target, level, internalformat, width,height, border, format, type, pixels); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameterf(GLenum target, GLenum pname, GLfloat param) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameterf(target, pname, param); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameterf(target, pname, param); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameterfv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameterfv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameteri(GLenum target, GLenum pname, GLint param) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameteri(target, pname, param); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameteri(target, pname, param); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameteriv(GLenum target, GLenum pname, const GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glViewport(GLint x, GLint y, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glViewport(x, y, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Viewport(x, y, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +// GL(ES)2 + +inline void QOpenGLFunctions::glActiveTexture(GLenum texture) +{ +#ifdef QT_OPENGL_ES_2 + ::glActiveTexture(texture); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ActiveTexture(texture); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glAttachShader(GLuint program, GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glAttachShader(program, shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.AttachShader(program, shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindAttribLocation(GLuint program, GLuint index, const char* name) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindAttribLocation(program, index, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindAttribLocation(program, index, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindBuffer(GLenum target, GLuint buffer) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindBuffer(target, buffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindBuffer(target, buffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindFramebuffer(GLenum target, GLuint framebuffer) +{ + if (framebuffer == 0) + framebuffer = QOpenGLContext::currentContext()->defaultFramebufferObject(); +#ifdef QT_OPENGL_ES_2 + ::glBindFramebuffer(target, framebuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindFramebuffer(target, framebuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindRenderbuffer(GLenum target, GLuint renderbuffer) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindRenderbuffer(target, renderbuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindRenderbuffer(target, renderbuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendColor(red, green, blue, alpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendColor(red, green, blue, alpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendEquation(GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendEquation(mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendEquation(mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendEquationSeparate(modeRGB, modeAlpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendEquationSeparate(modeRGB, modeAlpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBufferData(GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage) +{ +#ifdef QT_OPENGL_ES_2 + ::glBufferData(target, size, data, usage); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BufferData(target, size, data, usage); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data) +{ +#ifdef QT_OPENGL_ES_2 + ::glBufferSubData(target, offset, size, data); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BufferSubData(target, offset, size, data); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLenum QOpenGLFunctions::glCheckFramebufferStatus(GLenum target) +{ +#ifdef QT_OPENGL_ES_2 + GLenum result = ::glCheckFramebufferStatus(target); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLenum result = d_ptr->f.CheckFramebufferStatus(target); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glClearDepthf(GLclampf depth) +{ +#ifndef QT_OPENGL_ES + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ClearDepthf(depth); +#else + ::glClearDepthf(depth); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCompileShader(GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glCompileShader(shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CompileShader(shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) +{ +#ifdef QT_OPENGL_ES_2 + ::glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) +{ +#ifdef QT_OPENGL_ES_2 + ::glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLuint QOpenGLFunctions::glCreateProgram() +{ +#ifdef QT_OPENGL_ES_2 + GLuint result = ::glCreateProgram(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLuint result = d_ptr->f.CreateProgram(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLuint QOpenGLFunctions::glCreateShader(GLenum type) +{ +#ifdef QT_OPENGL_ES_2 + GLuint result = ::glCreateShader(type); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLuint result = d_ptr->f.CreateShader(type); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glDeleteBuffers(GLsizei n, const GLuint* buffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteBuffers(n, buffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteBuffers(n, buffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteFramebuffers(n, framebuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteFramebuffers(n, framebuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteRenderbuffers(n, renderbuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteRenderbuffers(n, renderbuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteShader(GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteShader(shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteShader(shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDepthRangef(GLclampf zNear, GLclampf zFar) +{ +#ifndef QT_OPENGL_ES + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DepthRangef(zNear, zFar); +#else + ::glDepthRangef(zNear, zFar); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDetachShader(GLuint program, GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glDetachShader(program, shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DetachShader(program, shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDisableVertexAttribArray(GLuint index) +{ +#ifdef QT_OPENGL_ES_2 + ::glDisableVertexAttribArray(index); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DisableVertexAttribArray(index); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glEnableVertexAttribArray(GLuint index) +{ +#ifdef QT_OPENGL_ES_2 + ::glEnableVertexAttribArray(index); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.EnableVertexAttribArray(index); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) +{ +#ifdef QT_OPENGL_ES_2 + ::glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +{ +#ifdef QT_OPENGL_ES_2 + ::glFramebufferTexture2D(target, attachment, textarget, texture, level); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.FramebufferTexture2D(target, attachment, textarget, texture, level); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenBuffers(GLsizei n, GLuint* buffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenBuffers(n, buffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenBuffers(n, buffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenerateMipmap(GLenum target) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenerateMipmap(target); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenerateMipmap(target); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenFramebuffers(GLsizei n, GLuint* framebuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenFramebuffers(n, framebuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenFramebuffers(n, framebuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenRenderbuffers(n, renderbuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenRenderbuffers(n, renderbuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetActiveAttrib(program, index, bufsize, length, size, type, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetActiveAttrib(program, index, bufsize, length, size, type, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetActiveUniform(program, index, bufsize, length, size, type, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetActiveUniform(program, index, bufsize, length, size, type, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetAttachedShaders(program, maxcount, count, shaders); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetAttachedShaders(program, maxcount, count, shaders); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLint QOpenGLFunctions::glGetAttribLocation(GLuint program, const char* name) +{ +#ifdef QT_OPENGL_ES_2 + GLint result = ::glGetAttribLocation(program, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLint result = d_ptr->f.GetAttribLocation(program, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetBufferParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetBufferParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetFramebufferAttachmentParameteriv(target, attachment, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetProgramiv(GLuint program, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetProgramiv(program, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetProgramiv(program, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetProgramInfoLog(program, bufsize, length, infolog); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetProgramInfoLog(program, bufsize, length, infolog); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetRenderbufferParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetRenderbufferParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderiv(GLuint shader, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderiv(shader, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderiv(shader, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderInfoLog(shader, bufsize, length, infolog); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderInfoLog(shader, bufsize, length, infolog); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderPrecisionFormat(shadertype, precisiontype, range, precision); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderSource(shader, bufsize, length, source); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderSource(shader, bufsize, length, source); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetUniformfv(GLuint program, GLint location, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetUniformfv(program, location, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetUniformfv(program, location, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetUniformiv(GLuint program, GLint location, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetUniformiv(program, location, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetUniformiv(program, location, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLint QOpenGLFunctions::glGetUniformLocation(GLuint program, const char* name) +{ +#ifdef QT_OPENGL_ES_2 + GLint result = ::glGetUniformLocation(program, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLint result = d_ptr->f.GetUniformLocation(program, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetVertexAttribfv(index, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetVertexAttribfv(index, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetVertexAttribiv(index, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetVertexAttribiv(index, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetVertexAttribPointerv(index, pname, pointer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetVertexAttribPointerv(index, pname, pointer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLboolean QOpenGLFunctions::glIsBuffer(GLuint buffer) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsBuffer(buffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsBuffer(buffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsFramebuffer(GLuint framebuffer) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsFramebuffer(framebuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsFramebuffer(framebuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsRenderbuffer(GLuint renderbuffer) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsRenderbuffer(renderbuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsRenderbuffer(renderbuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsShader(GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsShader(shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsShader(shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glLinkProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glLinkProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.LinkProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glReleaseShaderCompiler() +{ +#ifdef QT_OPENGL_ES_2 + ::glReleaseShaderCompiler(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ReleaseShaderCompiler(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glRenderbufferStorage(target, internalformat, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.RenderbufferStorage(target, internalformat, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glSampleCoverage(GLclampf value, GLboolean invert) +{ +#ifdef QT_OPENGL_ES_2 + ::glSampleCoverage(value, invert); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.SampleCoverage(value, invert); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length) +{ +#ifdef QT_OPENGL_ES_2 + ::glShaderBinary(n, shaders, binaryformat, binary, length); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ShaderBinary(n, shaders, binaryformat, binary, length); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) +{ +#ifdef QT_OPENGL_ES_2 + ::glShaderSource(shader, count, string, length); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ShaderSource(shader, count, string, length); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilFuncSeparate(face, func, ref, mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilFuncSeparate(face, func, ref, mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilMaskSeparate(GLenum face, GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilMaskSeparate(face, mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilMaskSeparate(face, mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilOpSeparate(face, fail, zfail, zpass); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilOpSeparate(face, fail, zfail, zpass); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1f(GLint location, GLfloat x) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1f(location, x); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1f(location, x); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1i(GLint location, GLint x) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1i(location, x); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1i(location, x); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2f(GLint location, GLfloat x, GLfloat y) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2f(location, x, y); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2f(location, x, y); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2i(GLint location, GLint x, GLint y) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2i(location, x, y); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2i(location, x, y); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3f(location, x, y, z); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3f(location, x, y, z); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3i(GLint location, GLint x, GLint y, GLint z) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3i(location, x, y, z); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3i(location, x, y, z); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4f(location, x, y, z, w); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4f(location, x, y, z, w); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4i(location, x, y, z, w); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4i(location, x, y, z, w); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniformMatrix2fv(location, count, transpose, value); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UniformMatrix2fv(location, count, transpose, value); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniformMatrix3fv(location, count, transpose, value); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UniformMatrix3fv(location, count, transpose, value); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniformMatrix4fv(location, count, transpose, value); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UniformMatrix4fv(location, count, transpose, value); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUseProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glUseProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UseProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glValidateProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glValidateProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ValidateProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib1f(GLuint indx, GLfloat x) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib1f(indx, x); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib1f(indx, x); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib1fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib1fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib1fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib2f(indx, x, y); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib2f(indx, x, y); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib2fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib2fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib2fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib3f(indx, x, y, z); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib3f(indx, x, y, z); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib3fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib3fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib3fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib4f(indx, x, y, z, w); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib4f(indx, x, y, z, w); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib4fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib4fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib4fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttribPointer(indx, size, type, normalized, stride, ptr); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttribPointer(indx, size, type, normalized, stride, ptr); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +#undef QT_OPENGL_DECLARE_FUNCTIONS +#undef QT_OPENGL_COUNT_FUNCTIONS +#undef QT_OPENGL_DECLARE + +QT_END_NAMESPACE + +#endif // QT_NO_OPENGL + +#endif diff --git a/devel/qt5/dynamic-openql-fixes/src/gui/opengl/qopenglfunctions.h.orig b/devel/qt5/dynamic-openql-fixes/src/gui/opengl/qopenglfunctions.h.orig new file mode 100644 index 00000000..f6cd0e55 --- /dev/null +++ b/devel/qt5/dynamic-openql-fixes/src/gui/opengl/qopenglfunctions.h.orig @@ -0,0 +1,2179 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** 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-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENGLFUNCTIONS_H +#define QOPENGLFUNCTIONS_H + +#include + +#ifndef QT_NO_OPENGL + +#ifdef __GLEW_H__ +#if defined(Q_CC_GNU) +#warning qopenglfunctions.h is not compatible with GLEW, GLEW defines will be undefined +#warning To use GLEW with Qt, do not include or after glew.h +#endif +#endif + +#include +#include + +//#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +#ifdef QT_OPENGL_ES +typedef double GLdouble; +#endif + +#ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG +#include +#define Q_OPENGL_FUNCTIONS_DEBUG \ + GLenum error = glGetError(); \ + if (error != GL_NO_ERROR) { \ + unsigned clamped = qMin(unsigned(error - GL_INVALID_ENUM), 4U); \ + const char *errors[] = { "GL_INVALID_ENUM", "GL_INVALID_VALUE", "GL_INVALID_OPERATION", "Unknown" }; \ + printf("GL error at %s:%d: %s\n", __FILE__, __LINE__, errors[clamped]); \ + int *value = 0; \ + *value = 0; \ + } +#else +#define Q_OPENGL_FUNCTIONS_DEBUG +#endif + +QT_BEGIN_NAMESPACE + +struct QOpenGLFunctionsPrivate; + +// Undefine any macros from GLEW, qopenglextensions_p.h, etc that +// may interfere with the definition of QOpenGLFunctions. +#undef glBindTexture +#undef glBlendFunc +#undef glClear +#undef glClearColor +#undef glClearStencil +#undef glColorMask +#undef glCopyTexImage2D +#undef glCopyTexSubImage2D +#undef glCullFace +#undef glDeleteTextures +#undef glDepthFunc +#undef glDepthMask +#undef glDisable +#undef glDrawArrays +#undef glDrawElements +#undef glEnable +#undef glFinish +#undef glFlush +#undef glFrontFace +#undef glGenTextures +#undef glGetBooleanv +#undef glGetError +#undef glGetFloatv +#undef glGetIntegerv +#undef glGetString +#undef glGetTexParameterfv +#undef glGetTexParameteriv +#undef glHint +#undef glIsEnabled +#undef glIsTexture +#undef glLineWidth +#undef glPixelStorei +#undef glPolygonOffset +#undef glReadPixels +#undef glScissor +#undef glStencilFunc +#undef glStencilMask +#undef glStencilOp +#undef glTexImage2D +#undef glTexParameterf +#undef glTexParameterfv +#undef glTexParameteri +#undef glTexParameteriv +#undef glTexSubImage2D +#undef glViewport + +#undef glActiveTexture +#undef glAttachShader +#undef glBindAttribLocation +#undef glBindBuffer +#undef glBindFramebuffer +#undef glBindRenderbuffer +#undef glBlendColor +#undef glBlendEquation +#undef glBlendEquationSeparate +#undef glBlendFuncSeparate +#undef glBufferData +#undef glBufferSubData +#undef glCheckFramebufferStatus +#undef glClearDepthf +#undef glCompileShader +#undef glCompressedTexImage2D +#undef glCompressedTexSubImage2D +#undef glCreateProgram +#undef glCreateShader +#undef glDeleteBuffers +#undef glDeleteFramebuffers +#undef glDeleteProgram +#undef glDeleteRenderbuffers +#undef glDeleteShader +#undef glDepthRangef +#undef glDetachShader +#undef glDisableVertexAttribArray +#undef glEnableVertexAttribArray +#undef glFramebufferRenderbuffer +#undef glFramebufferTexture2D +#undef glGenBuffers +#undef glGenerateMipmap +#undef glGenFramebuffers +#undef glGenRenderbuffers +#undef glGetActiveAttrib +#undef glGetActiveUniform +#undef glGetAttachedShaders +#undef glGetAttribLocation +#undef glGetBufferParameteriv +#undef glGetFramebufferAttachmentParameteriv +#undef glGetProgramiv +#undef glGetProgramInfoLog +#undef glGetRenderbufferParameteriv +#undef glGetShaderiv +#undef glGetShaderInfoLog +#undef glGetShaderPrecisionFormat +#undef glGetShaderSource +#undef glGetUniformfv +#undef glGetUniformiv +#undef glGetUniformLocation +#undef glGetVertexAttribfv +#undef glGetVertexAttribiv +#undef glGetVertexAttribPointerv +#undef glIsBuffer +#undef glIsFramebuffer +#undef glIsProgram +#undef glIsRenderbuffer +#undef glIsShader +#undef glLinkProgram +#undef glReleaseShaderCompiler +#undef glRenderbufferStorage +#undef glSampleCoverage +#undef glShaderBinary +#undef glShaderSource +#undef glStencilFuncSeparate +#undef glStencilMaskSeparate +#undef glStencilOpSeparate +#undef glUniform1f +#undef glUniform1fv +#undef glUniform1i +#undef glUniform1iv +#undef glUniform2f +#undef glUniform2fv +#undef glUniform2i +#undef glUniform2iv +#undef glUniform3f +#undef glUniform3fv +#undef glUniform3i +#undef glUniform3iv +#undef glUniform4f +#undef glUniform4fv +#undef glUniform4i +#undef glUniform4iv +#undef glUniformMatrix2fv +#undef glUniformMatrix3fv +#undef glUniformMatrix4fv +#undef glUseProgram +#undef glValidateProgram +#undef glVertexAttrib1f +#undef glVertexAttrib1fv +#undef glVertexAttrib2f +#undef glVertexAttrib2fv +#undef glVertexAttrib3f +#undef glVertexAttrib3fv +#undef glVertexAttrib4f +#undef glVertexAttrib4fv +#undef glVertexAttribPointer + +#undef glTexLevelParameteriv + +class Q_GUI_EXPORT QOpenGLFunctions +{ +public: + QOpenGLFunctions(); + explicit QOpenGLFunctions(QOpenGLContext *context); + ~QOpenGLFunctions() {} + + enum OpenGLFeature + { + Multitexture = 0x0001, + Shaders = 0x0002, + Buffers = 0x0004, + Framebuffers = 0x0008, + BlendColor = 0x0010, + BlendEquation = 0x0020, + BlendEquationSeparate = 0x0040, + BlendFuncSeparate = 0x0080, + BlendSubtract = 0x0100, + CompressedTextures = 0x0200, + Multisample = 0x0400, + StencilSeparate = 0x0800, + NPOTTextures = 0x1000, + NPOTTextureRepeat = 0x2000, + FixedFunctionPipeline = 0x4000, + TextureRGFormats = 0x8000, + MultipleRenderTargets = 0x10000 + }; + Q_DECLARE_FLAGS(OpenGLFeatures, OpenGLFeature) + + QOpenGLFunctions::OpenGLFeatures openGLFeatures() const; + bool hasOpenGLFeature(QOpenGLFunctions::OpenGLFeature feature) const; + + void initializeOpenGLFunctions(); + +#if QT_DEPRECATED_SINCE(5, 0) + QT_DEPRECATED void initializeGLFunctions() { initializeOpenGLFunctions(); } +#endif + + // GLES2 + OpenGL1 common subset + void glBindTexture(GLenum target, GLuint texture); + void glBlendFunc(GLenum sfactor, GLenum dfactor); + void glClear(GLbitfield mask); + void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + void glClearStencil(GLint s); + void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + void glCullFace(GLenum mode); + void glDeleteTextures(GLsizei n, const GLuint* textures); + void glDepthFunc(GLenum func); + void glDepthMask(GLboolean flag); + void glDisable(GLenum cap); + void glDrawArrays(GLenum mode, GLint first, GLsizei count); + void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); + void glEnable(GLenum cap); + void glFinish(); + void glFlush(); + void glFrontFace(GLenum mode); + void glGenTextures(GLsizei n, GLuint* textures); + void glGetBooleanv(GLenum pname, GLboolean* params); + GLenum glGetError(); + void glGetFloatv(GLenum pname, GLfloat* params); + void glGetIntegerv(GLenum pname, GLint* params); + const GLubyte *glGetString(GLenum name); + void glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params); + void glGetTexParameteriv(GLenum target, GLenum pname, GLint* params); + void glHint(GLenum target, GLenum mode); + GLboolean glIsEnabled(GLenum cap); + GLboolean glIsTexture(GLuint texture); + void glLineWidth(GLfloat width); + void glPixelStorei(GLenum pname, GLint param); + void glPolygonOffset(GLfloat factor, GLfloat units); + void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); + void glScissor(GLint x, GLint y, GLsizei width, GLsizei height); + void glStencilFunc(GLenum func, GLint ref, GLuint mask); + void glStencilMask(GLuint mask); + void glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); + void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); + void glTexParameterf(GLenum target, GLenum pname, GLfloat param); + void glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params); + void glTexParameteri(GLenum target, GLenum pname, GLint param); + void glTexParameteriv(GLenum target, GLenum pname, const GLint* params); + void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); + void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); + + // GL(ES)2 + void glActiveTexture(GLenum texture); + void glAttachShader(GLuint program, GLuint shader); + void glBindAttribLocation(GLuint program, GLuint index, const char* name); + void glBindBuffer(GLenum target, GLuint buffer); + void glBindFramebuffer(GLenum target, GLuint framebuffer); + void glBindRenderbuffer(GLenum target, GLuint renderbuffer); + void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); + void glBlendEquation(GLenum mode); + void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); + void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + void glBufferData(GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage); + void glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data); + GLenum glCheckFramebufferStatus(GLenum target); + void glClearDepthf(GLclampf depth); + void glCompileShader(GLuint shader); + void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); + void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); + GLuint glCreateProgram(); + GLuint glCreateShader(GLenum type); + void glDeleteBuffers(GLsizei n, const GLuint* buffers); + void glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers); + void glDeleteProgram(GLuint program); + void glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers); + void glDeleteShader(GLuint shader); + void glDepthRangef(GLclampf zNear, GLclampf zFar); + void glDetachShader(GLuint program, GLuint shader); + void glDisableVertexAttribArray(GLuint index); + void glEnableVertexAttribArray(GLuint index); + void glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + void glGenBuffers(GLsizei n, GLuint* buffers); + void glGenerateMipmap(GLenum target); + void glGenFramebuffers(GLsizei n, GLuint* framebuffers); + void glGenRenderbuffers(GLsizei n, GLuint* renderbuffers); + void glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name); + void glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name); + void glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); + GLint glGetAttribLocation(GLuint program, const char* name); + void glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params); + void glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params); + void glGetProgramiv(GLuint program, GLenum pname, GLint* params); + void glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog); + void glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params); + void glGetShaderiv(GLuint shader, GLenum pname, GLint* params); + void glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog); + void glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); + void glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source); + void glGetUniformfv(GLuint program, GLint location, GLfloat* params); + void glGetUniformiv(GLuint program, GLint location, GLint* params); + GLint glGetUniformLocation(GLuint program, const char* name); + void glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params); + void glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params); + void glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer); + GLboolean glIsBuffer(GLuint buffer); + GLboolean glIsFramebuffer(GLuint framebuffer); + GLboolean glIsProgram(GLuint program); + GLboolean glIsRenderbuffer(GLuint renderbuffer); + GLboolean glIsShader(GLuint shader); + void glLinkProgram(GLuint program); + void glReleaseShaderCompiler(); + void glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + void glSampleCoverage(GLclampf value, GLboolean invert); + void glShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length); + void glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length); + void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask); + void glStencilMaskSeparate(GLenum face, GLuint mask); + void glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass); + void glUniform1f(GLint location, GLfloat x); + void glUniform1fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform1i(GLint location, GLint x); + void glUniform1iv(GLint location, GLsizei count, const GLint* v); + void glUniform2f(GLint location, GLfloat x, GLfloat y); + void glUniform2fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform2i(GLint location, GLint x, GLint y); + void glUniform2iv(GLint location, GLsizei count, const GLint* v); + void glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z); + void glUniform3fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform3i(GLint location, GLint x, GLint y, GLint z); + void glUniform3iv(GLint location, GLsizei count, const GLint* v); + void glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void glUniform4fv(GLint location, GLsizei count, const GLfloat* v); + void glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w); + void glUniform4iv(GLint location, GLsizei count, const GLint* v); + void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + void glUseProgram(GLuint program); + void glValidateProgram(GLuint program); + void glVertexAttrib1f(GLuint indx, GLfloat x); + void glVertexAttrib1fv(GLuint indx, const GLfloat* values); + void glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y); + void glVertexAttrib2fv(GLuint indx, const GLfloat* values); + void glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z); + void glVertexAttrib3fv(GLuint indx, const GLfloat* values); + void glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + void glVertexAttrib4fv(GLuint indx, const GLfloat* values); + void glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr); + +protected: + QOpenGLFunctionsPrivate *d_ptr; + static bool isInitialized(const QOpenGLFunctionsPrivate *d) { return d != Q_NULLPTR; } +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QOpenGLFunctions::OpenGLFeatures) + +#define QT_OPENGL_DECLARE_FUNCTIONS(ret, name, args) \ + ret (QOPENGLF_APIENTRYP name)args; +#define QT_OPENGL_COUNT_FUNCTIONS(ret, name, args) +1 + +#define QT_OPENGL_DECLARE(FUNCTIONS) \ +public: \ + struct Functions { \ + FUNCTIONS(QT_OPENGL_DECLARE_FUNCTIONS) \ + }; \ + union { \ + QFunctionPointer functions[FUNCTIONS(QT_OPENGL_COUNT_FUNCTIONS)]; \ + Functions f; \ + }; \ +private: \ + void init(QOpenGLContext *context); + +struct QOpenGLFunctionsPrivate +{ + QOpenGLFunctionsPrivate(QOpenGLContext *ctx); + +#define QT_OPENGL_FUNCTIONS(F) \ + F(void, BindTexture, (GLenum target, GLuint texture)) \ + F(void, BlendFunc, (GLenum sfactor, GLenum dfactor)) \ + F(void, Clear, (GLbitfield mask)) \ + F(void, ClearColor, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)) \ + F(void, ClearDepthf, (GLclampf depth)) \ + F(void, ClearStencil, (GLint s)) \ + F(void, ColorMask, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)) \ + F(void, CopyTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)) \ + F(void, CopyTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height)) \ + F(void, CullFace, (GLenum mode)) \ + F(void, DeleteTextures, (GLsizei n, const GLuint* textures)) \ + F(void, DepthFunc, (GLenum func)) \ + F(void, DepthMask, (GLboolean flag)) \ + F(void, DepthRangef, (GLclampf nearVal, GLclampf farVal)) \ + F(void, Disable, (GLenum cap)) \ + F(void, DrawArrays, (GLenum mode, GLint first, GLsizei count)) \ + F(void, DrawElements, (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices)) \ + F(void, Enable, (GLenum cap)) \ + F(void, Finish, ()) \ + F(void, Flush, ()) \ + F(void, FrontFace, (GLenum mode)) \ + F(void, GenTextures, (GLsizei n, GLuint* textures)) \ + F(void, GetBooleanv, (GLenum pname, GLboolean* params)) \ + F(GLenum, GetError, ()) \ + F(void, GetFloatv, (GLenum pname, GLfloat* params)) \ + F(void, GetIntegerv, (GLenum pname, GLint* params)) \ + F(const GLubyte *, GetString, (GLenum name)) \ + F(void, GetTexParameterfv, (GLenum target, GLenum pname, GLfloat* params)) \ + F(void, GetTexParameteriv, (GLenum target, GLenum pname, GLint* params)) \ + F(void, Hint, (GLenum target, GLenum mode)) \ + F(GLboolean, IsEnabled, (GLenum cap)) \ + F(GLboolean, IsTexture, (GLuint texture)) \ + F(void, LineWidth, (GLfloat width)) \ + F(void, PixelStorei, (GLenum pname, GLint param)) \ + F(void, PolygonOffset, (GLfloat factor, GLfloat units)) \ + F(void, ReadPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels)) \ + F(void, Scissor, (GLint x, GLint y, GLsizei width, GLsizei height)) \ + F(void, StencilFunc, (GLenum func, GLint ref, GLuint mask)) \ + F(void, StencilMask, (GLuint mask)) \ + F(void, StencilOp, (GLenum fail, GLenum zfail, GLenum zpass)) \ + F(void, TexImage2D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels)) \ + F(void, TexParameterf, (GLenum target, GLenum pname, GLfloat param)) \ + F(void, TexParameterfv, (GLenum target, GLenum pname, const GLfloat* params)) \ + F(void, TexParameteri, (GLenum target, GLenum pname, GLint param)) \ + F(void, TexParameteriv, (GLenum target, GLenum pname, const GLint* params)) \ + F(void, TexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels)) \ + F(void, Viewport, (GLint x, GLint y, GLsizei width, GLsizei height)) \ + F(void, ActiveTexture, (GLenum texture)) \ + F(void, AttachShader, (GLuint program, GLuint shader)) \ + F(void, BindAttribLocation, (GLuint program, GLuint index, const char* name)) \ + F(void, BindBuffer, (GLenum target, GLuint buffer)) \ + F(void, BindFramebuffer, (GLenum target, GLuint framebuffer)) \ + F(void, BindRenderbuffer, (GLenum target, GLuint renderbuffer)) \ + F(void, BlendColor, (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)) \ + F(void, BlendEquation, (GLenum mode)) \ + F(void, BlendEquationSeparate, (GLenum modeRGB, GLenum modeAlpha)) \ + F(void, BlendFuncSeparate, (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)) \ + F(void, BufferData, (GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage)) \ + F(void, BufferSubData, (GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data)) \ + F(GLenum, CheckFramebufferStatus, (GLenum target)) \ + F(void, CompileShader, (GLuint shader)) \ + F(void, CompressedTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)) \ + F(void, CompressedTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data)) \ + F(GLuint, CreateProgram, ()) \ + F(GLuint, CreateShader, (GLenum type)) \ + F(void, DeleteBuffers, (GLsizei n, const GLuint* buffers)) \ + F(void, DeleteFramebuffers, (GLsizei n, const GLuint* framebuffers)) \ + F(void, DeleteProgram, (GLuint program)) \ + F(void, DeleteRenderbuffers, (GLsizei n, const GLuint* renderbuffers)) \ + F(void, DeleteShader, (GLuint shader)) \ + F(void, DetachShader, (GLuint program, GLuint shader)) \ + F(void, DisableVertexAttribArray, (GLuint index)) \ + F(void, EnableVertexAttribArray, (GLuint index)) \ + F(void, FramebufferRenderbuffer, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)) \ + F(void, FramebufferTexture2D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)) \ + F(void, GenBuffers, (GLsizei n, GLuint* buffers)) \ + F(void, GenerateMipmap, (GLenum target)) \ + F(void, GenFramebuffers, (GLsizei n, GLuint* framebuffers)) \ + F(void, GenRenderbuffers, (GLsizei n, GLuint* renderbuffers)) \ + F(void, GetActiveAttrib, (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)) \ + F(void, GetActiveUniform, (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name)) \ + F(void, GetAttachedShaders, (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders)) \ + F(GLint, GetAttribLocation, (GLuint program, const char* name)) \ + F(void, GetBufferParameteriv, (GLenum target, GLenum pname, GLint* params)) \ + F(void, GetFramebufferAttachmentParameteriv, (GLenum target, GLenum attachment, GLenum pname, GLint* params)) \ + F(void, GetProgramiv, (GLuint program, GLenum pname, GLint* params)) \ + F(void, GetProgramInfoLog, (GLuint program, GLsizei bufsize, GLsizei* length, char* infolog)) \ + F(void, GetRenderbufferParameteriv, (GLenum target, GLenum pname, GLint* params)) \ + F(void, GetShaderiv, (GLuint shader, GLenum pname, GLint* params)) \ + F(void, GetShaderInfoLog, (GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog)) \ + F(void, GetShaderPrecisionFormat, (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision)) \ + F(void, GetShaderSource, (GLuint shader, GLsizei bufsize, GLsizei* length, char* source)) \ + F(void, GetUniformfv, (GLuint program, GLint location, GLfloat* params)) \ + F(void, GetUniformiv, (GLuint program, GLint location, GLint* params)) \ + F(GLint, GetUniformLocation, (GLuint program, const char* name)) \ + F(void, GetVertexAttribfv, (GLuint index, GLenum pname, GLfloat* params)) \ + F(void, GetVertexAttribiv, (GLuint index, GLenum pname, GLint* params)) \ + F(void, GetVertexAttribPointerv, (GLuint index, GLenum pname, void** pointer)) \ + F(GLboolean, IsBuffer, (GLuint buffer)) \ + F(GLboolean, IsFramebuffer, (GLuint framebuffer)) \ + F(GLboolean, IsProgram, (GLuint program)) \ + F(GLboolean, IsRenderbuffer, (GLuint renderbuffer)) \ + F(GLboolean, IsShader, (GLuint shader)) \ + F(void, LinkProgram, (GLuint program)) \ + F(void, ReleaseShaderCompiler, ()) \ + F(void, RenderbufferStorage, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)) \ + F(void, SampleCoverage, (GLclampf value, GLboolean invert)) \ + F(void, ShaderBinary, (GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length)) \ + F(void, ShaderSource, (GLuint shader, GLsizei count, const char** string, const GLint* length)) \ + F(void, StencilFuncSeparate, (GLenum face, GLenum func, GLint ref, GLuint mask)) \ + F(void, StencilMaskSeparate, (GLenum face, GLuint mask)) \ + F(void, StencilOpSeparate, (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)) \ + F(void, Uniform1f, (GLint location, GLfloat x)) \ + F(void, Uniform1fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform1i, (GLint location, GLint x)) \ + F(void, Uniform1iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, Uniform2f, (GLint location, GLfloat x, GLfloat y)) \ + F(void, Uniform2fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform2i, (GLint location, GLint x, GLint y)) \ + F(void, Uniform2iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, Uniform3f, (GLint location, GLfloat x, GLfloat y, GLfloat z)) \ + F(void, Uniform3fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform3i, (GLint location, GLint x, GLint y, GLint z)) \ + F(void, Uniform3iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, Uniform4f, (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w)) \ + F(void, Uniform4fv, (GLint location, GLsizei count, const GLfloat* v)) \ + F(void, Uniform4i, (GLint location, GLint x, GLint y, GLint z, GLint w)) \ + F(void, Uniform4iv, (GLint location, GLsizei count, const GLint* v)) \ + F(void, UniformMatrix2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)) \ + F(void, UniformMatrix3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)) \ + F(void, UniformMatrix4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value)) \ + F(void, UseProgram, (GLuint program)) \ + F(void, ValidateProgram, (GLuint program)) \ + F(void, VertexAttrib1f, (GLuint indx, GLfloat x)) \ + F(void, VertexAttrib1fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttrib2f, (GLuint indx, GLfloat x, GLfloat y)) \ + F(void, VertexAttrib2fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttrib3f, (GLuint indx, GLfloat x, GLfloat y, GLfloat z)) \ + F(void, VertexAttrib3fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttrib4f, (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w)) \ + F(void, VertexAttrib4fv, (GLuint indx, const GLfloat* values)) \ + F(void, VertexAttribPointer, (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr)) \ + F(void, ClearDepth, (GLdouble depth)) \ + F(void, DepthRange, (GLdouble zNear, GLdouble zFar)) \ + + QT_OPENGL_DECLARE(QT_OPENGL_FUNCTIONS) +}; + +// GLES2 + OpenGL1 common subset + +inline void QOpenGLFunctions::glBindTexture(GLenum target, GLuint texture) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindTexture(target, texture); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindTexture(target, texture); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendFunc(GLenum sfactor, GLenum dfactor) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendFunc(sfactor, dfactor); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendFunc(sfactor, dfactor); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glClear(GLbitfield mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glClear(mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Clear(mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glClearColor(red, green, blue, alpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ClearColor(red, green, blue, alpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glClearStencil(GLint s) +{ +#ifdef QT_OPENGL_ES_2 + ::glClearStencil(s); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ClearStencil(s); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glColorMask(red, green, blue, alpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ColorMask(red, green, blue, alpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) +{ +#ifdef QT_OPENGL_ES_2 + ::glCopyTexImage2D(target, level, internalformat, x, y, width,height, border); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CopyTexImage2D(target, level, internalformat, x, y, width,height, border); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCullFace(GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glCullFace(mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CullFace(mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteTextures(GLsizei n, const GLuint* textures) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteTextures(n, textures); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteTextures(n, textures); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDepthFunc(GLenum func) +{ +#ifdef QT_OPENGL_ES_2 + ::glDepthFunc(func); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DepthFunc(func); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDepthMask(GLboolean flag) +{ +#ifdef QT_OPENGL_ES_2 + ::glDepthMask(flag); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DepthMask(flag); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDisable(GLenum cap) +{ +#ifdef QT_OPENGL_ES_2 + ::glDisable(cap); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Disable(cap); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDrawArrays(GLenum mode, GLint first, GLsizei count) +{ +#ifdef QT_OPENGL_ES_2 + ::glDrawArrays(mode, first, count); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DrawArrays(mode, first, count); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) +{ +#ifdef QT_OPENGL_ES_2 + ::glDrawElements(mode, count, type, indices); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DrawElements(mode, count, type, indices); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glEnable(GLenum cap) +{ +#ifdef QT_OPENGL_ES_2 + ::glEnable(cap); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Enable(cap); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFinish() +{ +#ifdef QT_OPENGL_ES_2 + ::glFinish(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Finish(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFlush() +{ +#ifdef QT_OPENGL_ES_2 + ::glFlush(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Flush(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFrontFace(GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glFrontFace(mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.FrontFace(mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenTextures(GLsizei n, GLuint* textures) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenTextures(n, textures); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenTextures(n, textures); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetBooleanv(GLenum pname, GLboolean* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetBooleanv(pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetBooleanv(pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLenum QOpenGLFunctions::glGetError() +{ +#ifdef QT_OPENGL_ES_2 + GLenum result = ::glGetError(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLenum result = d_ptr->f.GetError(); +#endif + return result; +} + +inline void QOpenGLFunctions::glGetFloatv(GLenum pname, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetFloatv(pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetFloatv(pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetIntegerv(GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetIntegerv(pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetIntegerv(pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline const GLubyte *QOpenGLFunctions::glGetString(GLenum name) +{ +#ifdef QT_OPENGL_ES_2 + const GLubyte *result = ::glGetString(name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + const GLubyte *result = d_ptr->f.GetString(name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glGetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetTexParameterfv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetTexParameterfv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetTexParameteriv(GLenum target, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetTexParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetTexParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glHint(GLenum target, GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glHint(target, mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Hint(target, mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLboolean QOpenGLFunctions::glIsEnabled(GLenum cap) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsEnabled(cap); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsEnabled(cap); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsTexture(GLuint texture) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsTexture(texture); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsTexture(texture); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glLineWidth(GLfloat width) +{ +#ifdef QT_OPENGL_ES_2 + ::glLineWidth(width); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.LineWidth(width); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glPixelStorei(GLenum pname, GLint param) +{ +#ifdef QT_OPENGL_ES_2 + ::glPixelStorei(pname, param); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.PixelStorei(pname, param); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glPolygonOffset(GLfloat factor, GLfloat units) +{ +#ifdef QT_OPENGL_ES_2 + ::glPolygonOffset(factor, units); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.PolygonOffset(factor, units); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) +{ +#ifdef QT_OPENGL_ES_2 + ::glReadPixels(x, y, width, height, format, type, pixels); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ReadPixels(x, y, width, height, format, type, pixels); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glScissor(GLint x, GLint y, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glScissor(x, y, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Scissor(x, y, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilFunc(GLenum func, GLint ref, GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilFunc(func, ref, mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilFunc(func, ref, mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilMask(GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilMask(mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilMask(mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilOp(fail, zfail, zpass); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilOp(fail, zfail, zpass); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexImage2D(target, level, internalformat, width,height, border, format, type, pixels); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexImage2D(target, level, internalformat, width,height, border, format, type, pixels); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameterf(GLenum target, GLenum pname, GLfloat param) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameterf(target, pname, param); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameterf(target, pname, param); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameterfv(GLenum target, GLenum pname, const GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameterfv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameterfv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameteri(GLenum target, GLenum pname, GLint param) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameteri(target, pname, param); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameteri(target, pname, param); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexParameteriv(GLenum target, GLenum pname, const GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) +{ +#ifdef QT_OPENGL_ES_2 + ::glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.TexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glViewport(GLint x, GLint y, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glViewport(x, y, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Viewport(x, y, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +// GL(ES)2 + +inline void QOpenGLFunctions::glActiveTexture(GLenum texture) +{ +#ifdef QT_OPENGL_ES_2 + ::glActiveTexture(texture); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ActiveTexture(texture); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glAttachShader(GLuint program, GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glAttachShader(program, shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.AttachShader(program, shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindAttribLocation(GLuint program, GLuint index, const char* name) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindAttribLocation(program, index, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindAttribLocation(program, index, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindBuffer(GLenum target, GLuint buffer) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindBuffer(target, buffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindBuffer(target, buffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindFramebuffer(GLenum target, GLuint framebuffer) +{ + if (framebuffer == 0) + framebuffer = QOpenGLContext::currentContext()->defaultFramebufferObject(); +#ifdef QT_OPENGL_ES_2 + ::glBindFramebuffer(target, framebuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindFramebuffer(target, framebuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBindRenderbuffer(GLenum target, GLuint renderbuffer) +{ +#ifdef QT_OPENGL_ES_2 + ::glBindRenderbuffer(target, renderbuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BindRenderbuffer(target, renderbuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendColor(red, green, blue, alpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendColor(red, green, blue, alpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendEquation(GLenum mode) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendEquation(mode); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendEquation(mode); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendEquationSeparate(modeRGB, modeAlpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendEquationSeparate(modeRGB, modeAlpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) +{ +#ifdef QT_OPENGL_ES_2 + ::glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBufferData(GLenum target, qopengl_GLsizeiptr size, const void* data, GLenum usage) +{ +#ifdef QT_OPENGL_ES_2 + ::glBufferData(target, size, data, usage); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BufferData(target, size, data, usage); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, const void* data) +{ +#ifdef QT_OPENGL_ES_2 + ::glBufferSubData(target, offset, size, data); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.BufferSubData(target, offset, size, data); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLenum QOpenGLFunctions::glCheckFramebufferStatus(GLenum target) +{ +#ifdef QT_OPENGL_ES_2 + GLenum result = ::glCheckFramebufferStatus(target); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLenum result = d_ptr->f.CheckFramebufferStatus(target); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glClearDepthf(GLclampf depth) +{ +#ifndef QT_OPENGL_ES + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ClearDepthf(depth); +#else + ::glClearDepthf(depth); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCompileShader(GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glCompileShader(shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CompileShader(shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) +{ +#ifdef QT_OPENGL_ES_2 + ::glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) +{ +#ifdef QT_OPENGL_ES_2 + ::glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.CompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLuint QOpenGLFunctions::glCreateProgram() +{ +#ifdef QT_OPENGL_ES_2 + GLuint result = ::glCreateProgram(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLuint result = d_ptr->f.CreateProgram(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLuint QOpenGLFunctions::glCreateShader(GLenum type) +{ +#ifdef QT_OPENGL_ES_2 + GLuint result = ::glCreateShader(type); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLuint result = d_ptr->f.CreateShader(type); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glDeleteBuffers(GLsizei n, const GLuint* buffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteBuffers(n, buffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteBuffers(n, buffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteFramebuffers(n, framebuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteFramebuffers(n, framebuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteRenderbuffers(n, renderbuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteRenderbuffers(n, renderbuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDeleteShader(GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glDeleteShader(shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DeleteShader(shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDepthRangef(GLclampf zNear, GLclampf zFar) +{ +#ifndef QT_OPENGL_ES + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DepthRangef(zNear, zFar); +#else + ::glDepthRangef(zNear, zFar); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDetachShader(GLuint program, GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + ::glDetachShader(program, shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DetachShader(program, shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glDisableVertexAttribArray(GLuint index) +{ +#ifdef QT_OPENGL_ES_2 + ::glDisableVertexAttribArray(index); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.DisableVertexAttribArray(index); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glEnableVertexAttribArray(GLuint index) +{ +#ifdef QT_OPENGL_ES_2 + ::glEnableVertexAttribArray(index); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.EnableVertexAttribArray(index); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) +{ +#ifdef QT_OPENGL_ES_2 + ::glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.FramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) +{ +#ifdef QT_OPENGL_ES_2 + ::glFramebufferTexture2D(target, attachment, textarget, texture, level); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.FramebufferTexture2D(target, attachment, textarget, texture, level); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenBuffers(GLsizei n, GLuint* buffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenBuffers(n, buffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenBuffers(n, buffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenerateMipmap(GLenum target) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenerateMipmap(target); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenerateMipmap(target); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenFramebuffers(GLsizei n, GLuint* framebuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenFramebuffers(n, framebuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenFramebuffers(n, framebuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) +{ +#ifdef QT_OPENGL_ES_2 + ::glGenRenderbuffers(n, renderbuffers); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GenRenderbuffers(n, renderbuffers); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetActiveAttrib(program, index, bufsize, length, size, type, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetActiveAttrib(program, index, bufsize, length, size, type, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetActiveUniform(program, index, bufsize, length, size, type, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetActiveUniform(program, index, bufsize, length, size, type, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetAttachedShaders(program, maxcount, count, shaders); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetAttachedShaders(program, maxcount, count, shaders); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLint QOpenGLFunctions::glGetAttribLocation(GLuint program, const char* name) +{ +#ifdef QT_OPENGL_ES_2 + GLint result = ::glGetAttribLocation(program, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLint result = d_ptr->f.GetAttribLocation(program, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetBufferParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetBufferParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetFramebufferAttachmentParameteriv(target, attachment, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetFramebufferAttachmentParameteriv(target, attachment, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetProgramiv(GLuint program, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetProgramiv(program, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetProgramiv(program, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetProgramInfoLog(program, bufsize, length, infolog); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetProgramInfoLog(program, bufsize, length, infolog); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetRenderbufferParameteriv(target, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetRenderbufferParameteriv(target, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderiv(GLuint shader, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderiv(shader, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderiv(shader, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderInfoLog(shader, bufsize, length, infolog); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderInfoLog(shader, bufsize, length, infolog); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderPrecisionFormat(shadertype, precisiontype, range, precision); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetShaderSource(shader, bufsize, length, source); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetShaderSource(shader, bufsize, length, source); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetUniformfv(GLuint program, GLint location, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetUniformfv(program, location, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetUniformfv(program, location, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetUniformiv(GLuint program, GLint location, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetUniformiv(program, location, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetUniformiv(program, location, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLint QOpenGLFunctions::glGetUniformLocation(GLuint program, const char* name) +{ +#ifdef QT_OPENGL_ES_2 + GLint result = ::glGetUniformLocation(program, name); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLint result = d_ptr->f.GetUniformLocation(program, name); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetVertexAttribfv(index, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetVertexAttribfv(index, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetVertexAttribiv(index, pname, params); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetVertexAttribiv(index, pname, params); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glGetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) +{ +#ifdef QT_OPENGL_ES_2 + ::glGetVertexAttribPointerv(index, pname, pointer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.GetVertexAttribPointerv(index, pname, pointer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline GLboolean QOpenGLFunctions::glIsBuffer(GLuint buffer) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsBuffer(buffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsBuffer(buffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsFramebuffer(GLuint framebuffer) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsFramebuffer(framebuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsFramebuffer(framebuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsRenderbuffer(GLuint renderbuffer) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsRenderbuffer(renderbuffer); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsRenderbuffer(renderbuffer); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline GLboolean QOpenGLFunctions::glIsShader(GLuint shader) +{ +#ifdef QT_OPENGL_ES_2 + GLboolean result = ::glIsShader(shader); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + GLboolean result = d_ptr->f.IsShader(shader); +#endif + Q_OPENGL_FUNCTIONS_DEBUG + return result; +} + +inline void QOpenGLFunctions::glLinkProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glLinkProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.LinkProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glReleaseShaderCompiler() +{ +#ifdef QT_OPENGL_ES_2 + ::glReleaseShaderCompiler(); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ReleaseShaderCompiler(); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) +{ +#ifdef QT_OPENGL_ES_2 + ::glRenderbufferStorage(target, internalformat, width, height); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.RenderbufferStorage(target, internalformat, width, height); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glSampleCoverage(GLclampf value, GLboolean invert) +{ +#ifdef QT_OPENGL_ES_2 + ::glSampleCoverage(value, invert); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.SampleCoverage(value, invert); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLint length) +{ +#ifdef QT_OPENGL_ES_2 + ::glShaderBinary(n, shaders, binaryformat, binary, length); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ShaderBinary(n, shaders, binaryformat, binary, length); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) +{ +#ifdef QT_OPENGL_ES_2 + ::glShaderSource(shader, count, string, length); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ShaderSource(shader, count, string, length); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilFuncSeparate(face, func, ref, mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilFuncSeparate(face, func, ref, mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilMaskSeparate(GLenum face, GLuint mask) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilMaskSeparate(face, mask); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilMaskSeparate(face, mask); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) +{ +#ifdef QT_OPENGL_ES_2 + ::glStencilOpSeparate(face, fail, zfail, zpass); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.StencilOpSeparate(face, fail, zfail, zpass); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1f(GLint location, GLfloat x) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1f(location, x); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1f(location, x); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1i(GLint location, GLint x) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1i(location, x); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1i(location, x); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform1iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform1iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform1iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2f(GLint location, GLfloat x, GLfloat y) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2f(location, x, y); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2f(location, x, y); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2i(GLint location, GLint x, GLint y) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2i(location, x, y); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2i(location, x, y); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform2iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform2iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform2iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3f(location, x, y, z); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3f(location, x, y, z); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3i(GLint location, GLint x, GLint y, GLint z) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3i(location, x, y, z); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3i(location, x, y, z); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform3iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform3iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform3iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4f(location, x, y, z, w); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4f(location, x, y, z, w); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4fv(GLint location, GLsizei count, const GLfloat* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4fv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4fv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4i(location, x, y, z, w); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4i(location, x, y, z, w); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniform4iv(GLint location, GLsizei count, const GLint* v) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniform4iv(location, count, v); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.Uniform4iv(location, count, v); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniformMatrix2fv(location, count, transpose, value); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UniformMatrix2fv(location, count, transpose, value); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniformMatrix3fv(location, count, transpose, value); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UniformMatrix3fv(location, count, transpose, value); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) +{ +#ifdef QT_OPENGL_ES_2 + ::glUniformMatrix4fv(location, count, transpose, value); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UniformMatrix4fv(location, count, transpose, value); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glUseProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glUseProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.UseProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glValidateProgram(GLuint program) +{ +#ifdef QT_OPENGL_ES_2 + ::glValidateProgram(program); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.ValidateProgram(program); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib1f(GLuint indx, GLfloat x) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib1f(indx, x); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib1f(indx, x); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib1fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib1fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib1fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib2f(indx, x, y); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib2f(indx, x, y); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib2fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib2fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib2fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib3f(indx, x, y, z); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib3f(indx, x, y, z); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib3fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib3fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib3fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib4f(indx, x, y, z, w); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib4f(indx, x, y, z, w); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttrib4fv(GLuint indx, const GLfloat* values) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttrib4fv(indx, values); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttrib4fv(indx, values); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +inline void QOpenGLFunctions::glVertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) +{ +#ifdef QT_OPENGL_ES_2 + ::glVertexAttribPointer(indx, size, type, normalized, stride, ptr); +#else + Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr)); + d_ptr->f.VertexAttribPointer(indx, size, type, normalized, stride, ptr); +#endif + Q_OPENGL_FUNCTIONS_DEBUG +} + +#undef QT_OPENGL_DECLARE_FUNCTIONS +#undef QT_OPENGL_COUNT_FUNCTIONS +#undef QT_OPENGL_DECLARE + +QT_END_NAMESPACE + +#endif // QT_NO_OPENGL + +#endif diff --git a/qt5-base/mingw-w64-angle/PKGBUILD b/qt5-base/mingw-w64-angle/PKGBUILD index 07b09bac..205b9e49 100644 --- a/qt5-base/mingw-w64-angle/PKGBUILD +++ b/qt5-base/mingw-w64-angle/PKGBUILD @@ -8,8 +8,8 @@ # There are different variants of the package which can be selected by simply adjusting pkgname: # - mingw-w64-qt5-base or mingw-w64-qt5-base-opengl: using native OpenGL -# - mingw-w64-qt5-base-angle: using ANGLE rather then native OpenGL -# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and OpenGL dynamically at runtime +# - mingw-w64-qt5-base-angle: using ANGLE rather than native OpenGL +# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and native OpenGL dynamically at runtime # - mingw-w64-qt5-base-noopenql: no OpenGL support # The variants are conflicting (and hence can not be installed at the same time). # See also: http://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers @@ -17,6 +17,8 @@ # The variants listed above only contain dynamic libraries. For building static libraries # just append '-static' to the package name, eg. mingw-w64-qt5-base-static or mingw-w64-qt5-base-angle-static. # The static variants rely on the corresponding dynamic variant for headers and tools. +# I only tested the static version using native OpenGL so far (mingw-w64-qt5-base-static). +# Note that ANGLE will still be loaded as dynamic library in mingw-w64-qt5-base-dynamic-static. # By default CMake and qmake will link against the dynamic Qt libraries. @@ -50,12 +52,14 @@ isStatic() { [ "${pkgname##*-}" = 'static' ] } isOpenGL() { - isDefault || \ # currently use native OpenGL by default + # Currently use native OpenGL by default + isDefault || \ [[ $pkgname = 'mingw-w64-qt5-base-opengl' ]] || [[ $pkgname = 'mingw-w64-qt5-base-opengl-static' ]] } isANGLE() { [[ $pkgname = 'mingw-w64-qt5-base-angle' ]] || [[ $pkgname = 'mingw-w64-qt5-base-angle-static' ]] || \ - [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] # treat dynamic version like ANGLE version, correct? + [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] + # Treat dynamic version like ANGLE version, correct? } isDynamic() { [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] @@ -68,12 +72,13 @@ pkgname=mingw-w64-qt5-base-angle pkgver=5.7.0 pkgrel=5 pkgdesc="A cross-platform application and UI framework (mingw-w64)" -# the static variant doesn't contain any executables which need to be executed on the build machine +# The static variant doesn't contain any executables which need to be executed on the build machine isStatic && arch=('any') || arch=('i686' 'x86_64') url='https://www.qt.io/' license=('GPL3' 'LGPL3' 'FDL' 'custom') depends=('mingw-w64-crt' 'mingw-w64-zlib' 'mingw-w64-libjpeg-turbo' 'mingw-w64-sqlite' - 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz') + 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz' + 'mingw-w64-pcre') groups=('mingw-w64-qt' 'mingw-w64-qt5') optdepends=('mingw-w64-postgresql-libs: PostgreSQL support' 'mingw-w64-mariadb-connector-c: MySQL support' 'qtchooser') @@ -81,7 +86,7 @@ makedepends=('mingw-w64-gcc' 'mingw-w64-postgresql-libs' 'mingw-w64-mariadb-conn options=(!strip !buildflags staticlibs !emptydirs) _pkgfqn="qtbase-opensource-src-${pkgver}" source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/submodules/${_pkgfqn}.tar.xz" - "qt5-add-angle-support.patch" + "qt5-add-angle-and-dynamic-support.patch" "qt5-use-external-angle-library.patch" "qt5-workaround-pkgconfig-install-issue.patch" "qt5-merge-static-and-shared-library-trees.patch" @@ -105,8 +110,8 @@ source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/sub "qt5-use-correct-pkg-config-static-flags.patch" "qt5-use-pkgconfig-for-harfbuzz.patch") md5sums=('184f9460b40752d71b15b827260580c2' - 'bab00ccc19d888997f323c80354a7c3f' - 'f7e1487de6e85116d9c6bde2eac4fb73' + '55a11d8ea5db9ca0cced06b06655b417' + '1f7aea5e8bed840b3efc9172081ddb45' 'bc99c4cc6998295d76f37ed681c20d47' 'e2ffff39673b37c4d9974e92fcf7213c' '4fe6523dd1c34398df3aa5a8763530cc' @@ -116,7 +121,7 @@ md5sums=('184f9460b40752d71b15b827260580c2' '99bb9f51ec684803768f36e407baf486' '6a6bc88f35ac8080869de39bc128ce5b' '261d9071a6af3f1d5c3f955da3781573' - 'f28edb1fe61c575522d3df814e680f9a' + '0524dc5427a6c5338ebd45ab08c6ce80' 'c15d9f480d0248648fa52aeacb46e3c7' '612a4dfb9f1a3898a1920c28bb999159' 'd0eb81aef1a21c65813fe4ddabbc4206' @@ -127,9 +132,10 @@ md5sums=('184f9460b40752d71b15b827260580c2' '1dc792faa7761d8d7d2f17170da04d6b' '41ec67d9e5e70e0d6d93b42aebd0e12a' '61c0f9d0095c5a6dec8d14e9ec35a608' - 'bba65d27704cf36e148d8f18ad02ad15') + '16a7d505b503bb1087fc00fad819f64b') _architectures='i686-w64-mingw32 x86_64-w64-mingw32' +#_architectures='x86_64-w64-mingw32 i686-w64-mingw32' isStatic && depends+=(${pkgname%-static}) if isANGLE; then @@ -144,11 +150,11 @@ if ! isDefault; then if isStatic; then provides+=('mingw-w64-qt5-base-static') conflicts+=('mingw-w64-qt5-base-static' 'mingw-w64-qt5-base-angle-static' 'mingw-w64-qt5-base-noopengl-static' - 'mingw-w64-qt5-base-angle-dynamic-static' 'mingw-w64-qt5-base-angle-openql-static') + 'mingw-w64-qt5-base-dynamic-static' 'mingw-w64-qt5-base-openql-static') else provides+=('mingw-w64-qt5-base') conflicts+=('mingw-w64-qt5-base' 'mingw-w64-qt5-base-angle' 'mingw-w64-qt5-base-noopengl' - 'mingw-w64-qt5-base-angle-dynamic' 'mingw-w64-qt5-base-angle-openql') + 'mingw-w64-qt5-base-dynamic' 'mingw-w64-qt5-base-openql') fi fi @@ -169,18 +175,21 @@ patch() { prepare() { cd "${srcdir}/${_pkgfqn}" - # include fixes from MXE + # Include fixes from MXE patch -p1 -b -i ../qt5-fixes-from-mxe.patch if isANGLE; then - # Add support for Angle - patch -p1 -i ../qt5-add-angle-support.patch + # Add support for configure options '-opengl angle' and '-opengl dynamic' + # to the configure shell script + patch -p0 -i ../qt5-add-angle-and-dynamic-support.patch # Make sure our external Angle package is used instead of the bundled one patch -p1 -i ../qt5-use-external-angle-library.patch fi - # Fix opengl to many sections error - isOpenGL && patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch + # Prevent too many sections / File too big assembler error + # (On x86_64 qopenglversionfunctionsfactory.o exceeds limit of 32768 sections + # otherwise.) + patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch # Make sure the .pc files of the Qt5 modules are installed correctly patch -p0 -i ../qt5-workaround-pkgconfig-install-issue.patch @@ -230,7 +239,7 @@ prepare() { # We have to use rpath here as the library which the # various tools depend on (libQt5Bootstrap.so) resides # in the folder /usr/${_arch}/lib - # We can't use the regular %%_libdir for this as we + # We can't use the regular lib dir for this as we # want to avoid conflicts with the native qt5 packages patch -p1 -i ../qt5-enable-rpath-for-host-tools.patch @@ -269,10 +278,11 @@ prepare() { build() { cd "${srcdir}/${_pkgfqn}" - # Setup flags - local mingw_flags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4' - export CFLAGS="$mingw_flags" - export CXXFLAGS="$mingw_flags" + # Do not set any flags here, flags are configured via mkspec + # Setting flags here is not appropriate as it does not allow to + # distinguish between flags for native compiler and cross compiler + unset CFLAGS + unset CXXFLAGS unset LDFLAGS for _arch in ${_architectures}; do @@ -282,7 +292,7 @@ build() { # are all available in the same folder with these exact file names # To prevent conflicts with the mingw-w64-qt4 package we have # to put these tools in a dedicated folder - qt_configure_args="\ + local qt_configure_args="\ -xplatform win32-g++ \ -optimized-qmake \ -verbose \ @@ -323,27 +333,27 @@ build() { -translationdir /usr/${_arch}/share/qt/translations \ -device-option CROSS_COMPILE=${_arch}-" - # Fix include directory of dbus - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I dbus-1)" - - # Fix include directory of freetype2 - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2)" + # Fix include directory of freetype2 and dbus + qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2 dbus-1)" # Configure usage of ANGLE/OpenGL if isOpenGL; then + msg2 'Using native OpenGL backend' qt_configure_args+=' -opengl desktop' elif isNoOpenGL; then + msg2 'Building without OpenGL support' qt_configure_args+=' -no-opengl' elif isANGLE; then if isDynamic; then + msg2 'Using dynamic OpenGL backend' qt_configure_args+=' -opengl dynamic' else + msg2 'Using ANGLE as OpenGL backend' qt_configure_args+=' -opengl angle' fi # GL_GLEXT_PROTOTYPES must be defined to enable declarations of GLES functions qt_configure_args+=' -DGL_GLEXT_PROTOTYPES' fi - # TODO: allow dynamic OpenGL configuration unset PKG_CONFIG_PATH @@ -385,8 +395,8 @@ package() { # The static release contains only the static libs itself but relies on the # shared release for Qt5Bootstrap library and tools (qmake, uic, ...) - # Drop Qt5Bootstrap and libraries which are only provided as statically - # and are hence already present in the shared version + # Drop Qt5Bootstrap and libraries which are only provided as static lib + # and are hence already present in static form in the shared version rm -f "${pkgdir}/usr/${_arch}/lib/"{lib,}qt5main* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5OpenGLExtensions* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5PlatformSupport* \ diff --git a/qt5-base/mingw-w64-angle/qt5-add-angle-and-dynamic-support.patch b/qt5-base/mingw-w64-angle/qt5-add-angle-and-dynamic-support.patch new file mode 100644 index 00000000..f9b88685 --- /dev/null +++ b/qt5-base/mingw-w64-angle/qt5-add-angle-and-dynamic-support.patch @@ -0,0 +1,75 @@ +--- configure.orig 2016-06-10 08:48:56.000000000 +0200 ++++ configure 2016-09-04 20:38:55.345362982 +0200 +@@ -1287,6 +1287,7 @@ + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || ++ [ "$VAL" = "angle" ] || [ "$VAL" = "dynamic" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" +@@ -5312,7 +5313,7 @@ + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then +- CFG_OPENGL=desktop ++ CFG_OPENGL=angle + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else +@@ -5348,6 +5349,17 @@ + echo " ${XQMAKESPEC}." + exit 1 + fi ++ elif [ "$CFG_OPENGL" = "angle" ]; then ++ compileTest x11/opengl "OpenGL" ++ if [ $? != "0" ]; then ++ echo "The OpenGL functionality test failed!" ++ echo " You might need to modify the include and library search paths by editing" ++ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" ++ echo " ${XQMAKESPEC}." ++ exit 1 ++ fi ++ elif [ "$CFG_OPENGL" = "dynamic" ]; then ++ true # FIXME: not sure whether/which test required + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" +@@ -6423,6 +6435,16 @@ + QT_CONFIG="$QT_CONFIG opengles2" + fi + ++if [ "$CFG_OPENGL" = "angle" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" ++ QT_CONFIG="$QT_CONFIG opengles2 egl angle" ++fi ++ ++if [ "$CFG_OPENGL" = "dynamic" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_DYNAMIC" ++ QT_CONFIG="$QT_CONFIG dynamicgl" ++fi ++ + if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +@@ -7474,7 +7496,7 @@ + report_support " NIS ...................." "$CFG_NIS" + report_support " OpenGL / OpenVG:" + report_support " EGL .................." "$CFG_EGL" +-report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" ++report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" dynamic "Dynamic OpenGL" + report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" + report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" + if [ -n "$PKG_CONFIG" ]; then +--- src/gui/opengl/qopenglfunctions.h.orig 2016-06-10 08:48:56.000000000 +0200 ++++ src/gui/opengl/qopenglfunctions.h 2016-09-04 20:36:07.801522904 +0200 +@@ -56,9 +56,7 @@ + + //#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +-#ifdef QT_OPENGL_ES + typedef double GLdouble; +-#endif + + #ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + #include diff --git a/qt5-base/mingw-w64-angle/qt5-add-angle-support.patch b/qt5-base/mingw-w64-angle/qt5-add-angle-support.patch deleted file mode 100644 index 8b9af40a..00000000 --- a/qt5-base/mingw-w64-angle/qt5-add-angle-support.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -U 3 -r a/configure b/configure ---- a/configure 2015-06-29 14:03:05.000000000 -0600 -+++ b/configure 2015-07-18 11:14:30.312317765 -0600 -@@ -5081,7 +5081,7 @@ - fi - if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then - if compileTest x11/opengl "OpenGL"; then -- CFG_OPENGL=desktop -+ CFG_OPENGL=angle - elif compileTest unix/opengles2 "OpenGL ES 2.0"; then - CFG_OPENGL=es2 - else -@@ -6072,6 +6072,11 @@ - QT_CONFIG="$QT_CONFIG opengles2" - fi - -+if [ "$CFG_OPENGL" = "angle" ]; then -+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" -+ QT_CONFIG="$QT_CONFIG opengles2 egl angle" -+fi -+ - if [ "$CFG_SHARED" = "yes" ]; then - QT_CONFIG="$QT_CONFIG shared" - QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" -@@ -7077,7 +7082,7 @@ - report_support " NIS ...................." "$CFG_NIS" - report_support " OpenGL / OpenVG:" - report_support " EGL .................." "$CFG_EGL" --report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" -+report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" - report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" - report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" - if [ -n "$PKG_CONFIG" ]; then -diff -U 3 -r a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp ---- a/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-06-29 14:04:40.000000000 -0600 -+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-07-18 11:16:05.767172673 -0600 -@@ -45,7 +45,9 @@ - #include - - #include -+#ifndef QT_OPENGL_ES_2 - #include -+#endif - - // #define DEBUG_GL - diff --git a/qt5-base/mingw-w64-angle/qt5-use-external-angle-library.patch b/qt5-base/mingw-w64-angle/qt5-use-external-angle-library.patch index bbdda149..383bb8c6 100644 --- a/qt5-base/mingw-w64-angle/qt5-use-external-angle-library.patch +++ b/qt5-base/mingw-w64-angle/qt5-use-external-angle-library.patch @@ -4,31 +4,31 @@ diff -U 3 -r a/src/gui/gui.pro b/src/gui/gui.pro @@ -17,10 +17,5 @@ imageformats \ egldeviceintegrations - + -# This is here only because the platform plugin is no module, obviously. -win32:contains(QT_CONFIG, angle)|contains(QT_CONFIG, dynamicgl) { - MODULE_AUX_INCLUDES = \ - \$\$QT_MODULE_INCLUDE_BASE/QtANGLE -} - + # Code coverage with TestCocoon @@ -35,6 +29,10 @@ - + mac:!ios: LIBS_PRIVATE += -framework Cocoa - + +win32:contains(QT_CONFIG, angle) { + LIBS_PRIVATE += -lGLESv2 +} + CONFIG += simd optimize_full - + include(accessible/accessible.pri) diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in --- a/src/gui/Qt5GuiConfigExtras.cmake.in 2015-06-29 14:04:51.000000000 -0600 +++ b/src/gui/Qt5GuiConfigExtras.cmake.in 2015-07-18 10:51:09.666053970 -0600 @@ -2,9 +2,9 @@ !!IF !isEmpty(CMAKE_ANGLE_EGL_DLL_RELEASE) - + !!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE) -set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\") @@ -36,19 +36,17 @@ diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras. -set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\") !!ENDIF - + _qt5_Gui_check_file_exists(${Qt5Gui_EGL_INCLUDE_DIRS}) diff -U 3 -r a/src/opengl/opengl.pro b/src/opengl/opengl.pro --- a/src/opengl/opengl.pro 2015-06-29 14:04:05.000000000 -0600 +++ b/src/opengl/opengl.pro 2015-07-18 10:46:46.588388411 -0600 -@@ -12,6 +12,9 @@ - +@@ -12,6 +12,7 @@ + contains(QT_CONFIG, opengl):CONFIG += opengl contains(QT_CONFIG, opengles2):CONFIG += opengles2 -+win32:contains(QT_CONFIG, angle) { -+ LIBS_PRIVATE += -lGLESv2 -+} - ++win32:contains(QT_CONFIG, angle): LIBS_PRIVATE += -lGLESv2 + HEADERS += qgl.h \ qgl_p.h \ @@ -57,10 +55,10 @@ diff -U 3 -r a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms +++ b/src/plugins/platforms/windows/windows.pri 2015-07-18 10:53:45.585348009 -0600 @@ -3,6 +3,7 @@ !wince*:LIBS *= -luser32 -lwinspool -limm32 -lwinmm -loleaut32 - + contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2):!contains(QT_CONFIG, dynamicgl): LIBS *= -lopengl32 +contains(QT_CONFIG, angle):LIBS += -lGLESv2 -lEGL - + mingw: LIBS *= -luuid # For the dialog helpers: diff -U 3 -r a/src/src.pro b/src/src.pro diff --git a/qt5-base/mingw-w64-angle/qt5-use-pkgconfig-for-harfbuzz.patch b/qt5-base/mingw-w64-angle/qt5-use-pkgconfig-for-harfbuzz.patch index 82c684e1..078538a0 100644 --- a/qt5-base/mingw-w64-angle/qt5-use-pkgconfig-for-harfbuzz.patch +++ b/qt5-base/mingw-w64-angle/qt5-use-pkgconfig-for-harfbuzz.patch @@ -25,7 +25,7 @@ QMAKE_LIBS = QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz -lpcre16 -QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng -lharfbuzz -lglib-2.0 -lintl -lwinmm -+QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) ++QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) $$system($${CROSS_COMPILE}pkg-config --static --libs freetype2) QMAKE_LIBS_NETWORK = -lws2_32 -lcrypt32 -ldnsapi QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32 QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} -ld3d9 -ldxguid -lgdi32 -luser32 diff --git a/qt5-base/mingw-w64-angle/qt5-use-win32-g++-mkspecs-profile.patch b/qt5-base/mingw-w64-angle/qt5-use-win32-g++-mkspecs-profile.patch index 004eacdc..5fc41308 100644 --- a/qt5-base/mingw-w64-angle/qt5-use-win32-g++-mkspecs-profile.patch +++ b/qt5-base/mingw-w64-angle/qt5-use-win32-g++-mkspecs-profile.patch @@ -5,7 +5,7 @@ QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -+QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport ++QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport $${CROSS_COMPILE_CFLAGS} QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall -Wextra QMAKE_CFLAGS_WARN_OFF = -w diff --git a/qt5-base/mingw-w64-dynamic/PKGBUILD b/qt5-base/mingw-w64-dynamic/PKGBUILD index 9ae47ac8..df57a7ba 100644 --- a/qt5-base/mingw-w64-dynamic/PKGBUILD +++ b/qt5-base/mingw-w64-dynamic/PKGBUILD @@ -8,8 +8,8 @@ # There are different variants of the package which can be selected by simply adjusting pkgname: # - mingw-w64-qt5-base or mingw-w64-qt5-base-opengl: using native OpenGL -# - mingw-w64-qt5-base-angle: using ANGLE rather then native OpenGL -# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and OpenGL dynamically at runtime +# - mingw-w64-qt5-base-angle: using ANGLE rather than native OpenGL +# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and native OpenGL dynamically at runtime # - mingw-w64-qt5-base-noopenql: no OpenGL support # The variants are conflicting (and hence can not be installed at the same time). # See also: http://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers @@ -17,6 +17,8 @@ # The variants listed above only contain dynamic libraries. For building static libraries # just append '-static' to the package name, eg. mingw-w64-qt5-base-static or mingw-w64-qt5-base-angle-static. # The static variants rely on the corresponding dynamic variant for headers and tools. +# I only tested the static version using native OpenGL so far (mingw-w64-qt5-base-static). +# Note that ANGLE will still be loaded as dynamic library in mingw-w64-qt5-base-dynamic-static. # By default CMake and qmake will link against the dynamic Qt libraries. @@ -50,12 +52,14 @@ isStatic() { [ "${pkgname##*-}" = 'static' ] } isOpenGL() { - isDefault || \ # currently use native OpenGL by default + # Currently use native OpenGL by default + isDefault || \ [[ $pkgname = 'mingw-w64-qt5-base-opengl' ]] || [[ $pkgname = 'mingw-w64-qt5-base-opengl-static' ]] } isANGLE() { [[ $pkgname = 'mingw-w64-qt5-base-angle' ]] || [[ $pkgname = 'mingw-w64-qt5-base-angle-static' ]] || \ - [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] # treat dynamic version like ANGLE version, correct? + [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] + # Treat dynamic version like ANGLE version, correct? } isDynamic() { [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] @@ -68,12 +72,13 @@ pkgname=mingw-w64-qt5-base-dynamic pkgver=5.7.0 pkgrel=5 pkgdesc="A cross-platform application and UI framework (mingw-w64)" -# the static variant doesn't contain any executables which need to be executed on the build machine +# The static variant doesn't contain any executables which need to be executed on the build machine isStatic && arch=('any') || arch=('i686' 'x86_64') url='https://www.qt.io/' license=('GPL3' 'LGPL3' 'FDL' 'custom') depends=('mingw-w64-crt' 'mingw-w64-zlib' 'mingw-w64-libjpeg-turbo' 'mingw-w64-sqlite' - 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz') + 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz' + 'mingw-w64-pcre') groups=('mingw-w64-qt' 'mingw-w64-qt5') optdepends=('mingw-w64-postgresql-libs: PostgreSQL support' 'mingw-w64-mariadb-connector-c: MySQL support' 'qtchooser') @@ -81,7 +86,7 @@ makedepends=('mingw-w64-gcc' 'mingw-w64-postgresql-libs' 'mingw-w64-mariadb-conn options=(!strip !buildflags staticlibs !emptydirs) _pkgfqn="qtbase-opensource-src-${pkgver}" source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/submodules/${_pkgfqn}.tar.xz" - "qt5-add-angle-support.patch" + "qt5-add-angle-and-dynamic-support.patch" "qt5-use-external-angle-library.patch" "qt5-workaround-pkgconfig-install-issue.patch" "qt5-merge-static-and-shared-library-trees.patch" @@ -105,8 +110,8 @@ source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/sub "qt5-use-correct-pkg-config-static-flags.patch" "qt5-use-pkgconfig-for-harfbuzz.patch") md5sums=('184f9460b40752d71b15b827260580c2' - 'bab00ccc19d888997f323c80354a7c3f' - 'f7e1487de6e85116d9c6bde2eac4fb73' + '55a11d8ea5db9ca0cced06b06655b417' + '1f7aea5e8bed840b3efc9172081ddb45' 'bc99c4cc6998295d76f37ed681c20d47' 'e2ffff39673b37c4d9974e92fcf7213c' '4fe6523dd1c34398df3aa5a8763530cc' @@ -116,7 +121,7 @@ md5sums=('184f9460b40752d71b15b827260580c2' '99bb9f51ec684803768f36e407baf486' '6a6bc88f35ac8080869de39bc128ce5b' '261d9071a6af3f1d5c3f955da3781573' - 'f28edb1fe61c575522d3df814e680f9a' + '0524dc5427a6c5338ebd45ab08c6ce80' 'c15d9f480d0248648fa52aeacb46e3c7' '612a4dfb9f1a3898a1920c28bb999159' 'd0eb81aef1a21c65813fe4ddabbc4206' @@ -127,9 +132,10 @@ md5sums=('184f9460b40752d71b15b827260580c2' '1dc792faa7761d8d7d2f17170da04d6b' '41ec67d9e5e70e0d6d93b42aebd0e12a' '61c0f9d0095c5a6dec8d14e9ec35a608' - 'bba65d27704cf36e148d8f18ad02ad15') + '16a7d505b503bb1087fc00fad819f64b') _architectures='i686-w64-mingw32 x86_64-w64-mingw32' +#_architectures='x86_64-w64-mingw32 i686-w64-mingw32' isStatic && depends+=(${pkgname%-static}) if isANGLE; then @@ -144,11 +150,11 @@ if ! isDefault; then if isStatic; then provides+=('mingw-w64-qt5-base-static') conflicts+=('mingw-w64-qt5-base-static' 'mingw-w64-qt5-base-angle-static' 'mingw-w64-qt5-base-noopengl-static' - 'mingw-w64-qt5-base-angle-dynamic-static' 'mingw-w64-qt5-base-angle-openql-static') + 'mingw-w64-qt5-base-dynamic-static' 'mingw-w64-qt5-base-openql-static') else provides+=('mingw-w64-qt5-base') conflicts+=('mingw-w64-qt5-base' 'mingw-w64-qt5-base-angle' 'mingw-w64-qt5-base-noopengl' - 'mingw-w64-qt5-base-angle-dynamic' 'mingw-w64-qt5-base-angle-openql') + 'mingw-w64-qt5-base-dynamic' 'mingw-w64-qt5-base-openql') fi fi @@ -169,18 +175,21 @@ patch() { prepare() { cd "${srcdir}/${_pkgfqn}" - # include fixes from MXE + # Include fixes from MXE patch -p1 -b -i ../qt5-fixes-from-mxe.patch if isANGLE; then - # Add support for Angle - patch -p1 -i ../qt5-add-angle-support.patch + # Add support for configure options '-opengl angle' and '-opengl dynamic' + # to the configure shell script + patch -p0 -i ../qt5-add-angle-and-dynamic-support.patch # Make sure our external Angle package is used instead of the bundled one patch -p1 -i ../qt5-use-external-angle-library.patch fi - # Fix opengl to many sections error - isOpenGL && patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch + # Prevent too many sections / File too big assembler error + # (On x86_64 qopenglversionfunctionsfactory.o exceeds limit of 32768 sections + # otherwise.) + patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch # Make sure the .pc files of the Qt5 modules are installed correctly patch -p0 -i ../qt5-workaround-pkgconfig-install-issue.patch @@ -230,7 +239,7 @@ prepare() { # We have to use rpath here as the library which the # various tools depend on (libQt5Bootstrap.so) resides # in the folder /usr/${_arch}/lib - # We can't use the regular %%_libdir for this as we + # We can't use the regular lib dir for this as we # want to avoid conflicts with the native qt5 packages patch -p1 -i ../qt5-enable-rpath-for-host-tools.patch @@ -269,10 +278,11 @@ prepare() { build() { cd "${srcdir}/${_pkgfqn}" - # Setup flags - local mingw_flags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4' - export CFLAGS="$mingw_flags" - export CXXFLAGS="$mingw_flags" + # Do not set any flags here, flags are configured via mkspec + # Setting flags here is not appropriate as it does not allow to + # distinguish between flags for native compiler and cross compiler + unset CFLAGS + unset CXXFLAGS unset LDFLAGS for _arch in ${_architectures}; do @@ -282,7 +292,7 @@ build() { # are all available in the same folder with these exact file names # To prevent conflicts with the mingw-w64-qt4 package we have # to put these tools in a dedicated folder - qt_configure_args="\ + local qt_configure_args="\ -xplatform win32-g++ \ -optimized-qmake \ -verbose \ @@ -323,27 +333,27 @@ build() { -translationdir /usr/${_arch}/share/qt/translations \ -device-option CROSS_COMPILE=${_arch}-" - # Fix include directory of dbus - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I dbus-1)" - - # Fix include directory of freetype2 - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2)" + # Fix include directory of freetype2 and dbus + qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2 dbus-1)" # Configure usage of ANGLE/OpenGL if isOpenGL; then + msg2 'Using native OpenGL backend' qt_configure_args+=' -opengl desktop' elif isNoOpenGL; then + msg2 'Building without OpenGL support' qt_configure_args+=' -no-opengl' elif isANGLE; then if isDynamic; then + msg2 'Using dynamic OpenGL backend' qt_configure_args+=' -opengl dynamic' else + msg2 'Using ANGLE as OpenGL backend' qt_configure_args+=' -opengl angle' fi # GL_GLEXT_PROTOTYPES must be defined to enable declarations of GLES functions qt_configure_args+=' -DGL_GLEXT_PROTOTYPES' fi - # TODO: allow dynamic OpenGL configuration unset PKG_CONFIG_PATH @@ -385,8 +395,8 @@ package() { # The static release contains only the static libs itself but relies on the # shared release for Qt5Bootstrap library and tools (qmake, uic, ...) - # Drop Qt5Bootstrap and libraries which are only provided as statically - # and are hence already present in the shared version + # Drop Qt5Bootstrap and libraries which are only provided as static lib + # and are hence already present in static form in the shared version rm -f "${pkgdir}/usr/${_arch}/lib/"{lib,}qt5main* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5OpenGLExtensions* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5PlatformSupport* \ diff --git a/qt5-base/mingw-w64-dynamic/qt5-add-angle-and-dynamic-support.patch b/qt5-base/mingw-w64-dynamic/qt5-add-angle-and-dynamic-support.patch new file mode 100644 index 00000000..f9b88685 --- /dev/null +++ b/qt5-base/mingw-w64-dynamic/qt5-add-angle-and-dynamic-support.patch @@ -0,0 +1,75 @@ +--- configure.orig 2016-06-10 08:48:56.000000000 +0200 ++++ configure 2016-09-04 20:38:55.345362982 +0200 +@@ -1287,6 +1287,7 @@ + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || ++ [ "$VAL" = "angle" ] || [ "$VAL" = "dynamic" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" +@@ -5312,7 +5313,7 @@ + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then +- CFG_OPENGL=desktop ++ CFG_OPENGL=angle + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else +@@ -5348,6 +5349,17 @@ + echo " ${XQMAKESPEC}." + exit 1 + fi ++ elif [ "$CFG_OPENGL" = "angle" ]; then ++ compileTest x11/opengl "OpenGL" ++ if [ $? != "0" ]; then ++ echo "The OpenGL functionality test failed!" ++ echo " You might need to modify the include and library search paths by editing" ++ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" ++ echo " ${XQMAKESPEC}." ++ exit 1 ++ fi ++ elif [ "$CFG_OPENGL" = "dynamic" ]; then ++ true # FIXME: not sure whether/which test required + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" +@@ -6423,6 +6435,16 @@ + QT_CONFIG="$QT_CONFIG opengles2" + fi + ++if [ "$CFG_OPENGL" = "angle" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" ++ QT_CONFIG="$QT_CONFIG opengles2 egl angle" ++fi ++ ++if [ "$CFG_OPENGL" = "dynamic" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_DYNAMIC" ++ QT_CONFIG="$QT_CONFIG dynamicgl" ++fi ++ + if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +@@ -7474,7 +7496,7 @@ + report_support " NIS ...................." "$CFG_NIS" + report_support " OpenGL / OpenVG:" + report_support " EGL .................." "$CFG_EGL" +-report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" ++report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" dynamic "Dynamic OpenGL" + report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" + report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" + if [ -n "$PKG_CONFIG" ]; then +--- src/gui/opengl/qopenglfunctions.h.orig 2016-06-10 08:48:56.000000000 +0200 ++++ src/gui/opengl/qopenglfunctions.h 2016-09-04 20:36:07.801522904 +0200 +@@ -56,9 +56,7 @@ + + //#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +-#ifdef QT_OPENGL_ES + typedef double GLdouble; +-#endif + + #ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + #include diff --git a/qt5-base/mingw-w64-dynamic/qt5-add-angle-support.patch b/qt5-base/mingw-w64-dynamic/qt5-add-angle-support.patch deleted file mode 100644 index 8b9af40a..00000000 --- a/qt5-base/mingw-w64-dynamic/qt5-add-angle-support.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -U 3 -r a/configure b/configure ---- a/configure 2015-06-29 14:03:05.000000000 -0600 -+++ b/configure 2015-07-18 11:14:30.312317765 -0600 -@@ -5081,7 +5081,7 @@ - fi - if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then - if compileTest x11/opengl "OpenGL"; then -- CFG_OPENGL=desktop -+ CFG_OPENGL=angle - elif compileTest unix/opengles2 "OpenGL ES 2.0"; then - CFG_OPENGL=es2 - else -@@ -6072,6 +6072,11 @@ - QT_CONFIG="$QT_CONFIG opengles2" - fi - -+if [ "$CFG_OPENGL" = "angle" ]; then -+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" -+ QT_CONFIG="$QT_CONFIG opengles2 egl angle" -+fi -+ - if [ "$CFG_SHARED" = "yes" ]; then - QT_CONFIG="$QT_CONFIG shared" - QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" -@@ -7077,7 +7082,7 @@ - report_support " NIS ...................." "$CFG_NIS" - report_support " OpenGL / OpenVG:" - report_support " EGL .................." "$CFG_EGL" --report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" -+report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" - report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" - report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" - if [ -n "$PKG_CONFIG" ]; then -diff -U 3 -r a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp ---- a/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-06-29 14:04:40.000000000 -0600 -+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-07-18 11:16:05.767172673 -0600 -@@ -45,7 +45,9 @@ - #include - - #include -+#ifndef QT_OPENGL_ES_2 - #include -+#endif - - // #define DEBUG_GL - diff --git a/qt5-base/mingw-w64-dynamic/qt5-use-external-angle-library.patch b/qt5-base/mingw-w64-dynamic/qt5-use-external-angle-library.patch index bbdda149..383bb8c6 100644 --- a/qt5-base/mingw-w64-dynamic/qt5-use-external-angle-library.patch +++ b/qt5-base/mingw-w64-dynamic/qt5-use-external-angle-library.patch @@ -4,31 +4,31 @@ diff -U 3 -r a/src/gui/gui.pro b/src/gui/gui.pro @@ -17,10 +17,5 @@ imageformats \ egldeviceintegrations - + -# This is here only because the platform plugin is no module, obviously. -win32:contains(QT_CONFIG, angle)|contains(QT_CONFIG, dynamicgl) { - MODULE_AUX_INCLUDES = \ - \$\$QT_MODULE_INCLUDE_BASE/QtANGLE -} - + # Code coverage with TestCocoon @@ -35,6 +29,10 @@ - + mac:!ios: LIBS_PRIVATE += -framework Cocoa - + +win32:contains(QT_CONFIG, angle) { + LIBS_PRIVATE += -lGLESv2 +} + CONFIG += simd optimize_full - + include(accessible/accessible.pri) diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in --- a/src/gui/Qt5GuiConfigExtras.cmake.in 2015-06-29 14:04:51.000000000 -0600 +++ b/src/gui/Qt5GuiConfigExtras.cmake.in 2015-07-18 10:51:09.666053970 -0600 @@ -2,9 +2,9 @@ !!IF !isEmpty(CMAKE_ANGLE_EGL_DLL_RELEASE) - + !!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE) -set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\") @@ -36,19 +36,17 @@ diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras. -set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\") !!ENDIF - + _qt5_Gui_check_file_exists(${Qt5Gui_EGL_INCLUDE_DIRS}) diff -U 3 -r a/src/opengl/opengl.pro b/src/opengl/opengl.pro --- a/src/opengl/opengl.pro 2015-06-29 14:04:05.000000000 -0600 +++ b/src/opengl/opengl.pro 2015-07-18 10:46:46.588388411 -0600 -@@ -12,6 +12,9 @@ - +@@ -12,6 +12,7 @@ + contains(QT_CONFIG, opengl):CONFIG += opengl contains(QT_CONFIG, opengles2):CONFIG += opengles2 -+win32:contains(QT_CONFIG, angle) { -+ LIBS_PRIVATE += -lGLESv2 -+} - ++win32:contains(QT_CONFIG, angle): LIBS_PRIVATE += -lGLESv2 + HEADERS += qgl.h \ qgl_p.h \ @@ -57,10 +55,10 @@ diff -U 3 -r a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms +++ b/src/plugins/platforms/windows/windows.pri 2015-07-18 10:53:45.585348009 -0600 @@ -3,6 +3,7 @@ !wince*:LIBS *= -luser32 -lwinspool -limm32 -lwinmm -loleaut32 - + contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2):!contains(QT_CONFIG, dynamicgl): LIBS *= -lopengl32 +contains(QT_CONFIG, angle):LIBS += -lGLESv2 -lEGL - + mingw: LIBS *= -luuid # For the dialog helpers: diff -U 3 -r a/src/src.pro b/src/src.pro diff --git a/qt5-base/mingw-w64-dynamic/qt5-use-pkgconfig-for-harfbuzz.patch b/qt5-base/mingw-w64-dynamic/qt5-use-pkgconfig-for-harfbuzz.patch index 82c684e1..078538a0 100644 --- a/qt5-base/mingw-w64-dynamic/qt5-use-pkgconfig-for-harfbuzz.patch +++ b/qt5-base/mingw-w64-dynamic/qt5-use-pkgconfig-for-harfbuzz.patch @@ -25,7 +25,7 @@ QMAKE_LIBS = QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz -lpcre16 -QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng -lharfbuzz -lglib-2.0 -lintl -lwinmm -+QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) ++QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) $$system($${CROSS_COMPILE}pkg-config --static --libs freetype2) QMAKE_LIBS_NETWORK = -lws2_32 -lcrypt32 -ldnsapi QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32 QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} -ld3d9 -ldxguid -lgdi32 -luser32 diff --git a/qt5-base/mingw-w64-dynamic/qt5-use-win32-g++-mkspecs-profile.patch b/qt5-base/mingw-w64-dynamic/qt5-use-win32-g++-mkspecs-profile.patch index 004eacdc..5fc41308 100644 --- a/qt5-base/mingw-w64-dynamic/qt5-use-win32-g++-mkspecs-profile.patch +++ b/qt5-base/mingw-w64-dynamic/qt5-use-win32-g++-mkspecs-profile.patch @@ -5,7 +5,7 @@ QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -+QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport ++QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport $${CROSS_COMPILE_CFLAGS} QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall -Wextra QMAKE_CFLAGS_WARN_OFF = -w diff --git a/qt5-base/mingw-w64-static/PKGBUILD b/qt5-base/mingw-w64-static/PKGBUILD index 7c4b5455..053d55c1 100644 --- a/qt5-base/mingw-w64-static/PKGBUILD +++ b/qt5-base/mingw-w64-static/PKGBUILD @@ -8,8 +8,8 @@ # There are different variants of the package which can be selected by simply adjusting pkgname: # - mingw-w64-qt5-base or mingw-w64-qt5-base-opengl: using native OpenGL -# - mingw-w64-qt5-base-angle: using ANGLE rather then native OpenGL -# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and OpenGL dynamically at runtime +# - mingw-w64-qt5-base-angle: using ANGLE rather than native OpenGL +# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and native OpenGL dynamically at runtime # - mingw-w64-qt5-base-noopenql: no OpenGL support # The variants are conflicting (and hence can not be installed at the same time). # See also: http://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers @@ -17,6 +17,8 @@ # The variants listed above only contain dynamic libraries. For building static libraries # just append '-static' to the package name, eg. mingw-w64-qt5-base-static or mingw-w64-qt5-base-angle-static. # The static variants rely on the corresponding dynamic variant for headers and tools. +# I only tested the static version using native OpenGL so far (mingw-w64-qt5-base-static). +# Note that ANGLE will still be loaded as dynamic library in mingw-w64-qt5-base-dynamic-static. # By default CMake and qmake will link against the dynamic Qt libraries. @@ -50,12 +52,14 @@ isStatic() { [ "${pkgname##*-}" = 'static' ] } isOpenGL() { - isDefault || \ # currently use native OpenGL by default + # Currently use native OpenGL by default + isDefault || \ [[ $pkgname = 'mingw-w64-qt5-base-opengl' ]] || [[ $pkgname = 'mingw-w64-qt5-base-opengl-static' ]] } isANGLE() { [[ $pkgname = 'mingw-w64-qt5-base-angle' ]] || [[ $pkgname = 'mingw-w64-qt5-base-angle-static' ]] || \ - [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] # treat dynamic version like ANGLE version, correct? + [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] + # Treat dynamic version like ANGLE version, correct? } isDynamic() { [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] @@ -68,12 +72,13 @@ pkgname=mingw-w64-qt5-base-static pkgver=5.7.0 pkgrel=5 pkgdesc="A cross-platform application and UI framework (mingw-w64)" -# the static variant doesn't contain any executables which need to be executed on the build machine +# The static variant doesn't contain any executables which need to be executed on the build machine isStatic && arch=('any') || arch=('i686' 'x86_64') url='https://www.qt.io/' license=('GPL3' 'LGPL3' 'FDL' 'custom') depends=('mingw-w64-crt' 'mingw-w64-zlib' 'mingw-w64-libjpeg-turbo' 'mingw-w64-sqlite' - 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz') + 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz' + 'mingw-w64-pcre') groups=('mingw-w64-qt' 'mingw-w64-qt5') optdepends=('mingw-w64-postgresql-libs: PostgreSQL support' 'mingw-w64-mariadb-connector-c: MySQL support' 'qtchooser') @@ -81,7 +86,7 @@ makedepends=('mingw-w64-gcc' 'mingw-w64-postgresql-libs' 'mingw-w64-mariadb-conn options=(!strip !buildflags staticlibs !emptydirs) _pkgfqn="qtbase-opensource-src-${pkgver}" source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/submodules/${_pkgfqn}.tar.xz" - "qt5-add-angle-support.patch" + "qt5-add-angle-and-dynamic-support.patch" "qt5-use-external-angle-library.patch" "qt5-workaround-pkgconfig-install-issue.patch" "qt5-merge-static-and-shared-library-trees.patch" @@ -105,8 +110,8 @@ source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/sub "qt5-use-correct-pkg-config-static-flags.patch" "qt5-use-pkgconfig-for-harfbuzz.patch") md5sums=('184f9460b40752d71b15b827260580c2' - 'bab00ccc19d888997f323c80354a7c3f' - 'f7e1487de6e85116d9c6bde2eac4fb73' + '55a11d8ea5db9ca0cced06b06655b417' + '1f7aea5e8bed840b3efc9172081ddb45' 'bc99c4cc6998295d76f37ed681c20d47' 'e2ffff39673b37c4d9974e92fcf7213c' '4fe6523dd1c34398df3aa5a8763530cc' @@ -116,7 +121,7 @@ md5sums=('184f9460b40752d71b15b827260580c2' '99bb9f51ec684803768f36e407baf486' '6a6bc88f35ac8080869de39bc128ce5b' '261d9071a6af3f1d5c3f955da3781573' - 'f28edb1fe61c575522d3df814e680f9a' + '0524dc5427a6c5338ebd45ab08c6ce80' 'c15d9f480d0248648fa52aeacb46e3c7' '612a4dfb9f1a3898a1920c28bb999159' 'd0eb81aef1a21c65813fe4ddabbc4206' @@ -127,9 +132,10 @@ md5sums=('184f9460b40752d71b15b827260580c2' '1dc792faa7761d8d7d2f17170da04d6b' '41ec67d9e5e70e0d6d93b42aebd0e12a' '61c0f9d0095c5a6dec8d14e9ec35a608' - 'bba65d27704cf36e148d8f18ad02ad15') + '16a7d505b503bb1087fc00fad819f64b') _architectures='i686-w64-mingw32 x86_64-w64-mingw32' +#_architectures='x86_64-w64-mingw32 i686-w64-mingw32' isStatic && depends+=(${pkgname%-static}) if isANGLE; then @@ -144,11 +150,11 @@ if ! isDefault; then if isStatic; then provides+=('mingw-w64-qt5-base-static') conflicts+=('mingw-w64-qt5-base-static' 'mingw-w64-qt5-base-angle-static' 'mingw-w64-qt5-base-noopengl-static' - 'mingw-w64-qt5-base-angle-dynamic-static' 'mingw-w64-qt5-base-angle-openql-static') + 'mingw-w64-qt5-base-dynamic-static' 'mingw-w64-qt5-base-openql-static') else provides+=('mingw-w64-qt5-base') conflicts+=('mingw-w64-qt5-base' 'mingw-w64-qt5-base-angle' 'mingw-w64-qt5-base-noopengl' - 'mingw-w64-qt5-base-angle-dynamic' 'mingw-w64-qt5-base-angle-openql') + 'mingw-w64-qt5-base-dynamic' 'mingw-w64-qt5-base-openql') fi fi @@ -169,18 +175,21 @@ patch() { prepare() { cd "${srcdir}/${_pkgfqn}" - # include fixes from MXE + # Include fixes from MXE patch -p1 -b -i ../qt5-fixes-from-mxe.patch if isANGLE; then - # Add support for Angle - patch -p1 -i ../qt5-add-angle-support.patch + # Add support for configure options '-opengl angle' and '-opengl dynamic' + # to the configure shell script + patch -p0 -i ../qt5-add-angle-and-dynamic-support.patch # Make sure our external Angle package is used instead of the bundled one patch -p1 -i ../qt5-use-external-angle-library.patch fi - # Fix opengl to many sections error - isOpenGL && patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch + # Prevent too many sections / File too big assembler error + # (On x86_64 qopenglversionfunctionsfactory.o exceeds limit of 32768 sections + # otherwise.) + patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch # Make sure the .pc files of the Qt5 modules are installed correctly patch -p0 -i ../qt5-workaround-pkgconfig-install-issue.patch @@ -230,7 +239,7 @@ prepare() { # We have to use rpath here as the library which the # various tools depend on (libQt5Bootstrap.so) resides # in the folder /usr/${_arch}/lib - # We can't use the regular %%_libdir for this as we + # We can't use the regular lib dir for this as we # want to avoid conflicts with the native qt5 packages patch -p1 -i ../qt5-enable-rpath-for-host-tools.patch @@ -269,10 +278,11 @@ prepare() { build() { cd "${srcdir}/${_pkgfqn}" - # Setup flags - local mingw_flags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4' - export CFLAGS="$mingw_flags" - export CXXFLAGS="$mingw_flags" + # Do not set any flags here, flags are configured via mkspec + # Setting flags here is not appropriate as it does not allow to + # distinguish between flags for native compiler and cross compiler + unset CFLAGS + unset CXXFLAGS unset LDFLAGS for _arch in ${_architectures}; do @@ -282,7 +292,7 @@ build() { # are all available in the same folder with these exact file names # To prevent conflicts with the mingw-w64-qt4 package we have # to put these tools in a dedicated folder - qt_configure_args="\ + local qt_configure_args="\ -xplatform win32-g++ \ -optimized-qmake \ -verbose \ @@ -323,27 +333,27 @@ build() { -translationdir /usr/${_arch}/share/qt/translations \ -device-option CROSS_COMPILE=${_arch}-" - # Fix include directory of dbus - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I dbus-1)" - - # Fix include directory of freetype2 - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2)" + # Fix include directory of freetype2 and dbus + qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2 dbus-1)" # Configure usage of ANGLE/OpenGL if isOpenGL; then + msg2 'Using native OpenGL backend' qt_configure_args+=' -opengl desktop' elif isNoOpenGL; then + msg2 'Building without OpenGL support' qt_configure_args+=' -no-opengl' elif isANGLE; then if isDynamic; then + msg2 'Using dynamic OpenGL backend' qt_configure_args+=' -opengl dynamic' else + msg2 'Using ANGLE as OpenGL backend' qt_configure_args+=' -opengl angle' fi # GL_GLEXT_PROTOTYPES must be defined to enable declarations of GLES functions qt_configure_args+=' -DGL_GLEXT_PROTOTYPES' fi - # TODO: allow dynamic OpenGL configuration unset PKG_CONFIG_PATH @@ -385,8 +395,8 @@ package() { # The static release contains only the static libs itself but relies on the # shared release for Qt5Bootstrap library and tools (qmake, uic, ...) - # Drop Qt5Bootstrap and libraries which are only provided as statically - # and are hence already present in the shared version + # Drop Qt5Bootstrap and libraries which are only provided as static lib + # and are hence already present in static form in the shared version rm -f "${pkgdir}/usr/${_arch}/lib/"{lib,}qt5main* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5OpenGLExtensions* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5PlatformSupport* \ diff --git a/qt5-base/mingw-w64-static/qt5-add-angle-and-dynamic-support.patch b/qt5-base/mingw-w64-static/qt5-add-angle-and-dynamic-support.patch new file mode 100644 index 00000000..f9b88685 --- /dev/null +++ b/qt5-base/mingw-w64-static/qt5-add-angle-and-dynamic-support.patch @@ -0,0 +1,75 @@ +--- configure.orig 2016-06-10 08:48:56.000000000 +0200 ++++ configure 2016-09-04 20:38:55.345362982 +0200 +@@ -1287,6 +1287,7 @@ + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || ++ [ "$VAL" = "angle" ] || [ "$VAL" = "dynamic" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" +@@ -5312,7 +5313,7 @@ + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then +- CFG_OPENGL=desktop ++ CFG_OPENGL=angle + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else +@@ -5348,6 +5349,17 @@ + echo " ${XQMAKESPEC}." + exit 1 + fi ++ elif [ "$CFG_OPENGL" = "angle" ]; then ++ compileTest x11/opengl "OpenGL" ++ if [ $? != "0" ]; then ++ echo "The OpenGL functionality test failed!" ++ echo " You might need to modify the include and library search paths by editing" ++ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" ++ echo " ${XQMAKESPEC}." ++ exit 1 ++ fi ++ elif [ "$CFG_OPENGL" = "dynamic" ]; then ++ true # FIXME: not sure whether/which test required + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" +@@ -6423,6 +6435,16 @@ + QT_CONFIG="$QT_CONFIG opengles2" + fi + ++if [ "$CFG_OPENGL" = "angle" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" ++ QT_CONFIG="$QT_CONFIG opengles2 egl angle" ++fi ++ ++if [ "$CFG_OPENGL" = "dynamic" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_DYNAMIC" ++ QT_CONFIG="$QT_CONFIG dynamicgl" ++fi ++ + if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +@@ -7474,7 +7496,7 @@ + report_support " NIS ...................." "$CFG_NIS" + report_support " OpenGL / OpenVG:" + report_support " EGL .................." "$CFG_EGL" +-report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" ++report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" dynamic "Dynamic OpenGL" + report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" + report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" + if [ -n "$PKG_CONFIG" ]; then +--- src/gui/opengl/qopenglfunctions.h.orig 2016-06-10 08:48:56.000000000 +0200 ++++ src/gui/opengl/qopenglfunctions.h 2016-09-04 20:36:07.801522904 +0200 +@@ -56,9 +56,7 @@ + + //#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +-#ifdef QT_OPENGL_ES + typedef double GLdouble; +-#endif + + #ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + #include diff --git a/qt5-base/mingw-w64-static/qt5-add-angle-support.patch b/qt5-base/mingw-w64-static/qt5-add-angle-support.patch deleted file mode 100644 index 8b9af40a..00000000 --- a/qt5-base/mingw-w64-static/qt5-add-angle-support.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -U 3 -r a/configure b/configure ---- a/configure 2015-06-29 14:03:05.000000000 -0600 -+++ b/configure 2015-07-18 11:14:30.312317765 -0600 -@@ -5081,7 +5081,7 @@ - fi - if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then - if compileTest x11/opengl "OpenGL"; then -- CFG_OPENGL=desktop -+ CFG_OPENGL=angle - elif compileTest unix/opengles2 "OpenGL ES 2.0"; then - CFG_OPENGL=es2 - else -@@ -6072,6 +6072,11 @@ - QT_CONFIG="$QT_CONFIG opengles2" - fi - -+if [ "$CFG_OPENGL" = "angle" ]; then -+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" -+ QT_CONFIG="$QT_CONFIG opengles2 egl angle" -+fi -+ - if [ "$CFG_SHARED" = "yes" ]; then - QT_CONFIG="$QT_CONFIG shared" - QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" -@@ -7077,7 +7082,7 @@ - report_support " NIS ...................." "$CFG_NIS" - report_support " OpenGL / OpenVG:" - report_support " EGL .................." "$CFG_EGL" --report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" -+report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" - report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" - report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" - if [ -n "$PKG_CONFIG" ]; then -diff -U 3 -r a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp ---- a/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-06-29 14:04:40.000000000 -0600 -+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-07-18 11:16:05.767172673 -0600 -@@ -45,7 +45,9 @@ - #include - - #include -+#ifndef QT_OPENGL_ES_2 - #include -+#endif - - // #define DEBUG_GL - diff --git a/qt5-base/mingw-w64-static/qt5-use-external-angle-library.patch b/qt5-base/mingw-w64-static/qt5-use-external-angle-library.patch index bbdda149..383bb8c6 100644 --- a/qt5-base/mingw-w64-static/qt5-use-external-angle-library.patch +++ b/qt5-base/mingw-w64-static/qt5-use-external-angle-library.patch @@ -4,31 +4,31 @@ diff -U 3 -r a/src/gui/gui.pro b/src/gui/gui.pro @@ -17,10 +17,5 @@ imageformats \ egldeviceintegrations - + -# This is here only because the platform plugin is no module, obviously. -win32:contains(QT_CONFIG, angle)|contains(QT_CONFIG, dynamicgl) { - MODULE_AUX_INCLUDES = \ - \$\$QT_MODULE_INCLUDE_BASE/QtANGLE -} - + # Code coverage with TestCocoon @@ -35,6 +29,10 @@ - + mac:!ios: LIBS_PRIVATE += -framework Cocoa - + +win32:contains(QT_CONFIG, angle) { + LIBS_PRIVATE += -lGLESv2 +} + CONFIG += simd optimize_full - + include(accessible/accessible.pri) diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in --- a/src/gui/Qt5GuiConfigExtras.cmake.in 2015-06-29 14:04:51.000000000 -0600 +++ b/src/gui/Qt5GuiConfigExtras.cmake.in 2015-07-18 10:51:09.666053970 -0600 @@ -2,9 +2,9 @@ !!IF !isEmpty(CMAKE_ANGLE_EGL_DLL_RELEASE) - + !!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE) -set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\") @@ -36,19 +36,17 @@ diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras. -set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\") !!ENDIF - + _qt5_Gui_check_file_exists(${Qt5Gui_EGL_INCLUDE_DIRS}) diff -U 3 -r a/src/opengl/opengl.pro b/src/opengl/opengl.pro --- a/src/opengl/opengl.pro 2015-06-29 14:04:05.000000000 -0600 +++ b/src/opengl/opengl.pro 2015-07-18 10:46:46.588388411 -0600 -@@ -12,6 +12,9 @@ - +@@ -12,6 +12,7 @@ + contains(QT_CONFIG, opengl):CONFIG += opengl contains(QT_CONFIG, opengles2):CONFIG += opengles2 -+win32:contains(QT_CONFIG, angle) { -+ LIBS_PRIVATE += -lGLESv2 -+} - ++win32:contains(QT_CONFIG, angle): LIBS_PRIVATE += -lGLESv2 + HEADERS += qgl.h \ qgl_p.h \ @@ -57,10 +55,10 @@ diff -U 3 -r a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms +++ b/src/plugins/platforms/windows/windows.pri 2015-07-18 10:53:45.585348009 -0600 @@ -3,6 +3,7 @@ !wince*:LIBS *= -luser32 -lwinspool -limm32 -lwinmm -loleaut32 - + contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2):!contains(QT_CONFIG, dynamicgl): LIBS *= -lopengl32 +contains(QT_CONFIG, angle):LIBS += -lGLESv2 -lEGL - + mingw: LIBS *= -luuid # For the dialog helpers: diff -U 3 -r a/src/src.pro b/src/src.pro diff --git a/qt5-base/mingw-w64-static/qt5-use-pkgconfig-for-harfbuzz.patch b/qt5-base/mingw-w64-static/qt5-use-pkgconfig-for-harfbuzz.patch index 82c684e1..078538a0 100644 --- a/qt5-base/mingw-w64-static/qt5-use-pkgconfig-for-harfbuzz.patch +++ b/qt5-base/mingw-w64-static/qt5-use-pkgconfig-for-harfbuzz.patch @@ -25,7 +25,7 @@ QMAKE_LIBS = QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz -lpcre16 -QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng -lharfbuzz -lglib-2.0 -lintl -lwinmm -+QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) ++QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) $$system($${CROSS_COMPILE}pkg-config --static --libs freetype2) QMAKE_LIBS_NETWORK = -lws2_32 -lcrypt32 -ldnsapi QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32 QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} -ld3d9 -ldxguid -lgdi32 -luser32 diff --git a/qt5-base/mingw-w64-static/qt5-use-win32-g++-mkspecs-profile.patch b/qt5-base/mingw-w64-static/qt5-use-win32-g++-mkspecs-profile.patch index 004eacdc..5fc41308 100644 --- a/qt5-base/mingw-w64-static/qt5-use-win32-g++-mkspecs-profile.patch +++ b/qt5-base/mingw-w64-static/qt5-use-win32-g++-mkspecs-profile.patch @@ -5,7 +5,7 @@ QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -+QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport ++QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport $${CROSS_COMPILE_CFLAGS} QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall -Wextra QMAKE_CFLAGS_WARN_OFF = -w diff --git a/qt5-base/mingw-w64/PKGBUILD b/qt5-base/mingw-w64/PKGBUILD index df065e7c..f972220c 100644 --- a/qt5-base/mingw-w64/PKGBUILD +++ b/qt5-base/mingw-w64/PKGBUILD @@ -8,8 +8,8 @@ # There are different variants of the package which can be selected by simply adjusting pkgname: # - mingw-w64-qt5-base or mingw-w64-qt5-base-opengl: using native OpenGL -# - mingw-w64-qt5-base-angle: using ANGLE rather then native OpenGL -# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and OpenGL dynamically at runtime +# - mingw-w64-qt5-base-angle: using ANGLE rather than native OpenGL +# - mingw-w64-qt5-base-dynamic: allows choosing between ANGLE and native OpenGL dynamically at runtime # - mingw-w64-qt5-base-noopenql: no OpenGL support # The variants are conflicting (and hence can not be installed at the same time). # See also: http://doc.qt.io/qt-5/windows-requirements.html#dynamically-loading-graphics-drivers @@ -17,6 +17,8 @@ # The variants listed above only contain dynamic libraries. For building static libraries # just append '-static' to the package name, eg. mingw-w64-qt5-base-static or mingw-w64-qt5-base-angle-static. # The static variants rely on the corresponding dynamic variant for headers and tools. +# I only tested the static version using native OpenGL so far (mingw-w64-qt5-base-static). +# Note that ANGLE will still be loaded as dynamic library in mingw-w64-qt5-base-dynamic-static. # By default CMake and qmake will link against the dynamic Qt libraries. @@ -50,12 +52,14 @@ isStatic() { [ "${pkgname##*-}" = 'static' ] } isOpenGL() { - isDefault || \ # currently use native OpenGL by default + # Currently use native OpenGL by default + isDefault || \ [[ $pkgname = 'mingw-w64-qt5-base-opengl' ]] || [[ $pkgname = 'mingw-w64-qt5-base-opengl-static' ]] } isANGLE() { [[ $pkgname = 'mingw-w64-qt5-base-angle' ]] || [[ $pkgname = 'mingw-w64-qt5-base-angle-static' ]] || \ - [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] # treat dynamic version like ANGLE version, correct? + [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] + # Treat dynamic version like ANGLE version, correct? } isDynamic() { [[ $pkgname = 'mingw-w64-qt5-base-dynamic' ]] || [[ $pkgname = 'mingw-w64-qt5-base-dynamic-static' ]] @@ -68,12 +72,13 @@ pkgname=mingw-w64-qt5-base pkgver=5.7.0 pkgrel=5 pkgdesc="A cross-platform application and UI framework (mingw-w64)" -# the static variant doesn't contain any executables which need to be executed on the build machine +# The static variant doesn't contain any executables which need to be executed on the build machine isStatic && arch=('any') || arch=('i686' 'x86_64') url='https://www.qt.io/' license=('GPL3' 'LGPL3' 'FDL' 'custom') depends=('mingw-w64-crt' 'mingw-w64-zlib' 'mingw-w64-libjpeg-turbo' 'mingw-w64-sqlite' - 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz') + 'mingw-w64-libpng' 'mingw-w64-openssl' 'mingw-w64-dbus' 'mingw-w64-harfbuzz' + 'mingw-w64-pcre') groups=('mingw-w64-qt' 'mingw-w64-qt5') optdepends=('mingw-w64-postgresql-libs: PostgreSQL support' 'mingw-w64-mariadb-connector-c: MySQL support' 'qtchooser') @@ -81,7 +86,7 @@ makedepends=('mingw-w64-gcc' 'mingw-w64-postgresql-libs' 'mingw-w64-mariadb-conn options=(!strip !buildflags staticlibs !emptydirs) _pkgfqn="qtbase-opensource-src-${pkgver}" source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/submodules/${_pkgfqn}.tar.xz" - "qt5-add-angle-support.patch" + "qt5-add-angle-and-dynamic-support.patch" "qt5-use-external-angle-library.patch" "qt5-workaround-pkgconfig-install-issue.patch" "qt5-merge-static-and-shared-library-trees.patch" @@ -105,8 +110,8 @@ source=("https://download.qt.io/official_releases/qt/${pkgver:0:3}/${pkgver}/sub "qt5-use-correct-pkg-config-static-flags.patch" "qt5-use-pkgconfig-for-harfbuzz.patch") md5sums=('184f9460b40752d71b15b827260580c2' - 'bab00ccc19d888997f323c80354a7c3f' - 'f7e1487de6e85116d9c6bde2eac4fb73' + '55a11d8ea5db9ca0cced06b06655b417' + '1f7aea5e8bed840b3efc9172081ddb45' 'bc99c4cc6998295d76f37ed681c20d47' 'e2ffff39673b37c4d9974e92fcf7213c' '4fe6523dd1c34398df3aa5a8763530cc' @@ -116,7 +121,7 @@ md5sums=('184f9460b40752d71b15b827260580c2' '99bb9f51ec684803768f36e407baf486' '6a6bc88f35ac8080869de39bc128ce5b' '261d9071a6af3f1d5c3f955da3781573' - 'f28edb1fe61c575522d3df814e680f9a' + '0524dc5427a6c5338ebd45ab08c6ce80' 'c15d9f480d0248648fa52aeacb46e3c7' '612a4dfb9f1a3898a1920c28bb999159' 'd0eb81aef1a21c65813fe4ddabbc4206' @@ -127,9 +132,10 @@ md5sums=('184f9460b40752d71b15b827260580c2' '1dc792faa7761d8d7d2f17170da04d6b' '41ec67d9e5e70e0d6d93b42aebd0e12a' '61c0f9d0095c5a6dec8d14e9ec35a608' - 'bba65d27704cf36e148d8f18ad02ad15') + '16a7d505b503bb1087fc00fad819f64b') _architectures='i686-w64-mingw32 x86_64-w64-mingw32' +#_architectures='x86_64-w64-mingw32 i686-w64-mingw32' isStatic && depends+=(${pkgname%-static}) if isANGLE; then @@ -144,11 +150,11 @@ if ! isDefault; then if isStatic; then provides+=('mingw-w64-qt5-base-static') conflicts+=('mingw-w64-qt5-base-static' 'mingw-w64-qt5-base-angle-static' 'mingw-w64-qt5-base-noopengl-static' - 'mingw-w64-qt5-base-angle-dynamic-static' 'mingw-w64-qt5-base-angle-openql-static') + 'mingw-w64-qt5-base-dynamic-static' 'mingw-w64-qt5-base-openql-static') else provides+=('mingw-w64-qt5-base') conflicts+=('mingw-w64-qt5-base' 'mingw-w64-qt5-base-angle' 'mingw-w64-qt5-base-noopengl' - 'mingw-w64-qt5-base-angle-dynamic' 'mingw-w64-qt5-base-angle-openql') + 'mingw-w64-qt5-base-dynamic' 'mingw-w64-qt5-base-openql') fi fi @@ -169,18 +175,21 @@ patch() { prepare() { cd "${srcdir}/${_pkgfqn}" - # include fixes from MXE + # Include fixes from MXE patch -p1 -b -i ../qt5-fixes-from-mxe.patch if isANGLE; then - # Add support for Angle - patch -p1 -i ../qt5-add-angle-support.patch + # Add support for configure options '-opengl angle' and '-opengl dynamic' + # to the configure shell script + patch -p0 -i ../qt5-add-angle-and-dynamic-support.patch # Make sure our external Angle package is used instead of the bundled one patch -p1 -i ../qt5-use-external-angle-library.patch fi - # Fix opengl to many sections error - isOpenGL && patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch + # Prevent too many sections / File too big assembler error + # (On x86_64 qopenglversionfunctionsfactory.o exceeds limit of 32768 sections + # otherwise.) + patch -p0 -i ../qt5-fix-opengl-to-many-sections.patch # Make sure the .pc files of the Qt5 modules are installed correctly patch -p0 -i ../qt5-workaround-pkgconfig-install-issue.patch @@ -230,7 +239,7 @@ prepare() { # We have to use rpath here as the library which the # various tools depend on (libQt5Bootstrap.so) resides # in the folder /usr/${_arch}/lib - # We can't use the regular %%_libdir for this as we + # We can't use the regular lib dir for this as we # want to avoid conflicts with the native qt5 packages patch -p1 -i ../qt5-enable-rpath-for-host-tools.patch @@ -269,10 +278,11 @@ prepare() { build() { cd "${srcdir}/${_pkgfqn}" - # Setup flags - local mingw_flags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4' - export CFLAGS="$mingw_flags" - export CXXFLAGS="$mingw_flags" + # Do not set any flags here, flags are configured via mkspec + # Setting flags here is not appropriate as it does not allow to + # distinguish between flags for native compiler and cross compiler + unset CFLAGS + unset CXXFLAGS unset LDFLAGS for _arch in ${_architectures}; do @@ -282,7 +292,7 @@ build() { # are all available in the same folder with these exact file names # To prevent conflicts with the mingw-w64-qt4 package we have # to put these tools in a dedicated folder - qt_configure_args="\ + local qt_configure_args="\ -xplatform win32-g++ \ -optimized-qmake \ -verbose \ @@ -323,27 +333,27 @@ build() { -translationdir /usr/${_arch}/share/qt/translations \ -device-option CROSS_COMPILE=${_arch}-" - # Fix include directory of dbus - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I dbus-1)" - - # Fix include directory of freetype2 - qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2)" + # Fix include directory of freetype2 and dbus + qt_configure_args+=" $(${_arch}-pkg-config --cflags-only-I freetype2 dbus-1)" # Configure usage of ANGLE/OpenGL if isOpenGL; then + msg2 'Using native OpenGL backend' qt_configure_args+=' -opengl desktop' elif isNoOpenGL; then + msg2 'Building without OpenGL support' qt_configure_args+=' -no-opengl' elif isANGLE; then if isDynamic; then + msg2 'Using dynamic OpenGL backend' qt_configure_args+=' -opengl dynamic' else + msg2 'Using ANGLE as OpenGL backend' qt_configure_args+=' -opengl angle' fi # GL_GLEXT_PROTOTYPES must be defined to enable declarations of GLES functions qt_configure_args+=' -DGL_GLEXT_PROTOTYPES' fi - # TODO: allow dynamic OpenGL configuration unset PKG_CONFIG_PATH @@ -385,8 +395,8 @@ package() { # The static release contains only the static libs itself but relies on the # shared release for Qt5Bootstrap library and tools (qmake, uic, ...) - # Drop Qt5Bootstrap and libraries which are only provided as statically - # and are hence already present in the shared version + # Drop Qt5Bootstrap and libraries which are only provided as static lib + # and are hence already present in static form in the shared version rm -f "${pkgdir}/usr/${_arch}/lib/"{lib,}qt5main* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5OpenGLExtensions* \ "${pkgdir}/usr/${_arch}/lib/"{lib,}Qt5PlatformSupport* \ diff --git a/qt5-base/mingw-w64/qt5-add-angle-and-dynamic-support.patch b/qt5-base/mingw-w64/qt5-add-angle-and-dynamic-support.patch new file mode 100644 index 00000000..f9b88685 --- /dev/null +++ b/qt5-base/mingw-w64/qt5-add-angle-and-dynamic-support.patch @@ -0,0 +1,75 @@ +--- configure.orig 2016-06-10 08:48:56.000000000 +0200 ++++ configure 2016-09-04 20:38:55.345362982 +0200 +@@ -1287,6 +1287,7 @@ + ;; + opengl) + if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] || ++ [ "$VAL" = "angle" ] || [ "$VAL" = "dynamic" ] || + [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || + [ "$VAL" = "es2" ]; then + CFG_OPENGL="$VAL" +@@ -5312,7 +5313,7 @@ + fi + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if compileTest x11/opengl "OpenGL"; then +- CFG_OPENGL=desktop ++ CFG_OPENGL=angle + elif compileTest unix/opengles2 "OpenGL ES 2.0"; then + CFG_OPENGL=es2 + else +@@ -5348,6 +5349,17 @@ + echo " ${XQMAKESPEC}." + exit 1 + fi ++ elif [ "$CFG_OPENGL" = "angle" ]; then ++ compileTest x11/opengl "OpenGL" ++ if [ $? != "0" ]; then ++ echo "The OpenGL functionality test failed!" ++ echo " You might need to modify the include and library search paths by editing" ++ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" ++ echo " ${XQMAKESPEC}." ++ exit 1 ++ fi ++ elif [ "$CFG_OPENGL" = "dynamic" ]; then ++ true # FIXME: not sure whether/which test required + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + compileTest x11/opengl "OpenGL" +@@ -6423,6 +6435,16 @@ + QT_CONFIG="$QT_CONFIG opengles2" + fi + ++if [ "$CFG_OPENGL" = "angle" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" ++ QT_CONFIG="$QT_CONFIG opengles2 egl angle" ++fi ++ ++if [ "$CFG_OPENGL" = "dynamic" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_DYNAMIC" ++ QT_CONFIG="$QT_CONFIG dynamicgl" ++fi ++ + if [ "$CFG_SHARED" = "yes" ]; then + QT_CONFIG="$QT_CONFIG shared" + QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" +@@ -7474,7 +7496,7 @@ + report_support " NIS ...................." "$CFG_NIS" + report_support " OpenGL / OpenVG:" + report_support " EGL .................." "$CFG_EGL" +-report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" ++report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" dynamic "Dynamic OpenGL" + report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" + report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" + if [ -n "$PKG_CONFIG" ]; then +--- src/gui/opengl/qopenglfunctions.h.orig 2016-06-10 08:48:56.000000000 +0200 ++++ src/gui/opengl/qopenglfunctions.h 2016-09-04 20:36:07.801522904 +0200 +@@ -56,9 +56,7 @@ + + //#define Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + +-#ifdef QT_OPENGL_ES + typedef double GLdouble; +-#endif + + #ifdef Q_ENABLE_OPENGL_FUNCTIONS_DEBUG + #include diff --git a/qt5-base/mingw-w64/qt5-add-angle-support.patch b/qt5-base/mingw-w64/qt5-add-angle-support.patch deleted file mode 100644 index 8b9af40a..00000000 --- a/qt5-base/mingw-w64/qt5-add-angle-support.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff -U 3 -r a/configure b/configure ---- a/configure 2015-06-29 14:03:05.000000000 -0600 -+++ b/configure 2015-07-18 11:14:30.312317765 -0600 -@@ -5081,7 +5081,7 @@ - fi - if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then - if compileTest x11/opengl "OpenGL"; then -- CFG_OPENGL=desktop -+ CFG_OPENGL=angle - elif compileTest unix/opengles2 "OpenGL ES 2.0"; then - CFG_OPENGL=es2 - else -@@ -6072,6 +6072,11 @@ - QT_CONFIG="$QT_CONFIG opengles2" - fi - -+if [ "$CFG_OPENGL" = "angle" ]; then -+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES QT_OPENGL_ES_2" -+ QT_CONFIG="$QT_CONFIG opengles2 egl angle" -+fi -+ - if [ "$CFG_SHARED" = "yes" ]; then - QT_CONFIG="$QT_CONFIG shared" - QTCONFIG_CONFIG="$QTCONFIG_CONFIG shared" -@@ -7077,7 +7082,7 @@ - report_support " NIS ...................." "$CFG_NIS" - report_support " OpenGL / OpenVG:" - report_support " EGL .................." "$CFG_EGL" --report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" -+report_support " OpenGL ..............." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.0+" angle "ANGLE" - report_support " OpenVG ..............." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native" - report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy" - if [ -n "$PKG_CONFIG" ]; then -diff -U 3 -r a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp ---- a/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-06-29 14:04:40.000000000 -0600 -+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp 2015-07-18 11:16:05.767172673 -0600 -@@ -45,7 +45,9 @@ - #include - - #include -+#ifndef QT_OPENGL_ES_2 - #include -+#endif - - // #define DEBUG_GL - diff --git a/qt5-base/mingw-w64/qt5-use-external-angle-library.patch b/qt5-base/mingw-w64/qt5-use-external-angle-library.patch index bbdda149..383bb8c6 100644 --- a/qt5-base/mingw-w64/qt5-use-external-angle-library.patch +++ b/qt5-base/mingw-w64/qt5-use-external-angle-library.patch @@ -4,31 +4,31 @@ diff -U 3 -r a/src/gui/gui.pro b/src/gui/gui.pro @@ -17,10 +17,5 @@ imageformats \ egldeviceintegrations - + -# This is here only because the platform plugin is no module, obviously. -win32:contains(QT_CONFIG, angle)|contains(QT_CONFIG, dynamicgl) { - MODULE_AUX_INCLUDES = \ - \$\$QT_MODULE_INCLUDE_BASE/QtANGLE -} - + # Code coverage with TestCocoon @@ -35,6 +29,10 @@ - + mac:!ios: LIBS_PRIVATE += -framework Cocoa - + +win32:contains(QT_CONFIG, angle) { + LIBS_PRIVATE += -lGLESv2 +} + CONFIG += simd optimize_full - + include(accessible/accessible.pri) diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in --- a/src/gui/Qt5GuiConfigExtras.cmake.in 2015-06-29 14:04:51.000000000 -0600 +++ b/src/gui/Qt5GuiConfigExtras.cmake.in 2015-07-18 10:51:09.666053970 -0600 @@ -2,9 +2,9 @@ !!IF !isEmpty(CMAKE_ANGLE_EGL_DLL_RELEASE) - + !!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE) -set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\") @@ -36,19 +36,17 @@ diff -U 3 -r a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras. -set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR/QtANGLE\") +set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\") !!ENDIF - + _qt5_Gui_check_file_exists(${Qt5Gui_EGL_INCLUDE_DIRS}) diff -U 3 -r a/src/opengl/opengl.pro b/src/opengl/opengl.pro --- a/src/opengl/opengl.pro 2015-06-29 14:04:05.000000000 -0600 +++ b/src/opengl/opengl.pro 2015-07-18 10:46:46.588388411 -0600 -@@ -12,6 +12,9 @@ - +@@ -12,6 +12,7 @@ + contains(QT_CONFIG, opengl):CONFIG += opengl contains(QT_CONFIG, opengles2):CONFIG += opengles2 -+win32:contains(QT_CONFIG, angle) { -+ LIBS_PRIVATE += -lGLESv2 -+} - ++win32:contains(QT_CONFIG, angle): LIBS_PRIVATE += -lGLESv2 + HEADERS += qgl.h \ qgl_p.h \ @@ -57,10 +55,10 @@ diff -U 3 -r a/src/plugins/platforms/windows/windows.pri b/src/plugins/platforms +++ b/src/plugins/platforms/windows/windows.pri 2015-07-18 10:53:45.585348009 -0600 @@ -3,6 +3,7 @@ !wince*:LIBS *= -luser32 -lwinspool -limm32 -lwinmm -loleaut32 - + contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles2):!contains(QT_CONFIG, dynamicgl): LIBS *= -lopengl32 +contains(QT_CONFIG, angle):LIBS += -lGLESv2 -lEGL - + mingw: LIBS *= -luuid # For the dialog helpers: diff -U 3 -r a/src/src.pro b/src/src.pro diff --git a/qt5-base/mingw-w64/qt5-use-pkgconfig-for-harfbuzz.patch b/qt5-base/mingw-w64/qt5-use-pkgconfig-for-harfbuzz.patch index 82c684e1..078538a0 100644 --- a/qt5-base/mingw-w64/qt5-use-pkgconfig-for-harfbuzz.patch +++ b/qt5-base/mingw-w64/qt5-use-pkgconfig-for-harfbuzz.patch @@ -25,7 +25,7 @@ QMAKE_LIBS = QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz -lpcre16 -QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng -lharfbuzz -lglib-2.0 -lintl -lwinmm -+QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) ++QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lws2_32 -lole32 -luuid -luser32 -ladvapi32 -ljpeg -lpng $$system($${CROSS_COMPILE}pkg-config --static --libs harfbuzz) $$system($${CROSS_COMPILE}pkg-config --static --libs freetype2) QMAKE_LIBS_NETWORK = -lws2_32 -lcrypt32 -ldnsapi QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32 QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} -ld3d9 -ldxguid -lgdi32 -luser32 diff --git a/qt5-base/mingw-w64/qt5-use-win32-g++-mkspecs-profile.patch b/qt5-base/mingw-w64/qt5-use-win32-g++-mkspecs-profile.patch index 004eacdc..5fc41308 100644 --- a/qt5-base/mingw-w64/qt5-use-win32-g++-mkspecs-profile.patch +++ b/qt5-base/mingw-w64/qt5-use-win32-g++-mkspecs-profile.patch @@ -5,7 +5,7 @@ QMAKE_YACC = byacc QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport -+QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport ++QMAKE_CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -fno-keep-inline-dllexport $${CROSS_COMPILE_CFLAGS} QMAKE_CFLAGS_DEPS = -M QMAKE_CFLAGS_WARN_ON = -Wall -Wextra QMAKE_CFLAGS_WARN_OFF = -w