summaryrefslogtreecommitdiffstats
path: root/mkspecs/features
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features')
-rw-r--r--mkspecs/features/android.prf14
-rw-r--r--mkspecs/features/c++11.prf7
-rw-r--r--mkspecs/features/cmake_functions.prf26
-rw-r--r--mkspecs/features/configure.prf3
-rw-r--r--mkspecs/features/create_cmake.prf26
-rw-r--r--mkspecs/features/ctest_testcase.prf39
-rw-r--r--mkspecs/features/data/android/dx.bat102
-rw-r--r--mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in22
-rw-r--r--mkspecs/features/default_post.prf8
-rw-r--r--mkspecs/features/exclusive_builds.prf38
-rw-r--r--mkspecs/features/ios/default_post.prf69
-rw-r--r--mkspecs/features/ios/default_pre.prf4
-rw-r--r--mkspecs/features/java.prf65
-rw-r--r--mkspecs/features/mac/default_post.prf6
-rw-r--r--mkspecs/features/mac/sdk.prf64
-rw-r--r--mkspecs/features/moc.prf18
-rw-r--r--mkspecs/features/qml_plugin.prf24
-rw-r--r--mkspecs/features/qmltestcase.prf2
-rw-r--r--mkspecs/features/qpa/basicunixfontdatabase.prf2
-rw-r--r--mkspecs/features/qpa/genericunixfontdatabase.prf2
-rw-r--r--mkspecs/features/qt_android_deps.prf53
-rw-r--r--mkspecs/features/qt_build_config.prf3
-rw-r--r--mkspecs/features/qt_common.prf54
-rw-r--r--mkspecs/features/qt_docs.prf4
-rw-r--r--mkspecs/features/qt_module.prf23
-rw-r--r--mkspecs/features/qt_module_headers.prf14
-rw-r--r--mkspecs/features/qt_module_pris.prf2
-rw-r--r--mkspecs/features/qt_plugin.prf5
-rw-r--r--mkspecs/features/qt_tool.prf15
-rw-r--r--mkspecs/features/resolve_target.prf2
-rw-r--r--mkspecs/features/testcase.prf2
-rw-r--r--mkspecs/features/unix/opengl.prf2
-rw-r--r--mkspecs/features/unix/separate_debug_info.prf13
-rw-r--r--mkspecs/features/win32/opengl.prf1
34 files changed, 628 insertions, 106 deletions
diff --git a/mkspecs/features/android.prf b/mkspecs/features/android.prf
new file mode 100644
index 0000000000..2a3086d4ad
--- /dev/null
+++ b/mkspecs/features/android.prf
@@ -0,0 +1,14 @@
+contains(TEMPLATE, ".*app") {
+ !android_app {
+ !contains(TARGET, ".so"): TARGET = lib$${TARGET}.so
+ QMAKE_LFLAGS += -Wl,-soname,$$TARGET
+ }
+}
+!QTDIR_build:android_install {
+ isEmpty(QT_BUILD_TREE) {
+ target.path=/libs/$$ANDROID_TARGET_ARCH/
+ } else {
+ target.path = /
+ }
+ INSTALLS *= target
+}
diff --git a/mkspecs/features/c++11.prf b/mkspecs/features/c++11.prf
index 4b56fa9fd2..32eaca4a9b 100644
--- a/mkspecs/features/c++11.prf
+++ b/mkspecs/features/c++11.prf
@@ -1,3 +1,10 @@
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_CXX11
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CXXFLAGS_CXX11
QMAKE_LFLAGS += $$QMAKE_LFLAGS_CXX11
+
+contains(QMAKE_LFLAGS, -stdlib=libc++) {
+ equals(QMAKE_MACOSX_DEPLOYMENT_TARGET, 10.6): \
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
+ contains(QMAKE_IOS_DEPLOYMENT_TARGET, ^4.*): \
+ QMAKE_IOS_DEPLOYMENT_TARGET = 5.0
+}
diff --git a/mkspecs/features/cmake_functions.prf b/mkspecs/features/cmake_functions.prf
new file mode 100644
index 0000000000..62634d9b88
--- /dev/null
+++ b/mkspecs/features/cmake_functions.prf
@@ -0,0 +1,26 @@
+#
+# W A R N I N G
+# -------------
+#
+# This file is not part of the Qt API. It exists purely as an
+# implementation detail. It may change from version to version
+# without notice, or even be removed.
+#
+# We mean it.
+#
+
+defineReplace(cmakeModuleName) {
+ _module = $$1
+ _name = $$eval(QT.$${_module}.name)
+ cmake_module_name = $$replace(_name, ^Qt, )
+ return ($$cmake_module_name)
+}
+
+defineReplace(cmakeModuleList) {
+ variable = $$1
+ out =
+ for(v, variable) {
+ out += $$cmakeModuleName($$v)
+ }
+ return ($$join(out, ";"))
+}
diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf
index 39144e7216..b4569df6d5 100644
--- a/mkspecs/features/configure.prf
+++ b/mkspecs/features/configure.prf
@@ -7,6 +7,9 @@ equals(MAKEFILE_GENERATOR, UNIX) {
QMAKE_MAKE = mingw32-make
} else:if(equals(MAKEFILE_GENERATOR, MSVC.NET)|equals(MAKEFILE_GENERATOR, MSBUILD)) {
QMAKE_MAKE = nmake
+} else:ios {
+ # iOS unsets MAKEFILE_GENERATOR in its default_pre.prf
+ QMAKE_MAKE = make
} else {
error("Configure tests are not supported with the $$MAKEFILE_GENERATOR Makefile generator.")
}
diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf
index 43dca4cd70..cf0acaf4b7 100644
--- a/mkspecs/features/create_cmake.prf
+++ b/mkspecs/features/create_cmake.prf
@@ -9,21 +9,7 @@
# We mean it.
#
-defineReplace(cmakeModuleName) {
- _module = $$1
- _name = $$eval(QT.$${_module}.name)
- cmake_module_name = $$replace(_name, ^Qt, )
- return ($$cmake_module_name)
-}
-
-defineReplace(cmakeModuleList) {
- variable = $$1
- out =
- for(v, variable) {
- out += $$cmakeModuleName($$v)
- }
- return ($$join(out, ";"))
-}
+load(cmake_functions)
defineReplace(cmakeRelativePath) {
path = $$relative_path($$1, $$2)
@@ -69,10 +55,10 @@ CMAKE_BIN_DIR = $$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])
CMAKE_BIN_DIR_IS_ABSOLUTE = True
}
-CMAKE_ARCHDATA_DIR = $$cmakeRelativePath($$[QT_INSTALL_ARCHDATA], $$[QT_INSTALL_PREFIX])
-!isEmpty(CMAKE_FORCE_ABSOLUTE_PATHS)|contains(CMAKE_ARCHDATA_DIR, "^\\.\\./.*") { # For the mkspecs
- CMAKE_ARCHDATA_DIR = $$[QT_INSTALL_ARCHDATA]/
- CMAKE_ARCHDATA_DIR_IS_ABSOLUTE = True
+CMAKE_HOST_DATA_DIR = $$cmakeRelativePath($$[QT_HOST_DATA], $$[QT_INSTALL_PREFIX])
+!isEmpty(CMAKE_FORCE_ABSOLUTE_PATHS)|contains(CMAKE_HOST_DATA_DIR, "^\\.\\./.*") {
+ CMAKE_HOST_DATA_DIR = $$[QT_HOST_DATA]/
+ CMAKE_HOST_DATA_DIR_IS_ABSOLUTE = True
}
static|staticlib:CMAKE_STATIC_TYPE = true
@@ -83,7 +69,7 @@ CMAKE_MKSPEC = $$[QMAKE_XSPEC]
CMAKE_QT_STEM = Qt$$eval(QT.$${MODULE}.MAJOR_VERSION)$${CMAKE_MODULE_NAME}$${QT_LIBINFIX}
-macx {
+mac {
!isEmpty(CMAKE_STATIC_TYPE) {
CMAKE_LIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}_debug.a
CMAKE_LIB_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.a
diff --git a/mkspecs/features/ctest_testcase.prf b/mkspecs/features/ctest_testcase.prf
index 7f86ca0052..7faf738d6e 100644
--- a/mkspecs/features/ctest_testcase.prf
+++ b/mkspecs/features/ctest_testcase.prf
@@ -18,6 +18,8 @@ isEmpty(CMAKE_VERSION) {
CMAKE_VERSION_MAJOR = $$section(CMAKE_VERSION, ., 0, 0)
CMAKE_VERSION_MINOR = $$section(CMAKE_VERSION, ., 1, 1)
CMAKE_VERSION_PATCH = $$section(CMAKE_VERSION, ., 2, 2)
+ # CMake can report versions like 2.8.11-rc1, so strip off the rc part.
+ CMAKE_VERSION_PATCH ~= s,-.*,,
VERSION_OK =
greaterThan(CMAKE_VERSION_MAJOR, 2) {
@@ -31,6 +33,8 @@ isEmpty(CMAKE_VERSION) {
isEmpty(VERSION_OK) {
message("cmake $$CMAKE_VERSION is too old for this test.")
} else {
+ load(cmake_functions)
+
CMAKE_BUILD_TYPE = Debug
CONFIG(release, debug|release):CMAKE_BUILD_TYPE = Release
win32-g++*:CMAKE_GENERATOR = -G \"MinGW Makefiles\"
@@ -40,10 +44,39 @@ isEmpty(CMAKE_VERSION) {
for(d, $$list($$split($$list($$[QMAKE_MKSPECS]), $$DIRLIST_SEPARATOR))) {
CMAKE_PREFIX_PATH *= $$dirname(d)
}
+ CMAKE_PREFIX_PATH=\"$$join(CMAKE_PREFIX_PATH, ;)\"
+
+ !qtHaveModule(widgets): CMAKE_MODULE_DEFINES += -DNO_WIDGETS=True
+ !qtHaveModule(dbus): CMAKE_MODULE_DEFINES += -DNO_DBUS=True
+
+ dependentmodules = $$resolve_depends(CMAKE_QT_MODULES_UNDER_TEST, "QT.")
+ dependentmodules -= $$CMAKE_QT_MODULES_UNDER_TEST
+ dependentmodules = $$cmakeModuleList($$dependentmodules)
+
+ SET = set
+ equals(QMAKE_DIR_SEP, "/"):SET = export
+
+ CMAKE_MODULE_VERSIONS =
+ CMAKE_MODULES_UNDER_TEST =
+ for (MODULE_UNDER_TEST, CMAKE_QT_MODULES_UNDER_TEST) {
+ CMAKE_NAME = $$cmakeModuleName($$MODULE_UNDER_TEST)
+ CMAKE_MODULE_VERSIONS += \
+ -DCMAKE_$${CMAKE_NAME}_MODULE_MAJOR_VERSION=$$eval(QT.$${MODULE_UNDER_TEST}.MAJOR_VERSION) \
+ -DCMAKE_$${CMAKE_NAME}_MODULE_MINOR_VERSION=$$eval(QT.$${MODULE_UNDER_TEST}.MINOR_VERSION) \
+ -DCMAKE_$${CMAKE_NAME}_MODULE_PATCH_VERSION=$$eval(QT.$${MODULE_UNDER_TEST}.PATCH_VERSION)
+ CMAKE_MODULES_UNDER_TEST += $$CMAKE_NAME
+ }
+ CMAKE_MODULES_UNDER_TEST = $$join(CMAKE_MODULES_UNDER_TEST, ;)
check.commands = \
- $(MKDIR) $$BUILD_DIR && cd $$BUILD_DIR && \
- cmake $$_PRO_FILE_PWD_ $$CMAKE_GENERATOR -DCMAKE_BUILD_TYPE=$${CMAKE_BUILD_TYPE} -DCMAKE_PREFIX_PATH=\"$$join(CMAKE_PREFIX_PATH, ;)\" && \
+ $(MKDIR) $$BUILD_DIR && cd $$BUILD_DIR && $$SET VERBOSE=1 && \
+ cmake $$_PRO_FILE_PWD_ $$CMAKE_GENERATOR \
+ $$CMAKE_MODULE_DEFINES \
+ -DCMAKE_BUILD_TYPE=$${CMAKE_BUILD_TYPE} \
+ -DCMAKE_PREFIX_PATH=$$CMAKE_PREFIX_PATH \
+ -DQt5_MODULE_TEST_DEPENDS=\"$${dependentmodules}\" \
+ $${CMAKE_MODULE_VERSIONS} \
+ -DCMAKE_MODULES_UNDER_TEST=\"$$CMAKE_MODULES_UNDER_TEST\" && \
$(TESTRUNNER) ctest --output-on-failure
}
@@ -54,6 +87,4 @@ insignificant_test:!isEmpty(check.commands) {
check.commands = -$${check.commands}
}
-!qtHaveModule(widgets): CONFIG += insignificant_test # QTBUG-28540
-
QMAKE_EXTRA_TARGETS *= check
diff --git a/mkspecs/features/data/android/dx.bat b/mkspecs/features/data/android/dx.bat
new file mode 100644
index 0000000000..af143c52b5
--- /dev/null
+++ b/mkspecs/features/data/android/dx.bat
@@ -0,0 +1,102 @@
+@echo off
+REM Copyright (C) 2007 The Android Open Source Project
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+REM If/when Google merge:
+REM https://android-review.googlesource.com/#/c/52680/
+REM this file will become redundant.
+
+REM don't modify the caller's environment
+setlocal
+
+REM Locate dx.jar in the directory where dx.bat was found and start it.
+
+REM Set up prog to be the path of this script, including following symlinks,
+REM and set up progdir to be the fully-qualified pathname of its directory.
+set prog=%~f0
+
+if [%1]==[] goto badArgs
+set "androidsdk=%1"
+shift /1
+
+if [%1]==[] goto badArgs
+
+rem Check we have a valid Java.exe in the path.
+set java_exe=
+call "%androidsdk%\tools\lib\find_java.bat"
+if not defined java_exe goto :EOF
+
+set jarfile=dx.jar
+set "frameworkdir=%androidsdk%\platform-tools"
+
+if exist "%frameworkdir%\%jarfile%" goto JarFileOk
+ set "frameworkdir=%frameworkdir%\lib"
+
+if exist "%frameworkdir%\%jarfile%" goto JarFileOk
+ set "frameworkdir=%androidsdk%\framework"
+
+:JarFileOk
+
+set jarpath=%frameworkdir%\%jarfile%
+
+set javaOpts=
+set args=
+
+REM By default, give dx a max heap size of 1 gig and a stack size of 1meg.
+rem This can be overridden by using "-JXmx..." and "-JXss..." options below.
+set defaultXmx=-Xmx1024M
+set defaultXss=-Xss1m
+
+REM Capture all arguments that are not -J options.
+REM Note that when reading the input arguments with %1, the cmd.exe
+REM automagically converts --name=value arguments into 2 arguments "--name"
+REM followed by "value". Dx has been changed to know how to deal with that.
+set params=
+
+:firstArg
+if [%1]==[] goto endArgs
+set a=%~1
+
+ if [%defaultXmx%]==[] goto notXmx
+ if %a:~0,5% NEQ -JXmx goto notXmx
+ set defaultXmx=
+ :notXmx
+
+ if [%defaultXss%]==[] goto notXss
+ if %a:~0,5% NEQ -JXss goto notXss
+ set defaultXss=
+ :notXss
+
+ if %a:~0,2% NEQ -J goto notJ
+ set javaOpts=%javaOpts% -%a:~2%
+ shift /1
+ goto firstArg
+
+ :notJ
+ set params=%params% %1
+ shift /1
+ goto firstArg
+
+:endArgs
+
+set javaOpts=%javaOpts% %defaultXmx% %defaultXss%
+
+call "%java_exe%" %javaOpts% -Djava.ext.dirs="%frameworkdir%" -jar "%jarpath%" %params%
+
+goto :EOF
+
+:badArgs
+echo Usage: dx (for Qt) <android_sdk_path> <dx_arguments>
+echo Example: dx (for Qt) C:\android-sdk --dex --output=target.jar .classes
+
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
index d70dbedbf4..65ba03d44c 100644
--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
@@ -9,9 +9,7 @@ get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"${CMAKE_CURREN
set(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$[QT_INSTALL_PREFIX]\")
!!ENDIF
-set(Qt5$${CMAKE_MODULE_NAME}_VERSION_MAJOR "$$eval(QT.$${MODULE}.MAJOR_VERSION)")
-set(Qt5$${CMAKE_MODULE_NAME}_VERSION_MINOR "$$eval(QT.$${MODULE}.MINOR_VERSION)")
-set(Qt5$${CMAKE_MODULE_NAME}_VERSION_PATCH "$$eval(QT.$${MODULE}.PATCH_VERSION)")
+# For backwards compatibility only. Use Qt5$${CMAKE_MODULE_NAME}_VERSION instead.
set(Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING "$$eval(QT.$${MODULE}.MAJOR_VERSION).$$eval(QT.$${MODULE}.MINOR_VERSION).$$eval(QT.$${MODULE}.PATCH_VERSION)")
set(Qt5$${CMAKE_MODULE_NAME}_LIBRARIES Qt5::$${CMAKE_MODULE_NAME})
@@ -47,13 +45,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
!!IF !no_module_headers
!!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
- set(Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}\")
+ set(Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}\")
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}\"
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}/$${MODULE_INCNAME}\"
)
!!ELSE
- set(Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS \"$${CMAKE_INCLUDE_DIR}Qt$${CMAKE_MODULE_NAME}\")
+ set(Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\" \"$${CMAKE_INCLUDE_DIR}Qt$${CMAKE_MODULE_NAME}\")
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
\"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}\"
\"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}/$${MODULE_INCNAME}\"
@@ -77,13 +75,18 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
if (Qt5$${CMAKE_MODULE_NAME}_FIND_QUIETLY)
set(_Qt5$${CMAKE_MODULE_NAME}_DEPENDENCIES_FIND_QUIET QUIET)
endif()
+ set(_Qt5$${CMAKE_MODULE_NAME}_FIND_VERSION_EXACT)
+ if (Qt5$${CMAKE_MODULE_NAME}_FIND_VERSION_EXACT)
+ set(_Qt5$${CMAKE_MODULE_NAME}_FIND_VERSION_EXACT EXACT)
+ endif()
foreach(_module_dep ${_Qt5$${CMAKE_MODULE_NAME}_MODULE_DEPENDENCIES})
if (NOT Qt5${_module_dep}_FOUND)
find_package(Qt5${_module_dep}
+ ${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING} ${_Qt5$${CMAKE_MODULE_NAME}_FIND_VERSION_EXACT}
${_Qt5$${CMAKE_MODULE_NAME}_DEPENDENCIES_FIND_QUIET}
${_Qt5$${CMAKE_MODULE_NAME}_FIND_DEPENDENCIES_REQUIRED}
- PATHS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}\" NO_DEFAULT_PATH
+ PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" NO_DEFAULT_PATH
)
endif()
@@ -103,7 +106,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
list(REMOVE_DUPLICATES Qt5$${CMAKE_MODULE_NAME}_DEFINITIONS)
list(REMOVE_DUPLICATES Qt5$${CMAKE_MODULE_NAME}_COMPILE_DEFINITIONS)
if (Qt5$${CMAKE_MODULE_NAME}_EXECUTABLE_COMPILE_FLAGS)
- list(REMOVE_DUPLICATES Qt5$${CMAKE_MODULE_NAME}_EXECUTABLE_COMPILE_FLAGS)
+ list(REMOVE_DUPLICATES Qt5$${CMAKE_MODULE_NAME}_EXECUTABLE_COMPILE_FLAGS)
endif()
set(_Qt5$${CMAKE_MODULE_NAME}_LIB_DEPENDENCIES \"$${CMAKE_QT5_MODULE_DEPS}\")
@@ -118,6 +121,11 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} PROPERTY FRAMEWORK 1)
!!ENDIF
+ set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} PROPERTY
+ INTERFACE_INCLUDE_DIRECTORIES ${Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS})
+ set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} PROPERTY
+ INTERFACE_COMPILE_DEFINITIONS $${MODULE_DEFINE})
+
!!IF !isEmpty(CMAKE_RELEASE_TYPE)
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
_populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" \"\" )
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index cdd200e80b..c756455dd2 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -47,6 +47,14 @@ incredibuild_xge {
CONFIG = incredibuild_xge $$CONFIG
}
+silent {
+ # Ensure that we process silent.prf last, as it will mangle QMAKE_CXX
+ # and friends in a way that some of the other features (sdk.prf and
+ # simd.prf eg) do not handle.
+ CONFIG -= silent
+ CONFIG = silent $$CONFIG
+}
+
force_debug_info:win32 {
load(resolve_target)
QMAKE_CLEAN += $$replace(QMAKE_RESOLVED_TARGET, ...$, pdb) # for the debug case it is hardcoded in qmake
diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf
index 0e0da05c70..c45ff22c06 100644
--- a/mkspecs/features/exclusive_builds.prf
+++ b/mkspecs/features/exclusive_builds.prf
@@ -6,7 +6,7 @@ defineTest(fixExclusiveOutputDirs) {
count(ARGS, 2, greaterThan):isEqual($$list($$lower($$3)), false):appendFirstBuild = false
else:appendFirstBuild = true
- isEmpty(QMAKE_DIR_REPLACE):QMAKE_DIR_REPLACE += OBJECTS_DIR MOC_DIR RCC_DIR
+ isEmpty(QMAKE_DIR_REPLACE):QMAKE_DIR_REPLACE += OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR
lessThan(firstBuild, $$secondBuild):eval($${firstBuild}_and_$${secondBuild}_target:QMAKE_DIR_REPLACE += DESTDIR)
else:eval($${secondBuild}_and_$${firstBuild}_target:QMAKE_DIR_REPLACE += DESTDIR)
for(fix, QMAKE_DIR_REPLACE) {
@@ -33,15 +33,15 @@ defineTest(addExclusiveBuilds) {
contains(TEMPLATE, subdirs) {
eval(sub_$${firstBuildName}.target = $$firstBuild)
- export(sub_$${firstBuildName}.target)
+ export(sub_$${firstBuildName}.target)
eval(sub_$${firstBuildName}.CONFIG = recursive)
- export(sub_$${firstBuildName}.CONFIG)
+ export(sub_$${firstBuildName}.CONFIG)
eval(sub_$${secondBuildName}.target = $$secondBuild)
- export(sub_$${secondBuildName}.target)
+ export(sub_$${secondBuildName}.target)
eval(sub_$${secondBuildName}.CONFIG = recursive)
- export(sub_$${secondBuildName}.CONFIG)
- QMAKE_EXTRA_TARGETS += sub_$${firstBuildName} sub_$${secondBuildName}
- export(QMAKE_EXTRA_TARGETS)
+ export(sub_$${secondBuildName}.CONFIG)
+ QMAKE_EXTRA_TARGETS += sub_$${firstBuildName} sub_$${secondBuildName}
+ export(QMAKE_EXTRA_TARGETS)
} else:!build_pass {
first_BUILDS =
second_BUILDS =
@@ -56,32 +56,32 @@ defineTest(addExclusiveBuilds) {
else: permutationName = -$$permutation
# Makefile target rule
eval($${firstBuildName}$${permutation}.target = $${firstBuild}$$lower($${permutationName}))
- export($${firstBuildName}$${permutation}.target)
+ export($${firstBuildName}$${permutation}.target)
# IDE name
eval($${firstBuildName}$${permutation}.name = $${firstBuildName}$${permutationName})
- export($${firstBuildName}$${permutation}.name)
- # prl import CONFIG option
+ export($${firstBuildName}$${permutation}.name)
+ # prl import CONFIG option
eval($${firstBuildName}$${permutation}.PRL_CONFIG = $${firstBuild}$${permutation})
export($${firstBuildName}$${permutation}.PRL_CONFIG)
# Individual CONFIG option
eval($${firstBuildName}$${permutation}.CONFIG = $${firstBuild} $${firstBuildName}Build $$eval($${permutation}.CONFIG))
- export($${firstBuildName}$${permutation}.CONFIG)
+ export($${firstBuildName}$${permutation}.CONFIG)
eval($${secondBuildName}$${permutation}.target = $${secondBuild}$$lower($${permutationName}))
- export($${secondBuildName}$${permutation}.target)
+ export($${secondBuildName}$${permutation}.target)
eval($${secondBuildName}$${permutation}.name = $${secondBuildName}$${permutationName})
- export($${secondBuildName}$${permutation}.name)
- eval($${secondBuildName}$${permutation}.PRL_CONFIG = $${secondBuild}$${permutation})
- export($${secondBuildName}$${permutation}.PRL_CONFIG)
+ export($${secondBuildName}$${permutation}.name)
+ eval($${secondBuildName}$${permutation}.PRL_CONFIG = $${secondBuild}$${permutation})
+ export($${secondBuildName}$${permutation}.PRL_CONFIG)
eval($${secondBuildName}$${permutation}.CONFIG = $${secondBuild} $${secondBuildName}Build $$eval($${permutation}.CONFIG))
- export($${secondBuildName}$${permutation}.CONFIG)
-
+ export($${secondBuildName}$${permutation}.CONFIG)
+
first_BUILDS += $${firstBuildName}$${permutation}
second_BUILDS += $${secondBuildName}$${permutation}
}
-
+
# A mutual exclusive block.
- CONFIG($${firstBuild}, $${firstBuild}|$${secondBuild}): BUILDS = $$first_BUILDS $$second_BUILDS
+ CONFIG($${firstBuild}, $${firstBuild}|$${secondBuild}): BUILDS = $$first_BUILDS $$second_BUILDS
else: BUILDS = $$second_BUILDS $$first_BUILDS
export(BUILDS)
} else {
diff --git a/mkspecs/features/ios/default_post.prf b/mkspecs/features/ios/default_post.prf
new file mode 100644
index 0000000000..e9d2149351
--- /dev/null
+++ b/mkspecs/features/ios/default_post.prf
@@ -0,0 +1,69 @@
+
+CONFIG(qt):contains(QT, gui):equals(TEMPLATE, app): CONFIG += gui_app
+
+isEmpty(MAKEFILE_GENERATOR) {
+ gui_app:app_bundle: \
+ # For applications we want Xcode project files
+ MAKEFILE_GENERATOR = XCODE
+ else: \
+ # For libs, etc we still want regular Makefiles
+ MAKEFILE_GENERATOR = UNIX
+}
+
+gui_app {
+ # We have to do the link and dependency resolution for the platform plugin
+ # manually, since QTPLUGIN and the prl lookup logic does not support
+ # the -force_load link style. The -force_load option ensures that all
+ # symbols from the static library are included, not just the ones the
+ # linker have seen a use for so far. We need this because we load the platform
+ # plugin from the platform plugin itself, using Q_IMPORT_PLUGIN.
+ lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/libqios$$qtPlatformTargetSuffix()
+ LIBS += "-force_load $${lib_path_and_base}.$${QMAKE_EXTENSION_STATICLIB}"
+ LIBS += $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
+
+ # Which means we don't want the auto-generated import for the platform plugin
+ CONFIG -= import_qpa_plugin
+
+ !no_main_wrapper {
+ # We link the iosmain library manually as well, since it's not really a plugin
+ lib_name = qiosmain
+ lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/lib$${lib_name}$$qtPlatformTargetSuffix()
+ LIBS += -L$$[QT_INSTALL_PLUGINS/get]/platforms -l$${lib_name}$$qtPlatformTargetSuffix()
+ LIBS += $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
+ DEFINES += main=qt_main
+ }
+}
+
+contains(MAKEFILE_GENERATOR, XCODE) {
+ ios_device_family.name = TARGETED_DEVICE_FAMILY
+ ios_device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY
+ QMAKE_MAC_XCODE_SETTINGS += ios_device_family
+}
+
+isEmpty(QT_ARCH) {
+ # The iPhoneOS and iPhoneSimulator targets share the same toolchain,
+ # so when configure runs the arch tests it passes the correct sysroot,
+ # but we fail to pick up the architecture since we're not passing -arch
+ # yet. Xcode does not seem to have a way to run the shared toolchain
+ # in a way that will automatically do this (for example xcrun -sdk).
+ contains(QMAKE_MAC_SDK, iphoneos.*): QT_ARCH = armv7
+ else: QT_ARCH = i386 # Simulator
+} else {
+ # Fix up the QT_ARCH to be more specific
+ equals(QT_ARCH, arm) {
+ # Samsung S5PC100, Apple A4, A5, A5X
+ QT_ARCH = armv7
+
+ # FIXME: How do we support armv7s when Qt can't do universal builds?
+ }
+}
+
+!equals(MAKEFILE_GENERATOR, XCODE) {
+ arch_flag = -arch $$QT_ARCH
+ QMAKE_CFLAGS += $$arch_flag
+ QMAKE_CXXFLAGS += $$arch_flag
+ QMAKE_OBJECTIVE_CFLAGS += $$arch_flag
+ QMAKE_LFLAGS += $$arch_flag
+}
+
+load(default_post)
diff --git a/mkspecs/features/ios/default_pre.prf b/mkspecs/features/ios/default_pre.prf
new file mode 100644
index 0000000000..e2956bd77d
--- /dev/null
+++ b/mkspecs/features/ios/default_pre.prf
@@ -0,0 +1,4 @@
+# Unset makefile generator, so we can auto-detect value in default_post
+unset(MAKEFILE_GENERATOR)
+
+load(default_pre)
diff --git a/mkspecs/features/java.prf b/mkspecs/features/java.prf
new file mode 100644
index 0000000000..6cbd690c37
--- /dev/null
+++ b/mkspecs/features/java.prf
@@ -0,0 +1,65 @@
+TEMPLATE = lib
+android {
+ isEmpty(SDK_ROOT): SDK_ROOT = $$(ANDROID_SDK_ROOT)
+ isEmpty(SDK_ROOT): SDK_ROOT = $$DEFAULT_ANDROID_SDK_ROOT
+ isEmpty(API_VERSION) {
+ API_VERSION = $$(ANDROID_API_VERSION)
+ isEmpty(API_VERSION): API_VERSION = android-10
+ }
+
+ !exists($$SDK_ROOT/platforms/$$API_VERSION/android.jar) {
+ error("The Path $$SDK_ROOT/platforms/$$API_VERSION/android.jar does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.")
+ }
+ JAVACLASSPATH += $$SDK_ROOT/platforms/$$API_VERSION/android.jar
+
+ # FIXME: This is a hack to work around some hardcoded values in the android.prf. The
+ # android.prf should be fixed and this should be removed.
+ CONFIG += android_app
+}
+
+isEmpty(CLASS_DIR): CLASS_DIR = .classes
+
+CONFIG -= qt
+
+# Without these, qmake adds a name prefix and versioning postfixes (as well as file
+# links) to the target. This is hardcoded in the qmake code, so for now we use
+# the plugin configs to get what we want.
+CONFIG += plugin no_plugin_name_prefix
+
+javac.input = JAVASOURCES
+javac.output = $$CLASS_DIR
+javac.CONFIG += combine
+javac.commands = javac -source 6 -target 6 -cp $$shell_quote($$shell_path($$join(JAVACLASSPATH, $$QMAKE_DIRLIST_SEP))) -d $$shell_quote($$CLASS_DIR) ${QMAKE_FILE_IN}
+# Force rebuild every time, because we don't know the paths of the destination files
+# as they depend on the code.
+javac.depends = FORCE
+QMAKE_EXTRA_COMPILERS += javac
+
+mkpath($$absolute_path($$CLASS_DIR, $$OUT_PWD)) | error("Aborting.")
+
+# Disable all linker flags since we are overriding the regular linker
+QMAKE_LFLAGS =
+QMAKE_CFLAGS =
+QMAKE_LFLAGS_RPATH =
+QMAKE_LFLAGS_PLUGIN =
+QMAKE_LIBS =
+QMAKE_LIBS_OPENGL_ES2 =
+QMAKE_LIBDIR =
+QMAKE_EXTENSION_SHLIB = jar
+
+# Override linker with dex (for Android) or jar (for other java builds)
+android {
+ QMAKE_LINK_O_FLAG = --output=
+ contains(QMAKE_HOST.os, Windows) {
+ QMAKE_LINK = $$PWD/data/android/dx $$SDK_ROOT --dex
+ } else {
+ QMAKE_LINK = $$SDK_ROOT/platform-tools/dx --dex
+ }
+} else {
+ QMAKE_LINK_O_FLAG = "cf "
+ QMAKE_LINK = jar
+}
+
+# Force link step to always happen, since we are always updating the
+# .class files
+PRE_TARGETDEPS += FORCE
diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf
index 273094d4cd..437e3d93e4 100644
--- a/mkspecs/features/mac/default_post.prf
+++ b/mkspecs/features/mac/default_post.prf
@@ -4,7 +4,7 @@ load(default_post)
# Pick a suitable default architecture for qmake-based applications.
# If the Qt package contains one of x86 and x86_64, pick that one. If it
# contains both then use the compiler default. Make a similiar decision for
-# PowerPC-based systems. Note that this logic assumes that Qt has been
+# PowerPC-based systems. Note that this logic assumes that Qt has been
# configured with an architecture that is usable on the system.
qt:!isEmpty(QT_CONFIG) {
contains(QMAKE_HOST.arch, ppc)|contains(QMAKE_HOST.arch, "Power Macintosh") {
@@ -15,3 +15,7 @@ qt:!isEmpty(QT_CONFIG) {
contains(QT_CONFIG, x86_64):!contains(QT_CONFIG, x86):CONFIG += x86_64
}
}
+
+# 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)
diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf
index 5eab94896b..ece0e27536 100644
--- a/mkspecs/features/mac/sdk.prf
+++ b/mkspecs/features/mac/sdk.prf
@@ -1,8 +1,58 @@
-!isEmpty(QMAKE_MAC_SDK) {
- !macx-xcode:!macx-pbuilder {
- QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK
- QMAKE_OBJECTIVE_CFLAGS += -isysroot $$QMAKE_MAC_SDK
- QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK
- QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK
- }
+
+isEmpty(QMAKE_MAC_SDK): \
+ error("QMAKE_MAC_SDK must be set when using CONFIG += sdk.")
+
+contains(QMAKE_MAC_SDK, .*/.*): \
+ error("QMAKE_MAC_SDK can only contain short-form SDK names (eg. macosx, iphoneos)")
+
+QMAKE_MAC_SDK_PATH = $$system("/usr/bin/xcodebuild -sdk $$QMAKE_MAC_SDK -version Path 2>/dev/null")
+isEmpty(QMAKE_MAC_SDK_PATH): error("Could not resolve SDK path for \'$$QMAKE_MAC_SDK\'")
+
+!equals(MAKEFILE_GENERATOR, XCODE) {
+ QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH
+ QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH
+ QMAKE_OBJECTIVE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH
+ QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK_PATH
+}
+
+sysrootified =
+for(val, QMAKE_INCDIR_OPENGL): sysrootified += $${QMAKE_MAC_SDK_PATH}$$val
+QMAKE_INCDIR_OPENGL = $$sysrootified
+
+# Resolve SDK version of various tools
+for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_LINK QMAKE_LINK_SHLIB)) {
+ value = $$eval($$tool)
+ isEmpty(value): next()
+
+ sysrooted = $$system("/usr/bin/xcrun -sdk $$QMAKE_MAC_SDK -find $$first(value) 2>/dev/null")
+ isEmpty(sysrooted): next()
+
+ $$tool = $$sysrooted $$member(value, 1, -1)
+}
+
+# We use xml as the output format instead of json since plutil on 10.6 does not have that option
+QMAKE_MAC_PLATFORM_NAME = $$system("plutil -convert xml1 \"$$QMAKE_MAC_SDK_PATH/SDKSettings.plist\" -o - | " \
+ "sed '/^<!DOCTYPE/d' | " \ # Don't look up http://www.apple.com/DTDs/PropertyList-1.0.dtd
+ "PERL5LIB= xpath 'string(//key[.=\"PLATFORM_NAME\"]/following-sibling::*[1])' 2>&1 | " \
+ "sed 's/.*Value: \\(.*\\)/\\1/'")
+
+isEmpty(QMAKE_MAC_PLATFORM_NAME): error("Could not resolve platform name for SDK '$$QMAKE_MAC_SDK'")
+
+!equals(MAKEFILE_GENERATOR, XCODE) {
+ # FIXME: Get the version_min_flag out of the platform's 'Native Build System.xcspec'
+ version_identifier = $$replace(QMAKE_MAC_PLATFORM_NAME, iphonesimulator, ios-simulator)
+
+ # C++11 support may affect the deployment target
+ c++11: load(c++11)
+
+ ios:!host_build: \
+ deployment_target = $$QMAKE_IOS_DEPLOYMENT_TARGET
+ else: \
+ deployment_target = $$QMAKE_MACOSX_DEPLOYMENT_TARGET
+
+ version_min_flag = -m$${version_identifier}-version-min=$$deployment_target
+ QMAKE_CFLAGS += $$version_min_flag
+ QMAKE_CXXFLAGS += $$version_min_flag
+ QMAKE_OBJECTIVE_CFLAGS += $$version_min_flag
+ QMAKE_LFLAGS += $$version_min_flag
}
diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf
index 8bd512844d..59ac9db05b 100644
--- a/mkspecs/features/moc.prf
+++ b/mkspecs/features/moc.prf
@@ -9,7 +9,7 @@ isEmpty(QMAKE_EXT_CPP_MOC):QMAKE_EXT_CPP_MOC = .moc
# has too many includes. We do this to overcome a command-line limit on Win < XP
INCLUDETEMP=
WIN_INCLUDETEMP=
-win32:count($$list($$INCLUDEPATH), 40, >) {
+win32:count(INCLUDEPATH, 40, >) {
INCLUDETEMP = $$MOC_DIR/mocinclude.tmp
WIN_INCLUDETEMP=$$INCLUDETEMP
@@ -23,7 +23,7 @@ win32:count($$list($$INCLUDEPATH), 40, >) {
unset(INCFILELIST)
RET =
- for(incfile, $$list($$INCLUDEPATH)) {
+ for(incfile, INCLUDEPATH) {
INCFILELIST = -I$$incfile
isEmpty(RET): RET += @echo $$INCFILELIST> $$WIN_INCLUDETEMP $$EOC
else: RET += @echo $$INCFILELIST>> $$WIN_INCLUDETEMP $$EOC
@@ -38,15 +38,17 @@ win32:count($$list($$INCLUDEPATH), 40, >) {
}
defineReplace(mocCmdBase) {
+ RET =
!isEmpty(WIN_INCLUDETEMP) {
- RET =
contains(TEMPLATE, "vc.*") {
RET += $$mocinclude.commands
}
- RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$QMAKE_MOC_OPTIONS
- return($$RET)
+ incvar = @$$WIN_INCLUDETEMP
+ } else {
+ incvar = $(INCPATH)
}
- return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$QMAKE_MOC_OPTIONS)
+ RET += $$QMAKE_MOC $(DEFINES) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$incvar $$join(QMAKE_DEFAULT_INCDIRS, " -I", -I) $$QMAKE_MOC_OPTIONS
+ return($$RET)
}
#moc headers
@@ -58,7 +60,7 @@ moc_header.input = HEADERS
moc_header.variable_out = SOURCES
moc_header.name = MOC ${QMAKE_FILE_IN}
!contains(TEMPLATE, "vc.*") {
- !isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP
+ !isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP
}
silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands
QMAKE_EXTRA_COMPILERS += moc_header
@@ -72,7 +74,7 @@ moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EX
moc_source.input = SOURCES OBJECTIVE_SOURCES
moc_source.name = MOC ${QMAKE_FILE_IN}
!contains(TEMPLATE, "vc.*") {
- !isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP
+ !isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP
}
silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands
QMAKE_EXTRA_COMPILERS += moc_source
diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf
index f9beabdc18..70c3bd6b66 100644
--- a/mkspecs/features/qml_plugin.prf
+++ b/mkspecs/features/qml_plugin.prf
@@ -18,12 +18,8 @@ if(win32|mac):!macx-xcode {
contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
contains(QT_CONFIG, build_all):CONFIG += build_all
}
-contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
-contains(QT_CONFIG, separate_debug_info):CONFIG += separate_debug_info
-contains(QT_CONFIG, separate_debug_info_nocopy):CONFIG += separate_debug_info_nocopy
-contains(QT_CONFIG, c++11):CONFIG += c++11
-isEmpty(CXX_MODULE) {
+!no_cxx_module:isEmpty(CXX_MODULE) {
CXX_MODULE = $$TARGET
TARGET = declarative_$${TARGET}
}
@@ -34,11 +30,13 @@ exists($$QMLTYPEFILE): QML_FILES += $$QMLTYPEFILE
# Install rules
+load(qt_build_paths)
+
qml1_target {
- DESTDIR = $$eval(QT.$${CXX_MODULE}.imports)/$$TARGETPATH
+ DESTDIR = $$MODULE_BASE_OUTDIR/imports/$$TARGETPATH
instbase = $$[QT_INSTALL_IMPORTS]
} else {
- DESTDIR = $$eval(QT.$${CXX_MODULE}.qml)/$$TARGETPATH
+ DESTDIR = $$MODULE_BASE_OUTDIR/qml/$$TARGETPATH
instbase = $$[QT_INSTALL_QML]
}
@@ -50,6 +48,7 @@ INSTALLS += target
TARGET = $$qtLibraryTarget($$TARGET)
load(qt_targets)
+load(qt_common)
# plugins.qmltypes is used by Qt Creator for syntax highlighting and the QML code model. It needs
# to be regenerated whenever the QML elements exported by the plugin change. This cannot be done
@@ -61,7 +60,14 @@ load(qt_targets)
#
!cross_compile {
build_pass|!debug_and_release {
- isEmpty(IMPORT_VERSION): IMPORT_VERSION = $$eval(QT.$${CXX_MODULE}.MAJOR_VERSION).$$eval(QT.$${CXX_MODULE}.MINOR_VERSION)
+ isEmpty(IMPORT_VERSION) {
+ no_cxx_module {
+ IMPORT_VERSION = $$replace(MODULE_VERSION, ^(\\d+\\.\\d+).*, \\1)
+ isEmpty(IMPORT_VERSION): error("Must set IMPORT_VERSION")
+ } else {
+ IMPORT_VERSION = $$eval(QT.$${CXX_MODULE}.MAJOR_VERSION).$$eval(QT.$${CXX_MODULE}.MINOR_VERSION)
+ }
+ }
load(resolve_target)
qml1_target: \
@@ -94,7 +100,7 @@ unix|win32-g++* {
!isEmpty(_QMAKE_SUPER_CACHE_): \
lib_replace.match = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*/lib
else: \
- lib_replace.match = $$eval(QT.$${CXX_MODULE}.libs)
+ lib_replace.match = $$MODULE_BASE_OUTDIR
lib_replace.replace = $$[QT_INSTALL_LIBS/raw]
QMAKE_PRL_INSTALL_REPLACE += lib_replace
}
diff --git a/mkspecs/features/qmltestcase.prf b/mkspecs/features/qmltestcase.prf
index 71e70e06a4..335ba90009 100644
--- a/mkspecs/features/qmltestcase.prf
+++ b/mkspecs/features/qmltestcase.prf
@@ -2,7 +2,7 @@ CONFIG += testcase
QT += qml qmltest
-macx: CONFIG -= app_bundle
+mac: CONFIG -= app_bundle
# If the .pro file specified an IMPORTPATH, then add that to
# the command-line when the test is run.
diff --git a/mkspecs/features/qpa/basicunixfontdatabase.prf b/mkspecs/features/qpa/basicunixfontdatabase.prf
index 65490e03a8..261eadb5d0 100644
--- a/mkspecs/features/qpa/basicunixfontdatabase.prf
+++ b/mkspecs/features/qpa/basicunixfontdatabase.prf
@@ -1,5 +1,3 @@
-DEFINES += QT_COMPILES_IN_HARFBUZZ
-
contains(QT_CONFIG, system-freetype) {
LIBS += -lfreetype
}
diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf
index 36a358271c..fc11bea470 100644
--- a/mkspecs/features/qpa/genericunixfontdatabase.prf
+++ b/mkspecs/features/qpa/genericunixfontdatabase.prf
@@ -2,7 +2,7 @@ CONFIG += qpa/basicunixfontdatabase
contains(QT_CONFIG, fontconfig) {
DEFINES += Q_FONTCONFIGDATABASE
LIBS += -lfontconfig
-} else {
+} else:!android {
fonts.path = $$[QT_INSTALL_LIBS]/fonts
fonts.files = $$QT_SOURCE_TREE/lib/fonts/*
INSTALLS += fonts
diff --git a/mkspecs/features/qt_android_deps.prf b/mkspecs/features/qt_android_deps.prf
new file mode 100644
index 0000000000..27814a90a5
--- /dev/null
+++ b/mkspecs/features/qt_android_deps.prf
@@ -0,0 +1,53 @@
+
+# W A R N I N G
+# -------------
+#
+# This file is not part of the Qt API. It exists purely as an
+# implementation detail. It may change from version to version
+# without notice, or even be removed.
+#
+# We mean it.
+#
+
+# Generates an xml file to match the library in lib/ listing the dependencies
+# of the module on JNI-based libraries etc. Used for deployment of an Android
+# app.
+
+ANDROID_DEPENDS_DIR = $$MODULE_QMAKE_OUTDIR/lib/
+DEPENDENCY_FILE = $$ANDROID_DEPENDS_DIR$$TARGET-android-dependencies.xml
+
+!build_pass {
+ !isEmpty(ANDROID_JAR_DEPENDENCIES) {
+ for(JAR_FILE, ANDROID_JAR_DEPENDENCIES) {
+ INIT_CLASS = $$section(JAR_FILE, ":", 1, 1)
+ !isEmpty(INIT_CLASS): INIT_CLASS = "initClass=\"$$INIT_CLASS\""
+ JAR_FILE = $$section(JAR_FILE, ":", 0, 0)
+ FILE_CONTENT += "<jar file=\"$$JAR_FILE\" $$INIT_CLASS />"
+ }
+ }
+
+ !isEmpty(ANDROID_LIB_DEPENDENCIES) {
+ for(LIB_FILE, ANDROID_LIB_DEPENDENCIES) {
+ FILE_CONTENT += "<lib file=\"$$LIB_FILE\" />"
+ }
+ }
+
+ !isEmpty(ANDROID_LIB_DEPENDENCY_REPLACEMENTS) {
+ for(REPLACEMENT, ANDROID_LIB_DEPENDENCY_REPLACEMENTS) {
+ REPLACEMENT_FILE = $$section(REPLACEMENT, ":", 0, 0)
+ LIB_FILE = $$section(REPLACEMENT, ":", 1, 1)
+ FILE_CONTENT += "<lib file=\"$$LIB_FILE\" replaces=\"$$REPLACEMENT_FILE\" />"
+ }
+ }
+
+ !isEmpty(FILE_CONTENT) {
+ FILE_CONTENT = "<rules><dependencies><lib name=\"$$TARGET\"><depends>" $$FILE_CONTENT "</depends></lib></dependencies></rules>"
+ write_file($$DEPENDENCY_FILE, FILE_CONTENT) | error("Aborting.")
+ }
+}
+
+!isEmpty(ANDROID_JAR_DEPENDENCIES)|!isEmpty(ANDROID_LIB_DEPENDENCIES)|!isEmpty(ANDROID_LIB_DEPENDENCY_REPLACEMENTS) {
+ install_dependencies_file.files = $$DEPENDENCY_FILE
+ install_dependencies_file.path = $$[QT_INSTALL_LIBS]
+ INSTALLS += install_dependencies_file
+}
diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf
index 88c1f3f3f2..4cbd08910c 100644
--- a/mkspecs/features/qt_build_config.prf
+++ b/mkspecs/features/qt_build_config.prf
@@ -40,6 +40,9 @@ mac {
}
}
+cross_compile: \
+ CONFIG += force_bootstrap
+
CONFIG += \
create_prl link_prl \
prepare_docs qt_docs_targets \
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
new file mode 100644
index 0000000000..10b7736749
--- /dev/null
+++ b/mkspecs/features/qt_common.prf
@@ -0,0 +1,54 @@
+#
+# W A R N I N G
+# -------------
+#
+# This file is not part of the Qt API. It exists purely as an
+# implementation detail. It may change from version to version
+# without notice, or even be removed.
+#
+# We mean it.
+#
+
+contains(QT_CONFIG, c++11): CONFIG += c++11
+contains(TEMPLATE, .*lib) {
+ # module and plugins
+ contains(QT_CONFIG, reduce_exports): CONFIG += hide_symbols
+ unix:contains(QT_CONFIG, reduce_relocations): CONFIG += bsymbolic_functions
+ contains(QT_CONFIG, largefile): CONFIG += largefile
+ contains(QT_CONFIG, separate_debug_info): CONFIG += separate_debug_info
+ contains(QT_CONFIG, separate_debug_info_nocopy): CONFIG += separate_debug_info_nocopy
+}
+
+warnings_are_errors:warning_clean {
+ # If the module declares that it has does its clean-up of warnings, enable -Werror.
+ # This setting is compiler-dependent anyway because it depends on the version of the
+ # compiler.
+ clang {
+ # Apple clang 4.0+ or clang 3.1+
+ greaterThan(QT_CLANG_MAJOR_VERSION, 3) | \
+ if(equals(QT_CLANG_MAJOR_VERSION, 3):greaterThan(QT_CLANG_MINOR_VERSION, 1)) | \
+ greaterThan(QT_APPLE_CLANG_MAJOR_VERSION, 3) {
+ QMAKE_CXXFLAGS += -Werror -Wno-error=\\$${LITERAL_HASH}warnings $$WERROR
+ }
+ } else:intel_icc {
+ # Intel CC 13.0+ (a.k.a. Intel Composer XE 2013)
+ greaterThan(QT_ICC_MAJOR_VERSION, 12) {
+ # 177: function "entity" was declared but never referenced
+ # (too aggressive; ICC reports even for functions created due to template instantiation)
+ # 1224: #warning directive
+ # 1881: argument must be a constant null pointer value
+ # (NULL in C++ is usually a literal 0)
+ QMAKE_CXXFLAGS += -Werror -ww177,1224,1881 $$WERROR
+ }
+ } else:gcc {
+ # GCC 4.6+
+ # note: there was no GCC 3.6 and this assumes no one is crazy enough to compile Qt with GCC 2.7
+ greaterThan(QT_GCC_MAJOR_VERSION, 4)|greaterThan(QT_GCC_MINOR_VERSION, 5) {
+ QMAKE_CXXFLAGS += -Werror -Wno-error=cpp $$WERROR
+
+ # GCC prints this bogus warning, after it has inlined a lot of code
+ # error: assuming signed overflow does not occur when assuming that (X + c) < X is always false
+ QMAKE_CXXFLAGS += -Wno-error=strict-overflow
+ }
+ }
+}
diff --git a/mkspecs/features/qt_docs.prf b/mkspecs/features/qt_docs.prf
index c80efb03e0..5b42cfcac8 100644
--- a/mkspecs/features/qt_docs.prf
+++ b/mkspecs/features/qt_docs.prf
@@ -32,7 +32,9 @@ qtmver.name = QT_VER
qtmver.value = $$replace(qtver.value, ^(\\d+\\.\\d+).*$, \\1)
qtvertag.name = QT_VERSION_TAG
qtvertag.value = $$replace(qtver.value, \.,)
-qtAddToolEnv(QDOC, qtver qtmver qtvertag)
+qtdocs.name = QT_INSTALL_DOCS
+qtdocs.value = $$[QT_INSTALL_DOCS/get]
+qtAddToolEnv(QDOC, qtver qtmver qtvertag qtdocs)
doc_command = $$QDOC $$QMAKE_DOCS
prepare_docs {
prepare_docs.commands += $$doc_command -prepare -no-link-errors
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
index 1132943d97..3531d28b42 100644
--- a/mkspecs/features/qt_module.prf
+++ b/mkspecs/features/qt_module.prf
@@ -27,6 +27,19 @@ isEmpty(VERSION): error("Module does not define version.")
# unless overridden. Host builds are always static
host_build|staticlib: CONFIG += static
+host_build {
+ QT -= gui # no host module will ever use gui
+ force_bootstrap {
+ !build_pass: CONFIG += release
+ contains(QT, core(-private)?|xml) {
+ QT -= core core-private xml
+ QT += bootstrap-private
+ }
+ } else {
+ !build_pass:contains(QT_CONFIG, build_all): CONFIG += release
+ }
+}
+
ucmodule = $$upper($$MODULE)
isEmpty(MODULE_INCNAME): MODULE_INCNAME = $$TARGET
@@ -74,13 +87,6 @@ contains(TARGET, QtAddOn.*): \
else: \
DEFINES += QT_BUILD_$${ucmodule}_LIB
-contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
-unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions
-contains(QT_CONFIG, largefile):CONFIG += largefile
-contains(QT_CONFIG, separate_debug_info):CONFIG += separate_debug_info
-contains(QT_CONFIG, separate_debug_info_nocopy):CONFIG += separate_debug_info_nocopy
-contains(QT_CONFIG, c++11):CONFIG += c++11
-
#mac frameworks
mac:CONFIG(shared, static|shared):contains(QT_CONFIG, qt_framework) {
#QMAKE_FRAMEWORK_VERSION = 4.0
@@ -115,6 +121,8 @@ aix-g++* {
QMAKE_CXXFLAGS += -mminimal-toc
}
+android: CONFIG += qt_android_deps
+
#install directives
load(qt_installs)
@@ -169,6 +177,7 @@ win32 {
TARGET = $$qtLibraryTarget($$TARGET$$QT_LIBINFIX) #do this towards the end
load(qt_targets)
+load(qt_common)
win32:DEFINES+=_USE_MATH_DEFINES
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index 40d6bb0d40..298ca102bc 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -13,13 +13,21 @@ load(qt_build_paths)
!build_pass {
qtPrepareTool(QMAKE_SYNCQT, syncqt)
- contains(QT_CONFIG, private_tests): \ # -developer-build
- QMAKE_SYNCQT += -check-includes
- QMAKE_SYNCQT += -module $$MODULE_INCNAME -version $$VERSION -outdir $$MODULE_BASE_OUTDIR $$MODULE_BASE_DIR
+ minimal_syncqt {
+ QMAKE_SYNCQT += -minimal $$QMAKE_SYNCQT_OPTIONS
+ } else {
+ contains(QT_CONFIG, private_tests): \ # -developer-build
+ QMAKE_SYNCQT += -check-includes
+ QMAKE_SYNCQT += -module $$MODULE_INCNAME -version $$VERSION
+ }
+ QMAKE_SYNCQT += \
+ -outdir $$MODULE_BASE_OUTDIR $$MODULE_BASE_DIR
!silent: message($$QMAKE_SYNCQT)
system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
}
+minimal_syncqt: return()
+
#load up the headers info
include($$MODULE_BASE_OUTDIR/include/$$MODULE_INCNAME/headers.pri, "", true)
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index 03863e0648..bedcfd4c47 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -43,7 +43,7 @@ else: \
module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
else: \
module_config =
- !no_module_headers {
+ !no_module_headers:!minimal_syncqt {
MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME"
MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \
\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME"
diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
index 158de39753..9f4882c5db 100644
--- a/mkspecs/features/qt_plugin.prf
+++ b/mkspecs/features/qt_plugin.prf
@@ -23,10 +23,6 @@ tool_plugin {
contains(QT_CONFIG, debug_and_release):CONFIG += debug_and_release
contains(QT_CONFIG, build_all):CONFIG += build_all
}
-contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
-contains(QT_CONFIG, separate_debug_info):CONFIG += separate_debug_info
-contains(QT_CONFIG, separate_debug_info_nocopy):CONFIG += separate_debug_info_nocopy
-contains(QT_CONFIG, c++11):CONFIG += c++11
CONFIG(static, static|shared) {
isEmpty(MODULE): MODULE = $$basename(TARGET)
@@ -52,6 +48,7 @@ INSTALLS += target
TARGET = $$qtLibraryTarget($$TARGET)
load(qt_targets)
+load(qt_common)
wince*:LIBS += $$QMAKE_LIBS_GUI
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf
index 9d50856900..46d031fb32 100644
--- a/mkspecs/features/qt_tool.prf
+++ b/mkspecs/features/qt_tool.prf
@@ -17,9 +17,13 @@ DESTDIR = $$MODULE_BASE_OUTDIR/bin
CONFIG += console
isEmpty(QMAKE_INFO_PLIST): CONFIG -= app_bundle
-host_build {
+host_build: QT -= gui # no host tool will ever use gui
+host_build:force_bootstrap {
!build_pass: CONFIG += release
- QT = bootstrap-private
+ contains(QT, core(-private)?|xml) {
+ QT -= core core-private xml
+ QT += bootstrap-private
+ }
target.path = $$[QT_HOST_BINS]
} else {
!build_pass:contains(QT_CONFIG, build_all): CONFIG += release
@@ -28,11 +32,12 @@ host_build {
INSTALLS += target
load(qt_targets)
+load(qt_common)
# If we are doing a prefix build, create a "module" pri which enables
# qtPrepareTool() to work with the non-installed build.
-!build_pass:force_independent {
-
+# Non-bootstrapped tools always need this because of the environment setup.
+!build_pass:if(!host_build|!force_bootstrap|force_independent) {
isEmpty(MODULE):MODULE = $$TARGET
MODULE_DEPENDS = $$replace(QT, -private$, )
@@ -41,7 +46,7 @@ load(qt_targets)
load(resolve_target)
cmd = $$shell_path($$QMAKE_RESOLVED_TARGET)
- !host_build: qtAddTargetEnv(cmd)
+ !host_build|!force_bootstrap: qtAddTargetEnv(cmd)
TOOL_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_tool_$${MODULE}.pri
diff --git a/mkspecs/features/resolve_target.prf b/mkspecs/features/resolve_target.prf
index 8cd12b2a00..22d7722ce3 100644
--- a/mkspecs/features/resolve_target.prf
+++ b/mkspecs/features/resolve_target.prf
@@ -28,7 +28,7 @@ win32 {
} else {
contains(TEMPLATE, .*lib):LIBPREFIX = lib
- macx {
+ mac {
equals(TEMPLATE, lib) {
lib_bundle {
QMAKE_RESOLVED_TARGET = $${QMAKE_RESOLVED_TARGET}$${TARGET}.framework/$${TARGET}
diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf
index faf4eeb124..15febe2dd5 100644
--- a/mkspecs/features/testcase.prf
+++ b/mkspecs/features/testcase.prf
@@ -32,7 +32,7 @@ contains(MUNGED_TARGET,.*/.*):check.commands = cd $(DESTDIR) &&
# Allow for a custom test runner script
check.commands += $(TESTRUNNER)
-macx {
+mac {
app_bundle: check.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET)
else: check.commands += ./$(QMAKE_TARGET)
}
diff --git a/mkspecs/features/unix/opengl.prf b/mkspecs/features/unix/opengl.prf
index 74a514915d..8dd47d089d 100644
--- a/mkspecs/features/unix/opengl.prf
+++ b/mkspecs/features/unix/opengl.prf
@@ -11,7 +11,7 @@ contains(QT_CONFIG, opengles1) {
} else {
INCLUDEPATH += $$QMAKE_INCDIR_OPENGL
!isEmpty(QMAKE_LIBDIR_OPENGL):QMAKE_LIBDIR += $$QMAKE_LIBDIR_OPENGL
- target_qt:LIBS_PRIVATE += $$QMAKE_LIBS_OPENGL_QT
+ target_qt:LIBS_PRIVATE += $$QMAKE_LIBS_OPENGL
else:LIBS += $$QMAKE_LIBS_OPENGL
}
diff --git a/mkspecs/features/unix/separate_debug_info.prf b/mkspecs/features/unix/separate_debug_info.prf
index cea1731888..c5ff6dcba3 100644
--- a/mkspecs/features/unix/separate_debug_info.prf
+++ b/mkspecs/features/unix/separate_debug_info.prf
@@ -1,8 +1,15 @@
!separate_debug_info_nocopy:have_target:!static:!isEmpty(QMAKE_OBJCOPY) {
- qnx:debug_info_suffix=sym
- else:debug_info_suffix=debug
- QMAKE_SEPARATE_DEBUG_INFO = test -z \"$(DESTDIR)\" || cd \"$(DESTDIR)\" ; targ=`basename $(TARGET)`; $$QMAKE_OBJCOPY --only-keep-debug \"\$\$targ\" \"\$\$targ.$$debug_info_suffix\" && $$QMAKE_OBJCOPY --strip-debug \"\$\$targ\" && $$QMAKE_OBJCOPY --add-gnu-debuglink=\"\$\$targ.$$debug_info_suffix\" \"\$\$targ\" && chmod -x \"\$\$targ.$$debug_info_suffix\"
+ qnx {
+ debug_info_suffix = sym
+ debug_info_keep = --keep-file-symbols
+ debug_info_strip = --strip-debug -R.ident
+ } else {
+ debug_info_suffix = debug
+ 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/
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
diff --git a/mkspecs/features/win32/opengl.prf b/mkspecs/features/win32/opengl.prf
index 898dee77f9..0f33f31e59 100644
--- a/mkspecs/features/win32/opengl.prf
+++ b/mkspecs/features/win32/opengl.prf
@@ -21,6 +21,7 @@ wince* {
QMAKE_LIBDIR += $$QMAKE_LIBDIR_OPENGL_ES2_RELEASE
}
DEFINES += QT_OPENGL_ES_2 QT_OPENGL_ES_2_ANGLE
+ contains(QT_CONFIG, static): DEFINES += QT_OPENGL_ES_2_ANGLE_STATIC
QT_CONFIG -= opengl
} else {
QMAKE_LIBS += $$QMAKE_LIBS_OPENGL