Merge remote-tracking branch 'gerrit/dev' into HEAD
This commit is contained in:
commit
dcd5cb9736
8
.gitignore
vendored
8
.gitignore
vendored
@ -89,6 +89,7 @@ bin/makeqpf*
|
||||
bin/pixeltool*
|
||||
bin/qmake*
|
||||
bin/qdoc*
|
||||
bin/qfloat16-tables*
|
||||
bin/qt3to4*
|
||||
bin/qttracereplay*
|
||||
bin/rcc*
|
||||
@ -120,6 +121,7 @@ config.opt
|
||||
config.status
|
||||
config.summary
|
||||
config.log
|
||||
config.cache
|
||||
mkspecs/default
|
||||
mkspecs/default-host
|
||||
mkspecs/qconfig.pri
|
||||
@ -127,13 +129,16 @@ mkspecs/qdevice.pri
|
||||
mkspecs/qfeatures.pri
|
||||
mkspecs/qhost.pri
|
||||
moc_*.cpp
|
||||
qmake/qmake
|
||||
qmake/qmake.exe
|
||||
qmake/Makefile.bak
|
||||
qmake/qmake_pch.pch
|
||||
src/corelib/global/qconfig.cpp
|
||||
src/corelib/global/qconfig.h
|
||||
src/corelib/global/qconfig.h.qmake
|
||||
src/corelib/global/qconfig_p.h
|
||||
src/corelib/global/qfeatures.h
|
||||
src/corelib/global/qfloat16tables.cpp
|
||||
src/platformsupport/*_interface.*
|
||||
src/platformsupport/*_adaptor.*
|
||||
ui_*.h
|
||||
@ -155,6 +160,9 @@ translations/*_untranslated.ts
|
||||
qrc_*.cpp
|
||||
*.version
|
||||
*.version.in
|
||||
qt*-config.h
|
||||
qt*-config_p.h
|
||||
qt*-config.pri
|
||||
|
||||
# Test generated files
|
||||
QObject.log
|
||||
|
@ -3,7 +3,7 @@
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec of the Qt Toolkit.
|
||||
** This file is part of the config.tests of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
@ -37,4 +37,10 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include <alloca.h>
|
||||
|
||||
int main(int, char **)
|
||||
{
|
||||
alloca(1);
|
||||
return 0;
|
||||
}
|
1
config.tests/common/alloca/alloca.pro
Normal file
1
config.tests/common/alloca/alloca.pro
Normal file
@ -0,0 +1 @@
|
||||
SOURCES = alloca.cpp
|
@ -1 +0,0 @@
|
||||
_MSC_FULL_VER
|
@ -72,6 +72,8 @@ Build options:
|
||||
-debug ............... Build Qt with debugging turned on [no]
|
||||
-debug-and-release ... Build two versions of Qt, with and without
|
||||
debugging turned on [yes] (Apple and Windows only)
|
||||
-optimize-debug ...... Enable debug-friendly optimizations in debug builds
|
||||
[auto] (Not supported with MSVC)
|
||||
-optimized-tools ..... Build optimized host tools even in debug build [no]
|
||||
-force-debug-info .... Create symbol files for release builds [no]
|
||||
-separate-debug-info . Split off debug information to separate files [no]
|
||||
@ -104,7 +106,6 @@ Build options:
|
||||
|
||||
-c++std <edition> .... Select C++ standard <edition> [c++1z/c++14/c++11]
|
||||
(Not supported with MSVC)
|
||||
-rtti ................ Build with Runtime Type Information [yes] (MSVC only)
|
||||
|
||||
-sse2 ................ Use SSE2 instructions [auto]
|
||||
-sse3/-ssse3/-sse4.1/-sse4.2/-avx/-avx2/-avx512
|
||||
|
109
configure
vendored
109
configure
vendored
@ -82,6 +82,11 @@ if [ x"$1" = x"-top-level" ]; then
|
||||
relpathMangled=`dirname "$relpath"`
|
||||
outpathPrefix=../
|
||||
shift
|
||||
else
|
||||
if [ -f ../.qmake.super ]; then
|
||||
echo >&2 "ERROR: You cannot configure qtbase separately within a top-level build."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
OPT_CMDLINE= # expanded version for the script
|
||||
@ -522,6 +527,16 @@ done
|
||||
|
||||
if [ "$OPT_HELP" = "yes" ]; then
|
||||
cat $relpath/config_help.txt
|
||||
if [ -n "$CFG_TOPLEVEL" ]; then
|
||||
IFS='
|
||||
'
|
||||
for i in $relpathMangled/qt*/config_help.txt; do
|
||||
if [ x"$i" != x"$relpath/config_help.txt" ]; then
|
||||
echo
|
||||
cat "$i"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@ -529,8 +544,8 @@ fi
|
||||
# platform detection
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
PLATFORM_NOTES=
|
||||
if [ -z "$PLATFORM" ]; then
|
||||
PLATFORM_NOTES=
|
||||
case "$UNAME_SYSTEM:$UNAME_RELEASE" in
|
||||
Darwin:*)
|
||||
PLATFORM=macx-clang
|
||||
@ -540,9 +555,7 @@ if [ -z "$PLATFORM" ]; then
|
||||
#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
|
||||
"
|
||||
PLATFORM_NOTES="AIX: aix-g++ aix-g++-64 aix-xlc-64"
|
||||
;;
|
||||
GNU:*)
|
||||
PLATFORM=hurd-g++
|
||||
@ -559,14 +572,10 @@ if [ -z "$PLATFORM" ]; then
|
||||
FreeBSD:*)
|
||||
if [ "$(uname -r | cut -d. -f1)" -ge 10 ]; then
|
||||
PLATFORM=freebsd-clang
|
||||
PLATFORM_NOTES="
|
||||
- Also available for FreeBSD: freebsd-g++
|
||||
"
|
||||
PLATFORM_NOTES="FreeBSD: freebsd-g++"
|
||||
else
|
||||
PLATFORM=freebsd-g++
|
||||
PLATFORM_NOTES="
|
||||
- Also available for FreeBSD: freebsd-clang
|
||||
"
|
||||
PLATFORM_NOTES="FreeBSD: freebsd-clang"
|
||||
fi
|
||||
;;
|
||||
OpenBSD:*)
|
||||
@ -582,18 +591,14 @@ if [ -z "$PLATFORM" ]; then
|
||||
#PLATFORM=irix-g++
|
||||
PLATFORM=irix-cc
|
||||
#PLATFORM=irix-cc-64
|
||||
PLATFORM_NOTES="
|
||||
- Also available for IRIX: irix-g++ irix-cc-64
|
||||
"
|
||||
PLATFORM_NOTES="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_NOTES="HP-UXi: hpuxi-acc-32"
|
||||
;;
|
||||
*)
|
||||
#PLATFORM=hpux-g++
|
||||
@ -601,39 +606,29 @@ if [ -z "$PLATFORM" ]; then
|
||||
#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
|
||||
"
|
||||
PLATFORM_NOTES="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++
|
||||
"
|
||||
PLATFORM_NOTES="Tru64: tru64-g++"
|
||||
;;
|
||||
Linux:*)
|
||||
PLATFORM=linux-g++
|
||||
PLATFORM_NOTES="
|
||||
- Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx
|
||||
"
|
||||
PLATFORM_NOTES="Linux: linux-clang linux-kcc linux-icc linux-cxx"
|
||||
;;
|
||||
SunOS:5*)
|
||||
#PLATFORM=solaris-g++
|
||||
PLATFORM=solaris-cc
|
||||
#PLATFORM=solaris-cc64
|
||||
PLATFORM_NOTES="
|
||||
- Also available for Solaris: solaris-g++ solaris-cc-64
|
||||
"
|
||||
PLATFORM_NOTES="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
|
||||
"
|
||||
PLATFORM_NOTES="Reliant UNIX: reliant-cds-64"
|
||||
;;
|
||||
CYGWIN*:*)
|
||||
PLATFORM=cygwin-g++
|
||||
@ -644,23 +639,17 @@ if [ -z "$PLATFORM" ]; then
|
||||
OpenUNIX:*)
|
||||
#PLATFORM=unixware-g++
|
||||
PLATFORM=unixware-cc
|
||||
PLATFORM_NOTES="
|
||||
- Also available for OpenUNIX: unixware-g++
|
||||
"
|
||||
PLATFORM_NOTES="OpenUNIX: unixware-g++"
|
||||
;;
|
||||
UnixWare:*)
|
||||
#PLATFORM=unixware-g++
|
||||
PLATFORM=unixware-cc
|
||||
PLATFORM_NOTES="
|
||||
- Also available for UnixWare: unixware-g++
|
||||
"
|
||||
PLATFORM_NOTES="UnixWare: unixware-g++"
|
||||
;;
|
||||
SCO_SV:*)
|
||||
#PLATFORM=sco-g++
|
||||
PLATFORM=sco-cc
|
||||
PLATFORM_NOTES="
|
||||
- Also available for SCO OpenServer: sco-g++
|
||||
"
|
||||
PLATFORM_NOTES="SCO OpenServer: sco-g++"
|
||||
;;
|
||||
UNIX_SV:*)
|
||||
PLATFORM=unixware-g++
|
||||
@ -678,6 +667,7 @@ if [ -z "$PLATFORM" ]; then
|
||||
exit 2
|
||||
esac
|
||||
fi
|
||||
echo "$PLATFORM_NOTES" > "${outpathPrefix}.config.notes"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# command line and environment validation
|
||||
@ -895,11 +885,8 @@ Prefix=$relpath
|
||||
EOF
|
||||
fi
|
||||
|
||||
[ -z "$CFG_HOST_QT_TOOLS_PATH" ] && CFG_HOST_QT_TOOLS_PATH="$outpath/bin"
|
||||
CFG_QMAKE_PATH="$CFG_HOST_QT_TOOLS_PATH/qmake"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# run configure tests
|
||||
# configure and build top-level makefile
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# recreate command line for qmake
|
||||
@ -913,40 +900,12 @@ done
|
||||
set +f
|
||||
IFS=$SAVED_IFS
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# configure and build top-level makefile
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
if [ -n "$CFG_TOPLEVEL" ]; then
|
||||
cd ..
|
||||
fi
|
||||
|
||||
"$CFG_QMAKE_PATH" -qtconf "$QTCONFFILE" "$relpathMangled" -- "$@" || exit
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# final notes for the user
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
if [ -n "$PLATFORM_NOTES" ]; then
|
||||
echo
|
||||
echo "Platform notes:"
|
||||
echo "$PLATFORM_NOTES"
|
||||
if [ -n "$CFG_HOST_QT_TOOLS_PATH" ]; then
|
||||
"$CFG_HOST_QT_TOOLS_PATH/qmake" -qtconf "$QTCONFFILE" "$relpathMangled" -- "$@"
|
||||
else
|
||||
echo
|
||||
"$outpath/bin/qmake" "$relpathMangled" -- "$@"
|
||||
fi
|
||||
|
||||
QT_INSTALL_PREFIX=`sed -ne 's/^Prefix=//p' < "$outpath/qmake/builtin-qt.conf"`
|
||||
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
|
||||
|
265
configure.bat
265
configure.bat
@ -28,13 +28,40 @@
|
||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||
|
||||
@echo off
|
||||
setlocal ENABLEEXTENSIONS
|
||||
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
|
||||
set ARGS=%*
|
||||
set QTSRC=%~dp0
|
||||
set QTSRC=%QTSRC:~0,-1%
|
||||
set QTDIR=%CD%
|
||||
|
||||
rem Parse command line
|
||||
|
||||
set TOPLEVEL=false
|
||||
set TOPQTSRC=%QTSRC%
|
||||
set TOPQTDIR=%QTDIR%
|
||||
if /i not "%~1" == "-top-level" goto notoplevel
|
||||
set ARGS=%ARGS:~10%
|
||||
set TOPLEVEL=true
|
||||
for %%P in ("%TOPQTSRC%") do set TOPQTSRC=%%~dpP
|
||||
set TOPQTSRC=%TOPQTSRC:~0,-1%
|
||||
for %%P in ("%QTDIR%") do set TOPQTDIR=%%~dpP
|
||||
set TOPQTDIR=%TOPQTDIR:~0,-1%
|
||||
goto wastoplevel
|
||||
:notoplevel
|
||||
if not exist ..\.qmake.super goto wastoplevel
|
||||
echo ERROR: You cannot configure qtbase separately within a top-level build. >&2
|
||||
exit /b 1
|
||||
:wastoplevel
|
||||
|
||||
set SYNCQT=
|
||||
set PLATFORM=
|
||||
set MAKE=
|
||||
call :doargs %ARGS%
|
||||
if errorlevel 1 exit /b
|
||||
goto doneargs
|
||||
|
||||
:doargs
|
||||
if "%~1" == "" goto doneargs
|
||||
if "%~1" == "" exit /b
|
||||
|
||||
if "%~1" == "/?" goto help
|
||||
if "%~1" == "-?" goto help
|
||||
@ -44,25 +71,127 @@ set QTDIR=%CD%
|
||||
if /i "%~1" == "-help" goto help
|
||||
if /i "%~1" == "--help" goto help
|
||||
|
||||
if /i "%~1" == "-redo" goto redo
|
||||
if /i "%~1" == "--redo" goto redo
|
||||
|
||||
if /i "%~1" == "-platform" goto platform
|
||||
if /i "%~1" == "--platform" goto platform
|
||||
|
||||
if /i "%~1" == "-no-syncqt" goto nosyncqt
|
||||
if /i "%~1" == "--no-syncqt" goto nosyncqt
|
||||
|
||||
if /i "%~1" == "-make-tool" goto maketool
|
||||
if /i "%~1" == "--make-tool" goto maketool
|
||||
|
||||
:nextarg
|
||||
shift
|
||||
goto doargs
|
||||
|
||||
:help
|
||||
type %QTSRC%\config_help.txt
|
||||
if %TOPLEVEL% == false exit /b 1
|
||||
for /d %%p in ("%TOPQTSRC%"\qt*) do (
|
||||
if not "%%p" == "%QTSRC%" (
|
||||
if exist "%%p\config_help.txt" (
|
||||
echo.
|
||||
type "%%p\config_help.txt"
|
||||
)
|
||||
)
|
||||
)
|
||||
exit /b 1
|
||||
|
||||
:redo
|
||||
if not exist "%TOPQTDIR%\config.opt" goto redoerr
|
||||
set rargs=
|
||||
for /f "usebackq delims=" %%i in ("%TOPQTDIR%\config.opt") do set rargs=!rargs! "%%i"
|
||||
call :doargs %rargs%
|
||||
goto nextarg
|
||||
:redoerr
|
||||
echo No config.opt present - cannot redo configuration. >&2
|
||||
exit /b 1
|
||||
|
||||
:platform
|
||||
shift
|
||||
if "%~1" == "win32-msvc2012" goto msvc
|
||||
if "%~1" == "win32-msvc2013" goto msvc
|
||||
if "%~1" == "win32-msvc2015" goto msvc
|
||||
if "%~1" == "win32-msvc2017" goto msvc
|
||||
set PLATFORM=%~1
|
||||
goto nextarg
|
||||
:msvc
|
||||
echo. >&2
|
||||
echo Notice: re-mapping requested qmake spec to unified 'win32-msvc'. >&2
|
||||
echo. >&2
|
||||
set PLATFORM=win32-msvc
|
||||
goto nextarg
|
||||
|
||||
:nosyncqt
|
||||
set SYNCQT=false
|
||||
goto nextarg
|
||||
|
||||
:maketool
|
||||
shift
|
||||
set MAKE=%~1
|
||||
goto nextarg
|
||||
|
||||
:doneargs
|
||||
|
||||
echo Please wait while bootstrapping configure ...
|
||||
|
||||
rem Find various executables
|
||||
for %%C in (clang-cl.exe cl.exe icl.exe g++.exe perl.exe jom.exe) do set %%C=%%~$PATH:C
|
||||
|
||||
if "%perl.exe%" == "" (
|
||||
echo Perl not found in PATH. Aborting. >&2
|
||||
rem Determine host spec
|
||||
|
||||
if "%PLATFORM%" == "" (
|
||||
if not "%icl.exe%" == "" (
|
||||
set PLATFORM=win32-icc
|
||||
) else if not "%clang-cl.exe%" == "" (
|
||||
set PLATFORM=win32-clang-msvc
|
||||
) else if not "%cl.exe%" == "" (
|
||||
set PLATFORM=win32-msvc
|
||||
) else if not "%g++.exe%" == "" (
|
||||
set PLATFORM=win32-g++
|
||||
) else (
|
||||
echo Cannot detect host toolchain. Please use -platform. Aborting. >&2
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
if not exist "%QTSRC%\mkspecs\%PLATFORM%\qmake.conf" (
|
||||
echo Host platform '%PLATFORM%' is invalid. Aborting. >&2
|
||||
exit /b 1
|
||||
)
|
||||
if "%PLATFORM:win32-g++=%" == "%PLATFORM%" (
|
||||
if "%MAKE%" == "" (
|
||||
if not "%jom.exe%" == "" (
|
||||
set MAKE=jom
|
||||
) else (
|
||||
set MAKE=nmake
|
||||
)
|
||||
)
|
||||
set tmpl=win32
|
||||
) else (
|
||||
if "%MAKE%" == "" (
|
||||
set MAKE=mingw32-make
|
||||
)
|
||||
set tmpl=unix
|
||||
)
|
||||
|
||||
rem Prepare build dir
|
||||
|
||||
if not exist mkspecs (
|
||||
md mkspecs
|
||||
if errorlevel 1 goto exit
|
||||
if errorlevel 1 exit /b
|
||||
)
|
||||
if not exist bin (
|
||||
md bin
|
||||
if errorlevel 1 exit /b
|
||||
)
|
||||
if not exist qmake (
|
||||
md qmake
|
||||
if errorlevel 1 exit /b
|
||||
)
|
||||
|
||||
rem Extract Qt's version from .qmake.conf
|
||||
for /f "eol=# tokens=1,2,3,4 delims=.= " %%i in (%QTSRC%.qmake.conf) do (
|
||||
for /f "eol=# tokens=1,2,3,4 delims=.= " %%i in (%QTSRC%\.qmake.conf) do (
|
||||
if %%i == MODULE_VERSION (
|
||||
set QTVERMAJ=%%j
|
||||
set QTVERMIN=%%k
|
||||
@ -71,69 +200,85 @@ for /f "eol=# tokens=1,2,3,4 delims=.= " %%i in (%QTSRC%.qmake.conf) do (
|
||||
)
|
||||
set QTVERSION=%QTVERMAJ%.%QTVERMIN%.%QTVERPAT%
|
||||
|
||||
perl %QTSRC%bin\syncqt.pl -minimal -version %QTVERSION% -module QtCore -outdir "%QTDIR%" %QTSRC%
|
||||
if errorlevel 1 goto exit
|
||||
rem Create forwarding headers
|
||||
|
||||
if not exist tools\configure (
|
||||
md tools\configure
|
||||
if errorlevel 1 goto exit
|
||||
if "%SYNCQT%" == "" (
|
||||
if exist "%QTSRC%\.git" (
|
||||
set SYNCQT=true
|
||||
) else (
|
||||
set SYNCQT=false
|
||||
)
|
||||
)
|
||||
if "%SYNCQT%" == "true" (
|
||||
if not "%perl.exe%" == "" (
|
||||
echo Running syncqt ...
|
||||
"%perl.exe%" -w "%QTSRC%\bin\syncqt.pl" -minimal -version %QTVERSION% -module QtCore -outdir "%QTDIR%" %QTSRC%
|
||||
if errorlevel 1 exit /b
|
||||
) else (
|
||||
echo Perl not found in PATH. Aborting. >&2
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
cd tools\configure
|
||||
if errorlevel 1 goto exit
|
||||
|
||||
set make=nmake
|
||||
if not "%jom.exe%" == "" set make=jom
|
||||
rem Build qmake
|
||||
|
||||
echo Bootstrapping qmake ...
|
||||
|
||||
cd qmake
|
||||
if errorlevel 1 exit /b
|
||||
|
||||
echo #### Generated by configure.bat - DO NOT EDIT! ####> Makefile
|
||||
echo/>> Makefile
|
||||
echo QTVERSION = %QTVERSION%>> Makefile
|
||||
rem These must have trailing spaces to avoid misinterpretation as 5>>, etc.
|
||||
echo QT_VERSION_MAJOR = %QTVERMAJ% >> Makefile
|
||||
echo QT_VERSION_MINOR = %QTVERMIN% >> Makefile
|
||||
echo QT_VERSION_PATCH = %QTVERPAT% >> Makefile
|
||||
if not "%icl.exe%" == "" (
|
||||
echo CXX = icl>>Makefile
|
||||
echo EXTRA_CXXFLAGS = /Qstd=c++11 /Zc:forScope>>Makefile
|
||||
rem This must have a trailing space.
|
||||
echo QTSRC = %QTSRC% >> Makefile
|
||||
set tmpl=win32
|
||||
) else if not "%cl.exe%" == "" (
|
||||
echo CXX = cl>>Makefile
|
||||
echo EXTRA_CXXFLAGS =>>Makefile
|
||||
rem This must have a trailing space.
|
||||
echo QTSRC = %QTSRC% >> Makefile
|
||||
set tmpl=win32
|
||||
) else if not "%clang-cl.exe%" == "" (
|
||||
echo CXX = clang-cl>>Makefile
|
||||
echo EXTRA_CXXFLAGS = -fms-compatibility-version=19.00.23506 -Wno-microsoft-enum-value>>Makefile
|
||||
rem This must have a trailing space.
|
||||
echo QTSRC = %QTSRC% >> Makefile
|
||||
set tmpl=win32
|
||||
) else if not "%g++.exe%" == "" (
|
||||
echo CXX = g++>>Makefile
|
||||
echo EXTRA_CXXFLAGS =>>Makefile
|
||||
rem This must NOT have a trailing space.
|
||||
echo QTSRC = %QTSRC:\=/%>> Makefile
|
||||
set tmpl=mingw
|
||||
set make=mingw32-make
|
||||
echo BUILD_PATH = ..>> Makefile
|
||||
if "%tmpl%" == "win32" (
|
||||
echo SOURCE_PATH = %QTSRC%>> Makefile
|
||||
) else (
|
||||
echo No suitable compiler found in PATH. Aborting. >&2
|
||||
cd ..\..
|
||||
exit /b 1
|
||||
echo SOURCE_PATH = %QTSRC:\=/%>> Makefile
|
||||
)
|
||||
if exist "%QTSRC%\.git" (
|
||||
echo INC_PATH = ../include>> Makefile
|
||||
) else (
|
||||
echo INC_PATH = $^(SOURCE_PATH^)/include>> Makefile
|
||||
)
|
||||
echo QT_VERSION = %QTVERSION%>> Makefile
|
||||
rem These must have trailing spaces to avoid misinterpretation as 5>>, etc.
|
||||
echo QT_MAJOR_VERSION = %QTVERMAJ% >> Makefile
|
||||
echo QT_MINOR_VERSION = %QTVERMIN% >> Makefile
|
||||
echo QT_PATCH_VERSION = %QTVERPAT% >> Makefile
|
||||
if "%tmpl%" == "win32" (
|
||||
echo QMAKESPEC = %PLATFORM%>> Makefile
|
||||
) else (
|
||||
echo QMAKESPEC = $^(SOURCE_PATH^)/mkspecs/%PLATFORM%>> Makefile
|
||||
echo CONFIG_CXXFLAGS = -std=c++11 -ffunction-sections>> Makefile
|
||||
echo CONFIG_LFLAGS = -Wl,--gc-sections>> Makefile
|
||||
type "%QTSRC%\qmake\Makefile.unix.win32" >> Makefile
|
||||
type "%QTSRC%\qmake\Makefile.unix.mingw" >> Makefile
|
||||
)
|
||||
echo/>> Makefile
|
||||
type %QTSRC%tools\configure\Makefile.%tmpl% >> Makefile
|
||||
type "%QTSRC%\qmake\Makefile.%tmpl%" >> Makefile
|
||||
|
||||
%make%
|
||||
if errorlevel 1 (cd ..\.. & exit /b 1)
|
||||
%MAKE%
|
||||
if errorlevel 1 (cd .. & exit /b 1)
|
||||
|
||||
cd ..\..
|
||||
cd ..
|
||||
|
||||
:conf
|
||||
configureapp.exe -srcdir %QTSRC% %ARGS%
|
||||
goto exit
|
||||
rem Generate qt.conf
|
||||
|
||||
:help
|
||||
type %QTSRC%config_help.txt
|
||||
> "%QTDIR%\bin\qt.conf" (
|
||||
@echo [EffectivePaths]
|
||||
@echo Prefix=..
|
||||
@echo [Paths]
|
||||
@echo TargetSpec=dummy
|
||||
@echo HostSpec=%PLATFORM%
|
||||
)
|
||||
if not "%QTDIR%" == "%QTSRC%" (
|
||||
>> "%QTDIR%\bin\qt.conf" (
|
||||
@echo [EffectiveSourcePaths]
|
||||
@echo Prefix=%QTSRC:\=/%
|
||||
)
|
||||
)
|
||||
|
||||
:exit
|
||||
rem Launch qmake-based configure
|
||||
|
||||
cd "%TOPQTDIR%"
|
||||
"%QTDIR%\bin\qmake.exe" "%TOPQTSRC%" -- %ARGS%
|
||||
|
@ -1,6 +1,5 @@
|
||||
{
|
||||
"files": {
|
||||
"builtinQtConf": "qmake/builtin-qt.conf",
|
||||
"qconfigSource": "src/corelib/global/qconfig.cpp",
|
||||
"publicHeader": "src/corelib/global/qconfig.h",
|
||||
"privateHeader": "src/corelib/global/qconfig_p.h",
|
||||
@ -94,6 +93,7 @@
|
||||
"mp": { "type": "boolean", "name": "msvc_mp" },
|
||||
"nomake": { "type": "addString", "values": [ "examples", "tests", "tools" ] },
|
||||
"opensource": { "type": "void", "name": "commercial", "value": "no" },
|
||||
"optimize-debug": { "type": "boolean", "name": "optimize_debug" },
|
||||
"optimized-qmake": { "type": "boolean", "name": "release_tools" },
|
||||
"optimized-tools": { "type": "boolean", "name": "release_tools" },
|
||||
"pch": { "type": "boolean", "name": "precompile_header" },
|
||||
@ -109,7 +109,6 @@
|
||||
"reduce-relocations": { "type": "boolean", "name": "reduce_relocations" },
|
||||
"release": { "type": "enum", "name": "debug", "values": { "yes": "no", "no": "yes" } },
|
||||
"rpath": "boolean",
|
||||
"rtti": "boolean",
|
||||
"sanitize": "sanitize",
|
||||
"sdk": "string",
|
||||
"separate-debug-info": { "type": "boolean", "name": "separate_debug_info" },
|
||||
@ -254,11 +253,6 @@
|
||||
"type": "compile",
|
||||
"test": "common/c++98default"
|
||||
},
|
||||
"compiler": {
|
||||
"label": "Compiler",
|
||||
"type": "checkCompiler",
|
||||
"log": "compilerDescription"
|
||||
},
|
||||
"precompile_header": {
|
||||
"label": "precompiled header support",
|
||||
"type": "compile",
|
||||
@ -269,6 +263,11 @@
|
||||
"type": "compilerSupportsFlag",
|
||||
"flag": "-fuse-ld=gold"
|
||||
},
|
||||
"optimize_debug": {
|
||||
"label": "-Og support",
|
||||
"type": "compilerSupportsFlag",
|
||||
"flag": "-Og"
|
||||
},
|
||||
"enable_new_dtags": {
|
||||
"label": "new dtags support",
|
||||
"type": "linkerSupportsFlag",
|
||||
@ -410,6 +409,11 @@
|
||||
"type": "compile",
|
||||
"test": "unix/posix_fallocate"
|
||||
},
|
||||
"alloca": {
|
||||
"label": "alloca()",
|
||||
"type": "compile",
|
||||
"test": "common/alloca"
|
||||
},
|
||||
"stack_protector": {
|
||||
"label": "stack protection",
|
||||
"type": "compilerSupportsFlag",
|
||||
@ -424,13 +428,14 @@
|
||||
|
||||
"features": {
|
||||
"prepare": {
|
||||
"output": [ "prepareSpec", "prepareOptions", "preparePaths" ]
|
||||
"output": [ "prepareSpec", "prepareOptions", "preparePaths", "reloadSpec" ]
|
||||
},
|
||||
"machineTuple": {
|
||||
"condition": "!config.linux || config.android || tests.machineTuple",
|
||||
"output": [ "machineTuple" ]
|
||||
},
|
||||
"commit": {
|
||||
"condition": "features.machineTuple",
|
||||
"output": [ "commitOptions" ]
|
||||
},
|
||||
"android-style-assets": {
|
||||
@ -484,6 +489,11 @@
|
||||
"condition": "!config.msvc && !config.integrity && tests.use_gold_linker",
|
||||
"output": [ "privateConfig", "useGoldLinker" ]
|
||||
},
|
||||
"optimize_debug": {
|
||||
"label": "Optimize debug build",
|
||||
"condition": "!config.msvc && (features.debug || features.debug_and_release) && tests.optimize_debug",
|
||||
"output": [ "privateConfig" ]
|
||||
},
|
||||
"architecture": {
|
||||
"label": "Architecture",
|
||||
"output": [ "architecture" ]
|
||||
@ -567,12 +577,6 @@
|
||||
"autoDetect": false,
|
||||
"output": [ { "type": "varAppend", "name": "EXTRA_RPATHS", "value": "input.rpaths" } ]
|
||||
},
|
||||
"rtti": {
|
||||
"label": "Build with RTTI",
|
||||
"comment": "mkspecs/features/win32/default_pre.prf sets no-rtti. Follow default behavior of configure.exe by overriding with rtti.",
|
||||
"condition": "config.win32",
|
||||
"output": [ "publicConfig" ]
|
||||
},
|
||||
"force_asserts": {
|
||||
"label": "Force assertions",
|
||||
"autoDetect": false,
|
||||
@ -691,11 +695,6 @@
|
||||
"condition": "features.c++14 && tests.c++1z",
|
||||
"output": [ "publicFeature", "publicQtConfig" ]
|
||||
},
|
||||
"compiler": {
|
||||
"label": "Compiler version",
|
||||
"condition": "tests.compiler",
|
||||
"output": [ "compilerVersion" ]
|
||||
},
|
||||
"precompile_header": {
|
||||
"label": "Using precompiled headers",
|
||||
"condition": "config.msvc || tests.precompile_header",
|
||||
@ -895,6 +894,11 @@
|
||||
"condition": "tests.posix_fallocate",
|
||||
"output": [ "privateFeature" ]
|
||||
},
|
||||
"alloca": {
|
||||
"label": "alloca()",
|
||||
"condition": "tests.alloca",
|
||||
"output": [ "privateFeature" ]
|
||||
},
|
||||
"stack-protector-strong": {
|
||||
"label": "stack protection",
|
||||
"condition": "config.qnx && tests.stack_protector",
|
||||
@ -947,6 +951,18 @@
|
||||
{ "type": "publicQtConfig", "negative": true }
|
||||
]
|
||||
},
|
||||
"network": {
|
||||
"label": "Qt Network",
|
||||
"output": [ "privateFeature" ]
|
||||
},
|
||||
"sql": {
|
||||
"label": "Qt Sql",
|
||||
"output": [ "privateFeature" ]
|
||||
},
|
||||
"testlib": {
|
||||
"label": "Qt Testlib",
|
||||
"output": [ "privateFeature" ]
|
||||
},
|
||||
"widgets": {
|
||||
"label": "Qt Widgets",
|
||||
"autoDetect": "!config.tvos && !config.watchos",
|
||||
@ -957,6 +973,10 @@
|
||||
{ "type": "publicQtConfig", "negative": true }
|
||||
]
|
||||
},
|
||||
"xml": {
|
||||
"label": "Qt Xml",
|
||||
"output": [ "privateFeature" ]
|
||||
},
|
||||
"libudev": {
|
||||
"label": "udev",
|
||||
"condition": "libs.libudev",
|
||||
@ -1072,6 +1092,11 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
|
||||
"message": "Mode",
|
||||
"type": "buildMode"
|
||||
},
|
||||
{
|
||||
"type": "feature",
|
||||
"args": "optimize_debug",
|
||||
"condition": "!config.msvc && (features.debug || features.debug_and_release)"
|
||||
},
|
||||
"shared",
|
||||
{
|
||||
"message": "Using C++ standard",
|
||||
@ -1146,7 +1171,11 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5
|
||||
"dbus",
|
||||
"dbus-linked",
|
||||
"gui",
|
||||
"widgets"
|
||||
"network",
|
||||
"sql",
|
||||
"testlib",
|
||||
"widgets",
|
||||
"xml"
|
||||
]
|
||||
}, {
|
||||
"section": "Support enabled for",
|
||||
|
147
configure.pri
147
configure.pri
@ -397,50 +397,6 @@ defineTest(qtConfTest_buildParts) {
|
||||
return(true)
|
||||
}
|
||||
|
||||
defineTest(qtConfTest_checkCompiler) {
|
||||
contains(QMAKE_CXX, ".*clang.*") {
|
||||
qtRunLoggedCommand("$$QMAKE_CXX -v 2>&1", versionstr)|return(false)
|
||||
versionstr = "$$versionstr"
|
||||
contains(versionstr, "^Apple (clang|LLVM) version .*") {
|
||||
$${1}.compilerDescription = "Apple Clang"
|
||||
$${1}.compilerId = "apple_clang"
|
||||
$${1}.compilerVersion = $$replace(versionstr, "^Apple (clang|LLVM) version ([0-9.]+).*$", "\\2")
|
||||
} else: contains(versionstr, ".*clang version.*") {
|
||||
$${1}.compilerDescription = "Clang"
|
||||
$${1}.compilerId = "clang"
|
||||
$${1}.compilerVersion = $$replace(versionstr, "^.*clang version ([0-9.]+).*", "\\1")
|
||||
} else {
|
||||
return(false)
|
||||
}
|
||||
} else: contains(QMAKE_CXX, ".*g\\+\\+.*") {
|
||||
qtRunLoggedCommand("$$QMAKE_CXX -dumpversion", version)|return(false)
|
||||
$${1}.compilerDescription = "GCC"
|
||||
$${1}.compilerId = "gcc"
|
||||
$${1}.compilerVersion = $$version
|
||||
} else: contains(QMAKE_CXX, ".*icpc") {
|
||||
qtRunLoggedCommand("$$QMAKE_CXX -dumpversion", version)|return(false)
|
||||
$${1}.compilerDescription = "ICC"
|
||||
$${1}.compilerId = "icc"
|
||||
$${1}.compilerVersion = $$version
|
||||
} else: msvc {
|
||||
command = $$QMAKE_CXX /EP /nologo $$source $$system_quote($$QMAKE_CONFIG_TESTS_DIR/win/msvc_version.cpp)
|
||||
qtRunLoggedCommand("$$command", version)|return(false)
|
||||
version = "$$version"
|
||||
$${1}.compilerDescription = "MSVC"
|
||||
$${1}.compilerId = "cl"
|
||||
$${1}.compilerVersion = $$replace(version, "^.*([0-9]{2})([0-9]{2})([0-9]{5}).*$", "\\1.\\2.\\3")
|
||||
} else {
|
||||
return(false)
|
||||
}
|
||||
$${1}.compilerDescription += $$eval($${1}.compilerVersion)
|
||||
export($${1}.compilerDescription)
|
||||
export($${1}.compilerId)
|
||||
export($${1}.compilerVersion)
|
||||
$${1}.cache += compilerDescription compilerId compilerVersion
|
||||
export($${1}.cache)
|
||||
return(true)
|
||||
}
|
||||
|
||||
# custom outputs
|
||||
|
||||
# this reloads the qmakespec as completely as reasonably possible.
|
||||
@ -453,13 +409,15 @@ defineTest(reloadSpec) {
|
||||
}
|
||||
# nobody's going to try to re-load the features above,
|
||||
# so don't bother with being selective.
|
||||
QMAKE_INTERNAL_INCLUDED_FEATURES =
|
||||
QMAKE_INTERNAL_INCLUDED_FEATURES = \
|
||||
# loading it gets simulated below.
|
||||
$$[QT_HOST_DATA/src]/mkspecs/features/device_config.prf \
|
||||
# must be delayed until qdevice.pri is ready.
|
||||
$$[QT_HOST_DATA/src]/mkspecs/features/mac/toolchain.prf \
|
||||
$$[QT_HOST_DATA/src]/mkspecs/features/toolchain.prf
|
||||
|
||||
_SAVED_CONFIG = $$CONFIG
|
||||
load(spec_pre)
|
||||
load(device_config) # avoid that the spec loads it later.
|
||||
# discard possible settings from an earlier configure run.
|
||||
discard_from($$[QT_HOST_DATA/get]/mkspecs/qdevice.pri)
|
||||
# qdevice.pri gets written too late (and we can't write it early
|
||||
# enough, as it's populated in stages, with later ones depending
|
||||
# on earlier ones). so inject its variables manually.
|
||||
@ -502,6 +460,10 @@ defineTest(qtConfOutput_prepareSpec) {
|
||||
QMAKESPEC = $$[QT_HOST_DATA/src]/mkspecs/$$XSPEC
|
||||
export(QMAKESPEC)
|
||||
|
||||
notes = $$cat($$OUT_PWD/.config.notes, lines)
|
||||
!isEmpty(notes): \
|
||||
qtConfAddNote("Also available for $$notes")
|
||||
|
||||
# deviceOptions() below contains conditionals coming form the spec,
|
||||
# so this cannot be delayed for a batch reload.
|
||||
reloadSpec()
|
||||
@ -623,9 +585,8 @@ defineTest(qtConfOutput_prepareOptions) {
|
||||
|
||||
export($${currentConfig}.output.devicePro)
|
||||
|
||||
# reload the spec to make the settings actually take effect.
|
||||
!isEmpty($${currentConfig}.output.devicePro): \
|
||||
reloadSpec()
|
||||
# if any settings were made, the spec will be reloaded later
|
||||
# to make them take effect.
|
||||
}
|
||||
|
||||
defineTest(qtConfOutput_machineTuple) {
|
||||
@ -710,6 +671,7 @@ defineReplace(printHostPaths) {
|
||||
$$printInstallPath(HostLibraries, hostlibdir, lib) \
|
||||
$$printInstallPath(HostData, hostdatadir, .) \
|
||||
"Sysroot=$$config.input.sysroot" \
|
||||
"SysrootifyPrefix=$$qmake_sysrootify" \
|
||||
"TargetSpec=$$XSPEC" \
|
||||
"HostSpec=$$[QMAKE_SPEC]"
|
||||
return($$ret)
|
||||
@ -818,40 +780,56 @@ defineTest(qtConfOutput_preparePaths) {
|
||||
addConfStr($$config.rel_input.examplesdir)
|
||||
addConfStr($$config.rel_input.testsdir)
|
||||
|
||||
QT_CONFIGURE_STR_OFFSETS_ALL = $$QT_CONFIGURE_STR_OFFSETS
|
||||
QT_CONFIGURE_STRS_ALL = $$QT_CONFIGURE_STRS
|
||||
QT_CONFIGURE_STR_OFFSETS =
|
||||
QT_CONFIGURE_STRS =
|
||||
|
||||
addConfStr($$config.input.sysroot)
|
||||
addConfStr($$qmake_sysrootify)
|
||||
addConfStr($$config.rel_input.hostbindir)
|
||||
addConfStr($$config.rel_input.hostlibdir)
|
||||
addConfStr($$config.rel_input.hostdatadir)
|
||||
addConfStr($$XSPEC)
|
||||
addConfStr($$[QMAKE_SPEC])
|
||||
|
||||
$${currentConfig}.output.qconfigSource = \
|
||||
"/* Installation date */" \
|
||||
"static const char qt_configure_installation [12+11] = \"qt_instdate=2012-12-20\";" \
|
||||
"" \
|
||||
"/* Installation Info */" \
|
||||
"static const char qt_configure_prefix_path_str [12+256] = \"qt_prfxpath=$$config.input.prefix\";" \
|
||||
"$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \
|
||||
"static const char qt_configure_ext_prefix_path_str [12+256] = \"qt_epfxpath=$$config.input.extprefix\";" \
|
||||
"static const char qt_configure_host_prefix_path_str [12+256] = \"qt_hpfxpath=$$config.input.hostprefix\";" \
|
||||
"$${LITERAL_HASH}endif" \
|
||||
"" \
|
||||
"static const short qt_configure_str_offsets[] = {" \
|
||||
$$QT_CONFIGURE_STR_OFFSETS_ALL \
|
||||
"$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \
|
||||
$$QT_CONFIGURE_STR_OFFSETS \
|
||||
"$${LITERAL_HASH}endif" \
|
||||
"};" \
|
||||
"static const char qt_configure_strs[] =" \
|
||||
$$QT_CONFIGURE_STRS_ALL \
|
||||
"$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \
|
||||
$$QT_CONFIGURE_STRS \
|
||||
"$${LITERAL_HASH}endif" \
|
||||
";" \
|
||||
"" \
|
||||
"$${LITERAL_HASH}define QT_CONFIGURE_SETTINGS_PATH \"$$config.rel_input.sysconfdir\"" \
|
||||
"" \
|
||||
"$${LITERAL_HASH}define QT_CONFIGURE_PREFIX_PATH qt_configure_prefix_path_str + 12"
|
||||
"$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \
|
||||
"$${LITERAL_HASH} define QT_CONFIGURE_SYSROOTIFY_PREFIX $$qmake_sysrootify" \
|
||||
"$${LITERAL_HASH}endif" \
|
||||
"" \
|
||||
"$${LITERAL_HASH}define QT_CONFIGURE_PREFIX_PATH qt_configure_prefix_path_str + 12" \
|
||||
"$${LITERAL_HASH}ifdef QT_BUILD_QMAKE" \
|
||||
"$${LITERAL_HASH} define QT_CONFIGURE_EXT_PREFIX_PATH qt_configure_ext_prefix_path_str + 12" \
|
||||
"$${LITERAL_HASH} define QT_CONFIGURE_HOST_PREFIX_PATH qt_configure_host_prefix_path_str + 12" \
|
||||
"$${LITERAL_HASH}endif"
|
||||
export($${currentConfig}.output.qconfigSource)
|
||||
|
||||
# populate qmake/builtin-qt.conf
|
||||
|
||||
$${currentConfig}.output.builtinQtConf = \
|
||||
" " \
|
||||
"===========================================================" \
|
||||
"==================== qt.conf beginning ====================" \
|
||||
"===========================================================" \
|
||||
"[Paths]" \
|
||||
"ExtPrefix=$$config.input.extprefix" \
|
||||
"Prefix=$$config.input.prefix" \
|
||||
$$printInstallPaths() \
|
||||
"Settings=$$config.rel_input.sysconfdir" \
|
||||
$$printHostPaths()
|
||||
export($${currentConfig}.output.builtinQtConf)
|
||||
|
||||
# create bin/qt.conf. this doesn't use the regular file output
|
||||
# mechanism, as the file is relied upon by configure tests.
|
||||
|
||||
@ -871,6 +849,22 @@ defineTest(qtConfOutput_preparePaths) {
|
||||
"Prefix=$$QT_SOURCE_TREE"
|
||||
write_file($$QT_BUILD_TREE/bin/qt.conf, cont)|error()
|
||||
reload_properties()
|
||||
|
||||
# if a sysroot was configured, the spec will be reloaded later,
|
||||
# as some specs contain $$[SYSROOT] references.
|
||||
}
|
||||
|
||||
defineTest(qtConfOutput_reloadSpec) {
|
||||
!isEmpty($${currentConfig}.output.devicePro)| \
|
||||
!isEmpty(config.input.sysroot): \
|
||||
reloadSpec()
|
||||
|
||||
bypassNesting() {
|
||||
QMAKE_INTERNAL_INCLUDED_FEATURES -= \
|
||||
$$[QT_HOST_DATA/src]/mkspecs/features/mac/toolchain.prf \
|
||||
$$[QT_HOST_DATA/src]/mkspecs/features/toolchain.prf
|
||||
load(toolchain)
|
||||
}
|
||||
}
|
||||
|
||||
defineTest(qtConfOutput_shared) {
|
||||
@ -968,25 +962,6 @@ defineTest(qtConfOutput_debugAndRelease) {
|
||||
}
|
||||
}
|
||||
|
||||
defineTest(qtConfOutput_compilerVersion) {
|
||||
!$${2}: return()
|
||||
|
||||
name = $$upper($$eval($${currentConfig}.tests.compiler.compilerId))
|
||||
version = $$eval($${currentConfig}.tests.compiler.compilerVersion)
|
||||
major = $$section(version, '.', 0, 0)
|
||||
minor = $$section(version, '.', 1, 1)
|
||||
patch = $$section(version, '.', 2, 2)
|
||||
isEmpty(minor): minor = 0
|
||||
isEmpty(patch): patch = 0
|
||||
|
||||
$${currentConfig}.output.publicPro += \
|
||||
"QT_$${name}_MAJOR_VERSION = $$major" \
|
||||
"QT_$${name}_MINOR_VERSION = $$minor" \
|
||||
"QT_$${name}_PATCH_VERSION = $$patch"
|
||||
|
||||
export($${currentConfig}.output.publicPro)
|
||||
}
|
||||
|
||||
defineTest(qtConfOutput_compilerFlags) {
|
||||
# this output also exports the variables locally, so that subsequent compiler tests can use them
|
||||
|
||||
|
497
dist/changes-5.8.0
vendored
Normal file
497
dist/changes-5.8.0
vendored
Normal file
@ -0,0 +1,497 @@
|
||||
Qt 5.8 introduces many new features and improvements as well as bugfixes
|
||||
over the 5.7.x series. For more details, refer to the online documentation
|
||||
included in this distribution. The documentation is also available online:
|
||||
|
||||
http://doc.qt.io/qt-5/index.html
|
||||
|
||||
The Qt version 5.8 series is binary compatible with the 5.7.x series.
|
||||
Applications compiled for 5.7 will continue to run with 5.8.
|
||||
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
https://bugreports.qt.io/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
|
||||
This release contains all fixes included in the Qt 5.7.1 release.
|
||||
|
||||
****************************************************************************
|
||||
* License Changes *
|
||||
****************************************************************************
|
||||
|
||||
Static libraries that are linked into executables (winmain and
|
||||
qopenglextensions) are now licensed under BSD _and_ commercial licenses.
|
||||
|
||||
****************************************************************************
|
||||
* Deprecation Notice *
|
||||
****************************************************************************
|
||||
|
||||
- The following platforms or toolchains are deprecated and will be
|
||||
removed as of Qt 5.9:
|
||||
* Apple OS X Mavericks (v10.9)
|
||||
* Apple iOS 7.x
|
||||
|
||||
Deprecated platforms and toolchains continue to work until removed.
|
||||
|
||||
- The Q_OBJECT_CHECK macro is deprecated and will be removed in Qt 6. The
|
||||
internal, template function qt_check_for_QOBJECT_macro that it created in
|
||||
QObject-derived classes will be removed in Qt 5.9.
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
****************************************************************************
|
||||
|
||||
- Support for the following platforms was removed in this version:
|
||||
* Apple OS X Mountain Lion (v10.8)
|
||||
* Apple iOS 6.x
|
||||
|
||||
configure & build system
|
||||
------------------------
|
||||
|
||||
- The configuration system has been rewritten almost from scratch. This
|
||||
improved the consistency between builds on Unix and Windows, but some
|
||||
subtle unintended behavior changes are also possible. Also, some
|
||||
obsolete options have been entirely removed and will now cause errors.
|
||||
- It is not permissible any more to manually #define QT_NO_<FEATURE>
|
||||
anywhere. Instead, configure's -no-feature-* options must be used.
|
||||
Note that this does not apply to defines which modify behavior rather
|
||||
than entirely removing features.
|
||||
- Configure test results are now cached. Use -recheck or -recheck-all
|
||||
to discard them.
|
||||
- [QTBUG-32530][QTBUG-42962] The Unix configure won't pick up CFLAGS and
|
||||
related environment variables any more. Instead, it now accepts QMAKE_*
|
||||
variable assignments on the command line.
|
||||
- [QTBUG-52266] Configure won't pick up QMAKESPEC from the environment
|
||||
any more. Use the -platform option instead.
|
||||
- Device and simulator libraries are now combined on Apple device
|
||||
platforms (iOS). This means that there will no longer be any
|
||||
*_simulator.a libraries and the simulator architectures will simply
|
||||
reside alongside the device architectures in a single Mach-O file.
|
||||
- [Darwin] Project files may not override QMAKE_MAC_SDK any more.
|
||||
|
||||
QtCore
|
||||
------
|
||||
|
||||
- qFatal will now use std::abort to terminate the application on all
|
||||
operating systems. Previously, ::abort() or ::exit(1) were called,
|
||||
depending on the operating system.
|
||||
- QLibraryInfo::licensee()/licensedProducts() were deprecated and
|
||||
return empty strings now.
|
||||
- Destroying a QThread which is still running will now result in
|
||||
immediate and abnormal program termination.
|
||||
|
||||
QtGui
|
||||
-----
|
||||
|
||||
- [QTBUG-54936] QFont::toString() and QFont::key() were modified to save
|
||||
the font's style name if one is set, invalidating any stored font
|
||||
identifiers. QFont::fromString() was also adjusted to accommodate the
|
||||
change.
|
||||
|
||||
QtNetwork
|
||||
---------
|
||||
|
||||
- Proxies from system settings will now be used by default. Configure
|
||||
with -no-system-proxies to disable.
|
||||
- [QTBUG-53649] libproxy is now turned off by default. Configure with
|
||||
-libproxy in order to enable it again.
|
||||
|
||||
****************************************************************************
|
||||
* Library *
|
||||
****************************************************************************
|
||||
|
||||
QtCore
|
||||
------
|
||||
|
||||
- Disambiguated the relational operators comparing QByteArray with
|
||||
QStringRef (and vice versa).
|
||||
- Added qHash() overloads for QHash, QMultiHash.
|
||||
- Added QDeadlineTimer, a counterpart to QElapsedTimer, used to mark a
|
||||
time point in the future (a deadline) and determine whether such a
|
||||
deadline has passed.
|
||||
- Qt now relies on type traits from the C++11 standard library.
|
||||
- [QTBUG-54981] Added Q_NAMESPACE, which can be used to add Q_ENUM_NS/
|
||||
Q_ENUMS, Q_FLAG_NS/Q_FLAGS and Q_CLASSINFO to a namespace.
|
||||
- Q_IS_ENUM was deprecated. Use std::is_enum<>::value instead.
|
||||
|
||||
- QChar:
|
||||
* Added missing operator{<,>,<=,>=} comparing against QLatin1String and
|
||||
QStringRef.
|
||||
* Added missing operator{==,!=} comparing against QLatin1String.
|
||||
|
||||
- QCommandLineOption:
|
||||
* Added flags() and setFlags() methods. Added ShortOptionStyle and
|
||||
HiddenFromHelp flags.
|
||||
|
||||
- QDateTime:
|
||||
* Introduced toSecsSinceEpoch, fromSecsSinceEpoch and setSecsSinceEpoch
|
||||
functions, which use 64-bit integers to represent the number of
|
||||
seconds.
|
||||
* The toTime_t, fromTime_t and setTime_t functions are deprecated and
|
||||
will be removed in Qt 6.0. For new code, use the equivalent functions
|
||||
with "SecsSinceEpoch" in the name, or the equivalent ones with
|
||||
millisecond accurancy that have existed since Qt 4.7.
|
||||
* Added string formatting type Qt::ISODateWithMs.
|
||||
|
||||
- QFileInfo:
|
||||
* QFileInfo now reports file times with millisecond precision on Unix
|
||||
systems.
|
||||
|
||||
- QFileSystemWatcher:
|
||||
* [QTBUG-55896] Fixed a bug that caused QFileSystemWatcher to mis-handle
|
||||
file paths that contained non-US-ASCII characters on Apple platforms.
|
||||
|
||||
- QJsonDocument:
|
||||
* [QTBUG-39751] fromVariant can now take a QVariantHash argument.
|
||||
* Fixed a number of bugs that could cause crashes when loading corrupt
|
||||
binary JSON data.
|
||||
|
||||
- QJsonValue:
|
||||
* [QTBUG-43077] QJsonValue(Null).toVariant() now returns a QVariant of
|
||||
type QMetaType::Nullptr instead of an invalid QVariant.
|
||||
|
||||
- QLatin1String:
|
||||
* Added at(), operator[](), mid(), right(), left().
|
||||
|
||||
- QLibraryInfo:
|
||||
* Added QLibraryInfo::version(), which returns the current version of
|
||||
the Qt library as a QVersionNumber object.
|
||||
|
||||
- QLine/QLineF:
|
||||
* Added center().
|
||||
|
||||
- QLockFile:
|
||||
* Fixed a bug that caused QLockFile to over-sleep while waiting for the
|
||||
lock file to become available.
|
||||
|
||||
- QMetaType:
|
||||
* std::nullptr_t is now a built-in Qt metatype.
|
||||
|
||||
- QModelIndex:
|
||||
* QModelIndex::child has been deprecated due to its lack of generality.
|
||||
Use model->index(row, column, index) instead.
|
||||
|
||||
- QMutex:
|
||||
* QMutex now fully models the TimedLockable concept by providing the
|
||||
try_lock, try_lock_for and try_lock_until functions, therefore making
|
||||
it usable in Standard Library lock management classes and functions.
|
||||
|
||||
- QObject:
|
||||
* The QT_NO_NARROWING_CONVERSIONS_IN_CONNECT macro has been added. When
|
||||
using the new connection syntax (PMF-based) this macro makes it
|
||||
illegal to narrow the arguments carried by the signal, and/or to
|
||||
perform floating point to integral implicit conversions on them. When
|
||||
the macro is defined, depending on your compiler a QObject::connect()
|
||||
statement triggering such conversions will now fail to compile.
|
||||
|
||||
- QPersistentModelIndex:
|
||||
* QPersistentModelIndex::child has been deprecated due to its lack of
|
||||
generality. Use model->index(row, column, index) instead.
|
||||
|
||||
- QStringList:
|
||||
* Added join(QLatin1String) overload.
|
||||
|
||||
- QStringRef:
|
||||
* Added missing operator{<,>,<=,>=} comparing against QLatin1String and
|
||||
QString.
|
||||
|
||||
- QSysInfo:
|
||||
* The output of QSysInfo::prettyProductName now includes the Windows
|
||||
OS/kernel version number. In case of future versions of Windows, a
|
||||
valid string is now returned.
|
||||
|
||||
- QSettings:
|
||||
* [QTBUG-56124] Fixed a bug that caused QSettings to fail on Apple
|
||||
platforms when strings with embedded null (\0) bytes were present
|
||||
|
||||
- QSharedPointer:
|
||||
* [QTBUG-52369] Fixed a bug that caused QSharedPointer to fail to compile
|
||||
if it was initialized with a nullptr literal.
|
||||
* Fixed a bug that made QSharedPointer delete the pointer it held with the
|
||||
wrong destructor if the type of the QSharedPointer and that of the object
|
||||
passed on the constructor were different. Its behavior is now the same as
|
||||
std::shared_ptr.
|
||||
|
||||
- QStandardPaths:
|
||||
* [QTBUG-55507] Fixed the QStandardPaths::FontsLocation on XDG systems to
|
||||
be $XDG_DATA_DIR/fonts.
|
||||
* Fixed handling of potential paths that do not exist on Windows. Now,
|
||||
QStandardPaths may return storage locations that may not exist on all
|
||||
platforms.
|
||||
|
||||
- QTimer:
|
||||
* Added support for std::chrono duration objects for QTimer methods,
|
||||
like QTimer::singleShot and QTimer::setInterval.
|
||||
|
||||
- QWaitCondition:
|
||||
* Added notify_one() and notify_all() to make QWaitCondition be usable from
|
||||
algorithms that use the Standard Library naming convention.
|
||||
|
||||
QtDBus
|
||||
------
|
||||
|
||||
- QDBusConnection:
|
||||
* Fixed a bug that would cause QDBusConnection::connect() to return true
|
||||
if a slot was already connected to the same D-Bus signal. QtDBus does
|
||||
not support multiple connections.
|
||||
|
||||
QtGui
|
||||
-----
|
||||
|
||||
- [QFileDialogOptions/QFontDialogOptions/QMessageDialogOptions/
|
||||
QColorDialogOptions] These classes no longer have value semantics, but
|
||||
need to be held in QSharedPointer (as they always were). To copy an
|
||||
instance, use the clone() method.
|
||||
- QOpenGLTextureBlitter, a utility class to draw textured quads, has been
|
||||
made public.
|
||||
- [QTBUG-38825] Fixed QTextEdit to match undo functionality of QLineEdit
|
||||
to group two sequential inserts into one undo action.
|
||||
- [QTBUG-51844] Added rotation and uniqueId properties to
|
||||
QTouchEvent::TouchPoint. This is mainly for the benefit of the TUIO
|
||||
plugin so far: it now supports tracking physical objects (fiducials)
|
||||
on the touchscreen surface, as long as the object's ID can fit in a
|
||||
64-bit integer. QPointingDeviceUniqueId is a wrapper for the ID,
|
||||
designed to be extensible to support other types of IDs in the future.
|
||||
- [QTBUG-52510] A stationary touchpoint event is delivered if its
|
||||
velocity changes. This is to ensure that the application will be
|
||||
notified when a TUIO fiducial object comes to rest.
|
||||
- [QTBUG-53076] Add QGuiApplication::applicationDisplayNameChanged()
|
||||
signal.
|
||||
|
||||
- QAbstractTextDocumentLayout:
|
||||
* Added imageAt() and formatAt() methods, which respectively can be used
|
||||
to retrieve the source link of the image under the cursor, or the
|
||||
QTextFormat of the text under the cursor.
|
||||
|
||||
- QFont:
|
||||
* [QTBUG-48043] The default value of QFont::stretch() is now 0 to
|
||||
indicate any default stretch is acceptable.
|
||||
|
||||
- QRegion:
|
||||
* Is now iterable as a container of QRects: added {c,}{r,}{begin,end}().
|
||||
|
||||
- Text handling:
|
||||
* [QTBUG-51411] Fixed performance hit from showing large QTextDocuments
|
||||
in a QTextEdit or QTextBrowser. (Regression introduced in Qt 5.3.0)
|
||||
* [QTBUG-50090] Fixed line spacing with some scalable fonts containing
|
||||
bitmaps with the Freetype font engine.
|
||||
* [QTBUG-56346] Fixed QStaticText when manually breaking lines and no
|
||||
text width was set.
|
||||
* [QTBUG-56659] Fixed a regression where raster fonts on Windows were
|
||||
detected as smoothly scalable and thus rendering with said fonts in Qt
|
||||
Quick would break.
|
||||
* [QTBUG-51223] Fixed synthesized oblique for non-latin text on
|
||||
platforms using the basic font database, such as Android.
|
||||
* [QTBUG-56672] Fixed list of supported sizes for bitmap fonts on
|
||||
Windows.
|
||||
* [QTBUG-56714] Fixed a bug where a no-break space would sometimes cause
|
||||
the first character of the containing line to not be displayed.
|
||||
* [QTBUG-55856] Fixed rendering of large fonts when a device pixel ratio
|
||||
is set and the Freetype engine is used.
|
||||
|
||||
QtNetwork
|
||||
---------
|
||||
|
||||
- Added QNetworkDatagram class, along with new function receiveDatagram()
|
||||
in QUdpSocket that returns it, and an overload to writeDatagram() that
|
||||
can accept it.
|
||||
- Added QSctpServer and QSctpSocket classes. Note that these need to be
|
||||
explicitly enabled via a configure option.
|
||||
- [QTBUG-50956] Added support for HTTP/2 protocol
|
||||
|
||||
- QSslSocket:
|
||||
* [QTBUG-39077] TLS PSK ciphers are possible in server sockets.
|
||||
* It is now possible to set custom Diffie-Hellman parameters for
|
||||
QSslSocket-based servers.
|
||||
|
||||
- QTcpServer:
|
||||
* [QTBUG-51288] It is now possible to use QTcpServer with an externally
|
||||
created QTcpSocket.
|
||||
|
||||
QtSql
|
||||
-----
|
||||
|
||||
- QSqlDatabase:
|
||||
* When connecting to a MySQL server whose version is 5.5.3 or higher,
|
||||
the default connection charset is now utf8mb4 instead of utf8 to allow
|
||||
4-byte UTF-8 encodings.
|
||||
|
||||
- SQLite:
|
||||
* Added notification feature to SQLite driver
|
||||
|
||||
QTestLib
|
||||
--------
|
||||
|
||||
- [QTBUG-44030] Added QTest::createTouchDevice() for use in autotests
|
||||
which generate touch events.
|
||||
- Added ref-cycles perf counter.
|
||||
- QFETCH variables can now be declared const (QFETCH(const T, name)).
|
||||
- It is now possible to use variables of types with an explicit operator
|
||||
bool in the QVERIFY macro.
|
||||
|
||||
QtWidgets
|
||||
---------
|
||||
|
||||
- QFormLayout:
|
||||
* [QTBUG-15990] Added removeRow(), takeRow().
|
||||
|
||||
- QMainWindow:
|
||||
* [QTBUG-56628] Fixed crash using takeCentralWidget when the central
|
||||
widget was not set.
|
||||
|
||||
****************************************************************************
|
||||
* Platform-specific Changes *
|
||||
****************************************************************************
|
||||
|
||||
- Added technology preview support for Apple tvOS and Apple watchOS.
|
||||
- Added initial support for Microsoft Visual Studio 2017, which uses the
|
||||
mkspec "win32-msvc2017". Full support will happen after the final release
|
||||
of that compiler.
|
||||
|
||||
Android
|
||||
-------
|
||||
|
||||
- [QTBUG-48948] Show password while typing is now supported
|
||||
- [QTBUG-55035][QTBUG-50759] Introduced a mechanism to forward
|
||||
permission related callbacks on Activity objects to interested
|
||||
parties.
|
||||
|
||||
Apple platforms
|
||||
---------------
|
||||
|
||||
- Added QImage::toCGImage() that returns a CGImage.
|
||||
- Added functions that convert Qt types QPoint/QPointF, QRect/QRectF and
|
||||
QSize/QSizeF to and from CGPoint, CGRect and CGSize. Note that QPoint,
|
||||
QRect and QSize do not provide fromCGXxx functions since that would
|
||||
silently lose precision.
|
||||
|
||||
iOS
|
||||
---
|
||||
|
||||
- Precompiled headers are now supported on iOS.
|
||||
- Starting from iOS 10, Apple requires all apps that need access to photos
|
||||
to have the key 'NSPhotoLibraryUsageDescription' in the Info.plist.
|
||||
Therefore, to get the same support in Qt (when, e.g., using a file
|
||||
dialog), the Info.plist assigned to QMAKE_INFO_PLIST will need this key
|
||||
as well.
|
||||
|
||||
macOS
|
||||
-----
|
||||
|
||||
- Speech to text dictation now works for Qt text input.
|
||||
- [QTBUG-33708] Fixed underline position in font rendering.
|
||||
|
||||
Linux
|
||||
-----
|
||||
|
||||
- [QTBUG-39959] QWidget-based applications running on the eglfs platform
|
||||
plugin can now request 180 or 90 degrees rotated output by setting the
|
||||
QT_QPA_EGLFS_ROTATION environment variable.
|
||||
- KDE/Gnome themes now implement QPlatformTheme::fileIconPixmap(), showing
|
||||
file icons.
|
||||
|
||||
Windows
|
||||
-------
|
||||
|
||||
- [QTBUG-31476] QFactoryLoader now filters potential plugins by the
|
||||
".dll" suffix.
|
||||
- [QTBUG-56239] 'What's this' button is now shown by default only for
|
||||
QWidget dialogs.
|
||||
- [QTBUG-53833] QProcess::startDetached() changed behavior on Windows:
|
||||
it no longer creates a new console window unconditionally, instead it
|
||||
passes the same creation flags to CreateProcess as QProcess::start().
|
||||
|
||||
- Text handling:
|
||||
* [QTBUG-54740] Fixed embedding fonts in PDF when dpi scaling is active
|
||||
or when the hinting preference was none or vertical hinting.
|
||||
* [QTBUG-47485] Fix selecting non-regular fonts when using the Freetype
|
||||
engine.
|
||||
* [QTBUG-49346] Fixed rendering error when using the MingLiU fonts at
|
||||
certain combinations of pixel size and scale.
|
||||
|
||||
****************************************************************************
|
||||
* Tools *
|
||||
****************************************************************************
|
||||
|
||||
configure & build system
|
||||
------------------------
|
||||
|
||||
- The -no-feature-* option family was integrated with the rest of the
|
||||
configuration system. Numerous existing features were made optional,
|
||||
and build problems in various reduced configurations were fixed.
|
||||
This is an ongoing effort known as "Qt Lite".
|
||||
- Numerous Qt modules outside qtbase now support configure options.
|
||||
In a module-by-module build, these can be passed to qmake itself,
|
||||
after a -- option.
|
||||
- Introduced the qtConfig(<feature>) qmake function to replace the
|
||||
patterns contains(QT_CONFIG, <feature>) and load(qfeatures)+
|
||||
contains(QT_DISABLED_FEATURES, <feature>).
|
||||
Likewise, the C++ macro QT_CONFIG(<feature>) was introduced to
|
||||
replace the pattern !defined(QT_NO_<FEATURE>).
|
||||
The old methods are effectively deprecated and will stop working at
|
||||
some point in the near future.
|
||||
- Use of -sysroot will now trigger a cross-build even if -platform and
|
||||
-xplatform are the same.
|
||||
- The JPEG & GIF handlers and the SQL drivers are now always built as
|
||||
plugins, even in static builds (static "plugins" in this case).
|
||||
- [GCC] Include paths from system libraries are now marked as such,
|
||||
resulting in fewer warnings the user cannot do anything about.
|
||||
- [Windows] config.status.bat is now created, like on Unix.
|
||||
- [QTBUG-46974] Fixed location of config.status in top-level builds.
|
||||
- [QTBUG-38792][Unix] The -redo option is now accepted, like on Windows.
|
||||
- It's now possible to add more arguments when -redo is used. Note that
|
||||
these arguments are not saved in turn. Likewise for config.status.
|
||||
- [QTBUG-32896][iOS/clang] Added missing CFBundleIdentifier to library
|
||||
template.
|
||||
- [QTBUG-47624] Fixed abort when some, but not all, XCB dependencies
|
||||
are met. The feature is now disabled instead, as expected.
|
||||
- [QTBUG-50838] The Raspberry Pi EGL detection now uses pkg-config.
|
||||
- [QTBUG-52112][Android] Plugins now have a SONAME, as required by
|
||||
Android 6+.
|
||||
- [QTBUG-54438] Fixed launching tests, examples, and build tools in
|
||||
some configurations.
|
||||
- [QTBUG-56289][GCC@Windows] Fixed -separate-debug-info.
|
||||
- [QTBUG-57086] Added support for Visual Studio 2017.
|
||||
|
||||
qdbusxml2cpp
|
||||
------------
|
||||
|
||||
- [QTBUG-34126] qdbusxml2cpp now supports the --verbose switch, which
|
||||
provides more details when parsing invalid XML sources.
|
||||
|
||||
qmake
|
||||
-----
|
||||
|
||||
- Added the $$take_first(), $$take_last(), $$num_add(), $$str_size(),
|
||||
$$str_member(), and $$sorted() functions.
|
||||
- The error() function can now be called without arguments to exit
|
||||
silently. Use after write_file() and similar functions which already
|
||||
print an error message.
|
||||
- The $$system() function can return the command's exit code now.
|
||||
- The $$prompt() function can now print the prompt verbatim.
|
||||
- QMAKE_EXTRA_TARGETS will now consistently treat the target as a file
|
||||
name (separator adjustment and quoting).
|
||||
- [QTBUG-16904][VS] Fixed warning about circular dependencies when
|
||||
Q_OBJECT is used in .cpp files.
|
||||
- [QTBUG-36256] packageExists() and PKGCONFIG can now be used
|
||||
regardless of whether Qt itself was built with pkg-config support.
|
||||
- [QTBUG-43468][WinRT] Added option to use verbatim manifest files.
|
||||
- [QTBUG-53905] Fixed OBJECTIVE_SOURCES being moc'd twice.
|
||||
- [QTBUG-55591][VS2015] Added support for the /DEBUG:FASTLINK option.
|
||||
- [QTBUG-56507] Fixed parallel builds when a lex source refers to a
|
||||
file generated from a yacc source.
|
||||
- [QTBUG-56594][MSVC] Fixed PDB files not being installed for static
|
||||
libraries.
|
||||
|
||||
moc
|
||||
---
|
||||
|
||||
- [MSVC] qmake and moc now cooperate to use the Visual Studio environment
|
||||
variables (set by the VCVARSALL.BAT script) to find system include
|
||||
files. A possible consequence is that moc parses application headers
|
||||
slightly differently, depending on #if conditions that depended on
|
||||
macros that previous versions had not seen #define'd. Implementers of
|
||||
other buildsystems are advised to pass the --compiler-flavor=msvc option
|
||||
to moc.
|
@ -3,7 +3,7 @@
|
||||
dita.metadata.default.author = Qt Project
|
||||
dita.metadata.default.permissions = all
|
||||
dita.metadata.default.publisher = Qt Project
|
||||
dita.metadata.default.copyryear = 2016
|
||||
dita.metadata.default.copyryear = 2017
|
||||
dita.metadata.default.copyrholder = The Qt Company Ltd
|
||||
dita.metadata.default.audience = programmer
|
||||
|
||||
|
@ -78,7 +78,7 @@ HTML.footer += \
|
||||
" <ul id=\"menu-footer-submenu\" class=\"right clearfix\"><li id=\"menu-item-1795\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-1795\"><a title=\"Sign into your account.\" href=\"https://account.qt.io/login\">Sign In</a></li>\n" \
|
||||
" <li id=\"menu-item-10375\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-10375\"><a href=\"mailto:feedback@theqtcompany.com?Subject=Feedback%20about%20doc.qt.io%20site\">Feedback</a></li>\n" \
|
||||
" <li id=\"menu-item-1494\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1494\"><a href=\"http://qt.io/contact-us/\">Contact us</a></li>\n" \
|
||||
" <li id=\"menu-item-4472\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-4472\"><a href=\"http://qt.io/about-us/\">© 2016 The Qt Company</a></li>\n" \
|
||||
" <li id=\"menu-item-4472\" class=\"menu-item menu-item-type-custom menu-item-object-custom menu-item-4472\"><a href=\"http://qt.io/about-us/\">© 2017 The Qt Company</a></li>\n" \
|
||||
" </ul>\n" \
|
||||
"</div>\n" \
|
||||
"</div>\n" \
|
||||
|
@ -8,7 +8,7 @@ HTML.footer = \
|
||||
"</div>\n" \
|
||||
"<div class=\"footer\">\n" \
|
||||
" <p>\n" \
|
||||
" <acronym title=\"Copyright\">©</acronym> 2016 The Qt Company Ltd.\n" \
|
||||
" <acronym title=\"Copyright\">©</acronym> 2017 The Qt Company Ltd.\n" \
|
||||
" Documentation contributions included herein are the copyrights of\n" \
|
||||
" their respective owners.<br>" \
|
||||
" The documentation provided herein is licensed under the terms of the" \
|
||||
|
@ -171,6 +171,7 @@ Cpp.ignoretokens += \
|
||||
QT_END_NAMESPACE \
|
||||
QT_FASTCALL \
|
||||
QT_MUTEX_LOCK_NOEXCEPT \
|
||||
QT_SIZEPOLICY_CONSTEXPR \
|
||||
QT_WARNING_DISABLE_DEPRECATED \
|
||||
QT_WARNING_PUSH \
|
||||
QT_WARNING_POP \
|
||||
|
@ -5,7 +5,7 @@
|
||||
HTML.footer = \
|
||||
" </div>\n" \
|
||||
" <p class=\"copy-notice\">\n" \
|
||||
" <acronym title=\"Copyright\">©</acronym> 2016 The Qt Company Ltd.\n" \
|
||||
" <acronym title=\"Copyright\">©</acronym> 2017 The Qt Company Ltd.\n" \
|
||||
" Documentation contributions included herein are the copyrights of\n" \
|
||||
" their respective owners. " \
|
||||
" The documentation provided herein is licensed under the terms of the" \
|
||||
|
@ -1,6 +1,6 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
# no QSharedMemory
|
||||
!vxworks:!integrity: SUBDIRS = sharedmemory
|
||||
|
||||
qtConfig(sharedmemory): SUBDIRS = sharedmemory
|
||||
qtHaveModule(network): SUBDIRS += localfortuneserver localfortuneclient
|
||||
|
@ -122,8 +122,7 @@ Client::Client(QWidget *parent)
|
||||
//! [2] //! [3]
|
||||
connect(tcpSocket, &QIODevice::readyRead, this, &Client::readFortune);
|
||||
//! [2] //! [4]
|
||||
typedef void (QAbstractSocket::*QAbstractSocketErrorSignal)(QAbstractSocket::SocketError);
|
||||
connect(tcpSocket, static_cast<QAbstractSocketErrorSignal>(&QAbstractSocket::error),
|
||||
connect(tcpSocket, QOverload<QAbstractSocket::SocketError>::of(&QAbstractSocket::error),
|
||||
//! [3]
|
||||
this, &Client::displayError);
|
||||
//! [4]
|
||||
|
@ -95,9 +95,7 @@ PaintedWindow::PaintedWindow()
|
||||
|
||||
connect(screen(), &QScreen::orientationChanged, this, &PaintedWindow::orientationChanged);
|
||||
connect(m_animation, &QAbstractAnimation::finished, this, &PaintedWindow::rotationDone);
|
||||
typedef void (PaintedWindow::*PaintedWindowVoidSlot)();
|
||||
connect(this, &PaintedWindow::rotationChanged,
|
||||
this, static_cast<PaintedWindowVoidSlot>(&PaintedWindow::paint));
|
||||
connect(this, &PaintedWindow::rotationChanged, this, QOverload<>::of(&PaintedWindow::paint));
|
||||
}
|
||||
|
||||
void PaintedWindow::exposeEvent(QExposeEvent *)
|
||||
|
@ -61,8 +61,6 @@
|
||||
|
||||
#include "glwidget.h"
|
||||
|
||||
typedef void (QWidget::*QWidgetVoidSlot)();
|
||||
|
||||
MainWindow::MainWindow()
|
||||
: m_nextX(1), m_nextY(1)
|
||||
{
|
||||
@ -131,14 +129,11 @@ MainWindow::MainWindow()
|
||||
QMenu *helpMenu = menuBar()->addMenu("&Help");
|
||||
helpMenu->addAction("About Qt", qApp, &QApplication::aboutQt);
|
||||
|
||||
connect(m_timer, &QTimer::timeout,
|
||||
glwidget, static_cast<QWidgetVoidSlot>(&QWidget::update));
|
||||
connect(m_timer, &QTimer::timeout, glwidget, QOverload<>::of(&QWidget::update));
|
||||
|
||||
connect(slider, &QAbstractSlider::valueChanged, glwidget, &GLWidget::setScaling);
|
||||
connect(transparent, &QCheckBox::toggled, glwidget, &GLWidget::setTransparent);
|
||||
|
||||
typedef void (QSpinBox::*QSpinBoxIntSignal)(int);
|
||||
connect(updateInterval, static_cast<QSpinBoxIntSignal>(&QSpinBox::valueChanged),
|
||||
connect(updateInterval, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &MainWindow::updateIntervalChanged);
|
||||
connect(timerBased, &QCheckBox::toggled, this, &MainWindow::timerUsageChanged);
|
||||
connect(timerBased, &QCheckBox::toggled, updateInterval, &QWidget::setEnabled);
|
||||
@ -162,7 +157,7 @@ void MainWindow::addNew()
|
||||
return;
|
||||
GLWidget *w = new GLWidget(this, false, qRgb(qrand() % 256, qrand() % 256, qrand() % 256));
|
||||
m_glWidgets << w;
|
||||
connect(m_timer, &QTimer::timeout, w, static_cast<QWidgetVoidSlot>(&QWidget::update));
|
||||
connect(m_timer, &QTimer::timeout, w, QOverload<>::of(&QWidget::update));
|
||||
m_layout->addWidget(w, m_nextY, m_nextX, 1, 1);
|
||||
if (m_nextX == 3) {
|
||||
m_nextX = 1;
|
||||
|
@ -173,8 +173,6 @@ void OpenGLWindow::keyPressEvent(QKeyEvent *e)
|
||||
|
||||
void OpenGLWindow::setAnimating(bool enabled)
|
||||
{
|
||||
typedef void (QPaintDeviceWindow::*QPaintDeviceWindowVoidSlot)();
|
||||
|
||||
if (enabled) {
|
||||
// Animate continuously, throttled by the blocking swapBuffers() call the
|
||||
// QOpenGLWindow internally executes after each paint. Once that is done
|
||||
@ -182,11 +180,11 @@ void OpenGLWindow::setAnimating(bool enabled)
|
||||
// obviously assumes that the swap interval (see
|
||||
// QSurfaceFormat::setSwapInterval()) is non-zero.
|
||||
connect(this, &QOpenGLWindow::frameSwapped,
|
||||
this, static_cast<QPaintDeviceWindowVoidSlot>(&QPaintDeviceWindow::update));
|
||||
this, QOverload<>::of(&QPaintDeviceWindow::update));
|
||||
update();
|
||||
} else {
|
||||
disconnect(this, &QOpenGLWindow::frameSwapped,
|
||||
this, static_cast<QPaintDeviceWindowVoidSlot>(&QPaintDeviceWindow::update));
|
||||
this, QOverload<>::of(&QPaintDeviceWindow::update));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,5 +5,3 @@ HEADERS += imagescaling.h
|
||||
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/qtconcurrent/imagescaling
|
||||
INSTALLS += target
|
||||
|
||||
wince: DEPLOYMENT_PLUGIN += qgif qjpeg
|
||||
|
@ -15,8 +15,3 @@ build_all:!build_pass {
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/sql/sqlbrowser
|
||||
INSTALLS += target
|
||||
|
||||
|
||||
wince {
|
||||
DEPLOYMENT_PLUGIN += qsqlite
|
||||
}
|
||||
|
@ -7,6 +7,4 @@ QT += sql widgets
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/sql/sqlwidgetmapper
|
||||
INSTALLS += target
|
||||
|
||||
wince: DEPLOYMENT_PLUGIN += qsqlite
|
||||
|
||||
|
||||
|
@ -70,8 +70,7 @@ Screenshot::Screenshot()
|
||||
delaySpinBox->setSuffix(tr(" s"));
|
||||
delaySpinBox->setMaximum(60);
|
||||
|
||||
typedef void (QSpinBox::*QSpinBoxIntSignal)(int);
|
||||
connect(delaySpinBox, static_cast<QSpinBoxIntSignal>(&QSpinBox::valueChanged),
|
||||
connect(delaySpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &Screenshot::updateCheckBox);
|
||||
|
||||
hideThisWindowCheckBox = new QCheckBox(tr("Hide This Window"), optionsGroupBox);
|
||||
|
@ -80,8 +80,7 @@ Window::Window()
|
||||
|
||||
connect(showMessageButton, &QAbstractButton::clicked, this, &Window::showMessage);
|
||||
connect(showIconCheckBox, &QAbstractButton::toggled, trayIcon, &QSystemTrayIcon::setVisible);
|
||||
typedef void (QComboBox::*QComboIntSignal)(int);
|
||||
connect(iconComboBox, static_cast<QComboIntSignal>(&QComboBox::currentIndexChanged),
|
||||
connect(iconComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &Window::setIcon);
|
||||
connect(trayIcon, &QSystemTrayIcon::messageClicked, this, &Window::messageClicked);
|
||||
connect(trayIcon, &QSystemTrayIcon::activated, this, &Window::iconActivated);
|
||||
|
@ -363,9 +363,10 @@ void CodeStylePage::initializePage()
|
||||
baseIncludeLabel->setEnabled(!baseClass.isEmpty());
|
||||
baseIncludeLineEdit->setEnabled(!baseClass.isEmpty());
|
||||
|
||||
QRegularExpression rx("Q[A-Z].*");
|
||||
if (baseClass.isEmpty()) {
|
||||
baseIncludeLineEdit->clear();
|
||||
} else if (QRegExp("Q[A-Z].*").exactMatch(baseClass)) {
|
||||
} else if (rx.match(baseClass).hasMatch()) {
|
||||
baseIncludeLineEdit->setText('<' + baseClass + '>');
|
||||
} else {
|
||||
baseIncludeLineEdit->setText('"' + baseClass.toLower() + ".h\"");
|
||||
|
@ -54,6 +54,8 @@
|
||||
|
||||
#include "licensewizard.h"
|
||||
|
||||
QString emailRegExp = QStringLiteral(".+@.+");
|
||||
|
||||
//! [0] //! [1] //! [2]
|
||||
LicenseWizard::LicenseWizard(QWidget *parent)
|
||||
: QWizard(parent)
|
||||
@ -189,7 +191,7 @@ EvaluatePage::EvaluatePage(QWidget *parent)
|
||||
|
||||
emailLabel = new QLabel(tr("&Email address:"));
|
||||
emailLineEdit = new QLineEdit;
|
||||
emailLineEdit->setValidator(new QRegExpValidator(QRegExp(".*@.*"), this));
|
||||
emailLineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(emailRegExp), this));
|
||||
emailLabel->setBuddy(emailLineEdit);
|
||||
|
||||
//! [21]
|
||||
@ -264,7 +266,7 @@ DetailsPage::DetailsPage(QWidget *parent)
|
||||
|
||||
emailLabel = new QLabel(tr("&Email address:"));
|
||||
emailLineEdit = new QLineEdit;
|
||||
emailLineEdit->setValidator(new QRegExpValidator(QRegExp(".*@.*"), this));
|
||||
emailLineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression(emailRegExp), this));
|
||||
emailLabel->setBuddy(emailLineEdit);
|
||||
|
||||
postalLabel = new QLabel(tr("&Postal address:"));
|
||||
|
@ -741,8 +741,8 @@
|
||||
whitespace and one or several digits again.
|
||||
|
||||
The first digits of the regular expression are captured using
|
||||
parentheses. This enables us to use the QRegExp::cap() or
|
||||
QRegExp::capturedTexts() functions to extract the matched
|
||||
parentheses. This enables us to use the QRegularExpressionMatch::captured()
|
||||
or QRegularExpressionMatch::capturedTexts() functions to extract the matched
|
||||
characters. If the first and second numbers of the spin box value
|
||||
differ (e.g., "16 x 24"), we use the first number.
|
||||
|
||||
|
@ -89,11 +89,9 @@ Window::Window()
|
||||
|
||||
connect(filterPatternLineEdit, &QLineEdit::textChanged,
|
||||
this, &Window::filterRegExpChanged);
|
||||
|
||||
typedef void (QComboBox::*QComboIntSignal)(int);
|
||||
connect(filterSyntaxComboBox, static_cast<QComboIntSignal>(&QComboBox::currentIndexChanged),
|
||||
connect(filterSyntaxComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &Window::filterRegExpChanged);
|
||||
connect(filterColumnComboBox, static_cast<QComboIntSignal>(&QComboBox::currentIndexChanged),
|
||||
connect(filterColumnComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &Window::filterColumnChanged);
|
||||
connect(filterCaseSensitivityCheckBox, &QAbstractButton::toggled,
|
||||
this, &Window::filterRegExpChanged);
|
||||
|
@ -113,10 +113,9 @@ MainWindow::MainWindow()
|
||||
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
|
||||
connect(aboutAction, &QAction::triggered, this, &MainWindow::showAboutBox);
|
||||
//! [4]
|
||||
typedef void (QSpinBox::*QSpinBoxIntSignal)(int);
|
||||
connect(pixelSizeSpinBox, static_cast<QSpinBoxIntSignal>(&QSpinBox::valueChanged),
|
||||
connect(pixelSizeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
delegate, &PixelDelegate::setPixelSize);
|
||||
connect(pixelSizeSpinBox, static_cast<QSpinBoxIntSignal>(&QSpinBox::valueChanged),
|
||||
connect(pixelSizeSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &MainWindow::updateView);
|
||||
//! [4]
|
||||
|
||||
|
@ -282,23 +282,10 @@ void MainWindow::loadLayout()
|
||||
}
|
||||
}
|
||||
|
||||
class DockWidgetAreaCornerFunctor {
|
||||
public:
|
||||
explicit DockWidgetAreaCornerFunctor(QMainWindow *mw, Qt::Corner c, Qt::DockWidgetArea a)
|
||||
: m_mainWindow(mw), m_area(a), m_corner(c) {}
|
||||
|
||||
void operator()() const { m_mainWindow->setCorner(m_corner, m_area); }
|
||||
|
||||
private:
|
||||
QMainWindow *m_mainWindow;
|
||||
Qt::DockWidgetArea m_area;
|
||||
Qt::Corner m_corner;
|
||||
};
|
||||
|
||||
static QAction *addCornerAction(const QString &text, QMainWindow *mw, QMenu *menu, QActionGroup *group,
|
||||
Qt::Corner c, Qt::DockWidgetArea a)
|
||||
{
|
||||
QAction *result = menu->addAction(text, mw, DockWidgetAreaCornerFunctor(mw, c, a));
|
||||
QAction *result = menu->addAction(text, mw, [=]() { mw->setCorner(c, a); });
|
||||
result->setCheckable(true);
|
||||
group->addAction(result);
|
||||
return result;
|
||||
|
@ -264,16 +264,6 @@ void MainWindow::updateMenus()
|
||||
#endif
|
||||
}
|
||||
|
||||
class ActiveMdiSubWindowFunctor {
|
||||
public:
|
||||
explicit ActiveMdiSubWindowFunctor(QMdiArea *mdiArea, QMdiSubWindow *activeWindow) : m_mdiArea(mdiArea), m_activeWindow(activeWindow) {}
|
||||
void operator()() const { m_mdiArea->setActiveSubWindow(m_activeWindow); }
|
||||
|
||||
private:
|
||||
QMdiArea *m_mdiArea;
|
||||
QMdiSubWindow *m_activeWindow;
|
||||
};
|
||||
|
||||
void MainWindow::updateWindowMenu()
|
||||
{
|
||||
windowMenu->clear();
|
||||
@ -302,7 +292,9 @@ void MainWindow::updateWindowMenu()
|
||||
text = tr("%1 %2").arg(i + 1)
|
||||
.arg(child->userFriendlyCurrentFile());
|
||||
}
|
||||
QAction *action = windowMenu->addAction(text, mdiSubWindow, ActiveMdiSubWindowFunctor(mdiArea, mdiSubWindow));
|
||||
QAction *action = windowMenu->addAction(text, mdiSubWindow, [this, mdiSubWindow]() {
|
||||
mdiArea->setActiveSubWindow(mdiSubWindow);
|
||||
});
|
||||
action->setCheckable(true);
|
||||
action ->setChecked(child == activeMdiChild());
|
||||
}
|
||||
|
@ -342,13 +342,11 @@ void TextEdit::setupTextActions()
|
||||
comboStyle->addItem("Ordered List (Roman lower)");
|
||||
comboStyle->addItem("Ordered List (Roman upper)");
|
||||
|
||||
typedef void (QComboBox::*QComboIntSignal)(int);
|
||||
connect(comboStyle, static_cast<QComboIntSignal>(&QComboBox::activated), this, &TextEdit::textStyle);
|
||||
connect(comboStyle, QOverload<int>::of(&QComboBox::activated), this, &TextEdit::textStyle);
|
||||
|
||||
typedef void (QComboBox::*QComboStringSignal)(const QString &);
|
||||
comboFont = new QFontComboBox(tb);
|
||||
tb->addWidget(comboFont);
|
||||
connect(comboFont, static_cast<QComboStringSignal>(&QComboBox::activated), this, &TextEdit::textFamily);
|
||||
connect(comboFont, QOverload<const QString &>::of(&QComboBox::activated), this, &TextEdit::textFamily);
|
||||
|
||||
comboSize = new QComboBox(tb);
|
||||
comboSize->setObjectName("comboSize");
|
||||
@ -360,7 +358,7 @@ void TextEdit::setupTextActions()
|
||||
comboSize->addItem(QString::number(size));
|
||||
comboSize->setCurrentIndex(standardSizes.indexOf(QApplication::font().pointSize()));
|
||||
|
||||
connect(comboSize, static_cast<QComboStringSignal>(&QComboBox::activated), this, &TextEdit::textSize);
|
||||
connect(comboSize, QOverload<const QString &>::of(&QComboBox::activated), this, &TextEdit::textSize);
|
||||
}
|
||||
|
||||
bool TextEdit::load(const QString &f)
|
||||
|
@ -159,8 +159,7 @@ PreviewForm::PreviewForm(QWidget *parent)
|
||||
new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
okButton = buttonBox->button(QDialogButtonBox::Ok);
|
||||
|
||||
typedef void(QComboBox::*ComboBoxIntSignal)(int);
|
||||
connect(encodingComboBox, static_cast<ComboBoxIntSignal>(&QComboBox::activated),
|
||||
connect(encodingComboBox, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &PreviewForm::updateTextEdit);
|
||||
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
|
@ -94,10 +94,10 @@ RegularExpressionDialog::RegularExpressionDialog(QWidget *parent)
|
||||
connect(optimizeOnFirstUsageOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh);
|
||||
connect(dontAutomaticallyOptimizeOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh);
|
||||
|
||||
connect(offsetSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
|
||||
connect(offsetSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &RegularExpressionDialog::refresh);
|
||||
|
||||
connect(matchTypeComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
|
||||
connect(matchTypeComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &RegularExpressionDialog::refresh);
|
||||
|
||||
connect(anchoredMatchOptionCheckBox, &QCheckBox::toggled, this, &RegularExpressionDialog::refresh);
|
||||
|
@ -106,10 +106,9 @@ LocationDialog::LocationDialog(QWidget *parent)
|
||||
|
||||
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||
|
||||
typedef void (QComboBox::*QComboIntSignal)(int);
|
||||
connect(formatComboBox, static_cast<QComboIntSignal>(&QComboBox::activated),
|
||||
connect(formatComboBox, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &LocationDialog::updateLocationsTable);
|
||||
connect(scopeComboBox, static_cast<QComboIntSignal>(&QComboBox::activated),
|
||||
connect(scopeComboBox, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &LocationDialog::updateLocationsTable);
|
||||
connect(organizationComboBox->lineEdit(),
|
||||
&QLineEdit::editingFinished,
|
||||
@ -117,7 +116,7 @@ LocationDialog::LocationDialog(QWidget *parent)
|
||||
connect(applicationComboBox->lineEdit(),
|
||||
&QLineEdit::editingFinished,
|
||||
this, &LocationDialog::updateLocationsTable);
|
||||
connect(applicationComboBox, static_cast<QComboIntSignal>(&QComboBox::activated),
|
||||
connect(applicationComboBox, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &LocationDialog::updateLocationsTable);
|
||||
connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
|
@ -402,7 +402,7 @@ void AddressBook::exportAsVCard()
|
||||
int index = name.indexOf(" ");
|
||||
|
||||
if (index != -1) {
|
||||
nameList = name.split(QRegExp("\\s+"), QString::SkipEmptyParts);
|
||||
nameList = name.split(QRegularExpression("\\s+"), QString::SkipEmptyParts);
|
||||
firstName = nameList.first();
|
||||
lastName = nameList.last();
|
||||
} else {
|
||||
|
@ -74,8 +74,7 @@ MainWindow::MainWindow()
|
||||
filterCombo->addItem(tr("Monospaced"), QVariant::fromValue(QFontComboBox::MonospacedFonts));
|
||||
filterCombo->addItem(tr("Proportional"), QVariant::fromValue(QFontComboBox::ProportionalFonts));
|
||||
filterCombo->setCurrentIndex(0);
|
||||
typedef void (QComboBox::*QComboBoxIntSignal)(int);
|
||||
connect(filterCombo, static_cast<QComboBoxIntSignal>(&QComboBox::currentIndexChanged),
|
||||
connect(filterCombo, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &MainWindow::filterChanged);
|
||||
|
||||
QLabel *fontLabel = new QLabel(tr("Font:"));
|
||||
@ -114,10 +113,9 @@ MainWindow::MainWindow()
|
||||
this, &MainWindow::findSizes);
|
||||
connect(fontCombo, &QFontComboBox::currentFontChanged,
|
||||
characterWidget, &CharacterWidget::updateFont);
|
||||
typedef void (QComboBox::*QComboBoxStringSignal)(const QString &);
|
||||
connect(sizeCombo, static_cast<QComboBoxStringSignal>(&QComboBox::currentIndexChanged),
|
||||
connect(sizeCombo, QOverload<const QString &>::of(&QComboBox::currentIndexChanged),
|
||||
characterWidget, &CharacterWidget::updateSize);
|
||||
connect(styleCombo, static_cast<QComboBoxStringSignal>(&QComboBox::currentIndexChanged),
|
||||
connect(styleCombo, QOverload<const QString &>::of(&QComboBox::currentIndexChanged),
|
||||
characterWidget, &CharacterWidget::updateStyle);
|
||||
//! [4] //! [5]
|
||||
connect(characterWidget, &CharacterWidget::characterSelected,
|
||||
|
@ -71,8 +71,7 @@ QWidget *ImageDelegate::createEditor(QWidget *parent,
|
||||
else if (index.column() == 2)
|
||||
comboBox->addItems(IconPreviewArea::iconStateNames());
|
||||
|
||||
typedef void (QComboBox::*QComboBoxIntSignal)(int);
|
||||
connect(comboBox, static_cast<QComboBoxIntSignal>(&QComboBox::activated),
|
||||
connect(comboBox, QOverload<int>::of(&QComboBox::activated),
|
||||
this, &ImageDelegate::emitCommitData);
|
||||
|
||||
return comboBox;
|
||||
|
@ -362,8 +362,7 @@ QWidget *MainWindow::createIconSizeGroupBox()
|
||||
sizeButtonGroup = new QButtonGroup(this);
|
||||
sizeButtonGroup->setExclusive(true);
|
||||
|
||||
typedef void (QButtonGroup::*QButtonGroupIntBoolSignal)(int, bool);
|
||||
connect(sizeButtonGroup, static_cast<QButtonGroupIntBoolSignal>(&QButtonGroup::buttonToggled),
|
||||
connect(sizeButtonGroup, QOverload<int, bool>::of(&QButtonGroup::buttonToggled),
|
||||
this, &MainWindow::changeSize);
|
||||
|
||||
QRadioButton *smallRadioButton = new QRadioButton;
|
||||
@ -391,8 +390,7 @@ QWidget *MainWindow::createIconSizeGroupBox()
|
||||
//! [26]
|
||||
|
||||
//! [27]
|
||||
typedef void (QSpinBox::*QSpinBoxIntSignal)(int);
|
||||
connect(otherSpinBox, static_cast<QSpinBoxIntSignal>(&QSpinBox::valueChanged),
|
||||
connect(otherSpinBox, QOverload<int>::of(&QSpinBox::valueChanged),
|
||||
this, &MainWindow::triggerChangeSize);
|
||||
|
||||
QHBoxLayout *otherSizeLayout = new QHBoxLayout;
|
||||
|
@ -33,6 +33,7 @@
|
||||
|
||||
QMAKE_CFLAGS_OPTIMIZE = -O2
|
||||
QMAKE_CFLAGS_OPTIMIZE_FULL = -O3
|
||||
QMAKE_CFLAGS_OPTIMIZE_DEBUG = -Og
|
||||
|
||||
QMAKE_CFLAGS += -pipe
|
||||
QMAKE_CFLAGS_DEPS += -M
|
||||
|
@ -8,7 +8,7 @@ QMAKE_COMPILER = ghs
|
||||
|
||||
QMAKE_CFLAGS += --signed_fields --no_commons --diag_suppress=1,82,228,236,381,611,961,997,1795,1974
|
||||
QMAKE_CFLAGS_DEPS += -MD
|
||||
QMAKE_CFLAGS_RELEASE += -Ospeed -Olink -Omax -uvfd
|
||||
QMAKE_CFLAGS_RELEASE += -Ospeed -Olink -Omax
|
||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE -g
|
||||
QMAKE_CFLAGS_DEBUG += -g -Omaxdebug
|
||||
QMAKE_CFLAGS_SHLIB +=
|
||||
@ -34,7 +34,7 @@ QMAKE_CXXFLAGS_EXCEPTIONS_ON += --exceptions
|
||||
|
||||
QMAKE_LFLAGS += --signed_fields --no_commons --no_implicit_include --link_once_templates -non_shared --new_outside_of_constructor
|
||||
QMAKE_LFLAGS_DEBUG += -g -Omaxdebug
|
||||
QMAKE_LFLAGS_RELEASE += -Ospeed -Olink -Omax -uvfd
|
||||
QMAKE_LFLAGS_RELEASE += -Ospeed -Olink -Omax
|
||||
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_LFLAGS_RELEASE -g
|
||||
QMAKE_LFLAGS_CXX11 += --c++11 --thread_local_storage
|
||||
QMAKE_LFLAGS_EXCEPTIONS_ON += --exceptions
|
||||
|
@ -1,12 +1,11 @@
|
||||
#
|
||||
# qmake configuration for Microsoft Visual Studio C/C++ Compiler
|
||||
# This mkspec is used for all win32-msvcXXXX specs
|
||||
# This mkspec is used by the win32-msvc and win32-clang-msvc specs
|
||||
#
|
||||
|
||||
isEmpty(MSC_VER)|isEmpty(MSVC_VER): error("Source mkspec must set both MSC_VER and MSVC_VER.")
|
||||
|
||||
#
|
||||
# Baseline: Visual Studio 2005 (8.0), VC++ 14.0
|
||||
# Version-specific settings go in msvc-version.conf (loaded by default_pre)
|
||||
#
|
||||
|
||||
MAKEFILE_GENERATOR = MSVC.NET
|
||||
@ -14,7 +13,7 @@ QMAKE_PLATFORM = win32
|
||||
QMAKE_COMPILER = msvc
|
||||
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
||||
DEFINES += UNICODE WIN32
|
||||
QMAKE_COMPILER_DEFINES += _MSC_VER=$$MSC_VER _WIN32
|
||||
QMAKE_COMPILER_DEFINES += _WIN32
|
||||
contains(QMAKE_TARGET.arch, x86_64) {
|
||||
DEFINES += WIN64
|
||||
QMAKE_COMPILER_DEFINES += _WIN64
|
||||
@ -104,7 +103,4 @@ VCPROJ_EXTENSION = .vcproj
|
||||
VCSOLUTION_EXTENSION = .sln
|
||||
VCPROJ_KEYWORD = Qt4VSv1.0
|
||||
|
||||
include(msvc-base.conf)
|
||||
include(windows-gles.conf)
|
||||
|
||||
unset(MSC_VER)
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# qmake configuration for Microsoft Visual Studio C/C++ Compiler
|
||||
# This mkspec is used for all win32-msvcXXXX and
|
||||
# This file is used by win32-msvc, win32-clang-msvc, and all
|
||||
# winrt-XXX-msvcXXX specs
|
||||
#
|
||||
|
||||
@ -8,14 +8,23 @@
|
||||
# Version-specific changes
|
||||
#
|
||||
|
||||
greaterThan(MSC_VER, 1499) {
|
||||
isEmpty(QMAKE_MSC_VER): error("msvc-version.conf loaded but QMAKE_MSC_VER isn't set")
|
||||
|
||||
MSVC_VER = 8.0
|
||||
COMPAT_MKSPEC = win32-msvc2005
|
||||
|
||||
greaterThan(QMAKE_MSC_VER, 1499) {
|
||||
# Visual Studio 2008 (9.0) / Visual C++ 15.0 and up
|
||||
MSVC_VER = 9.0
|
||||
COMPAT_MKSPEC = win32-msvc2008
|
||||
QMAKE_CFLAGS_MP = -MP
|
||||
QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP
|
||||
}
|
||||
|
||||
greaterThan(MSC_VER, 1599) {
|
||||
greaterThan(QMAKE_MSC_VER, 1599) {
|
||||
# Visual Studio 2010 (10.0) / Visual C++ 16.0 and up
|
||||
MSVC_VER = 10.0
|
||||
COMPAT_MKSPEC = win32-msvc2010
|
||||
MAKEFILE_GENERATOR = MSBUILD
|
||||
|
||||
QMAKE_CFLAGS_AVX = -arch:AVX
|
||||
@ -24,19 +33,23 @@ greaterThan(MSC_VER, 1599) {
|
||||
VCPROJ_EXTENSION = .vcxproj
|
||||
}
|
||||
|
||||
greaterThan(MSC_VER, 1699) {
|
||||
greaterThan(QMAKE_MSC_VER, 1699) {
|
||||
# Visual Studio 2012 (11.0) / Visual C++ 17.0 and up
|
||||
MSVC_VER = 11.0
|
||||
COMPAT_MKSPEC = win32-msvc2012
|
||||
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -D_HAS_EXCEPTIONS=0
|
||||
QT_CONFIG += c++11
|
||||
CONFIG += c++11
|
||||
}
|
||||
|
||||
greaterThan(MSC_VER, 1799) {
|
||||
greaterThan(QMAKE_MSC_VER, 1799) {
|
||||
# Visual Studio 2013 (12.0) / Visual C++ 18.0 and up
|
||||
MSVC_VER = 12.0
|
||||
COMPAT_MKSPEC = win32-msvc2013
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
|
||||
equals(MSC_VER, 1800) {
|
||||
equals(QMAKE_MSC_VER, 1800) {
|
||||
QMAKE_CFLAGS_RELEASE += -Zc:strictStrings
|
||||
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings
|
||||
QMAKE_CXXFLAGS_RELEASE += -Zc:strictStrings
|
||||
@ -44,11 +57,26 @@ greaterThan(MSC_VER, 1799) {
|
||||
}
|
||||
}
|
||||
|
||||
greaterThan(MSC_VER, 1899) {
|
||||
greaterThan(QMAKE_MSC_VER, 1899) {
|
||||
# Visual Studio 2015 (14.0) / Visual C++ 19.0 and up
|
||||
MSVC_VER = 14.0
|
||||
COMPAT_MKSPEC = win32-msvc2015
|
||||
QMAKE_CFLAGS += -Zc:strictStrings
|
||||
QMAKE_CFLAGS_WARN_ON += -w44456 -w44457 -w44458
|
||||
QMAKE_CFLAGS_AVX2 = -arch:AVX2
|
||||
QMAKE_CXXFLAGS += -Zc:strictStrings -Zc:throwingNew
|
||||
QMAKE_CXXFLAGS_WARN_ON += -w44456 -w44457 -w44458 -wd4577 -wd4467
|
||||
}
|
||||
|
||||
greaterThan(QMAKE_MSC_VER, 1909) {
|
||||
# Visual Studio 2017 (15.0) / Visual C++ 19.10 and up
|
||||
MSVC_VER = 15.0
|
||||
COMPAT_MKSPEC = win32-msvc2017
|
||||
}
|
||||
|
||||
greaterThan(QMAKE_MSC_VER, 1910) {
|
||||
# No compat spec past MSVC 2017
|
||||
COMPAT_MKSPEC =
|
||||
}
|
||||
|
||||
!isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC
|
@ -9,6 +9,7 @@ QMAKE_COMPILER = msvc
|
||||
QMAKE_PLATFORM = winrt win32
|
||||
CONFIG = package_manifest $$CONFIG incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target rtti
|
||||
DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN
|
||||
QMAKE_COMPILER_DEFINES += _WIN32
|
||||
|
||||
DEPLOYMENT_PLUGIN += qwinrt
|
||||
|
||||
@ -93,9 +94,6 @@ WINRT_ASSETS_PATH = $$PWD/assets
|
||||
WINRT_MANIFEST.capabilities = defaults
|
||||
WINRT_MANIFEST.capabilities_device = defaults
|
||||
|
||||
include(../msvc-base.conf)
|
||||
include(../windows-gles.conf)
|
||||
|
||||
unset(MSC_VER)
|
||||
|
||||
load(qt_config)
|
||||
|
@ -16,8 +16,6 @@
|
||||
|
||||
include(../common/linux_device_pre.conf)
|
||||
|
||||
isEmpty(VIBRANTE_SDK_TOPDIR):error("You must pass -device-option VIBRANTE_SDK_TOPDIR=/path/to/sdk")
|
||||
|
||||
QMAKE_INCDIR += \
|
||||
$${VIBRANTE_SDK_TOPDIR}/include \
|
||||
$$[QT_SYSROOT]/usr/include
|
||||
@ -43,4 +41,12 @@ COMPILER_FLAGS += -mtune=cortex-a57.cortex-a53 -march=armv8-a
|
||||
EGLFS_DEVICE_INTEGRATION = eglfs_kms_egldevice
|
||||
|
||||
include(../common/linux_arm_device_post.conf)
|
||||
|
||||
# override the default from linux_arm_device_post.conf
|
||||
defineTest(qtConfSanitizeMkspec) {
|
||||
isEmpty(VIBRANTE_SDK_TOPDIR): \
|
||||
error("You must pass -device-option VIBRANTE_SDK_TOPDIR=/path/to/sdk")
|
||||
deviceSanityCheckCompiler()
|
||||
}
|
||||
|
||||
load(qt_config)
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
include(../common/linux_device_pre.conf)
|
||||
|
||||
isEmpty(VIBRANTE_SDK_TOPDIR):error("You must pass -device-option VIBRANTE_SDK_TOPDIR=/path/to/sdk")
|
||||
|
||||
QMAKE_INCDIR += \
|
||||
$${VIBRANTE_SDK_TOPDIR}/include \
|
||||
$$[QT_SYSROOT]/usr/include
|
||||
@ -38,4 +36,12 @@ COMPILER_FLAGS += -mtune=cortex-a15 -march=armv7-a -mfpu=neon-vfpv
|
||||
EGLFS_DEVICE_INTEGRATION = eglfs_kms_egldevice
|
||||
|
||||
include(../common/linux_arm_device_post.conf)
|
||||
|
||||
# override the default from linux_arm_device_post.conf
|
||||
defineTest(qtConfSanitizeMkspec) {
|
||||
isEmpty(VIBRANTE_SDK_TOPDIR): \
|
||||
error("You must pass -device-option VIBRANTE_SDK_TOPDIR=/path/to/sdk")
|
||||
deviceSanityCheckCompiler()
|
||||
}
|
||||
|
||||
load(qt_config)
|
||||
|
@ -19,6 +19,7 @@ QMAKE_MAKE = $$(MAKE)
|
||||
} else {
|
||||
error("Configure tests are not supported with the $$MAKEFILE_GENERATOR Makefile generator.")
|
||||
}
|
||||
QMAKE_MAKE_NAME = $$basename(QMAKE_MAKE)
|
||||
# Make sure we don't inherit MAKEFLAGS - -i in particular is fatal.
|
||||
QMAKE_MAKE = "$${SETENV_PFX}MAKEFLAGS=$$SETENV_SFX $$QMAKE_MAKE"
|
||||
|
||||
|
@ -14,12 +14,5 @@
|
||||
|
||||
"redo": { "type": "redo" }
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
"features": {
|
||||
"builtins": {
|
||||
"output": [ "builtins" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
28
mkspecs/features/data/macros.cpp
Normal file
28
mkspecs/features/data/macros.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
// Keep this file small. The pre-processed contents are eval'd by qmake.
|
||||
#ifdef _MSC_VER
|
||||
QMAKE_MSC_VER = _MSC_VER
|
||||
QMAKE_MSC_FULL_VER = _MSC_FULL_VER
|
||||
#endif
|
||||
#ifdef __INTEL_COMPILER
|
||||
QMAKE_ICC_VER = __INTEL_COMPILER
|
||||
QMAKE_ICC_UPDATE_VER = __INTEL_COMPILER_UPDATE
|
||||
#endif
|
||||
#ifdef __APPLE_CC__
|
||||
QMAKE_APPLE_CC = __APPLE_CC__
|
||||
#endif
|
||||
#ifdef __clang__
|
||||
#ifdef __APPLE_CC__
|
||||
QT_APPLE_CLANG_MAJOR_VERSION = __clang_major__
|
||||
QT_APPLE_CLANG_MINOR_VERSION = __clang_minor__
|
||||
QT_APPLE_CLANG_PATCH_VERSION = __clang_patchlevel__
|
||||
#else
|
||||
QT_CLANG_MAJOR_VERSION = __clang_major__
|
||||
QT_CLANG_MINOR_VERSION = __clang_minor__
|
||||
QT_CLANG_PATCH_VERSION = __clang_patchlevel__
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
QT_GCC_MAJOR_VERSION = __GNUC__
|
||||
QT_GCC_MINOR_VERSION = __GNUC_MINOR__
|
||||
QT_GCC_PATCH_VERSION = __GNUC_PATCHLEVEL__
|
||||
#endif
|
@ -47,6 +47,11 @@ optimize_full {
|
||||
}
|
||||
}
|
||||
|
||||
optimize_debug {
|
||||
QMAKE_CFLAGS_DEBUG += $$QMAKE_CFLAGS_OPTIMIZE_DEBUG
|
||||
QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_OPTIMIZE_DEBUG
|
||||
}
|
||||
|
||||
debug {
|
||||
QMAKE_CFLAGS += $$QMAKE_CFLAGS_DEBUG
|
||||
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG
|
||||
@ -60,7 +65,7 @@ debug {
|
||||
}
|
||||
|
||||
# disable special linker flags for host builds (no proper test for host support yet)
|
||||
!host_build {
|
||||
!host_build|!cross_compile {
|
||||
use_gold_linker: QMAKE_LFLAGS += $$QMAKE_LFLAGS_USE_GOLD
|
||||
enable_new_dtags: QMAKE_LFLAGS += $$QMAKE_LFLAGS_NEW_DTAGS
|
||||
}
|
||||
|
@ -1,9 +1,5 @@
|
||||
load(default_post)
|
||||
|
||||
# Ensure that we process sdk.prf first, as it will update QMAKE_CXX
|
||||
# and friends that other features/extra compilers may depend on.
|
||||
sdk: load(sdk)
|
||||
|
||||
!no_objective_c:CONFIG += objective_c
|
||||
|
||||
qt {
|
||||
@ -72,9 +68,9 @@ macx-xcode {
|
||||
only_active_arch.build = debug
|
||||
QMAKE_MAC_XCODE_SETTINGS += only_active_arch
|
||||
} else {
|
||||
VALID_ARCHS =
|
||||
device|!simulator: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS
|
||||
simulator: VALID_ARCHS += $$QMAKE_APPLE_SIMULATOR_ARCHS
|
||||
device|!simulator: VALID_DEVICE_ARCHS = $$QMAKE_APPLE_DEVICE_ARCHS
|
||||
simulator: VALID_SIMULATOR_ARCHS = $$QMAKE_APPLE_SIMULATOR_ARCHS
|
||||
VALID_ARCHS = $$VALID_DEVICE_ARCHS $$VALID_SIMULATOR_ARCHS
|
||||
|
||||
isEmpty(VALID_ARCHS): \
|
||||
error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture")
|
||||
@ -93,6 +89,78 @@ macx-xcode {
|
||||
QMAKE_LFLAGS += $$arch_flags
|
||||
|
||||
QMAKE_PCH_ARCHS = $$VALID_ARCHS
|
||||
|
||||
macos: deployment_target = $$QMAKE_MACOSX_DEPLOYMENT_TARGET
|
||||
ios: deployment_target = $$QMAKE_IOS_DEPLOYMENT_TARGET
|
||||
tvos: deployment_target = $$QMAKE_TVOS_DEPLOYMENT_TARGET
|
||||
watchos: deployment_target = $$QMAKE_WATCHOS_DEPLOYMENT_TARGET
|
||||
|
||||
# If we're doing a simulator and device build, device and simulator
|
||||
# architectures use different paths and flags for the sysroot and
|
||||
# deployment target switch, so we must multiplex them across multiple
|
||||
# architectures using -Xarch. Otherwise we fall back to the simple path.
|
||||
# This is not strictly necessary, but results in cleaner command lines
|
||||
# and makes it easier for people to override EXPORT_VALID_ARCHS to limit
|
||||
# individual rules to a different set of architecture(s) from the overall
|
||||
# build (such as machtest in QtCore).
|
||||
simulator:device {
|
||||
QMAKE_XARCH_CFLAGS =
|
||||
QMAKE_XARCH_LFLAGS =
|
||||
QMAKE_EXTRA_VARIABLES += QMAKE_XARCH_CFLAGS QMAKE_XARCH_LFLAGS
|
||||
|
||||
for (arch, VALID_ARCHS) {
|
||||
contains(VALID_SIMULATOR_ARCHS, $$arch) {
|
||||
sdk = $$simulator.sdk
|
||||
version_identifier = $$simulator.deployment_identifier
|
||||
} else {
|
||||
sdk = $$device.sdk
|
||||
version_identifier = $$device.deployment_identifier
|
||||
}
|
||||
|
||||
version_min_flags = \
|
||||
-Xarch_$${arch} \
|
||||
-m$${version_identifier}-version-min=$$deployment_target
|
||||
QMAKE_XARCH_CFLAGS_$${arch} = $$version_min_flags \
|
||||
-Xarch_$${arch} \
|
||||
-isysroot$$xcodeSDKInfo(Path, $$sdk)
|
||||
QMAKE_XARCH_LFLAGS_$${arch} = $$version_min_flags \
|
||||
-Xarch_$${arch} \
|
||||
-Wl,-syslibroot,$$xcodeSDKInfo(Path, $$sdk)
|
||||
|
||||
QMAKE_XARCH_CFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS_$${arch})
|
||||
QMAKE_XARCH_LFLAGS += $(EXPORT_QMAKE_XARCH_LFLAGS_$${arch})
|
||||
|
||||
QMAKE_EXTRA_VARIABLES += \
|
||||
QMAKE_XARCH_CFLAGS_$${arch} \
|
||||
QMAKE_XARCH_LFLAGS_$${arch}
|
||||
}
|
||||
|
||||
QMAKE_CFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
|
||||
QMAKE_CXXFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
|
||||
QMAKE_LFLAGS += $(EXPORT_QMAKE_XARCH_LFLAGS)
|
||||
} else {
|
||||
simulator: \
|
||||
version_identifier = $$simulator.deployment_identifier
|
||||
else: \
|
||||
version_identifier = $$device.deployment_identifier
|
||||
version_min_flag = -m$${version_identifier}-version-min=$$deployment_target
|
||||
QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
}
|
||||
|
||||
# Enable precompiled headers for multiple architectures
|
||||
QMAKE_CFLAGS_USE_PRECOMPILE =
|
||||
for (arch, VALID_ARCHS) {
|
||||
QMAKE_CFLAGS_USE_PRECOMPILE += \
|
||||
-Xarch_$${arch} \
|
||||
-include${QMAKE_PCH_OUTPUT_$${arch}}
|
||||
}
|
||||
QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
|
||||
QMAKE_PCH_OUTPUT_EXT = _${QMAKE_PCH_ARCH}$${QMAKE_PCH_OUTPUT_EXT}
|
||||
}
|
||||
|
||||
cache(QMAKE_XCODE_DEVELOPER_PATH, stash)
|
||||
|
@ -47,89 +47,3 @@ for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_
|
||||
$$tool = $$sysrooted $$member(value, 1, -1)
|
||||
cache($$tool_variable, set stash, $$tool)
|
||||
}
|
||||
|
||||
!equals(MAKEFILE_GENERATOR, XCODE) {
|
||||
macos: deployment_target = $$QMAKE_MACOSX_DEPLOYMENT_TARGET
|
||||
ios: deployment_target = $$QMAKE_IOS_DEPLOYMENT_TARGET
|
||||
tvos: deployment_target = $$QMAKE_TVOS_DEPLOYMENT_TARGET
|
||||
watchos: deployment_target = $$QMAKE_WATCHOS_DEPLOYMENT_TARGET
|
||||
|
||||
device|!simulator: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS
|
||||
simulator: simulator_archs = $$QMAKE_APPLE_SIMULATOR_ARCHS
|
||||
archs = $$device_archs $$simulator_archs
|
||||
|
||||
isEmpty(archs): \
|
||||
error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture")
|
||||
|
||||
single_arch {
|
||||
device_archs = $$first(device_archs)
|
||||
simulator_archs = $$first(simulator_archs)
|
||||
archs = $$first(archs)
|
||||
}
|
||||
|
||||
# If we're doing a simulator and device build, device and simulator architectures
|
||||
# use different paths and flags for the sysroot and deployment target switch, so we
|
||||
# must multiplex them across multiple architectures using -Xarch. Otherwise we fall
|
||||
# back to the simple path. This is not strictly necessary but results in cleaner
|
||||
# command lines and makes it easier for people to override EXPORT_VALID_ARCHS to
|
||||
# limit individual rules to a different set of architecture(s) from the overall
|
||||
# build (such as machtest in QtCore).
|
||||
simulator:device {
|
||||
QMAKE_XARCH_CFLAGS =
|
||||
QMAKE_XARCH_LFLAGS =
|
||||
QMAKE_EXTRA_VARIABLES += QMAKE_XARCH_CFLAGS QMAKE_XARCH_LFLAGS
|
||||
|
||||
for(arch, archs) {
|
||||
contains(simulator_archs, $$arch) {
|
||||
sdk = $$simulator.sdk
|
||||
version_identifier = $$simulator.deployment_identifier
|
||||
} else {
|
||||
sdk = $$device.sdk
|
||||
version_identifier = $$device.deployment_identifier
|
||||
}
|
||||
|
||||
version_min_flags = \
|
||||
-Xarch_$${arch} \
|
||||
-m$${version_identifier}-version-min=$$deployment_target
|
||||
QMAKE_XARCH_CFLAGS_$${arch} = $$version_min_flags \
|
||||
-Xarch_$${arch} \
|
||||
-isysroot$$xcodeSDKInfo(Path, $$sdk)
|
||||
QMAKE_XARCH_LFLAGS_$${arch} = $$version_min_flags \
|
||||
-Xarch_$${arch} \
|
||||
-Wl,-syslibroot,$$xcodeSDKInfo(Path, $$sdk)
|
||||
|
||||
QMAKE_XARCH_CFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS_$${arch})
|
||||
QMAKE_XARCH_LFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS_$${arch})
|
||||
|
||||
QMAKE_EXTRA_VARIABLES += \
|
||||
QMAKE_XARCH_CFLAGS_$${arch} \
|
||||
QMAKE_XARCH_LFLAGS_$${arch}
|
||||
}
|
||||
|
||||
QMAKE_CFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
|
||||
QMAKE_CXXFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
|
||||
QMAKE_LFLAGS += $(EXPORT_QMAKE_XARCH_LFLAGS)
|
||||
} else {
|
||||
simulator: \
|
||||
version_identifier = $$simulator.deployment_identifier
|
||||
else: \
|
||||
version_identifier = $$device.deployment_identifier
|
||||
version_min_flag = -m$${version_identifier}-version-min=$$deployment_target
|
||||
QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
}
|
||||
|
||||
# Enable precompiled headers for multiple architectures
|
||||
QMAKE_CFLAGS_USE_PRECOMPILE =
|
||||
for(arch, archs) {
|
||||
QMAKE_CFLAGS_USE_PRECOMPILE += \
|
||||
-Xarch_$${arch} \
|
||||
-include${QMAKE_PCH_OUTPUT_$${arch}}
|
||||
}
|
||||
QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
|
||||
QMAKE_PCH_OUTPUT_EXT = _${QMAKE_PCH_ARCH}$${QMAKE_PCH_OUTPUT_EXT}
|
||||
}
|
||||
|
@ -45,6 +45,111 @@ qaxserver {
|
||||
QT += axserver
|
||||
}
|
||||
|
||||
!import_qpa_plugin {
|
||||
warning("CONFIG-=import_qpa_plugin is deprecated. Use QTPLUGIN.platforms=- instead.")
|
||||
QTPLUGIN.platforms = -
|
||||
} else: qpa_minimal_plugin {
|
||||
warning("CONFIG+=qpa_minimal_plugin is deprecated. Use QTPLUGIN.platforms=qminimal instead.")
|
||||
QTPLUGIN.platforms = qminimal
|
||||
}
|
||||
|
||||
!force_import_plugins:!contains(TEMPLATE, ".*app"):!if(contains(TEMPLATE, ".*lib"):dll): \
|
||||
CONFIG -= import_plugins
|
||||
|
||||
# qmake variables cannot contain dashes, so normalize the names first
|
||||
CLEAN_QT = $$replace(QT, -private$, _private)
|
||||
CLEAN_QT_PRIVATE = $$replace(QT_PRIVATE, -private$, _private)
|
||||
|
||||
qt_module_deps = $$CLEAN_QT $$CLEAN_QT_PRIVATE
|
||||
all_qt_module_deps = $$resolve_depends(qt_module_deps, "QT.", ".depends" ".run_depends")
|
||||
|
||||
QTPLUGIN = $$unique($$list($$lower($$QTPLUGIN)))
|
||||
|
||||
import_plugins:qtConfig(static) {
|
||||
manualplugs = $$QTPLUGIN # User may specify plugins. Mostly legacy.
|
||||
autoplugs = # Auto-added plugins.
|
||||
# First round: explicitly specified modules.
|
||||
plugin_deps = $$all_qt_module_deps
|
||||
for(ever) {
|
||||
# Automatically link the default plugins for the linked Qt modules.
|
||||
for (qtmod, plugin_deps) {
|
||||
for (ptype, QT.$${qtmod}.plugin_types) {
|
||||
nptype = $$replace(ptype, [-/], _)
|
||||
isEmpty(QTPLUGIN.$$nptype) {
|
||||
for (plug, QT_PLUGINS) {
|
||||
equals(QT_PLUGIN.$${plug}.TYPE, $$ptype) {
|
||||
for (dep, QT_PLUGIN.$${plug}.EXTENDS) {
|
||||
!contains(all_qt_module_deps, $$dep) {
|
||||
plug =
|
||||
break()
|
||||
}
|
||||
}
|
||||
autoplugs += $$plug
|
||||
}
|
||||
}
|
||||
} else {
|
||||
plug = $$eval(QTPLUGIN.$$nptype)
|
||||
!equals(plug, -): \
|
||||
autoplugs += $$plug
|
||||
}
|
||||
}
|
||||
}
|
||||
QTPLUGIN = $$manualplugs $$autoplugs
|
||||
QTPLUGIN = $$unique(QTPLUGIN)
|
||||
|
||||
# Obtain the plugins' Qt dependencies ...
|
||||
plugin_deps =
|
||||
for (plug, QTPLUGIN): \
|
||||
plugin_deps += $$eval(QT_PLUGIN.$${plug}.DEPENDS)
|
||||
plugin_deps = $$resolve_depends(plugin_deps, "QT.", ".depends" ".run_depends")
|
||||
plugin_deps -= $$all_qt_module_deps
|
||||
isEmpty(plugin_deps): \
|
||||
break()
|
||||
# ... and start over if any new Qt modules appeared,
|
||||
# as these may want to load plugins in turn.
|
||||
all_qt_module_deps += $$plugin_deps
|
||||
}
|
||||
extraplugs = $$manualplugs
|
||||
manualplugs -= $$autoplugs
|
||||
extraplugs -= $$manualplugs
|
||||
!isEmpty(extraplugs): \
|
||||
warning("Redundant entries in QTPLUGIN: $$extraplugs")
|
||||
|
||||
!isEmpty(QTPLUGIN) {
|
||||
IMPORT_FILE_CONT = \
|
||||
"// This file is autogenerated by qmake. It imports static plugin classes for" \
|
||||
"// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS.<plugin> variables." \
|
||||
"$${LITERAL_HASH}include <QtPlugin>"
|
||||
for (plug, QTPLUGIN) {
|
||||
plug_class = $$eval(QT_PLUGIN.$${plug}.CLASS_NAME)
|
||||
!isEmpty(plug_class): \
|
||||
IMPORT_FILE_CONT += "Q_IMPORT_PLUGIN($$plug_class)"
|
||||
else: \
|
||||
warning("Plugin class name could not be determined for plugin '$$plug'.")
|
||||
}
|
||||
IMPORT_CPP = $$OUT_PWD/$$lower($$basename(TARGET))_plugin_import.cpp
|
||||
write_file($$IMPORT_CPP, IMPORT_FILE_CONT)|error()
|
||||
GENERATED_SOURCES += $$IMPORT_CPP
|
||||
QMAKE_DISTCLEAN += $$IMPORT_CPP
|
||||
}
|
||||
}
|
||||
|
||||
# Only link against plugins in static builds
|
||||
!isEmpty(QTPLUGIN):qtConfig(static) {
|
||||
for (plug, QTPLUGIN) {
|
||||
# Check if the plugin is known to Qt. We can use this to determine
|
||||
# the plugin path. Unknown plugins must rely on the default link path.
|
||||
plug_type = $$eval(QT_PLUGIN.$${plug}.TYPE)
|
||||
!isEmpty(plug_type) {
|
||||
plug_path = $$eval(QT_PLUGIN.$${plug}.PATH)
|
||||
isEmpty(plug_path): \
|
||||
plug_path = $$[QT_INSTALL_PLUGINS/get]
|
||||
LIBS += -L$$plug_path/$$plug_type
|
||||
}
|
||||
LIBS += -l$${plug}$$qtPlatformTargetSuffix()
|
||||
}
|
||||
}
|
||||
|
||||
# target variable, flag source variable
|
||||
defineTest(qtProcessModuleFlags) {
|
||||
for(flag, $$2) {
|
||||
@ -59,8 +164,6 @@ defineTest(qtProcessModuleFlags) {
|
||||
unset(using_privates)
|
||||
var_sfx =
|
||||
for(ever) {
|
||||
# qmake variables cannot contain dashes, so normalize the names first
|
||||
CLEAN_QT$$var_sfx = $$replace(QT$$var_sfx, -private$, _private)
|
||||
# Topological resolution of modules based on their QT.<module>.depends variable
|
||||
FULL_QT$$var_sfx = $$resolve_depends(CLEAN_QT$$var_sfx, "QT.")
|
||||
# Finally actually add the modules
|
||||
@ -164,11 +267,8 @@ for(ever) {
|
||||
message("This is not a bug, but a result of using Qt internals. You have been warned!")
|
||||
}
|
||||
|
||||
qt_module_deps = $$CLEAN_QT $$CLEAN_QT_PRIVATE
|
||||
qt_module_deps = $$resolve_depends(qt_module_deps, "QT.")
|
||||
|
||||
!no_qt_rpath:!static:qtConfig(rpath):!qtConfig(static):\
|
||||
contains(qt_module_deps, core) {
|
||||
contains(all_qt_module_deps, core) {
|
||||
relative_qt_rpath:!isEmpty(QMAKE_REL_RPATH_BASE):contains(INSTALLS, target):\
|
||||
isEmpty(target.files):isEmpty(target.commands):isEmpty(target.extra) {
|
||||
# NOT the /dev property, as INSTALLS use host paths
|
||||
@ -183,17 +283,17 @@ qt_module_deps = $$resolve_depends(qt_module_deps, "QT.")
|
||||
# libraries which were NOT specified on the command line.
|
||||
# This means that paths of direct dependencies (QT & QT_PRIVATE)
|
||||
# don't need to be listed, unlike their private dependencies' paths.
|
||||
privdep = $$resolve_depends(qt_module_deps, "QT.", ".depends" ".run_depends")
|
||||
privdep -= $$qt_module_deps
|
||||
privdep = $$all_qt_module_deps
|
||||
privdep -= $$resolve_depends(qt_module_deps, "QT.")
|
||||
rpaths =
|
||||
for(dep, privdep): \
|
||||
rpaths += $$eval(QT.$${dep}.libs)
|
||||
QMAKE_RPATHLINKDIR *= $$unique(rpaths)
|
||||
}
|
||||
|
||||
# static builds: link qml import plugins into the app.
|
||||
contains(qt_module_deps, qml): \
|
||||
qtConfig(static):contains(TEMPLATE, .*app):!host_build:!no_import_scan {
|
||||
# static builds: link qml import plugins into the target.
|
||||
contains(all_qt_module_deps, qml): \
|
||||
qtConfig(static):import_plugins:!host_build:!no_import_scan {
|
||||
exists($$[QT_INSTALL_QML/get]): \
|
||||
QMLPATHS *= $$[QT_INSTALL_QML/get]
|
||||
|
||||
@ -238,140 +338,5 @@ contains(qt_module_deps, qml): \
|
||||
write_file($$QML_IMPORT_CPP, IMPORT_FILE_CONT)|error()
|
||||
GENERATED_SOURCES += $$QML_IMPORT_CPP
|
||||
QMAKE_DISTCLEAN += $$QML_IMPORT_CPP
|
||||
|
||||
# copy qml files. this part is platform spesific.
|
||||
mac {
|
||||
!shallow_bundle {
|
||||
# Note: user can override QMAKE_BUNDLE_QML from pro file to change target bundle path
|
||||
isEmpty(QMAKE_QML_BUNDLE_PATH):QMAKE_QML_BUNDLE_PATH = "Resources/qt_qml"
|
||||
qmlTargetPath = $$OUT_PWD/$${TARGET}.app/Contents/$$QMAKE_QML_BUNDLE_PATH
|
||||
qtconfTargetPath = $$OUT_PWD/$${TARGET}.app/Contents/Resources/qt.conf
|
||||
} else {
|
||||
# shallow bundle layout (no Contents/Resources)
|
||||
isEmpty(QMAKE_QML_BUNDLE_PATH):QMAKE_QML_BUNDLE_PATH = "qt_qml"
|
||||
qmlTargetPath = $CODESIGNING_FOLDER_PATH/$$QMAKE_QML_BUNDLE_PATH
|
||||
qtconfTargetPath = $CODESIGNING_FOLDER_PATH/qt.conf
|
||||
}
|
||||
|
||||
# set import path in qt.conf to point to the bundeled qml:
|
||||
QT_CONF_CONTENTS = \
|
||||
"[Paths]" \
|
||||
"Imports = $$QMAKE_QML_BUNDLE_PATH" \
|
||||
"Qml2Imports = $$QMAKE_QML_BUNDLE_PATH"
|
||||
write_file("$$OUT_PWD/qt.conf", QT_CONF_CONTENTS)|error()
|
||||
|
||||
# write qt.conf and copy each qml import dir into the bundle.
|
||||
# But strip away archives and other files that are not needed:
|
||||
!isEmpty(QMAKE_POST_LINK): QMAKE_POST_LINK += ";"
|
||||
QMAKE_POST_LINK += \
|
||||
"cp $$shell_quote($$OUT_PWD/qt.conf) \"$$qtconfTargetPath\"; " \
|
||||
"test -d \"$$qmlTargetPath\" && rm -r \"$$qmlTargetPath\"; " \
|
||||
"mkdir -p \"$$qmlTargetPath\" && " \
|
||||
"for p in $$QMLPATHS; do" \
|
||||
"rsync -r --exclude='*.a' --exclude='*.prl' --exclude='*.qmltypes' "
|
||||
macx-xcode: QMAKE_POST_LINK += "$p/ \"$$qmlTargetPath\"; done"
|
||||
else: QMAKE_POST_LINK += "\$\$p/ \"$$qmlTargetPath\"; done"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
!import_qpa_plugin {
|
||||
warning("CONFIG-=import_qpa_plugin is deprecated. Use QTPLUGIN.platforms=- instead.")
|
||||
QTPLUGIN.platforms = -
|
||||
} else: qpa_minimal_plugin {
|
||||
warning("CONFIG+=qpa_minimal_plugin is deprecated. Use QTPLUGIN.platforms=qminimal instead.")
|
||||
QTPLUGIN.platforms = qminimal
|
||||
}
|
||||
|
||||
contains(TEMPLATE, .*app) {
|
||||
autoplugs =
|
||||
for (qtmod, qt_module_deps) {
|
||||
for (ptype, QT.$${qtmod}.plugin_types) {
|
||||
nptype = $$replace(ptype, [-/], _)
|
||||
isEmpty(QTPLUGIN.$$nptype) {
|
||||
for (plug, QT_PLUGINS) {
|
||||
equals(QT_PLUGIN.$${plug}.TYPE, $$ptype) {
|
||||
for (dep, QT_PLUGIN.$${plug}.EXTENDS) {
|
||||
!contains(qt_module_deps, $$dep) {
|
||||
plug =
|
||||
break()
|
||||
}
|
||||
}
|
||||
autoplugs += $$plug
|
||||
}
|
||||
}
|
||||
} else {
|
||||
plug = $$eval(QTPLUGIN.$$nptype)
|
||||
!equals(plug, -): \
|
||||
autoplugs += $$plug
|
||||
}
|
||||
}
|
||||
}
|
||||
manualplugs = $$QTPLUGIN
|
||||
manualplugs -= $$autoplugs
|
||||
QTPLUGIN -= $$manualplugs
|
||||
!isEmpty(QTPLUGIN): \
|
||||
warning("Redundant entries in QTPLUGIN: $$QTPLUGIN")
|
||||
QTPLUGIN = $$manualplugs $$autoplugs
|
||||
}
|
||||
|
||||
QT_PLUGIN_VERIFY = DEPLOYMENT_PLUGIN
|
||||
qtConfig(static) {
|
||||
QT_PLUGIN_VERIFY += QTPLUGIN
|
||||
force_import_plugins|contains(TEMPLATE, .*app) {
|
||||
import_plugins:!isEmpty(QTPLUGIN) {
|
||||
IMPORT_FILE_CONT = \
|
||||
"// This file is autogenerated by qmake. It imports static plugin classes for" \
|
||||
"// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS.<plugin> variables." \
|
||||
"$${LITERAL_HASH}include <QtPlugin>"
|
||||
for(IMPORT_PLUG, $$list($$unique(QTPLUGIN))) {
|
||||
PLUG_CLASS = $$eval(QT_PLUGIN.$${IMPORT_PLUG}.CLASS_NAME)
|
||||
!isEmpty(PLUG_CLASS): \
|
||||
IMPORT_FILE_CONT += "Q_IMPORT_PLUGIN($$PLUG_CLASS)"
|
||||
else: \
|
||||
warning("Plugin class name could not be determined for $$IMPORT_PLUG plugin.")
|
||||
}
|
||||
IMPORT_CPP = $$OUT_PWD/$$lower($$basename(TARGET))_plugin_import.cpp
|
||||
write_file($$IMPORT_CPP, IMPORT_FILE_CONT)|error()
|
||||
GENERATED_SOURCES += $$IMPORT_CPP
|
||||
QMAKE_DISTCLEAN += $$IMPORT_CPP
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
|
||||
for(QTPLUG, $$list($$lower($$unique($$QT_CURRENT_VERIFY)))) {
|
||||
# Check if the plugin is known to Qt. We can use this to determine
|
||||
# the plugin path. Unknown plugins must rely on the default link path.
|
||||
QT_PLUGINPATH = $$eval(QT_PLUGIN.$${QTPLUG}.TYPE)
|
||||
|
||||
# Generate the plugin linker line
|
||||
QT_LINKAGE = -l$${QTPLUG}$$qtPlatformTargetSuffix()
|
||||
|
||||
# Only link against plugin in static builds
|
||||
isEqual(QT_CURRENT_VERIFY, QTPLUGIN) {
|
||||
!isEmpty(QT_PLUGINPATH) {
|
||||
plugpath = $$eval(QT_PLUGIN.$${QTPLUG}.PATH)
|
||||
isEmpty(plugpath): \
|
||||
plugpath = $$[QT_INSTALL_PLUGINS/get]
|
||||
LIBS *= -L$$plugpath/$$QT_PLUGINPATH
|
||||
}
|
||||
LIBS += $$QT_LINKAGE
|
||||
# if the plugin is linked statically there is no need to deploy it
|
||||
DEPLOYMENT_PLUGIN -= $$QT_CURRENT_VERIFY
|
||||
}
|
||||
|
||||
# The following block is currently broken, because qt_plugin_XXX.prf files
|
||||
# are not generated for dynamic builds.
|
||||
false:isEqual(QT_CURRENT_VERIFY, DEPLOYMENT_PLUGIN):shared:winrt {
|
||||
QT_ITEM =
|
||||
debug: QT_ITEM = $${QTPLUG}d4.dll
|
||||
else: QT_ITEM = $${QTPLUG}4.dll
|
||||
|
||||
qt_additional_plugin_$${QTPLUG}.files = $$[QT_INSTALL_PLUGINS/get]/$${QT_PLUGINPATH}/$${QT_ITEM}
|
||||
qt_additional_plugin_$${QTPLUG}.path = $${QT_PLUGINPATH}
|
||||
|
||||
INSTALLS *= qt_additional_plugin_$${QTPLUG}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ qtConfig(c++14): CONFIG += c++14
|
||||
qtConfig(c++1z): CONFIG += c++1z
|
||||
contains(TEMPLATE, .*lib) {
|
||||
# module and plugins
|
||||
!host_build:qtConfig(reduce_exports): CONFIG += hide_symbols
|
||||
if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
|
||||
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
|
||||
qtConfig(separate_debug_info): CONFIG += separate_debug_info
|
||||
|
||||
@ -100,6 +100,9 @@ warnings_are_errors:warning_clean {
|
||||
# error: assuming signed overflow does not occur when assuming that (X + c) < X is always false
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-error=strict-overflow
|
||||
|
||||
# GCC 7 includes -Wimplicit-fallthrough in -Wextra, but Qt is not yet free of implicit fallthroughs.
|
||||
greaterThan(QT_GCC_MAJOR_VERSION, 6): QMAKE_CXXFLAGS_WARN_ON += -Wno-error=implicit-fallthrough
|
||||
|
||||
# Work-around for bug https://code.google.com/p/android/issues/detail?id=58135
|
||||
android: QMAKE_CXXFLAGS_WARN_ON += -Wno-error=literal-suffix
|
||||
}
|
||||
|
@ -183,7 +183,9 @@ defineTest(qtConfCommandline_redo) {
|
||||
qtConfAddError("No config.opt present - cannot redo configuration.")
|
||||
return()
|
||||
}
|
||||
QMAKE_EXTRA_ARGS = $$cat($$OUT_PWD/config.opt, lines) $$QMAKE_EXTRA_ARGS
|
||||
QMAKE_EXTRA_REDO_ARGS = $$cat($$OUT_PWD/config.opt, lines)
|
||||
export(QMAKE_EXTRA_REDO_ARGS) # just for config.log
|
||||
QMAKE_EXTRA_ARGS = $$QMAKE_EXTRA_REDO_ARGS $$QMAKE_EXTRA_ARGS
|
||||
export(QMAKE_EXTRA_ARGS)
|
||||
QMAKE_REDO_CONFIG = true
|
||||
export(QMAKE_REDO_CONFIG)
|
||||
@ -241,8 +243,8 @@ defineTest(qtConfParseCommandLine) {
|
||||
opt = $$replace(c, "^--?(disable|no)-(.*)", "\\2")
|
||||
val = no
|
||||
} else: contains(c, "^--([^=]+)=(.*)") {
|
||||
opt = $$replace(c, "^--?([^=]+)=(.*)", "\\1")
|
||||
val = $$replace(c, "^--?([^=]+)=(.*)", "\\2")
|
||||
opt = $$replace(c, "^--([^=]+)=(.*)", "\\1")
|
||||
val = $$replace(c, "^--([^=]+)=(.*)", "\\2")
|
||||
} else: contains(c, "^--(.*)") {
|
||||
opt = $$replace(c, "^--(.*)", "\\1")
|
||||
val = yes
|
||||
@ -387,14 +389,17 @@ defineTest(qtConfPkgConfigPackageExists) {
|
||||
return(true)
|
||||
}
|
||||
|
||||
defineReplace(qtConfPrepareArgs) {
|
||||
arglist = $$split(1)
|
||||
defineReplace(qtSystemQuote) {
|
||||
args =
|
||||
for (a, arglist): \
|
||||
for (a, 1): \
|
||||
args += $$system_quote($$a)
|
||||
return($$args)
|
||||
}
|
||||
|
||||
defineReplace(qtConfPrepareArgs) {
|
||||
return($$qtSystemQuote($$split(1)))
|
||||
}
|
||||
|
||||
defineTest(qtConfSetupLibraries) {
|
||||
for (l, $${currentConfig}.libraries._KEYS_) {
|
||||
lpfx = $${currentConfig}.libraries.$${l}
|
||||
@ -503,12 +508,16 @@ defineTest(qtConfLibrary_makeSpec) {
|
||||
# the library is found via pkg-config.
|
||||
defineTest(qtConfLibrary_pkgConfig) {
|
||||
pkg_config = $$qtConfPkgConfig($$eval($${1}.host))
|
||||
isEmpty(pkg_config): \
|
||||
isEmpty(pkg_config) {
|
||||
qtLog("pkg-config use disabled globally.")
|
||||
return(false)
|
||||
}
|
||||
args = $$qtConfPrepareArgs($$eval($${1}.args))
|
||||
|
||||
!qtConfPkgConfigPackageExists($$pkg_config, $$args): \
|
||||
!qtConfPkgConfigPackageExists($$pkg_config, $$args) {
|
||||
qtLog("pkg-config did not find package.")
|
||||
return(false)
|
||||
}
|
||||
|
||||
qtRunLoggedCommand("$$pkg_config --modversion $$args", version)|return(false)
|
||||
qtRunLoggedCommand("$$pkg_config --libs-only-L --libs-only-l $$args", $${1}.libs)|return(false)
|
||||
@ -619,8 +628,9 @@ defineTest(qtConfHandleLibrary) {
|
||||
|
||||
qtLog("Trying source $$s (type $$t) of library $${1} ...")
|
||||
|
||||
!$$qtConfEvaluate($$eval($${spfx}.condition)) {
|
||||
qtLog(" => source failed condition.")
|
||||
cond = $$eval($${spfx}.condition)
|
||||
!$$qtConfEvaluate($$cond) {
|
||||
qtLog(" => source failed condition '$$cond'.")
|
||||
next()
|
||||
}
|
||||
|
||||
@ -1367,33 +1377,21 @@ defineTest(qtConfCreateSummary) {
|
||||
}
|
||||
|
||||
defineTest(qtConfPrintReport) {
|
||||
for (n, QT_CONFIGURE_REPORT): \
|
||||
logn($$n)
|
||||
logn()
|
||||
|
||||
for (n, QT_CONFIGURE_NOTES) {
|
||||
logn($$n)
|
||||
logn()
|
||||
}
|
||||
|
||||
for (w, QT_CONFIGURE_WARNINGS) {
|
||||
logn($$w)
|
||||
logn()
|
||||
}
|
||||
blocks = \
|
||||
"$$join(QT_CONFIGURE_REPORT, $$escape_expand(\\n))" \
|
||||
"$$join(QT_CONFIGURE_NOTES, $$escape_expand(\\n\\n))" \
|
||||
"$$join(QT_CONFIGURE_WARNINGS, $$escape_expand(\\n\\n))"
|
||||
|
||||
!isEmpty(QT_CONFIGURE_ERRORS) {
|
||||
for (e, QT_CONFIGURE_ERRORS) {
|
||||
logn($$e)
|
||||
logn()
|
||||
blocks += "$$join(QT_CONFIGURE_ERRORS, $$escape_expand(\\n\\n))"
|
||||
mention_config_log:!$$QMAKE_CONFIG_VERBOSE: \
|
||||
blocks += "Check config.log for details."
|
||||
}
|
||||
mention_config_log:!$$QMAKE_CONFIG_VERBOSE {
|
||||
logn("Check config.log for details.")
|
||||
logn()
|
||||
}
|
||||
|
||||
!equals(config.input.continue, yes): \
|
||||
blocks = "$$join(blocks, $$escape_expand(\\n\\n))"
|
||||
logn($$blocks)
|
||||
!isEmpty(QT_CONFIGURE_ERRORS):!equals(config.input.continue, yes): \
|
||||
error()
|
||||
}
|
||||
write_file($$OUT_PWD/config.summary, blocks)|error()
|
||||
}
|
||||
|
||||
defineTest(qtConfCheckErrors) {
|
||||
@ -1612,19 +1610,6 @@ defineTest(qtConfOutput_privateFeature) {
|
||||
}
|
||||
}
|
||||
|
||||
# command line built-ins post-processing
|
||||
defineTest(qtConfOutput_builtins) {
|
||||
QMAKE_CONFIG_VERBOSE = $$eval(config.input.verbose)
|
||||
isEmpty(QMAKE_CONFIG_VERBOSE): \
|
||||
QMAKE_CONFIG_VERBOSE = false
|
||||
export(QMAKE_CONFIG_VERBOSE)
|
||||
|
||||
QMAKE_CONFIG_CACHE_USE = $$eval(config.input.cache_use)
|
||||
isEmpty(QMAKE_CONFIG_CACHE_USE): \
|
||||
QMAKE_CONFIG_CACHE_USE = all
|
||||
export(QMAKE_CONFIG_CACHE_USE)
|
||||
}
|
||||
|
||||
defineTest(qtConfProcessOneOutput) {
|
||||
feature = $${1}
|
||||
fpfx = $${currentConfig}.features.$${feature}
|
||||
@ -1709,17 +1694,26 @@ defineTest(qtConfProcessOutput) {
|
||||
# tie it all together
|
||||
#
|
||||
|
||||
cfgs =
|
||||
isEmpty(_QMAKE_SUPER_CACHE_)|equals(OUT_PWD, $$dirname(_QMAKE_SUPER_CACHE_)) {
|
||||
c = $$basename(_PRO_FILE_PWD_)
|
||||
config.$${c}.dir = $$_PRO_FILE_PWD_
|
||||
cfgs += $$c
|
||||
!isEmpty(_QMAKE_SUPER_CACHE_) {
|
||||
!isEmpty(_QMAKE_SUPER_CACHE_):!equals(OUT_PWD, $$dirname(_QMAKE_SUPER_CACHE_)) {
|
||||
# sub-repo within a top-level build; no need to configure anything.
|
||||
!isEmpty(QMAKE_EXTRA_ARGS) {
|
||||
# sub-projects don't get the extra args passed down automatically,
|
||||
# so we can use their presence to detect misguided attempts to
|
||||
# configure the repositories separately.
|
||||
# caveat: a plain qmake call is indistinguishable from a recursion
|
||||
# (by design), so we cannot detect this case.
|
||||
error("You cannot configure $$TARGET separately within a top-level build.")
|
||||
}
|
||||
return()
|
||||
}
|
||||
|
||||
config.$${TARGET}.dir = $$_PRO_FILE_PWD_
|
||||
cfgs = $$TARGET
|
||||
!isEmpty(_QMAKE_SUPER_CACHE_) {
|
||||
for (s, SUBDIRS) {
|
||||
config.$${s}.dir = $$_PRO_FILE_PWD_/$${s}
|
||||
cfgs += $$s
|
||||
}
|
||||
}
|
||||
}
|
||||
configsToProcess =
|
||||
for (c, cfgs) {
|
||||
@ -1727,8 +1721,11 @@ for (c, cfgs) {
|
||||
exists($$s/configure.json): \
|
||||
configsToProcess += $$c
|
||||
}
|
||||
isEmpty(configsToProcess): \
|
||||
isEmpty(configsToProcess) {
|
||||
!isEmpty(QMAKE_EXTRA_ARGS): \
|
||||
error("This module does not accept configure command line arguments.")
|
||||
return()
|
||||
}
|
||||
|
||||
load(configure_base)
|
||||
|
||||
@ -1771,6 +1768,7 @@ for (currentConfig, allConfigs): \
|
||||
QMAKE_SAVED_ARGS = $$QMAKE_EXTRA_ARGS
|
||||
QMAKE_REDO_CONFIG = false
|
||||
qtConfParseCommandLine()
|
||||
qtConfCheckErrors()
|
||||
|
||||
for (currentConfig, allConfigs) {
|
||||
qtConfSetModuleName()
|
||||
@ -1784,6 +1782,9 @@ qtConfCheckErrors()
|
||||
QMAKE_CONFIG_CACHE = $$dirname(_QMAKE_SUPER_CACHE_)/config.cache
|
||||
else: \
|
||||
QMAKE_CONFIG_CACHE = $$dirname(_QMAKE_CACHE_)/config.cache
|
||||
QMAKE_CONFIG_CACHE_USE = $$eval(config.input.cache_use)
|
||||
isEmpty(QMAKE_CONFIG_CACHE_USE): \
|
||||
QMAKE_CONFIG_CACHE_USE = all
|
||||
!equals(QMAKE_CONFIG_CACHE_USE, none) {
|
||||
include($$QMAKE_CONFIG_CACHE, , true)
|
||||
# this crudely determines when to discard the cache. this also catches the case
|
||||
@ -1798,9 +1799,17 @@ equals(QMAKE_CONFIG_CACHE_USE, none) {
|
||||
write_file($$QMAKE_CONFIG_CACHE, cont)
|
||||
}
|
||||
|
||||
QMAKE_CONFIG_VERBOSE = $$eval(config.input.verbose)
|
||||
isEmpty(QMAKE_CONFIG_VERBOSE): \
|
||||
QMAKE_CONFIG_VERBOSE = false
|
||||
QMAKE_CONFIG_LOG = $$OUT_PWD/config.log
|
||||
!equals(QMAKE_CONFIG_CACHE_USE, all): \
|
||||
write_file($$QMAKE_CONFIG_LOG, "")
|
||||
else: \
|
||||
write_file($$QMAKE_CONFIG_LOG, $$list($$escape_expand(\\n)), append)
|
||||
qtLog("Command line: $$qtSystemQuote($$QMAKE_SAVED_ARGS)")
|
||||
$$QMAKE_REDO_CONFIG: \
|
||||
qtLog("config.opt: $$qtSystemQuote($$QMAKE_EXTRA_REDO_ARGS)")
|
||||
|
||||
CONFIG += qt_conf_tests_allowed
|
||||
logn()
|
||||
@ -1861,3 +1870,20 @@ for (p, QMAKE_POST_CONFIGURE): \
|
||||
logn("Configure summary:")
|
||||
logn()
|
||||
qtConfPrintReport()
|
||||
|
||||
# final notes for the user
|
||||
logn()
|
||||
logn("Qt is now configured for building. Just run '$$QMAKE_MAKE_NAME'.")
|
||||
pfx = $$[QT_INSTALL_PREFIX]
|
||||
equals(pfx, $$[QT_INSTALL_PREFIX/get]) {
|
||||
logn("Once everything is built, Qt is installed.")
|
||||
logn("You should NOT run '$$QMAKE_MAKE_NAME install'.")
|
||||
logn("Note that this build cannot be deployed to other machines or devices.")
|
||||
} else {
|
||||
logn("Once everything is built, you must run '$$QMAKE_MAKE_NAME install'.")
|
||||
logn("Qt will be installed into '$$system_path($$pfx)'.")
|
||||
}
|
||||
logn()
|
||||
logn("Prior to reconfiguration, make sure you remove any leftovers from")
|
||||
logn("the previous build.")
|
||||
logn()
|
||||
|
@ -214,7 +214,10 @@ android: CONFIG += qt_android_deps no_linker_version_script
|
||||
} else {
|
||||
verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API {" \
|
||||
" qt_private_api_tag*;"
|
||||
for(header, SYNCQT.PRIVATE_HEADER_FILES): \
|
||||
|
||||
private_api_headers = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.QPA_HEADER_FILES
|
||||
|
||||
for(header, private_api_headers): \
|
||||
verscript_content += " @FILE:$${_PRO_FILE_PWD_}/$$header@"
|
||||
verscript_content += "};"
|
||||
|
||||
@ -235,7 +238,7 @@ android: CONFIG += qt_android_deps no_linker_version_script
|
||||
verscriptprocess.name = linker version script ${QMAKE_FILE_BASE}
|
||||
verscriptprocess.input = verscript_in
|
||||
verscriptprocess.CONFIG += no_link target_predeps
|
||||
for(header, SYNCQT.PRIVATE_HEADER_FILES): \
|
||||
for(header, private_api_headers): \
|
||||
verscriptprocess.depends += $${_PRO_FILE_PWD_}/$$header
|
||||
verscriptprocess.output = $$verscript
|
||||
verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < ${QMAKE_FILE_IN} > $@
|
||||
|
@ -47,9 +47,13 @@ CONFIG(static, static|shared)|prefix_build {
|
||||
MODULE_FWD_PRI = $$mod_work_pfx/qt_plugin_$${MODULE}.pri
|
||||
|
||||
!build_pass {
|
||||
qt_plugin_deps = $$QT $$QT_PRIVATE
|
||||
qt_plugin_deps = s,-private$,_private,g
|
||||
|
||||
MODULE_PRI_CONT = \
|
||||
"QT_PLUGIN.$${MODULE}.TYPE = $$PLUGIN_TYPE" \
|
||||
"QT_PLUGIN.$${MODULE}.EXTENDS =$$join(PLUGIN_EXTENDS, " ", " ")" \
|
||||
"QT_PLUGIN.$${MODULE}.DEPENDS = $$qt_plugin_deps" \
|
||||
"QT_PLUGIN.$${MODULE}.CLASS_NAME = $$PLUGIN_CLASS_NAME" \
|
||||
"QT_PLUGINS += $$MODULE"
|
||||
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error()
|
||||
|
@ -1,4 +1,4 @@
|
||||
QMAKE_TARGET_COMPANY = The Qt Company Ltd
|
||||
QMAKE_TARGET_PRODUCT = Qt5
|
||||
QMAKE_TARGET_DESCRIPTION = C++ application development framework.
|
||||
QMAKE_TARGET_COPYRIGHT = Copyright (C) 2015 The Qt Company Ltd.
|
||||
isEmpty(QMAKE_TARGET_PRODUCT): QMAKE_TARGET_PRODUCT = Qt5
|
||||
isEmpty(QMAKE_TARGET_DESCRIPTION): QMAKE_TARGET_DESCRIPTION = C++ application development framework.
|
||||
QMAKE_TARGET_COPYRIGHT = Copyright (C) 2017 The Qt Company Ltd.
|
||||
|
@ -19,7 +19,6 @@ win32 {
|
||||
contains(TEMPLATE, .*lib) {
|
||||
!skip_target_version_ext:isEmpty(TARGET_VERSION_EXT):!isEmpty(VERSION) {
|
||||
TARGET_VERSION_EXT = $$section(VERSION, ., 0, 0)
|
||||
isEqual(TARGET_VERSION_EXT, 0):unset(TARGET_VERSION_EXT)
|
||||
}
|
||||
static:TARGET_EXT = .lib
|
||||
else:TARGET_EXT = .dll
|
||||
|
@ -19,7 +19,7 @@ defineReplace(xml_escape) {
|
||||
RESOURCES += qmake_immediate
|
||||
for(resource, RESOURCES) {
|
||||
# Regular case of user qrc file
|
||||
contains(resource, ".*\.qrc$"): \
|
||||
contains(resource, ".*\\.qrc$"): \
|
||||
next()
|
||||
|
||||
# Fallback for stand-alone files/directories
|
||||
|
@ -12,7 +12,12 @@ defineReplace(qtMakeExpand) {
|
||||
}
|
||||
}
|
||||
|
||||
isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
|
||||
cross_compile:host_build: \
|
||||
target_prefix = QMAKE_HOST_CXX
|
||||
else: \
|
||||
target_prefix = QMAKE_CXX
|
||||
|
||||
isEmpty($${target_prefix}.INCDIRS) {
|
||||
#
|
||||
# Get default include and library paths from compiler
|
||||
#
|
||||
@ -24,7 +29,18 @@ isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
|
||||
cmd_prefix = "set LC_ALL=C&"
|
||||
cmd_suffix = "<NUL >NUL"
|
||||
}
|
||||
output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$QMAKE_CXXFLAGS) -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
|
||||
|
||||
cxx_flags = $$QMAKE_CXXFLAGS
|
||||
|
||||
# Manually inject the sysroot for Apple Platforms because its resolution
|
||||
# normally does not happen until default_post.prf. This is especially
|
||||
# important for moc to gain the correct default include directory list.
|
||||
# While technically incorrect but without any likely practical effect,
|
||||
# UIKit simulator platforms will see the device SDK's sysroot in
|
||||
# QMAKE_DEFAULT_*DIRS, because they're handled in a single build pass.
|
||||
darwin: cxx_flags += -isysroot $$QMAKE_MAC_SDK_PATH
|
||||
|
||||
output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$cxx_flags) -xc++ -E -v - 2>&1 $$cmd_suffix", lines)
|
||||
add_includes = false
|
||||
for (line, output) {
|
||||
line ~= s/^ *// # remove leading spaces
|
||||
@ -44,6 +60,8 @@ isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
|
||||
}
|
||||
QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS)
|
||||
} else: msvc {
|
||||
# This doesn't differentiate between host and target,
|
||||
# but neither do the compilers.
|
||||
LIB = $$getenv("LIB")
|
||||
QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP)
|
||||
INCLUDE = $$getenv("INCLUDE")
|
||||
@ -55,6 +73,101 @@ isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build {
|
||||
isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib
|
||||
}
|
||||
|
||||
!isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash)
|
||||
!isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash)
|
||||
cache($${target_prefix}.INCDIRS, set stash, QMAKE_DEFAULT_INCDIRS)
|
||||
cache($${target_prefix}.LIBDIRS, set stash, QMAKE_DEFAULT_LIBDIRS)
|
||||
} else {
|
||||
QMAKE_DEFAULT_INCDIRS = $$eval($${target_prefix}.INCDIRS)
|
||||
QMAKE_DEFAULT_LIBDIRS = $$eval($${target_prefix}.LIBDIRS)
|
||||
}
|
||||
|
||||
#
|
||||
# Determine and cache the compiler version
|
||||
#
|
||||
|
||||
defineReplace(qtVariablesFromMSVC) {
|
||||
return($$system("$$1 -nologo -E $$2 $$system_quote($$PWD/data/macros.cpp) <NUL 2>NUL", lines))
|
||||
}
|
||||
|
||||
defineReplace(qtVariablesFromGCC) {
|
||||
null_device = /dev/null
|
||||
equals(QMAKE_HOST.os, Windows): null_device = NUL
|
||||
return($$system("$$1 -E $$system_quote($$PWD/data/macros.cpp) <$$null_device 2>$$null_device", lines))
|
||||
}
|
||||
|
||||
isEmpty($${target_prefix}.COMPILER_MACROS) {
|
||||
msvc {
|
||||
clang_cl {
|
||||
# We need to obtain the cl.exe version first
|
||||
vars = $$qtVariablesFromMSVC(cl)
|
||||
for (v, vars) {
|
||||
isEmpty(v)|contains(v, $${LITERAL_HASH}.*): next()
|
||||
eval($$v)
|
||||
}
|
||||
isEmpty(QMAKE_MSC_FULL_VER): error("Could not determine the Visual Studio version")
|
||||
|
||||
QMAKE_CFLAGS_MSVC_COMPAT = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", \
|
||||
"-fms-compatibility-version=\\1.\\2.\\3")
|
||||
cache($${target_prefix}.QMAKE_CFLAGS_MSVC_COMPAT, set stash, QMAKE_CFLAGS_MSVC_COMPAT)
|
||||
$${target_prefix}.COMPILER_MACROS += QMAKE_CFLAGS_MSVC_COMPAT
|
||||
vars = $$qtVariablesFromMSVC($$QMAKE_CXX, $$QMAKE_CFLAGS_MSVC_COMPAT)
|
||||
} else {
|
||||
vars = $$qtVariablesFromMSVC($$QMAKE_CXX)
|
||||
}
|
||||
} else: gcc {
|
||||
vars = $$qtVariablesFromGCC($$QMAKE_CXX)
|
||||
}
|
||||
for (v, vars) {
|
||||
isEmpty(v)|contains(v, $${LITERAL_HASH}.*): next()
|
||||
# Set both <varname> for the outer scope ...
|
||||
eval($$v)
|
||||
v ~= s/ .*//
|
||||
isEmpty($$v): error("Compiler produced empty value for $${v}.")
|
||||
# ... and save QMAKE_(HOST_)?CXX.<varname> in the cache.
|
||||
cache($${target_prefix}.$$v, set stash, $$v)
|
||||
$${target_prefix}.COMPILER_MACROS += $$v
|
||||
}
|
||||
cache($${target_prefix}.COMPILER_MACROS, set stash)
|
||||
} else {
|
||||
# load from the cache
|
||||
for (i, $${target_prefix}.COMPILER_MACROS): \
|
||||
$$i = $$eval($${target_prefix}.$$i)
|
||||
}
|
||||
|
||||
unset(target_prefix)
|
||||
|
||||
# Populate QMAKE_COMPILER_DEFINES and some compatibility variables.
|
||||
# The $$format_number() calls strip leading zeros to avoid misinterpretation as octal.
|
||||
!isEmpty(QMAKE_MSC_VER) {
|
||||
QMAKE_COMPILER_DEFINES += _MSC_VER=$$QMAKE_MSC_VER _MSC_FULL_VER=$$QMAKE_MSC_FULL_VER
|
||||
QT_MSVC_MAJOR_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\1")
|
||||
QT_MSVC_MINOR_VERSION = $$format_number($$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\2"))
|
||||
QT_MSVC_PATCH_VERSION = $$replace(QMAKE_MSC_FULL_VER, "(..)(..)(.*)", "\\3"))
|
||||
}
|
||||
!isEmpty(QMAKE_ICC_VER) {
|
||||
QMAKE_COMPILER_DEFINES += __INTEL_COMPILER=$$QMAKE_ICC_VER __INTEL_COMPILER_UPDATE=$$QMAKE_ICC_UPDATE_VER
|
||||
QT_ICC_MAJOR_VERSION = $$replace(QMAKE_ICC_VER, "(..)(..)", "\\1")
|
||||
QT_ICC_MINOR_VERSION = $$format_number($$replace(QMAKE_ICC_VER, "(..)(..)", "\\2"))
|
||||
QT_ICC_PATCH_VERSION = $$QMAKE_ICC_UPDATE_VER
|
||||
}
|
||||
!isEmpty(QMAKE_APPLE_CC): \
|
||||
QMAKE_COMPILER_DEFINES += __APPLE_CC__=$$QMAKE_APPLE_CC
|
||||
!isEmpty(QT_APPLE_CLANG_MAJOR_VERSION): \
|
||||
QMAKE_COMPILER_DEFINES += __clang__ \
|
||||
__clang_major__=$$QT_APPLE_CLANG_MAJOR_VERSION \
|
||||
__clang_minor__=$$QT_APPLE_CLANG_MINOR_VERSION \
|
||||
__clang_patchlevel__=$$QT_APPLE_CLANG_PATCH_VERSION
|
||||
!isEmpty(QT_CLANG_MAJOR_VERSION): \
|
||||
QMAKE_COMPILER_DEFINES += __clang__ \
|
||||
__clang_major__=$$QT_CLANG_MAJOR_VERSION \
|
||||
__clang_minor__=$$QT_CLANG_MINOR_VERSION \
|
||||
__clang_patchlevel__=$$QT_CLANG_PATCH_VERSION
|
||||
!isEmpty(QT_GCC_MAJOR_VERSION): \
|
||||
QMAKE_COMPILER_DEFINES += \
|
||||
__GNUC__=$$QT_GCC_MAJOR_VERSION \
|
||||
__GNUC_MINOR__=$$QT_GCC_MINOR_VERSION \
|
||||
__GNUC_PATCHLEVEL__=$$QT_GCC_PATCH_VERSION
|
||||
|
||||
QMAKE_CFLAGS += $$QMAKE_CFLAGS_MSVC_COMPAT
|
||||
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_MSVC_COMPAT
|
||||
|
||||
msvc:!intel_icl:!clang_cl: include(../common/msvc-version.conf)
|
||||
|
@ -1,3 +1,2 @@
|
||||
CONFIG = rtti_off incremental_off windows $$CONFIG
|
||||
CONFIG = incremental_off windows $$CONFIG
|
||||
load(default_pre)
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
||||
isEmpty(WINRT_MANIFEST.background): WINRT_MANIFEST.background = green
|
||||
isEmpty(WINRT_MANIFEST.foreground): WINRT_MANIFEST.foreground = light
|
||||
isEmpty(WINRT_MANIFEST.default_language): WINRT_MANIFEST.default_language = en
|
||||
*-msvc2015 {
|
||||
*-msvc2015|*-msvc2017 {
|
||||
isEmpty(WINRT_MANIFEST.minVersion): WINRT_MANIFEST.minVersion = $$(UCRTVersion)
|
||||
isEmpty(WINRT_MANIFEST.minVersion): error("No UCRTVersion found in environment."))
|
||||
isEmpty(WINRT_MANIFEST.maxVersionTested): WINRT_MANIFEST.maxVersionTested = $$WINRT_MANIFEST.minVersion
|
||||
@ -116,7 +116,7 @@
|
||||
|
||||
# All Windows 10 applications need to have internetClient. It is also not marked as additional
|
||||
# capability anymore and is assumed to be standard.
|
||||
*-msvc2015: WINRT_MANIFEST.capabilities += internetClient
|
||||
*-msvc2015|*-msvc2017: WINRT_MANIFEST.capabilities += internetClient
|
||||
|
||||
contains(WINRT_MANIFEST.capabilities, defaults) {
|
||||
WINRT_MANIFEST.capabilities -= defaults
|
||||
@ -143,7 +143,7 @@
|
||||
}
|
||||
|
||||
# Dependencies are given as a string list. The CRT dependency is added automatically above.
|
||||
# For MSVC2015 the dependencies are added in conjunction with TargetDeviceFamily
|
||||
# For MSVC2015/2017 the dependencies are added in conjunction with TargetDeviceFamily
|
||||
# Due to the hard coded dependency on "Windows.Universal" the <Dependencies> tag
|
||||
# is already inside the MSVC2015 manifest.
|
||||
WINRT_MANIFEST.dependencies = $$unique(WINRT_MANIFEST.dependencies)
|
||||
|
@ -79,6 +79,7 @@ QMAKE_LINK = icpc
|
||||
QMAKE_LINK_SHLIB = icpc
|
||||
QMAKE_LFLAGS =
|
||||
QMAKE_LFLAGS_RELEASE =
|
||||
QMAKE_LFLAGS_APP = -pie
|
||||
QMAKE_LFLAGS_DEBUG =
|
||||
QMAKE_LFLAGS_SHLIB = -shared -shared-intel
|
||||
QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB
|
||||
|
@ -1,13 +1,9 @@
|
||||
#
|
||||
# qmake configuration for win32-clang-msvc2015
|
||||
|
||||
# qmake configuration for win32-clang-msvc
|
||||
#
|
||||
# Written for Clang 3.8 with Microsoft Visual C++ 2015 Update 1
|
||||
# Notice: this uses the clang-cl wrapper
|
||||
#
|
||||
|
||||
MSC_VER = 1900
|
||||
MSVC_VER = 14.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
|
||||
QMAKE_COMPILER += clang_cl llvm
|
||||
@ -15,7 +11,7 @@ QMAKE_COMPILER += clang_cl llvm
|
||||
QMAKE_CC = clang-cl
|
||||
QMAKE_CXX = $$QMAKE_CC
|
||||
|
||||
QMAKE_CFLAGS += -fms-compatibility-version=19.00.23506 -Wno-microsoft-enum-value
|
||||
QMAKE_CFLAGS += -Wno-microsoft-enum-value
|
||||
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
|
||||
|
||||
# Precompiled headers are not supported yet by clang
|
@ -37,4 +37,4 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../win32-msvc/qplatformdefs.h"
|
@ -1,34 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** 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 http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://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 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
@ -37,4 +37,4 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../win32-msvc/qplatformdefs.h"
|
||||
|
8
mkspecs/win32-msvc/qmake.conf
Normal file
8
mkspecs/win32-msvc/qmake.conf
Normal file
@ -0,0 +1,8 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc
|
||||
#
|
||||
# Written for Microsoft Visual C++ (all desktop versions)
|
||||
#
|
||||
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2005
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2005
|
||||
#
|
||||
|
||||
MSC_VER = 1400
|
||||
MSVC_VER = 8.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2008
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2008
|
||||
#
|
||||
|
||||
MSC_VER = 1500
|
||||
MSVC_VER = 9.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2010
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2010
|
||||
#
|
||||
|
||||
MSC_VER = 1600
|
||||
MSVC_VER = 10.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2012
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2012
|
||||
#
|
||||
|
||||
MSC_VER = 1700
|
||||
MSVC_VER = 11.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2013
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2013
|
||||
#
|
||||
|
||||
MSC_VER = 1800
|
||||
MSVC_VER = 12.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2015
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2015
|
||||
#
|
||||
|
||||
MSC_VER = 1900
|
||||
MSVC_VER = 14.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,40 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec 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$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
@ -1,10 +0,0 @@
|
||||
#
|
||||
# qmake configuration for win32-msvc2017
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2017
|
||||
#
|
||||
|
||||
MSC_VER = 1910
|
||||
MSVC_VER = 15.0
|
||||
include(../common/msvc-desktop.conf)
|
||||
load(qt_config)
|
@ -1,34 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: http://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the qmake spec of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL21$
|
||||
** 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 http://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at http://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 2.1 or version 3 as published by the Free
|
||||
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||
** following information to ensure the GNU Lesser General Public License
|
||||
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** As a special exception, The Qt Company gives you certain additional
|
||||
** rights. These rights are described in The Qt Company LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
@ -4,9 +4,7 @@
|
||||
# Written for Microsoft Visual C++ 2015
|
||||
#
|
||||
|
||||
MSC_VER = 1900
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1900
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 ARM __ARM__ __arm__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
@ -16,7 +14,6 @@ QMAKE_LFLAGS += /MACHINE:ARM /NODEFAULTLIB:kernel32.lib
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
|
||||
VCPROJ_ARCH = ARM
|
||||
MSVC_VER = 14.0
|
||||
WINSDK_VER = 10.0
|
||||
WINTARGET_VER = winv10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
|
@ -4,9 +4,7 @@
|
||||
# Written for Microsoft Visual C++ 2015
|
||||
#
|
||||
|
||||
MSC_VER = 1900
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1900 _WIN32
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X64 __X64__ __x64__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
@ -16,7 +14,6 @@ QMAKE_LFLAGS += /MACHINE:X64 /NODEFAULTLIB:kernel32.lib
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
|
||||
VCPROJ_ARCH = x64
|
||||
MSVC_VER = 14.0
|
||||
WINSDK_VER = 10.0
|
||||
WINTARGET_VER = winv10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
|
20
mkspecs/winrt-x64-msvc2017/qmake.conf
Normal file
20
mkspecs/winrt-x64-msvc2017/qmake.conf
Normal file
@ -0,0 +1,20 @@
|
||||
#
|
||||
# qmake configuration for winrt-x64-msvc2017
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2017
|
||||
#
|
||||
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X64 __X64__ __x64__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
QMAKE_LFLAGS += /MACHINE:X64 /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
|
||||
VCPROJ_ARCH = x64
|
||||
WINSDK_VER = 10.0
|
||||
WINTARGET_VER = winv10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
WINRT_MANIFEST.architecture = x64
|
@ -37,4 +37,4 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
@ -4,9 +4,7 @@
|
||||
# Written for Microsoft Visual C++ 2015
|
||||
#
|
||||
|
||||
MSC_VER = 1900
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1900 _WIN32
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X86 __X86__ __x86__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
@ -15,7 +13,6 @@ QMAKE_LFLAGS += /SAFESEH /MACHINE:X86 /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
VCPROJ_ARCH = Win32
|
||||
MSVC_VER = 14.0
|
||||
WINSDK_VER = 10.0
|
||||
WINTARGET_VER = winv10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
|
19
mkspecs/winrt-x86-msvc2017/qmake.conf
Normal file
19
mkspecs/winrt-x86-msvc2017/qmake.conf
Normal file
@ -0,0 +1,19 @@
|
||||
#
|
||||
# qmake configuration for winrt-x86-msvc2017
|
||||
#
|
||||
# Written for Microsoft Visual C++ 2017
|
||||
#
|
||||
|
||||
include(../common/winrt_winphone/qmake.conf)
|
||||
DEFINES += WINAPI_FAMILY=WINAPI_FAMILY_PC_APP WINAPI_PARTITION_PHONE_APP=1 X86 __X86__ __x86__
|
||||
|
||||
QMAKE_CFLAGS += -FS
|
||||
QMAKE_CXXFLAGS += -FS
|
||||
QMAKE_LFLAGS += /SAFESEH /MACHINE:X86 /NODEFAULTLIB:kernel32.lib
|
||||
|
||||
QMAKE_LIBS += windowscodecs.lib WindowsApp.lib runtimeobject.lib OneCore.lib
|
||||
VCPROJ_ARCH = Win32
|
||||
WINSDK_VER = 10.0
|
||||
WINTARGET_VER = winv10.0
|
||||
WINRT_MANIFEST = $$PWD/../common/winrt_winphone/manifests/10.0/AppxManifest.xml.in
|
||||
WINRT_MANIFEST.architecture = x86
|
@ -37,4 +37,4 @@
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "../win32-msvc2005/qplatformdefs.h"
|
||||
#include "../common/winrt_winphone/qplatformdefs.h"
|
@ -16,7 +16,7 @@ QOBJS=qtextcodec.o qutfcodec.o qstring.o qstring_compat.o qstringbuilder.o qtext
|
||||
qarraydata.o qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlist.o qfiledevice.o qfile.o \
|
||||
qfilesystementry.o qfilesystemengine.o qfsfileengine.o qfsfileengine_iterator.o qregexp.o qvector.o \
|
||||
qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o qfileinfo.o qdatetime.o qstringlist.o \
|
||||
qabstractfileengine.o qtemporaryfile.o qmap.o qmetatype.o qsettings.o qsystemerror.o qlibraryinfo.o \
|
||||
qabstractfileengine.o qtemporaryfile.o qmap.o qmetatype.o qsettings.o qsystemerror.o \
|
||||
qvariant.o qvsnprintf.o qlocale.o qlocale_tools.o qlinkedlist.o qnumeric.o \
|
||||
qcryptographichash.o qxmlstream.o qxmlutils.o qlogging.o qoperatingsystemversion.o \
|
||||
qjson.o qjsondocument.o qjsonparser.o qjsonarray.o qjsonobject.o qjsonvalue.o \
|
||||
@ -33,6 +33,7 @@ DEPEND_SRC = \
|
||||
$(QMKGENSRC)/projectgenerator.cpp $(QMKGENSRC)/makefile.cpp \
|
||||
$(QMKGENSRC)/unix/unixmake.cpp $(QMKGENSRC)/unix/unixmake2.cpp \
|
||||
$(QMKGENSRC)/mac/pbuilder_pbx.cpp \
|
||||
$(QMKGENSRC)/win32/registry.cpp \
|
||||
$(QMKGENSRC)/win32/winmakefile.cpp \
|
||||
$(QMKGENSRC)/win32/mingw_make.cpp $(QMKGENSRC)/win32/msvc_nmake.cpp \
|
||||
$(QMKGENSRC)/mac/xmloutput.cpp \
|
||||
@ -84,7 +85,6 @@ DEPEND_SRC = \
|
||||
$(SOURCE_PATH)/src/corelib/kernel/qsystemerror.cpp \
|
||||
$(SOURCE_PATH)/src/corelib/global/qlogging.cpp \
|
||||
$(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp \
|
||||
$(SOURCE_PATH)/tools/shared/windows/registry.cpp \
|
||||
$(SOURCE_PATH)/src/corelib/json/qjson.cpp \
|
||||
$(SOURCE_PATH)/src/corelib/json/qjsondocument.cpp \
|
||||
$(SOURCE_PATH)/src/corelib/json/qjsonparser.cpp \
|
||||
@ -100,7 +100,6 @@ CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
|
||||
-I$(INC_PATH)/QtCore/$(QT_VERSION) -I$(INC_PATH)/QtCore/$(QT_VERSION)/QtCore \
|
||||
-I$(BUILD_PATH)/src/corelib/global \
|
||||
-I$(QMAKESPEC) \
|
||||
-I$(SOURCE_PATH)/tools/shared \
|
||||
-DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
|
||||
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
|
||||
-DQT_NO_FOREACH
|
||||
@ -110,19 +109,24 @@ LFLAGS = $(EXTRA_LFLAGS) $(CONFIG_LFLAGS)
|
||||
|
||||
first all: $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
||||
qmake: $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
||||
binary: $(BUILD_PATH)/qmake/qmake$(EXEEXT)
|
||||
|
||||
$(BUILD_PATH)/bin/qmake$(EXEEXT): $(OBJS) $(QOBJS)
|
||||
$(CXX) -o "$@" $(OBJS) $(QOBJS) $(LFLAGS)
|
||||
$(BUILD_PATH)/bin/qmake$(EXEEXT): $(OBJS) $(QOBJS) qlibraryinfo.o
|
||||
$(CXX) -o "$@" $(OBJS) $(QOBJS) qlibraryinfo.o $(LFLAGS)
|
||||
|
||||
$(BUILD_PATH)/qmake/qmake$(EXEEXT): $(OBJS) $(QOBJS) qlibraryinfo_final.o
|
||||
$(CXX) -o "$@" $(OBJS) $(QOBJS) qlibraryinfo_final.o $(LFLAGS)
|
||||
|
||||
Makefile: $(SOURCE_PATH)/qmake/Makefile.unix
|
||||
@echo "Out of date, please rerun configure"
|
||||
|
||||
clean::
|
||||
$(RM_F) $(OBJS) $(QOBJS)
|
||||
$(RM_F) $(OBJS) $(QOBJS) qlibraryinfo.o qlibraryinfo_final.o
|
||||
|
||||
distclean:: clean
|
||||
$(RM_RF) .deps
|
||||
$(RM_F) $(BUILD_PATH)/bin/qmake$(EXEEXT)
|
||||
$(RM_F) $(BUILD_PATH)/qmake/qmake$(EXEEXT)
|
||||
$(RM_F) Makefile
|
||||
|
||||
depend:
|
||||
@ -184,6 +188,9 @@ unixmake.o: $(QMKSRC)/generators/unix/unixmake.cpp
|
||||
unixmake2.o: $(QMKSRC)/generators/unix/unixmake2.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $<
|
||||
|
||||
registry.o: $(QMKSRC)/generators/win32/registry.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $<
|
||||
|
||||
winmakefile.o: $(QMKSRC)/generators/win32/winmakefile.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $<
|
||||
|
||||
@ -225,6 +232,9 @@ qsystemerror.o: $(SOURCE_PATH)/src/corelib/kernel/qsystemerror.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/kernel/qsystemerror.cpp
|
||||
|
||||
qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) -DQT_BUILD_QMAKE_BOOTSTRAP $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
|
||||
|
||||
qlibraryinfo_final.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp $(BUILD_PATH)/src/corelib/global/qconfig.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
|
||||
|
||||
qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
|
||||
@ -413,9 +423,6 @@ qlogging.o: $(SOURCE_PATH)/src/corelib/global/qlogging.cpp
|
||||
qsystemlibrary.o: $(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/plugin/qsystemlibrary.cpp
|
||||
|
||||
registry.o: $(SOURCE_PATH)/tools/shared/windows/registry.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/tools/shared/windows/registry.cpp
|
||||
|
||||
qjson.o: $(SOURCE_PATH)/src/corelib/json/qjson.cpp
|
||||
$(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/json/qjson.cpp
|
||||
|
||||
|
@ -18,4 +18,4 @@ QTSRCS = \
|
||||
$(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
|
||||
$(SOURCE_PATH)/qmake/generators/win32/registry.cpp
|
||||
|
@ -14,35 +14,29 @@ QMKSRC = $(SOURCE_PATH)\qmake
|
||||
CXX = icl
|
||||
LINKER = link
|
||||
CFLAGS_EXTRA = /Zc:forScope /Qstd=c++11
|
||||
!elseif "$(QMAKESPEC)" == "win32-clang-msvc2015"
|
||||
!elseif "$(QMAKESPEC)" == "win32-clang-msvc"
|
||||
CXX = clang-cl
|
||||
LINKER = link
|
||||
CFLAGS_EXTRA = -fms-compatibility-version=19.00.23506 -Wno-microsoft-enum-value
|
||||
!else
|
||||
CXX = cl
|
||||
LINKER = link
|
||||
! if "$(QMAKESPEC)" == "win32-msvc2013"
|
||||
CFLAGS_EXTRA = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS $(CFLAGS_CRT)
|
||||
! elseif "$(QMAKESPEC)" == "win32-msvc2015" || "$(QMAKESPEC)" == "win32-msvc2017" || "$(QMAKESPEC)" == "win32-clang-msvc2015"
|
||||
CFLAGS_EXTRA = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS /Zc:strictStrings /w44456 /w44457 /w44458 /wd4577 $(CFLAGS_CRT)
|
||||
! else
|
||||
! error Unsupported compiler for this Makefile
|
||||
! endif
|
||||
CFLAGS_EXTRA = /MP /D_CRT_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_WARNINGS \
|
||||
/wd4577 $(CFLAGS_CRT)
|
||||
!endif # !win32-icc
|
||||
|
||||
!if "$(QMAKESPEC)" != "win32-clang-msvc2015"
|
||||
!if "$(QMAKESPEC)" != "win32-clang-msvc"
|
||||
CFLAGS_PCH = -Yuqmake_pch.h -FIqmake_pch.h -Fpqmake_pch.pch
|
||||
PCH_OBJECT = qmake_pch.obj
|
||||
!endif
|
||||
|
||||
CFLAGS_BARE = -c -Fo./ -Fdqmake.pdb \
|
||||
-W3 -nologo -O1 \
|
||||
-W2 -nologo -O1 \
|
||||
$(CFLAGS_EXTRA) \
|
||||
-I$(QMKSRC) -I$(QMKSRC)\library -I$(QMKSRC)\generators -I$(QMKSRC)\generators\unix -I$(QMKSRC)\generators\win32 -I$(QMKSRC)\generators\mac \
|
||||
-I$(INC_PATH) -I$(INC_PATH)\QtCore -I$(INC_PATH)\QtCore\$(QT_VERSION) -I$(INC_PATH)\QtCore\$(QT_VERSION)\QtCore \
|
||||
-I$(BUILD_PATH)\src\corelib\global \
|
||||
-I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC) \
|
||||
-I$(SOURCE_PATH)\tools\shared \
|
||||
-DQT_VERSION_STR=\"$(QT_VERSION)\" -DQT_VERSION_MAJOR=$(QT_MAJOR_VERSION) -DQT_VERSION_MINOR=$(QT_MINOR_VERSION) -DQT_VERSION_PATCH=$(QT_PATCH_VERSION) \
|
||||
-DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
|
||||
-DQT_NO_FOREACH -DUNICODE
|
||||
@ -116,7 +110,6 @@ QTOBJS= \
|
||||
quuid.obj \
|
||||
qvector.obj \
|
||||
qsettings.obj \
|
||||
qlibraryinfo.obj \
|
||||
qvariant.obj \
|
||||
qsettings_win.obj \
|
||||
qmetatype.obj \
|
||||
@ -132,12 +125,16 @@ QTOBJS= \
|
||||
qjsonvalue.obj
|
||||
|
||||
first all: $(BUILD_PATH)\bin\qmake.exe
|
||||
binary: $(BUILD_PATH)\qmake\qmake.exe
|
||||
|
||||
$(BUILD_PATH)\bin\qmake.exe: $(OBJS) $(QTOBJS)
|
||||
$(LINKER) $(LFLAGS) /OUT:$(BUILD_PATH)\bin\qmake.exe $(OBJS) $(QTOBJS) $(PCH_OBJECT) $(LIBS)
|
||||
$(BUILD_PATH)\bin\qmake.exe: $(OBJS) $(QTOBJS) qlibraryinfo.obj
|
||||
$(LINKER) $(LFLAGS) /OUT:$(BUILD_PATH)\bin\qmake.exe $(OBJS) $(QTOBJS) qlibraryinfo.obj $(PCH_OBJECT) $(LIBS)
|
||||
|
||||
$(BUILD_PATH)\qmake\qmake.exe: $(OBJS) $(QTOBJS) qlibraryinfo_final.obj
|
||||
$(LINKER) $(LFLAGS) /OUT:$(BUILD_PATH)\qmake\qmake.exe $(OBJS) $(QTOBJS) qlibraryinfo_final.obj $(PCH_OBJECT) $(LIBS)
|
||||
|
||||
clean::
|
||||
-del $(QTOBJS)
|
||||
-del $(QTOBJS) qlibraryinfo.obj qlibraryinfo_final.obj
|
||||
-del $(OBJS)
|
||||
-del qmake_pch.obj
|
||||
-del qmake_pch.pch
|
||||
@ -147,6 +144,7 @@ clean::
|
||||
|
||||
distclean:: clean
|
||||
-del $(BUILD_PATH)\bin\qmake.exe
|
||||
-del $(BUILD_PATH)\qmake\qmake.exe
|
||||
-del Makefile
|
||||
|
||||
.cpp.obj:
|
||||
@ -156,6 +154,9 @@ $(OBJS): $(PCH_OBJECT)
|
||||
|
||||
$(QTOBJS): $(PCH_OBJECT)
|
||||
|
||||
qlibraryinfo.obj: $(PCH_OBJECT)
|
||||
qlibraryinfo_final.obj: $(PCH_OBJECT)
|
||||
|
||||
qmake_pch.obj:
|
||||
$(CXX) $(CXXFLAGS_BARE) -c -Yc -Fpqmake_pch.pch -TP $(QMKSRC)\qmake_pch.h
|
||||
|
||||
@ -204,9 +205,12 @@ qmake_pch.obj:
|
||||
{$(SOURCE_PATH)\src\corelib\json}.cpp{}.obj::
|
||||
$(CXX) $(CXXFLAGS) $<
|
||||
|
||||
{$(SOURCE_PATH)\tools\shared\windows}.cpp{}.obj::
|
||||
$(CXX) $(CXXFLAGS) $<
|
||||
|
||||
# Make sure qstring_compat.obj isn't compiled with PCH enabled
|
||||
qstring_compat.obj: $(SOURCE_PATH)\src\corelib\tools\qstring_compat.cpp
|
||||
$(CXX) -c $(CXXFLAGS_BARE) $(SOURCE_PATH)\src\corelib\tools\qstring_compat.cpp
|
||||
|
||||
qlibraryinfo.obj: $(SOURCE_PATH)\src\corelib\global\qlibraryinfo.cpp
|
||||
$(CXX) $(CXXFLAGS) -DQT_BUILD_QMAKE_BOOTSTRAP $(SOURCE_PATH)\src\corelib\global\qlibraryinfo.cpp
|
||||
|
||||
qlibraryinfo_final.obj: $(SOURCE_PATH)\src\corelib\global\qlibraryinfo.cpp $(BUILD_PATH)\src\corelib\global\qconfig.cpp
|
||||
$(CXX) $(CXXFLAGS) -Foqlibraryinfo_final.obj $(SOURCE_PATH)\src\corelib\global\qlibraryinfo.cpp
|
||||
|
@ -120,7 +120,7 @@ qmake -spec macx-g++
|
||||
|
||||
|
||||
#! [14]
|
||||
QMAKE_LFLAGS += -F/path/to/framework/directory/
|
||||
LIBS += -F/path/to/framework/directory/
|
||||
#! [14]
|
||||
|
||||
|
||||
@ -784,10 +784,6 @@ CONFIG(debug, debug|release) {
|
||||
}
|
||||
#! [127]
|
||||
|
||||
#! [142]
|
||||
DEPLOYMENT_PLUGIN += qjpeg
|
||||
#! [142]
|
||||
|
||||
#! [149]
|
||||
SUBDIRS += my_executable my_library
|
||||
my_executable.subdir = app
|
||||
|
@ -685,7 +685,7 @@
|
||||
|
||||
Directories other than the standard framework directory need to be specified
|
||||
to the build system, and this is achieved by appending linker options to the
|
||||
\l{QMAKE_LFLAGS} variable, as shown in the following example:
|
||||
\l{LIBS} variable, as shown in the following example:
|
||||
|
||||
\snippet code/doc_src_qmake-manual.pro 14
|
||||
|
||||
@ -960,6 +960,8 @@
|
||||
\row \li c++14 \li C++14 support is enabled. This option has no effect if
|
||||
the compiler does not support C++14.
|
||||
By default, support is disabled.
|
||||
\row \li depend_includepath \li Appending the value of INCLUDEPATH to
|
||||
DEPENDPATH is enabled. Set by default.
|
||||
\endtable
|
||||
|
||||
When you use the \c debug_and_release option (which is the default under
|
||||
@ -1119,24 +1121,6 @@
|
||||
Specifies a list of all directories to look in to resolve dependencies. This
|
||||
variable is used when crawling through \c included files.
|
||||
|
||||
\target DEPLOYMENT_PLUGIN
|
||||
\section1 DEPLOYMENT_PLUGIN
|
||||
|
||||
\note This variable is used only on the Windows CE platform.
|
||||
|
||||
Specifies the Qt plugins that will be deployed. All plugins
|
||||
available in Qt can be explicitly deployed to the device. See
|
||||
\l{Static Plugins}{Static Plugins} for a complete list.
|
||||
|
||||
\note No plugins will be deployed automatically to Windows CE devices.
|
||||
If the application depends on plugins, these plugins have to be specified
|
||||
manually.
|
||||
|
||||
For example, the following definition uploads the jpeg imageformat plugin to
|
||||
the plugins directory on the Windows CE device:
|
||||
|
||||
\snippet code/doc_src_qmake-manual.pro 142
|
||||
|
||||
\target DESTDIR
|
||||
\section1 DESTDIR
|
||||
|
||||
|
@ -2254,12 +2254,17 @@ MakefileGenerator::writeDefaultVariables(QTextStream &t)
|
||||
t << "MOVE = " << var("QMAKE_MOVE") << endl;
|
||||
}
|
||||
|
||||
QString MakefileGenerator::buildArgs()
|
||||
QString MakefileGenerator::buildArgs(bool withExtra)
|
||||
{
|
||||
QString ret;
|
||||
|
||||
for (const QString &arg : qAsConst(Option::globals->qmake_args))
|
||||
ret += " " + shellQuote(arg);
|
||||
if (withExtra && !Option::globals->qmake_extra_args.isEmpty()) {
|
||||
ret += " --";
|
||||
for (const QString &arg : qAsConst(Option::globals->qmake_extra_args))
|
||||
ret += " " + shellQuote(arg);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -2278,7 +2283,7 @@ QString MakefileGenerator::build_args()
|
||||
ret += " " + escapeFilePath(fileFixify(project->projectFile()));
|
||||
|
||||
// general options and arguments
|
||||
ret += buildArgs();
|
||||
ret += buildArgs(true);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2442,7 +2447,7 @@ MakefileGenerator::writeSubTargetCall(QTextStream &t,
|
||||
if (!in_directory.isEmpty())
|
||||
t << "\n\t" << mkdir_p_asstring(out_directory);
|
||||
pfx = "( " + chkexists.arg(out) +
|
||||
+ " $(QMAKE) -o " + out + ' ' + in + buildArgs()
|
||||
+ " $(QMAKE) -o " + out + ' ' + in + buildArgs(false)
|
||||
+ " ) && ";
|
||||
}
|
||||
writeSubMakeCall(t, out_directory_cdin + pfx, makefilein);
|
||||
@ -2513,7 +2518,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT
|
||||
t << mkdir_p_asstring(out_directory)
|
||||
<< out_directory_cdin;
|
||||
}
|
||||
t << "$(QMAKE) -o " << out << ' ' << in << buildArgs();
|
||||
t << "$(QMAKE) -o " << out << ' ' << in << buildArgs(false);
|
||||
if (!dont_recurse)
|
||||
writeSubMakeCall(t, out_directory_cdin, makefilein + " qmake_all");
|
||||
else
|
||||
@ -2710,7 +2715,7 @@ MakefileGenerator::writeMakeQmake(QTextStream &t, bool noDummyQmakeAll)
|
||||
if(project->isEmpty("QMAKE_FAILED_REQUIREMENTS") && !project->isEmpty("QMAKE_INTERNAL_PRL_FILE")) {
|
||||
QStringList files = escapeFilePaths(fileFixify(Option::mkfile::project_files));
|
||||
t << escapeDependencyPath(project->first("QMAKE_INTERNAL_PRL_FILE").toQString()) << ": \n\t"
|
||||
<< "@$(QMAKE) -prl " << files.join(' ') << ' ' << buildArgs() << endl;
|
||||
<< "@$(QMAKE) -prl " << files.join(' ') << ' ' << buildArgs(true) << endl;
|
||||
}
|
||||
|
||||
QString qmake = build_args();
|
||||
|
@ -178,7 +178,7 @@ protected:
|
||||
QString specdir();
|
||||
|
||||
//subclasses can use these to query information about how the generator was "run"
|
||||
QString buildArgs();
|
||||
QString buildArgs(bool withExtra);
|
||||
|
||||
virtual QStringList &findDependencies(const QString &file);
|
||||
virtual bool doDepends() const { return Option::mkfile::do_deps; }
|
||||
|
@ -659,11 +659,15 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
t << "$(TARGETA): " << depVar("PRE_TARGETDEPS") << " $(OBJECTS) $(OBJCOMP)";
|
||||
if(do_incremental)
|
||||
t << " $(INCREMENTAL_OBJECTS)";
|
||||
t << ' ' << depVar("POST_TARGETDEPS") << "\n\t"
|
||||
<< "-$(DEL_FILE) $(TARGETA) \n\t"
|
||||
t << ' ' << depVar("POST_TARGETDEPS") << "\n\t";
|
||||
if (!project->isEmpty("QMAKE_PRE_LINK"))
|
||||
t << var("QMAKE_PRE_LINK") << "\n\t";
|
||||
t << "-$(DEL_FILE) $(TARGETA) \n\t"
|
||||
<< var("QMAKE_AR_CMD");
|
||||
if(do_incremental)
|
||||
t << " $(INCREMENTAL_OBJECTS)";
|
||||
if (!project->isEmpty("QMAKE_POST_LINK"))
|
||||
t << "\n\t" << var("QMAKE_POST_LINK");
|
||||
if(!project->isEmpty("QMAKE_RANLIB"))
|
||||
t << "\n\t$(RANLIB) $(TARGETA)";
|
||||
t << endl << endl;
|
||||
@ -680,6 +684,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
<< " $(OBJECTS) $(OBJCOMP) " << depVar("POST_TARGETDEPS") << "\n\t";
|
||||
if(!destdir.isEmpty())
|
||||
t << mkdir_p_asstring(destdir, false) << "\n\t";
|
||||
if (!project->isEmpty("QMAKE_PRE_LINK"))
|
||||
t << var("QMAKE_PRE_LINK") << "\n\t";
|
||||
t << "-$(DEL_FILE) " << destdir << "$(TARGET)\n\t"
|
||||
<< var("QMAKE_AR_CMD") << "\n";
|
||||
if(!project->isEmpty("QMAKE_POST_LINK"))
|
||||
@ -710,6 +716,8 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
}
|
||||
if(!destdir.isEmpty())
|
||||
t << mkdir_p_asstring(destdir, false) << "\n\t";
|
||||
if (!project->isEmpty("QMAKE_PRE_LINK"))
|
||||
t << var("QMAKE_PRE_LINK") << "\n\t";
|
||||
t << "-$(DEL_FILE) " << lib << "\n\t"
|
||||
<< ar << "\n";
|
||||
if(!project->isEmpty("QMAKE_POST_LINK"))
|
||||
@ -732,7 +740,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
|
||||
}
|
||||
if(!meta_files.isEmpty())
|
||||
t << escapeDependencyPaths(meta_files).join(" ") << ": \n\t"
|
||||
<< "@$(QMAKE) -prl " << escapeFilePath(project->projectFile()) << ' ' << buildArgs() << endl;
|
||||
<< "@$(QMAKE) -prl " << escapeFilePath(project->projectFile()) << ' ' << buildArgs(true) << endl;
|
||||
}
|
||||
|
||||
if (!project->isEmpty("QMAKE_BUNDLE")) {
|
||||
|
@ -176,7 +176,7 @@ const char _Optimization[] = "Optimization";
|
||||
const char _OptimizeReferences[] = "OptimizeReferences";
|
||||
const char _OutputDirectory[] = "OutputDirectory";
|
||||
const char _OutputFile[] = "OutputFile";
|
||||
const char _PlatformToolSet[] = "PlatformToolSet";
|
||||
const char _PlatformToolSet[] = "PlatformToolset";
|
||||
const char _PrecompiledHeader[] = "PrecompiledHeader";
|
||||
const char _PrecompiledHeaderFile[] = "PrecompiledHeaderFile";
|
||||
const char _PrecompiledHeaderOutputFile[] = "PrecompiledHeaderOutputFile";
|
||||
@ -406,7 +406,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
|
||||
xml << decl("1.0", "utf-8")
|
||||
<< tag("Project")
|
||||
<< attrTag("DefaultTargets","Build")
|
||||
<< attrTag("ToolsVersion", "4.0")
|
||||
<< attrTagToolsVersion(tool.Configuration)
|
||||
<< attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003")
|
||||
<< tag("ItemGroup")
|
||||
<< attrTag("Label", "ProjectConfigurations");
|
||||
@ -550,7 +550,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
|
||||
|
||||
xmlFilter << decl("1.0", "utf-8")
|
||||
<< tag("Project")
|
||||
<< attrTag("ToolsVersion", "4.0")
|
||||
<< attrTagToolsVersion(tool.Configuration)
|
||||
<< attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
|
||||
|
||||
xmlFilter << tag("ItemGroup");
|
||||
@ -587,6 +587,8 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProjectSingleConfig &tool)
|
||||
outputFilter(tempProj, xml, xmlFilter, tempProj.ExtraCompilers.at(x));
|
||||
}
|
||||
|
||||
outputFilter(tempProj, xml, xmlFilter, "Root Files");
|
||||
|
||||
xml << import("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
|
||||
|
||||
xml << tag("ImportGroup")
|
||||
@ -603,13 +605,10 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool)
|
||||
|
||||
xml.setIndentString(" ");
|
||||
|
||||
const QString toolsVersion = (tool.SdkVersion == QLatin1String("10.0")) ? QStringLiteral("14.0")
|
||||
: QStringLiteral("4.0");
|
||||
|
||||
xml << decl("1.0", "utf-8")
|
||||
<< tag("Project")
|
||||
<< attrTag("DefaultTargets","Build")
|
||||
<< attrTag("ToolsVersion", toolsVersion)
|
||||
<< attrTagToolsVersion(tool.SingleProjects.first().Configuration)
|
||||
<< attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003")
|
||||
<< tag("ItemGroup")
|
||||
<< attrTag("Label", "ProjectConfigurations");
|
||||
@ -794,7 +793,7 @@ void VCXProjectWriter::write(XmlOutput &xml, VCProject &tool)
|
||||
|
||||
xmlFilter << decl("1.0", "utf-8")
|
||||
<< tag("Project")
|
||||
<< attrTag("ToolsVersion", "4.0")
|
||||
<< attrTagToolsVersion(tool.SingleProjects.first().Configuration)
|
||||
<< attrTag("xmlns", "http://schemas.microsoft.com/developer/msbuild/2003");
|
||||
|
||||
xmlFilter << tag("ItemGroup");
|
||||
@ -2054,4 +2053,11 @@ QString VCXProjectWriter::generateCondition(const VCConfiguration &config)
|
||||
return QStringLiteral("'$(Configuration)|$(Platform)'=='") + config.Name + QLatin1Char('\'');
|
||||
}
|
||||
|
||||
XmlOutput::xml_output VCXProjectWriter::attrTagToolsVersion(const VCConfiguration &config)
|
||||
{
|
||||
if (config.CompilerVersion >= NET2013)
|
||||
return noxml();
|
||||
return attrTag("ToolsVersion", "4.0");
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -182,6 +182,7 @@ private:
|
||||
bool fileAdded, bool hasCustomBuildStep);
|
||||
static void outputFileConfig(XmlOutput &xml, XmlOutput &xmlFilter, const QString &fileName, const QString &filterName);
|
||||
static QString generateCondition(const VCConfiguration &config);
|
||||
static XmlOutput::xml_output attrTagToolsVersion(const VCConfiguration &config);
|
||||
|
||||
friend class XTreeNode;
|
||||
friend class XFlatNode;
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include <qdiriterator.h>
|
||||
#include <qset.h>
|
||||
|
||||
#include <windows/registry_p.h>
|
||||
#include <registry_p.h>
|
||||
|
||||
#include <time.h>
|
||||
|
||||
@ -75,6 +75,29 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t)
|
||||
QString arch = project->first("VCPROJ_ARCH").toQString().toLower();
|
||||
QString compiler;
|
||||
QString compilerArch;
|
||||
const QString msvcVer = project->first("MSVC_VER").toQString();
|
||||
if (msvcVer.isEmpty()) {
|
||||
fprintf(stderr, "Mkspec does not specify MSVC_VER. Cannot continue.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (msvcVer == QStringLiteral("15.0")) {
|
||||
const ProStringList hostArch = project->values("QMAKE_TARGET.arch");
|
||||
if (hostArch.contains("x86_64"))
|
||||
compiler = QStringLiteral("HostX64/");
|
||||
else
|
||||
compiler = QStringLiteral("HostX86/");
|
||||
if (arch == QLatin1String("arm")) {
|
||||
compiler += QStringLiteral("arm");
|
||||
compilerArch = QStringLiteral("arm");
|
||||
} else if (arch == QLatin1String("x64")) {
|
||||
compiler += QStringLiteral("x64");
|
||||
compilerArch = QStringLiteral("amd64");
|
||||
} else {
|
||||
compiler += QStringLiteral("x86");
|
||||
compilerArch = QStringLiteral("amd64");
|
||||
}
|
||||
} else {
|
||||
if (arch == QLatin1String("arm")) {
|
||||
compiler = QStringLiteral("x86_arm");
|
||||
compilerArch = QStringLiteral("arm");
|
||||
@ -88,12 +111,8 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t)
|
||||
} else {
|
||||
arch = QStringLiteral("x86");
|
||||
}
|
||||
|
||||
const QString msvcVer = project->first("MSVC_VER").toQString();
|
||||
if (msvcVer.isEmpty()) {
|
||||
fprintf(stderr, "Mkspec does not specify MSVC_VER. Cannot continue.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
const QString winsdkVer = project->first("WINSDK_VER").toQString();
|
||||
if (winsdkVer.isEmpty()) {
|
||||
fprintf(stderr, "Mkspec does not specify WINSDK_VER. Cannot continue.\n");
|
||||
@ -106,7 +125,11 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t)
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
QString regKey = QStringLiteral("Software\\Microsoft\\VisualStudio\\") + msvcVer + ("\\Setup\\VC\\ProductDir");
|
||||
QString regKey;
|
||||
if (msvcVer == QStringLiteral("15.0"))
|
||||
regKey = QStringLiteral("Software\\Microsoft\\VisualStudio\\SxS\\VS7\\") + msvcVer;
|
||||
else
|
||||
regKey = QStringLiteral("Software\\Microsoft\\VisualStudio\\") + msvcVer + ("\\Setup\\VC\\ProductDir");
|
||||
const QString vcInstallDir = qt_readRegistryKey(HKEY_LOCAL_MACHINE, regKey, KEY_WOW64_32KEY);
|
||||
if (vcInstallDir.isEmpty()) {
|
||||
fprintf(stderr, "Failed to find the Visual Studio installation directory.\n");
|
||||
@ -128,7 +151,46 @@ NmakeMakefileGenerator::writeMakefile(QTextStream &t)
|
||||
QStringList incDirs;
|
||||
QStringList libDirs;
|
||||
QStringList binDirs;
|
||||
if (msvcVer == QStringLiteral("14.0")) {
|
||||
if (msvcVer == QStringLiteral("15.0")) {
|
||||
const QString toolsInstallDir = qgetenv("VCToolsInstallDir");
|
||||
if (toolsInstallDir.isEmpty()) {
|
||||
fprintf(stderr, "Failed to access tools installation dir.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
binDirs << toolsInstallDir + QStringLiteral("bin/") + compiler;
|
||||
if (arch == QStringLiteral("x64"))
|
||||
binDirs << toolsInstallDir + QStringLiteral("bin/HostX86/X86");
|
||||
binDirs << kitDir + QStringLiteral("bin/x86");
|
||||
binDirs << vcInstallDir + QStringLiteral("Common7/Tools");
|
||||
binDirs << vcInstallDir + QStringLiteral("Common7/ide");
|
||||
binDirs << vcInstallDir + QStringLiteral("MSBuild/15.0/bin");
|
||||
|
||||
incDirs << toolsInstallDir + QStringLiteral("include");
|
||||
incDirs << vcInstallDir + QStringLiteral("VC/Auxiliary/VS/include");
|
||||
|
||||
const QString crtVersion = qgetenv("UCRTVersion");
|
||||
if (crtVersion.isEmpty()) {
|
||||
fprintf(stderr, "Failed to access CRT version.\n");
|
||||
return false;
|
||||
}
|
||||
const QString crtInclude = kitDir + QStringLiteral("Include/") + crtVersion;
|
||||
const QString crtLib = kitDir + QStringLiteral("Lib/") + crtVersion;
|
||||
incDirs << crtInclude + QStringLiteral("/ucrt");
|
||||
incDirs << crtInclude + QStringLiteral("/um");
|
||||
incDirs << crtInclude + QStringLiteral("/shared");
|
||||
incDirs << crtInclude + QStringLiteral("/winrt");
|
||||
|
||||
incDirs << kitDir + QStringLiteral("Extension SDKs/WindowsMobile/")
|
||||
+ crtVersion + QStringLiteral("/Include/WinRT");
|
||||
|
||||
libDirs << toolsInstallDir + QStringLiteral("lib/") + arch + QStringLiteral("/store");
|
||||
|
||||
libDirs << vcInstallDir + QStringLiteral("VC/Auxiliary/VS/lib/") + arch;
|
||||
|
||||
libDirs << crtLib + QStringLiteral("/ucrt/") + arch;
|
||||
libDirs << crtLib + QStringLiteral("/um/") + arch;
|
||||
} else if (msvcVer == QStringLiteral("14.0")) {
|
||||
binDirs << vcInstallDir + QStringLiteral("bin/") + compiler;
|
||||
binDirs << vcInstallDir + QStringLiteral("bin/"); // Maybe remove for x86 again?
|
||||
binDirs << kitDir + QStringLiteral("bin/") + (arch == QStringLiteral("arm") ? QStringLiteral("x86") : arch);
|
||||
|
@ -54,7 +54,8 @@ static DotNET vsVersionFromString(const char *versionString)
|
||||
"10.0", NET2010,
|
||||
"11.0", NET2012,
|
||||
"12.0", NET2013,
|
||||
"14.0", NET2015
|
||||
"14.0", NET2015,
|
||||
"15.0", NET2017
|
||||
};
|
||||
DotNET result = NETUnknown;
|
||||
for (const auto entry : mapping) {
|
||||
|
@ -670,6 +670,21 @@ bool VcprojGenerator::hasBuiltinCompiler(const QString &file)
|
||||
return false;
|
||||
}
|
||||
|
||||
void VcprojGenerator::createCustomBuildToolFakeFile(const QString &cbtFilePath,
|
||||
const QString &realOutFilePath)
|
||||
{
|
||||
QFile file(fileFixify(cbtFilePath, FileFixifyFromOutdir | FileFixifyAbsolute));
|
||||
if (file.exists())
|
||||
return;
|
||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
|
||||
warn_msg(WarnLogic, "Cannot create '%s'.", qPrintable(file.fileName()));
|
||||
return;
|
||||
}
|
||||
file.write("This is a dummy file needed to create ");
|
||||
file.write(qPrintable(realOutFilePath));
|
||||
file.write("\n");
|
||||
}
|
||||
|
||||
void VcprojGenerator::init()
|
||||
{
|
||||
is64Bit = (project->first("QMAKE_TARGET.arch") == "x86_64");
|
||||
@ -797,12 +812,14 @@ void VcprojGenerator::init()
|
||||
if (!hasBuiltinCompiler(file)) {
|
||||
extraCompilerSources[file] += quc.toQString();
|
||||
} else {
|
||||
// Use a fake file name foo.moc.cbt for the project view.
|
||||
// Create a fake file foo.moc.cbt for the project view.
|
||||
// This prevents VS from complaining about a circular
|
||||
// dependency from foo.moc -> foo.moc.
|
||||
QString out = Option::fixPathToTargetOS(replaceExtraCompilerVariables(
|
||||
compiler_out, file, QString(), NoShell), false);
|
||||
out += customBuildToolFilterFileSuffix;
|
||||
QString realOut = replaceExtraCompilerVariables(
|
||||
compiler_out, file, QString(), NoShell);
|
||||
QString out = realOut + customBuildToolFilterFileSuffix;
|
||||
createCustomBuildToolFakeFile(out, realOut);
|
||||
out = Option::fixPathToTargetOS(out, false);
|
||||
extraCompilerSources[out] += quc.toQString();
|
||||
extraCompilerOutputs[out] = file;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user