summaryrefslogtreecommitdiffstats
path: root/mkspecs/features
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features')
-rw-r--r--mkspecs/features/data/headersclean/tst_headersclean.cpp.in38
-rw-r--r--mkspecs/features/link_ltcg.prf5
-rw-r--r--mkspecs/features/ltcg.prf38
-rw-r--r--mkspecs/features/mac/sdk.prf8
-rw-r--r--mkspecs/features/qt_common.prf11
-rw-r--r--mkspecs/features/qt_config.prf16
-rw-r--r--mkspecs/features/qt_functions.prf21
-rw-r--r--mkspecs/features/qt_module.prf22
-rw-r--r--mkspecs/features/qt_module_headers.prf2
-rw-r--r--mkspecs/features/qt_module_pris.prf37
-rw-r--r--mkspecs/features/qt_targets.prf4
-rw-r--r--mkspecs/features/sanitizer.prf30
-rw-r--r--mkspecs/features/simd.prf1
-rw-r--r--mkspecs/features/spec_post.prf66
-rw-r--r--mkspecs/features/static_runtime.prf7
-rw-r--r--mkspecs/features/testcase.prf31
-rw-r--r--mkspecs/features/testlib_defines.prf2
-rw-r--r--mkspecs/features/unix/separate_debug_info.prf22
-rw-r--r--mkspecs/features/win32/dumpcpp.prf2
-rw-r--r--mkspecs/features/win32/idcidl.prf7
-rw-r--r--mkspecs/features/winrt/package_manifest.prf16
-rw-r--r--mkspecs/features/xctest.prf6
22 files changed, 268 insertions, 124 deletions
diff --git a/mkspecs/features/data/headersclean/tst_headersclean.cpp.in b/mkspecs/features/data/headersclean/tst_headersclean.cpp.in
index 3cbcdd72c1..14655a2f98 100644
--- a/mkspecs/features/data/headersclean/tst_headersclean.cpp.in
+++ b/mkspecs/features/data/headersclean/tst_headersclean.cpp.in
@@ -1,40 +1,32 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
-** $QT_BEGIN_LICENSE:LGPL$
+** $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 Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
+** 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 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
+** 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.
**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
** $QT_END_LICENSE$
**
****************************************************************************/
diff --git a/mkspecs/features/link_ltcg.prf b/mkspecs/features/link_ltcg.prf
index 537021f11b..734743ca13 100644
--- a/mkspecs/features/link_ltcg.prf
+++ b/mkspecs/features/link_ltcg.prf
@@ -1,4 +1,9 @@
gcc {
+ !clang:!intel_icc:greaterThan(QMAKE_HOST.cpu_count, 1) {
+ # Override LTO number of jobs
+ QMAKE_LFLAGS_LTCG ~= s/^-flto$/-flto=$$QMAKE_HOST.cpu_count/
+ }
+
# When doing link-time code generation, we need to pass the compiler
# flags during linking the stage too. This file is processed after
# default_post.prf, so the QMAKE_CXXFLAGS already contains
diff --git a/mkspecs/features/ltcg.prf b/mkspecs/features/ltcg.prf
index b0765a85c3..ccf0226272 100644
--- a/mkspecs/features/ltcg.prf
+++ b/mkspecs/features/ltcg.prf
@@ -1,38 +1,32 @@
CONFIG(release, debug|release) {
# We need fat object files when creating static libraries on some platforms
# so the linker will know to load a particular object from the library
- # in the first place. With GCC, we have -ffat-lto-objects. MSVC
- # seems to work just fine. For other compilers, we disable LTCG
+ # in the first place. On others, we have special ar and nm to create the symbol
+ # tables so the linker will know better. For other compilers, we disable LTCG
# for static libraries.
msvc {
# Nothing to do
- } else: gcc {
- !clang:!intel_icc {
- static|fat-lto {
- QMAKE_CFLAGS_LTCG += -ffat-lto-objects
- QMAKE_CXXFLAGS_LTCG += -ffat-lto-objects
- } else {
- QMAKE_CFLAGS_LTCG += -fno-fat-lto-objects
- QMAKE_CXXFLAGS_LTCG += -fno-fat-lto-objects
- }
- linux {
- # Get the number of online processors, like _SC_NPROCESSORS_ONLN
- isEmpty(QMAKE_NPROCESSORS_ONLN) {
- QMAKE_NPROCESSORS_ONLN = $$system("grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo 1")
- cache(QMAKE_NPROCESSORS_ONLN, set stash)
- }
+ } else {
+ !isEmpty(QMAKE_AR_LTCG): QMAKE_AR = $$QMAKE_AR_LTCG
+ !isEmpty(QMAKE_NM_LTCG): QMAKE_NM = $$QMAKE_NM_LTCG
- # Override LTO number of jobs
- QMAKE_LFLAGS_LTCG -= -flto
- QMAKE_LFLAGS_LTCG += -flto=$$QMAKE_NPROCESSORS_ONLN
- }
- } else: static {
+ equals(QMAKE_RANLIB_LTCG, true): QMAKE_RANLIB =
+ else: !isEmpty(QMAKE_RANLIB_LTCG): QMAKE_RANLIB = $$QMAKE_RANLIB_LTCG
+
+ static:isEmpty(QMAKE_AR_LTCG):isEmpty(QMAKE_RANLIB_LTCG) {
+ # We don't know how to create symbol tables for static libs with this
+ # compiler, so disable LTCG
QMAKE_CFLAGS_LTCG =
QMAKE_CXXFLAGS_LTCG =
QMAKE_LFLAGS_LTCG =
}
}
+ fat-lto {
+ QMAKE_CFLAGS_LTCG += $$QMAKE_CFLAGS_LTCG_FATOBJECTS
+ QMAKE_CXXFLAGS_LTCG += $$QMAKE_CXXFLAGS_LTCG_FATOBJECTS
+ }
+
load(link_ltcg)
QMAKE_CFLAGS *= $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS *= $$QMAKE_CXXFLAGS_LTCG
diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf
index d2e698894f..e238f8e005 100644
--- a/mkspecs/features/mac/sdk.prf
+++ b/mkspecs/features/mac/sdk.prf
@@ -13,6 +13,14 @@ isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.path) {
QMAKE_MAC_SDK_PATH = $$eval(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.path)
}
+isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_path) {
+ QMAKE_MAC_SDK_PLATFORM_PATH = $$system("/usr/bin/xcodebuild -sdk $$QMAKE_MAC_SDK -version PlatformPath 2>/dev/null")
+ isEmpty(QMAKE_MAC_SDK_PLATFORM_PATH): error("Could not resolve SDK platform path for \'$$QMAKE_MAC_SDK\'")
+ cache(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_path, set stash, QMAKE_MAC_SDK_PLATFORM_PATH)
+} else {
+ QMAKE_MAC_SDK_PLATFORM_PATH = $$eval(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_path)
+}
+
isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.version) {
QMAKE_MAC_SDK_VERSION = $$system("/usr/bin/xcodebuild -sdk $$QMAKE_MAC_SDK -version SDKVersion 2>/dev/null")
isEmpty(QMAKE_MAC_SDK_VERSION): error("Could not resolve SDK version for \'$$QMAKE_MAC_SDK\'")
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
index eb65e73079..6a66b76305 100644
--- a/mkspecs/features/qt_common.prf
+++ b/mkspecs/features/qt_common.prf
@@ -24,16 +24,19 @@ contains(TEMPLATE, .*lib) {
rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
else: \
rplbase = $$MODULE_BASE_OUTDIR
- host_build: \
+ host_build {
+ qqt_libdir = \$\$\$\$[QT_HOST_LIBS]
qt_libdir = $$[QT_HOST_LIBS]
- else: \
- qt_libdir = $$[QT_INSTALL_LIBS/raw]
+ } else {
+ qqt_libdir = \$\$\$\$[QT_INSTALL_LIBS]
+ qt_libdir = $$[QT_INSTALL_LIBS]
+ }
contains(QMAKE_DEFAULT_LIBDIRS, $$qt_libdir) {
lib_replace.match = "[^ ']*$$rplbase/lib"
lib_replace.replace =
} else {
lib_replace.match = $$rplbase/lib
- lib_replace.replace = $$qt_libdir
+ lib_replace.replace = $$qqt_libdir
}
lib_replace.CONFIG = path
QMAKE_PRL_INSTALL_REPLACE += lib_replace
diff --git a/mkspecs/features/qt_config.prf b/mkspecs/features/qt_config.prf
index 208681d98a..973a2182c9 100644
--- a/mkspecs/features/qt_config.prf
+++ b/mkspecs/features/qt_config.prf
@@ -5,16 +5,21 @@ QMAKE_QT_CONFIG = $$[QT_HOST_DATA/get]/mkspecs/qconfig.pri
debug(1, "Cannot load qconfig.pri!")
} else {
debug(1, "Loaded .qconfig.pri from ($$QMAKE_QT_CONFIG)")
- QMAKE_MODULE_PATH = $$split($$list($$(QMAKEMODULES)), $$DIRLIST_SEPARATOR)
+ dirs = $$(QMAKEMODULES)
+ QMAKE_MODULE_PATH = $$split(dirs, $$DIRLIST_SEPARATOR)
QMAKE_MODULE_PATH += $$QMAKEMODULES
- QMAKE_MODULE_PATH += $$split($$list($$[QMAKEMODULES]), $$DIRLIST_SEPARATOR)
- QMAKE_MODULE_PATH += $$replace($$list($$split($$list($$[QMAKE_MKSPECS]), $$DIRLIST_SEPARATOR)), \
- \$, /modules)
+ dirs = $$[QMAKEMODULES]
+ QMAKE_MODULE_PATH += $$split(dirs, $$DIRLIST_SEPARATOR)
+ dirs = $$[QMAKE_MKSPECS]
+ dirs = $$split(dirs, $$DIRLIST_SEPARATOR)
+ QMAKE_MODULE_PATH += $$replace(dirs, \$, /modules)
+ unset(dirs)
QMAKE_MODULE_PATH = $$unique(QMAKE_MODULE_PATH)
QMAKE_MODULE_PATH = $$reverse(QMAKE_MODULE_PATH)
for(dir, QMAKE_MODULE_PATH) {
debug(1, "Loading modules from $${dir}")
- for(mod, $$list($$files($$dir/qt_*.pri))) {
+ mods = $$files($$dir/qt_*.pri)
+ for (mod, mods) {
# For installed Qt these paths will be common for all modules.
# For uninstalled prefix builds these will vary per module, via the
# forwarding module pri files. Keep qt_module_pris.prf in sync with this!
@@ -28,6 +33,7 @@ QMAKE_QT_CONFIG = $$[QT_HOST_DATA/get]/mkspecs/qconfig.pri
QT_MODULE_QML_BASE = $$[QT_INSTALL_QML]
include($$mod)
}
+ unset(mods)
}
QT_MODULES = $$unique(QT_MODULES) # In case modules appear in multiple places
unset(QT_MODULE_INCLUDE_BASE)
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
index 79b4eab949..78be2e8473 100644
--- a/mkspecs/features/qt_functions.prf
+++ b/mkspecs/features/qt_functions.prf
@@ -86,7 +86,7 @@ defineTest(qtAddModule) {
unset(LINKAGE)
mac:contains(MODULE_CONFIG, lib_bundle) {
FRAMEWORK_INCLUDE = $${MODULE_LIBS}/$${MODULE_NAME}.framework/Headers
- !qt_no_framework_direct_includes:exists($$FRAMEWORK_INCLUDE) {
+ !qt_no_framework_direct_includes {
INCLUDEPATH *= $$FRAMEWORK_INCLUDE
}
contains(MODULE_CONFIG, internal_module): \
@@ -238,11 +238,12 @@ defineTest(qtAddToolEnv) {
equals(ds, /) {
contains($${env}.CONFIG, prepend): infix = \${$$name:+:\$$$name}
else: infix =
- val = "$$name=$$join(value, :)$$infix"
+ val = "$$name=$$shell_quote($$join(value, :))$$infix"
} else {
# Escape closing parens when expanding the variable, otherwise cmd confuses itself.
contains($${env}.CONFIG, prepend): infix = ;%$$name:)=^)%
else: infix =
+ value ~= s,\\),^),g
val = "(set $$name=$$join(value, ;)$$infix) &"
}
isEmpty(3): !contains(TEMPLATE, vc.*) {
@@ -272,6 +273,8 @@ defineTest(qtAddTargetEnv) {
deppath.name = PATH
} else:contains(QMAKE_HOST.os, Linux|FreeBSD|OpenBSD|NetBSD|DragonFly|SunOS|HP-UX|QNX|GNU) {
deppath.name = LD_LIBRARY_PATH
+ } else:contains(QMAKE_HOST.os, Haiku) {
+ deppath.name = LIBRARY_PATH
} else:equals(QMAKE_HOST.os, Darwin) {
contains(QT_CONFIG, qt_framework): \
deppath.name = DYLD_FRAMEWORK_PATH
@@ -308,15 +311,11 @@ defineReplace(pkgConfigExecutable) {
isEmpty(PKG_CONFIG) {
PKG_CONFIG = pkg-config
- !isEmpty(PKG_CONFIG_SYSROOT_DIR) {
- win32:isEmpty(MINGW_IN_SHELL):PKG_CONFIG = set PKG_CONFIG_SYSROOT_DIR=$$PKG_CONFIG_SYSROOT_DIR& $$PKG_CONFIG
- else:PKG_CONFIG = PKG_CONFIG_SYSROOT_DIR=\"$$PKG_CONFIG_SYSROOT_DIR\" $$PKG_CONFIG
- }
-
- !isEmpty(PKG_CONFIG_LIBDIR) {
- win32:isEmpty(MINGW_IN_SHELL):PKG_CONFIG = set PKG_CONFIG_LIBDIR=$$PKG_CONFIG_LIBDIR& $$PKG_CONFIG
- else:PKG_CONFIG = PKG_CONFIG_LIBDIR=\"$$PKG_CONFIG_LIBDIR\" $$PKG_CONFIG
- }
+ sysroot.name = PKG_CONFIG_SYSROOT_DIR
+ sysroot.value = $$PKG_CONFIG_SYSROOT_DIR
+ libdir.name = PKG_CONFIG_LIBDIR
+ libdir.value = $$PKG_CONFIG_LIBDIR
+ qtAddToolEnv(PKG_CONFIG, sysroot libdir, SYS)
}
equals(QMAKE_HOST.os, Windows): \
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
index 2437efef88..b85dbfb9c3 100644
--- a/mkspecs/features/qt_module.prf
+++ b/mkspecs/features/qt_module.prf
@@ -181,7 +181,10 @@ load(qt_common)
unix|mingw {
CONFIG += create_pc
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
- QMAKE_PKGCONFIG_LIBDIR = $$qt_libdir
+ host_build: \
+ QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS]
+ else: \
+ QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
QMAKE_PKGCONFIG_CFLAGS = -I${includedir}/$$MODULE_INCNAME
QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, "Qt$$QT_MAJOR_VERSION ")
@@ -190,12 +193,23 @@ unix|mingw {
QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION))
isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
- QMAKE_PKGCONFIG_INSTALL_REPLACE += lib_replace
+ pclib_replace.match = $$lib_replace.match
+ !isEmpty(lib_replace.replace): \
+ pclib_replace.replace = $$QMAKE_PKGCONFIG_LIBDIR
+ pclib_replace.CONFIG = path
+ QMAKE_PKGCONFIG_INSTALL_REPLACE += pclib_replace
unix {
CONFIG += create_libtool explicitlib
- QMAKE_LIBTOOL_LIBDIR = $$qt_libdir
- QMAKE_LIBTOOL_INSTALL_REPLACE += lib_replace
+ host_build: \
+ QMAKE_LIBTOOL_LIBDIR = $$[QT_HOST_LIBS]
+ else: \
+ QMAKE_LIBTOOL_LIBDIR = "=$$[QT_INSTALL_LIBS/raw]"
+ ltlib_replace.match = $$lib_replace.match
+ !isEmpty(lib_replace.replace): \
+ ltlib_replace.replace = $$QMAKE_LIBTOOL_LIBDIR
+ ltlib_replace.CONFIG = path
+ QMAKE_LIBTOOL_INSTALL_REPLACE += ltlib_replace
}
}
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index 5015d58861..fc3ec75e82 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -21,7 +21,7 @@ load(qt_build_paths)
QMAKE_SYNCQT += -module $$MODULE_INCNAME -version $$VERSION
}
QMAKE_SYNCQT += \
- -outdir $$MODULE_BASE_OUTDIR $$MODULE_SYNCQT_DIR
+ -outdir $$system_quote($$MODULE_BASE_OUTDIR) $$MODULE_SYNCQT_DIR
!silent: message($$QMAKE_SYNCQT)
system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
}
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index 03a8e5db71..b40e1391ac 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -48,9 +48,10 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
module_libs = "\$\$QT_MODULE_LIB_BASE"
unix:!static {
host_build: \
- module_rpath = "QT.$${MODULE_ID}.rpath = $$[QT_HOST_LIBS]"
+ module_rpath = $$[QT_HOST_LIBS]
else: \
- module_rpath = "QT.$${MODULE_ID}.rpath = $$[QT_INSTALL_LIBS/raw]"
+ module_rpath = $$[QT_INSTALL_LIBS/dev]
+ module_rpath = "QT.$${MODULE_ID}.rpath = $$val_escape(module_rpath)"
} else {
module_rpath =
}
@@ -58,7 +59,9 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
module_rundep = "QT.$${MODULE_ID}.run_depends = $$replace(QT_PRIVATE, -private$, _private)"
else: \
module_rundep =
- static: \
+ equals(TEMPLATE, aux): \
+ module_build_type = no_link
+ else:static: \
module_build_type = staticlib
else:mac:contains(QT_CONFIG, qt_framework): \
module_build_type = lib_bundle
@@ -93,7 +96,7 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
internal_module: \
MODULE_INCLUDES += $$MODULE_PRIVATE_INCLUDES
split_incpath: \
- MODULE_FWD_PRI_CONT_SUFFIX += "QT.$${MODULE_ID}.includes += $$MODULE_SHADOW_INCLUDES"
+ MODULE_FWD_PRI_CONT_SUFFIX += "QT.$${MODULE_ID}.includes += $$val_escape(MODULE_SHADOW_INCLUDES)"
MODULE_PRI_CONT = \
"QT.$${MODULE_ID}.VERSION = $${VERSION}" \
"QT.$${MODULE_ID}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
@@ -117,11 +120,11 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
$$module_rundep \
"QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \
$$module_config \
- "QT.$${MODULE_ID}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
+ "QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \
"" \
"QT_MODULES += $$MODULE"
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
- !internal_module {
+ !internal_module:!no_private_module {
module_build_type += internal_module no_link
MODULE_PRIVATE_PRI_CONT = \
"QT.$${MODULE}_private.VERSION = $${VERSION}" \
@@ -147,18 +150,18 @@ MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri
# Create a forwarding module .pri file
MODULE_FWD_PRI_CONT = \
- "QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \
- "QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_INCDIR/include" \
- "QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
- "QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
- "QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
- "QT_MODULE_HOST_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
- "QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
- "QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
- "include($$MODULE_PRI)" \
+ "QT_MODULE_BIN_BASE = $$val_escape(MODULE_BASE_OUTDIR)/bin" \
+ "QT_MODULE_INCLUDE_BASE = $$val_escape(MODULE_BASE_INCDIR)/include" \
+ "QT_MODULE_IMPORT_BASE = $$val_escape(MODULE_BASE_OUTDIR)/imports" \
+ "QT_MODULE_QML_BASE = $$val_escape(MODULE_BASE_OUTDIR)/qml" \
+ "QT_MODULE_LIB_BASE = $$val_escape(MODULE_BASE_OUTDIR)/lib" \
+ "QT_MODULE_HOST_LIB_BASE = $$val_escape(MODULE_BASE_OUTDIR)/lib" \
+ "QT_MODULE_LIBEXEC_BASE = $$val_escape(MODULE_BASE_OUTDIR)/libexec" \
+ "QT_MODULE_PLUGIN_BASE = $$val_escape(MODULE_BASE_OUTDIR)/plugins" \
+ "include($$val_escape(MODULE_PRI))" \
"QT.$${MODULE_ID}.priority = 1"
- !internal_module: MODULE_FWD_PRI_CONT += \
- "include($$MODULE_PRIVATE_PRI)" \
+ !internal_module:!no_private_module: MODULE_FWD_PRI_CONT += \
+ "include($$val_escape(MODULE_PRIVATE_PRI))" \
"QT.$${MODULE}_private.priority = 1"
MODULE_FWD_PRI_CONT += $$MODULE_FWD_PRI_CONT_SUFFIX
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.")
diff --git a/mkspecs/features/qt_targets.prf b/mkspecs/features/qt_targets.prf
index 02bf20b222..72429526a7 100644
--- a/mkspecs/features/qt_targets.prf
+++ b/mkspecs/features/qt_targets.prf
@@ -1,4 +1,4 @@
-QMAKE_TARGET_COMPANY = Digia Plc and/or its subsidiary(-ies)
+QMAKE_TARGET_COMPANY = The Qt Company Ltd
QMAKE_TARGET_PRODUCT = Qt5
QMAKE_TARGET_DESCRIPTION = C++ application development framework.
-QMAKE_TARGET_COPYRIGHT = Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+QMAKE_TARGET_COPYRIGHT = Copyright (C) 2015 The Qt Company Ltd.
diff --git a/mkspecs/features/sanitizer.prf b/mkspecs/features/sanitizer.prf
new file mode 100644
index 0000000000..9e7ff0218a
--- /dev/null
+++ b/mkspecs/features/sanitizer.prf
@@ -0,0 +1,30 @@
+# Sanitizer flags
+
+
+sanitize_address {
+ QMAKE_CFLAGS += $$QMAKE_SANITIZE_ADDRESS_CFLAGS
+ QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_ADDRESS_CXXFLAGS
+ QMAKE_LFLAGS += $$QMAKE_SANITIZE_ADDRESS_LFLAGS
+}
+
+sanitize_memory {
+ QMAKE_CFLAGS += $$QMAKE_SANITIZE_MEMORY_CFLAGS
+ QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_MEMORY_CXXFLAGS
+ QMAKE_LFLAGS += $$QMAKE_SANITIZE_MEMORY_LFLAGS
+}
+
+sanitize_thread {
+ QMAKE_CFLAGS += $$QMAKE_SANITIZE_THREAD_CFLAGS
+ QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_THREAD_CXXFLAGS
+ QMAKE_LFLAGS += $$QMAKE_SANITIZE_THREAD_LFLAGS
+}
+
+sanitize_undefined {
+ QMAKE_CFLAGS += $$QMAKE_SANITIZE_UNDEFINED_CFLAGS
+ QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_UNDEFINED_CXXFLAGS
+ QMAKE_LFLAGS += $$QMAKE_SANITIZE_UNDEFINED_LFLAGS
+}
+
+QMAKE_CFLAGS += $$QMAKE_COMMON_SANITIZE_CFLAGS
+QMAKE_CXXFLAGS += $$QMAKE_COMMON_SANITIZE_CXXFLAGS
+
diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf
index 7d9eaffafa..700d79a1b5 100644
--- a/mkspecs/features/simd.prf
+++ b/mkspecs/features/simd.prf
@@ -27,6 +27,7 @@ defineTest(addSimdCompiler) {
CONFIG($$1) {
cflags = $$eval(QMAKE_CFLAGS_$${upname})
+ ltcg: cflags += $$QMAKE_CFLAGS_DISABLE_LTCG
contains(QT_CPU_FEATURES, $$name) {
# Default compiler settings include this feature, so just add to SOURCES
SOURCES += $$eval($$sources_var)
diff --git a/mkspecs/features/spec_post.prf b/mkspecs/features/spec_post.prf
index ad03c9c428..c9578773fe 100644
--- a/mkspecs/features/spec_post.prf
+++ b/mkspecs/features/spec_post.prf
@@ -13,14 +13,12 @@ isEmpty(QMAKE_PLATFORM) {
else: \
TARGET_PLATFORM = unix
} else:if(equals(MAKEFILE_GENERATOR, MSVC.NET) \
- |equals(MAKEFILE_GENERATOR, BMAKE) \
|equals(MAKEFILE_GENERATOR, MSBUILD) \
|equals(MAKEFILE_GENERATOR, MINGW)) {
TARGET_PLATFORM = win32
} else:if(equals(MAKEFILE_GENERATOR, PROJECTBUILDER) \
|equals(MAKEFILE_GENERATOR, XCODE)) {
- } else:equals(MAKEFILE_GENERATOR, GBUILD) {
- TARGET_PLATFORM = unix
+ TARGET_PLATFORM = macx
} else {
error("Qmake spec sets an invalid MAKEFILE_GENERATOR.")
}
@@ -56,3 +54,65 @@ isEmpty(QMAKE_COMPILER) {
warning("qmake spec does not announce the compiler family. Guessed $${QMAKE_COMPILER}.")
}
CONFIG += $$QMAKE_COMPILER
+
+equals(MAKEFILE_GENERATOR, MSBUILD) \
+|equals(MAKEFILE_GENERATOR, MSVC.NET) \
+|isEmpty(QMAKE_SH) {
+ QMAKE_ZIP = zip -r -9
+
+ QMAKE_COPY = copy /y
+ QMAKE_COPY_FILE = $$QMAKE_COPY
+ QMAKE_COPY_DIR = xcopy /s /q /y /i
+ # xcopy copies the contained files if source is a directory. Deal with it.
+ CONFIG += copy_dir_files
+ QMAKE_MOVE = move
+ QMAKE_DEL_FILE = del
+ QMAKE_DEL_DIR = rmdir
+ QMAKE_DEL_TREE = rmdir /s /q
+ QMAKE_CHK_EXISTS = if not exist %1
+ QMAKE_CHK_DIR_EXISTS = if not exist # legacy
+ QMAKE_MKDIR = mkdir # legacy
+ QMAKE_MKDIR_CMD = if not exist %1 mkdir %1 & if not exist %1 exit 1
+ QMAKE_STREAM_EDITOR = $(QMAKE) -install sed
+ QMAKE_INSTALL_FILE = copy /y
+ QMAKE_INSTALL_PROGRAM = copy /y
+} else {
+ QMAKE_TAR = tar -cf
+ QMAKE_GZIP = gzip -9f
+
+ QMAKE_COPY = cp -f
+ QMAKE_COPY_FILE = $$QMAKE_COPY
+ QMAKE_COPY_DIR = $$QMAKE_COPY -R
+ QMAKE_MOVE = mv -f
+ QMAKE_DEL_FILE = rm -f
+ QMAKE_DEL_DIR = rmdir
+ QMAKE_DEL_TREE = rm -rf
+ QMAKE_CHK_EXISTS = test -e %1 ||
+ QMAKE_CHK_DIR_EXISTS = test -d # legacy
+ QMAKE_MKDIR = mkdir -p # legacy
+ QMAKE_MKDIR_CMD = test -d %1 || mkdir -p %1
+ QMAKE_STREAM_EDITOR = sed
+
+ equals(QMAKE_HOST.os, Windows) {
+ MINGW_IN_SHELL = 1 # legacy
+ # Override built-ins.
+ QMAKE_DIR_SEP = /
+ QMAKE_DIRLIST_SEP = :
+ # Because install's ability to set permissions is not relevant on Windows,
+ # and git's msys does not provide it to start with.
+ QMAKE_INSTALL_FILE = cp -f
+ QMAKE_INSTALL_PROGRAM = cp -f
+ } else {
+ QMAKE_INSTALL_FILE = install -m 644 -p
+ QMAKE_INSTALL_PROGRAM = install -m 755 -p
+ }
+}
+QMAKE_INSTALL_DIR = $$QMAKE_COPY_DIR
+equals(QMAKE_HOST.os, Windows) {
+ # Ugly (and broken for relative paths) hack to support cross-building for Unix.
+ QMAKE_SYMBOLIC_LINK = $$QMAKE_COPY
+ QMAKE_LN_SHLIB = $$QMAKE_SYMBOLIC_LINK
+} else {
+ QMAKE_SYMBOLIC_LINK = ln -f -s
+ QMAKE_LN_SHLIB = ln -s
+}
diff --git a/mkspecs/features/static_runtime.prf b/mkspecs/features/static_runtime.prf
new file mode 100644
index 0000000000..3275e6e2e2
--- /dev/null
+++ b/mkspecs/features/static_runtime.prf
@@ -0,0 +1,7 @@
+msvc {
+ # -MD becomes -MT, -MDd becomes -MTd
+ QMAKE_CFLAGS ~= s,^-MD(d?)$, -MT\1,g
+ QMAKE_CXXFLAGS ~= s,^-MD(d?)$, -MT\1,g
+} else: mingw {
+ QMAKE_LFLAGS += -static
+}
diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf
index 770afa3386..a6ef930128 100644
--- a/mkspecs/features/testcase.prf
+++ b/mkspecs/features/testcase.prf
@@ -52,25 +52,18 @@ insignificant_test:check.commands = -$${check.commands}
QMAKE_EXTRA_TARGETS *= check
-!debug_and_release|build_pass {
+isEmpty(BUILDS)|build_pass {
check.depends = first
} else {
+ # For exclusive builds, only run the test once.
check.CONFIG = recursive
- # In debug and release mode, only run the test once.
- # Run debug if that is the preferred config, release otherwise.
- debug_and_release {
- check.target = dummy_check
- check.recurse_target = check
- CONFIG(debug, debug|release) {
- real_check.depends = debug-check
- real_check.target = check
- QMAKE_EXTRA_TARGETS += real_check
- } else {
- real_check.depends = release-check
- real_check.target = check
- QMAKE_EXTRA_TARGETS += real_check
- }
- }
+ check.target = check_all
+ check.recurse_target = check
+ check.commands =
+
+ check_first.depends = $$eval($$first(BUILDS).target)-check
+ check_first.target = check
+ QMAKE_EXTRA_TARGETS += check_first
}
!no_testcase_installs:!contains(INSTALLS, target) {
@@ -187,5 +180,11 @@ contains(INSTALLS, target) {
}
}
+macx-xcode:bundle:isEmpty(QMAKE_BUNDLE_EXTENSION) {
+ QMAKE_PBX_PRODUCT_TYPE = com.apple.product-type.bundle.unit-test
+ QMAKE_PBX_BUNDLE_TYPE = wrapper.cfbundle
+ QMAKE_BUNDLE_EXTENSION = .xctest
+}
+
} # have_target
diff --git a/mkspecs/features/testlib_defines.prf b/mkspecs/features/testlib_defines.prf
index 59540689d3..9176beb9dd 100644
--- a/mkspecs/features/testlib_defines.prf
+++ b/mkspecs/features/testlib_defines.prf
@@ -1 +1 @@
-DEFINES += QT_TESTCASE_BUILDDIR=\\\"$$OUT_PWD\\\"
+DEFINES += QT_TESTCASE_BUILDDIR=$$shell_quote(\"$$OUT_PWD\")
diff --git a/mkspecs/features/unix/separate_debug_info.prf b/mkspecs/features/unix/separate_debug_info.prf
index 394d5f42bc..7d9022f8d7 100644
--- a/mkspecs/features/unix/separate_debug_info.prf
+++ b/mkspecs/features/unix/separate_debug_info.prf
@@ -9,19 +9,21 @@ have_target:!static:!isEmpty(QMAKE_OBJCOPY) {
debug_info_keep = --only-keep-debug
debug_info_strip = --strip-debug
}
- QMAKE_SEPARATE_DEBUG_INFO = test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\" ; targ=`basename $(TARGET)`; $$QMAKE_OBJCOPY $$debug_info_keep \"\$\$targ\" \"\$\$targ.$$debug_info_suffix\" && $$QMAKE_OBJCOPY $$debug_info_strip \"\$\$targ\" && $$QMAKE_OBJCOPY --add-gnu-debuglink=\"\$\$targ.$$debug_info_suffix\" \"\$\$targ\" && chmod -x \"\$\$targ.$$debug_info_suffix\"
- QMAKE_INSTALL_SEPARATE_DEBUG_INFO = test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\" ; $(INSTALL_FILE) `basename $(TARGET)`.$$debug_info_suffix $(INSTALL_ROOT)/\$\$target_path/
+ load(resolve_target)
+ QMAKE_TARGET_DEBUG_INFO = $${QMAKE_RESOLVED_TARGET}.$$debug_info_suffix
+
+ shell_target = $$shell_quote($$relative_path($$QMAKE_RESOLVED_TARGET, $$OUT_PWD))
+ shell_target_debug_info = $$shell_quote($$relative_path($$QMAKE_TARGET_DEBUG_INFO, $$OUT_PWD))
+ copy_debug_info = $$QMAKE_OBJCOPY $$debug_info_keep $$shell_target $$shell_target_debug_info
+ strip_debug_info = $$QMAKE_OBJCOPY $$debug_info_strip $$shell_target
+ link_debug_info = $$QMAKE_OBJCOPY --add-gnu-debuglink=$$shell_target_debug_info $$shell_target
+ chmod_debug_info = chmod -x $$shell_target_debug_info
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
- QMAKE_POST_LINK = $$QMAKE_SEPARATE_DEBUG_INFO $$QMAKE_POST_LINK
+ QMAKE_POST_LINK = $$copy_debug_info && $$strip_debug_info && $$link_debug_info && $$chmod_debug_info $$QMAKE_POST_LINK
silent:QMAKE_POST_LINK = @echo creating $@.$$debug_info_suffix && $$QMAKE_POST_LINK
- isEmpty(DESTDIR) {
- target.targets += "`basename $(TARGET)`.$$debug_info_suffix"
- QMAKE_DISTCLEAN += "`basename $(TARGET)`.$$debug_info_suffix"
- } else {
- target.targets += "$(DESTDIR)/`basename $(TARGET)`.$$debug_info_suffix"
- QMAKE_DISTCLEAN += "$(DESTDIR)/`basename $(TARGET)`.$$debug_info_suffix"
- }
+ target.targets += $$QMAKE_TARGET_DEBUG_INFO
+ QMAKE_DISTCLEAN += $$QMAKE_TARGET_DEBUG_INFO
}
diff --git a/mkspecs/features/win32/dumpcpp.prf b/mkspecs/features/win32/dumpcpp.prf
index af6387bed6..3da54fb66d 100644
--- a/mkspecs/features/win32/dumpcpp.prf
+++ b/mkspecs/features/win32/dumpcpp.prf
@@ -11,7 +11,7 @@ dumpcpp_decl.CONFIG += no_link
QMAKE_EXTRA_COMPILERS += dumpcpp_decl
-dumpcpp_impl.commands = $$QMAKE_DUMPCPP -donothing
+dumpcpp_impl.commands = $$escape_expand(\\n) # dummy command
dumpcpp_impl.output = ${QMAKE_FILE_BASE}.cpp
dumpcpp_impl.input = TYPELIBS
dumpcpp_impl.variable_out = SOURCES
diff --git a/mkspecs/features/win32/idcidl.prf b/mkspecs/features/win32/idcidl.prf
index 85e4cb9c5f..a688b3ff41 100644
--- a/mkspecs/features/win32/idcidl.prf
+++ b/mkspecs/features/win32/idcidl.prf
@@ -13,7 +13,7 @@ qtPrepareTool(QMAKE_IDC, idc)
contains(TEMPLATE, "vc.*") {
ACTIVEQT_IDC = $${QMAKE_IDC}
ACTIVEQT_IDL = $${QMAKE_IDL}
- ACTIVEQT_TARGET = "$(TargetPath)"
+ ACTIVEQT_TARGET = \"$(TargetPath)\"
win32-msvc {
ACTIVEQT_NEWLINE = $$escape_expand(\\t)
ACTIVEQT_OUTPUT = $(IntDir)/$${TARGET}
@@ -21,7 +21,7 @@ contains(TEMPLATE, "vc.*") {
ACTIVEQT_NEWLINE = $$escape_expand(\\n\\t)
ACTIVEQT_OUTPUT = $(IntDir)$${TARGET}
}
- ACTIVEQT_TLBOUT = "$(TargetDir)/$${TARGET}.tlb"
+ ACTIVEQT_TLBOUT = \"$(TargetDir)/$${TARGET}.tlb\"
GENERATED += $${OBJECTS_DIR}/$${TARGET}.idl $${ACTIVEQT_TLBOUT}
} else {
ACTIVEQT_IDC = -$(IDC)
@@ -46,7 +46,8 @@ contains(TEMPLATE, "vc.*") {
QMAKE_POST_LINK += $$quote($$ACTIVEQT_IDL "$${ACTIVEQT_OUTPUT}.idl" /nologo /tlb "$${ACTIVEQT_TLBOUT}"$$ACTIVEQT_NEWLINE)
message("No rc-file linked into project; type library will be a separate file.")
}
- QMAKE_POST_LINK += $$quote($$ACTIVEQT_IDC $${ACTIVEQT_TARGET} /regserver)
+ !qaxserver_no_register: \
+ QMAKE_POST_LINK += $$quote($$ACTIVEQT_IDC $${ACTIVEQT_TARGET} /regserver)
QMAKE_CLEAN += $${ACTIVEQT_OUTPUT}.idl $${ACTIVEQT_OUTPUT}.tlb
}
diff --git a/mkspecs/features/winrt/package_manifest.prf b/mkspecs/features/winrt/package_manifest.prf
index 2ccb5db963..7e5effa438 100644
--- a/mkspecs/features/winrt/package_manifest.prf
+++ b/mkspecs/features/winrt/package_manifest.prf
@@ -71,7 +71,9 @@
exists($$UUID_CACHE) {
include($$UUID_CACHE)
} else {
- WINRT_UUID = "WINRT_MANIFEST.identity = $$system(uuidgen)"
+ WINRT_UUID = $$system(uuidgen)
+ isEmpty(WINRT_UUID): error("Unable to generate a UUID. Make sure uuidgen is in your PATH.")
+ WINRT_UUID = "WINRT_MANIFEST.identity = $$WINRT_UUID"
write_file($$UUID_CACHE, WINRT_UUID)|error("Unable to write the UUID cache; aborting.")
eval($$WINRT_UUID)
}
@@ -137,6 +139,18 @@
ICONS_FOUND ~= s/.*\\\$\\\$\\{WINRT_MANIFEST\\.((logo|tile)_[^\}]+)\\}.*/\\1/g
for (ICON_NAME, ICONS_FOUND) {
ICON_FILE = $$eval(WINRT_MANIFEST.$$ICON_NAME)
+ isEmpty(ICON_FILE) {
+ equals(ICON_NAME, "logo_310x150"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_wide)
+ else: equals(ICON_NAME, "logo_150x150"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_large)
+ # Windows Phone specifics
+ else: equals(ICON_NAME, "logo_480x800"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_splash)
+ else: equals(ICON_NAME, "logo_71x71"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_medium)
+ else: equals(ICON_NAME, "logo_44x44"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_small)
+ # Windows RT specifics
+ else: equals(ICON_NAME, "logo_620x300"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_splash)
+ else: equals(ICON_NAME, "logo_70x70"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_medium)
+ else: equals(ICON_NAME, "logo_30x30"): ICON_FILE = $$eval(WINRT_MANIFEST.logo_small)
+ }
isEmpty(ICON_FILE): ICON_FILE = $$WINRT_ASSETS_PATH/$${ICON_NAME}.png
icon_$${ICON_NAME}.input = $$ICON_FILE
icon_$${ICON_NAME}.output = $$BUILD_DIR/assets/$$basename(ICON_FILE)
diff --git a/mkspecs/features/xctest.prf b/mkspecs/features/xctest.prf
new file mode 100644
index 0000000000..4b84682df7
--- /dev/null
+++ b/mkspecs/features/xctest.prf
@@ -0,0 +1,6 @@
+equals(TEMPLATE, app) {
+ load(sdk)
+ # Make the XCTest framework available. This is normally handled automatically
+ # by Xcode based on heuristics, but we need to explicitly link to XCTest.
+ QMAKE_LFLAGS += -F$${QMAKE_MAC_SDK_PLATFORM_PATH}/Developer/Library/Frameworks -weak_framework XCTest
+}