summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config_help.txt1
-rw-r--r--configure.json182
-rw-r--r--configure.pri31
-rw-r--r--mkspecs/features/qt_configure.prf4
-rw-r--r--tools/configure/configureapp.cpp2608
-rw-r--r--tools/configure/configureapp.h59
-rw-r--r--tools/configure/environment.cpp151
-rw-r--r--tools/configure/environment.h9
-rw-r--r--tools/configure/main.cpp25
9 files changed, 257 insertions, 2813 deletions
diff --git a/config_help.txt b/config_help.txt
index 9cd70672b0..fa18bf3964 100644
--- a/config_help.txt
+++ b/config_help.txt
@@ -6,7 +6,6 @@ are mentioned in the descriptions of the options they relate to.
It is also possible to manipulate any QMAKE_* variable, to amend the values
from the mkspec for the build of Qt itself, e.g., QMAKE_CXXFLAGS+=-g3.
-(Unix/MSys configure only)
Top-level installation directories:
-prefix <dir> ...... The deployment directory, as seen on the target device.
diff --git a/configure.json b/configure.json
index 2b56279b27..5874d8abaa 100644
--- a/configure.json
+++ b/configure.json
@@ -11,6 +11,8 @@
"DBUS_PATH": "dbus.prefix",
"MYSQL_PATH": "mysql.prefix",
"OPENSSL_LIBS": "openssl.libs",
+ "OPENSSL_LIBS_DEBUG": "openssl.libs.debug",
+ "OPENSSL_LIBS_RELEASE": "openssl.libs.release",
"OPENSSL_PATH": "openssl.prefix",
"PSQL_LIBS": "psql.libs",
"SYBASE": "tds.prefix",
@@ -53,6 +55,7 @@
"accessibility": "boolean",
"alsa": "boolean",
+ "angle": "boolean",
"audio-backend": "boolean",
"avx": "boolean",
"avx2": "boolean",
@@ -99,6 +102,7 @@
"iconv": { "type": "enum", "values": [ "no", "yes", "posix", "sun", "gnu" ] },
"icu": "boolean",
"imf": { "type": "boolean", "name": "qqnx_imf" },
+ "incredibuild-xge": { "type": "boolean", "name": "incredibuild_xge" },
"inotify": "boolean",
"journald": "boolean",
"lgmon": "boolean",
@@ -111,13 +115,16 @@
"ltcg": "boolean",
"kms": "boolean",
"make": { "type": "addString", "values": [ "examples", "libs", "tests", "tools" ] },
+ "make-tool": "string",
"mips_dsp": "boolean",
"mips_dspr2": "boolean",
"mirclient": "boolean",
+ "mp": { "type": "boolean", "name": "msvc_mp" },
"mtdev": "boolean",
"mysql_config": "string",
"nomake": { "type": "addString", "values": [ "examples", "tests", "tools" ] },
- "opengl": { "type": "optionalString", "values": [ "no", "yes", "desktop", "es2" ] },
+ "opengl": { "type": "optionalString", "values": [ "no", "yes", "desktop", "es2", "dynamic" ] },
+ "opengl-es-2": { "type": "void", "name": "opengl", "value": "es2" },
"opengles3": "boolean",
"opensource": { "type": "void", "name": "commercial", "value": "no" },
"openssl": { "type": "optionalString", "values": [ "no", "yes", "linked", "runtime" ] },
@@ -129,6 +136,7 @@
"pcre": { "type": "enum", "values": [ "qt", "system" ] },
"pkg-config": "boolean",
"platform": "string",
+ "plugin-manifests": "boolean",
"pps": { "type": "boolean", "name": "qqnx_pps" },
"posix-ipc": { "type": "boolean", "name": "ipc_posix" },
"profile": "boolean",
@@ -144,6 +152,7 @@
"reduce-relocations": { "type": "boolean", "name": "reduce_relocations" },
"release": { "type": "enum", "name": "debug", "values": { "yes": "no", "no": "yes" } },
"rpath": "boolean",
+ "rtti": "boolean",
"sanitize": "sanitize",
"sctp": "boolean",
"sdk": "string",
@@ -172,6 +181,7 @@
"plugin-sql-sqlite": { "type": "void", "name": "sqlite" },
"plugin-sql-sqlite2": { "type": "void", "name": "sqlite2" },
"plugin-sql-tds": { "type": "void", "name": "tds" },
+ "qdbus": { "type": "boolean", "name": "dbus" },
"sqlite": { "type": "enum", "name": "system-sqlite", "values": { "qt": "no", "system": "yes" } },
"sse2": "boolean",
"sse3": "boolean",
@@ -180,6 +190,7 @@
"ssl": "boolean",
"ssse3": "boolean",
"static": { "type": "enum", "name": "shared", "values": { "yes": "no", "no": "yes" } },
+ "static-runtime": { "type": "boolean", "name": "static_runtime" },
"strip": "boolean",
"style-windows": "boolean",
"style-windowsxp": "boolean",
@@ -187,6 +198,7 @@
"style-fusion": "boolean",
"style-mac": "boolean",
"style-android": "boolean",
+ "syncqt": "boolean",
"syslog": "boolean",
"sysroot": "string",
"system-proxies": "boolean",
@@ -196,6 +208,7 @@
"warnings-are-errors": { "type": "boolean", "name": "warnings_are_errors" },
"Werror": { "type": "boolean", "name": "warnings_are_errors" },
"widgets": "boolean",
+ "wmf-backend": "boolean",
"xcb": { "type": "enum", "values": [ "no", "yes", "qt", "system" ] },
"xcb-xlib": "boolean",
"xinput2": "boolean",
@@ -304,6 +317,15 @@
"export": "",
"sources": [
{ "type": "openssl" },
+ {
+ "comment": "placeholder for OPENSSL_LIBS{,_{DEBUG,RELEASE}}",
+ "libs": "",
+ "builds": {
+ "debug": "",
+ "release": ""
+ },
+ "condition": "config.win32 && !features.shared"
+ },
{ "libs": "-lssleay32 -llibeay32", "condition": "config.win32 && features.shared" },
{ "libs": "-lssl -lcrypto", "condition": "!config.win32" }
]
@@ -767,11 +789,13 @@
"detectPkgConfig": [ "cross_compile" ],
"library": [ "pkg-config" ],
"getPkgConfigVariable": [ "pkg-config" ],
- "neon": [ "architecture" ]
+ "neon": [ "architecture" ],
+ "directX": [ "architecture", "sse2" ]
},
"testTypeAliases": {
"compile": [ "library", "architecture" ],
+ "files": [ "directX" ],
"getPkgConfigVariable": [ "xkbConfigRoot" ]
},
@@ -1171,6 +1195,15 @@
"pkg-config-variable": "xkb_base",
"log": "value"
},
+ "directx": {
+ "description": "DirectX SDK",
+ "type": "directX",
+ "files": [
+ "d3dcompiler.h",
+ "d3d11.lib",
+ "fxc.exe"
+ ]
+ },
"opengles3": {
"description": "OpenGL ES 3.0",
"type": "compile",
@@ -1194,6 +1227,22 @@
"type": "files",
"files": [ "uxtheme.h" ]
},
+ "direct2d": {
+ "description": "Direct 2D",
+ "type": "compile",
+ "test": "qpa/direct2d",
+ "use": "direct2d"
+ },
+ "incredibuild_xge": {
+ "description": "IncrediBuild",
+ "type": "files",
+ "files": [ "BuildConsole.exe", "xgConsole.exe" ]
+ },
+ "wmf": {
+ "description": "WMF",
+ "type": "files",
+ "files": [ "mfapi.h", "mf.lib" ]
+ },
"qpa_default_platform": {
"description": "default QPA platform",
"type": "qpaDefaultPlatform",
@@ -1236,7 +1285,7 @@
},
"use_gold_linker": {
"description": "Using gold linker",
- "condition": "tests.use_gold_linker",
+ "condition": "!config.msvc && tests.use_gold_linker",
"output": [ "privateConfig", "useGoldLinker" ]
},
"architecture": {
@@ -1245,7 +1294,7 @@
},
"pkg-config": {
"description": "Using pkg-config",
- "autoDetect": "!config.darwin",
+ "autoDetect": "!config.darwin && !config.win32",
"condition": "tests.pkg-config",
"output": [
{ "type": "publicQtConfig", "negative": true },
@@ -1342,8 +1391,7 @@
},
"largefile": {
"description": "Large file support",
- "emitIf": "!config.win32",
- "condition": "!config.android && !config.integrity",
+ "condition": "!config.android && !config.integrity && !config.winrt",
"output": [
"privateConfig",
{ "type": "define", "name": "QT_LARGEFILE_SUPPORT", "value": 64 }
@@ -1395,6 +1443,12 @@
"condition": "tests.GNUmake",
"output": [ "privateConfig" ]
},
+ "plugin-manifests": {
+ "description": "Embed manifests in plugins",
+ "emitIf": "config.win32",
+ "autoDetect": false,
+ "output": [ { "type": "publicConfig", "negative": true, "name": "no_plugin_manifest" } ]
+ },
"profile": {
"description": "GNU profiling support",
"autoDetect": false,
@@ -1435,7 +1489,7 @@
},
"precompile_header": {
"description": "Using precompiled headers",
- "condition": "!config.uikit && tests.precompile_header",
+ "condition": "config.msvc || (!config.uikit && tests.precompile_header)",
"output": [
"privateConfig",
{ "type": "varRemove", "negative": true, "name": "CONFIG", "value": "'precompile_header'" }
@@ -1461,7 +1515,7 @@
},
"reduce_relocations": {
"description": "Reduce amount of relocations",
- "condition": "tests.reduce_relocations",
+ "condition": "!config.win32 && tests.reduce_relocations",
"output": [
"publicQtConfig",
{ "type": "define", "name": "QT_REDUCE_RELOCATIONS" }
@@ -1777,21 +1831,25 @@
},
"poll_ppoll": {
"description": "Native ppoll()",
+ "emitIf": "!config.win32",
"condition": "tests.ppoll",
"output": [ "publicQtConfig" ]
},
"poll_pollts": {
"description": "Native pollts()",
+ "emitIf": "!config.win32",
"condition": "!features.poll_ppoll && tests.pollts",
"output": [ "publicQtConfig" ]
},
"poll_poll": {
"description": "Native poll()",
+ "emitIf": "!config.win32",
"condition": "!features.poll_ppoll && !features.poll_pollts && tests.poll",
"output": [ "publicQtConfig" ]
},
"poll_select": {
"description": "Emulated poll()",
+ "emitIf": "!config.win32",
"condition": "!features.poll_ppoll && !features.poll_pollts && !features.poll_poll",
"output": [
"publicQtConfig",
@@ -1800,6 +1858,7 @@
},
"ipc_posix": {
"description": "Using POSIX IPC",
+ "autoDetect": "!config.win32",
"condition": "!tests.ipc_sysv && tests.ipc_posix",
"output": [ { "type": "define", "name": "QT_POSIX_IPC" } ]
},
@@ -1845,6 +1904,7 @@
"description": "OpenSSL",
"enable": "input.openssl == 'yes' || input.openssl == 'linked' || input.openssl == 'runtime'",
"disable": "input.openssl == 'no' || input.ssl == 'no'",
+ "autoDetect": "!config.winrt",
"condition": "!features.securetransport && tests.openssl",
"output": [
{ "type": "publicQtConfig", "condition": "!features.openssl-linked" },
@@ -1859,12 +1919,16 @@
"output": [
"publicQtConfig",
{ "type": "varAssign", "name": "OPENSSL_LIBS", "value": "libs.openssl.libs", "eval": "true" },
+ { "type": "varAssign", "name": "OPENSSL_LIBS_DEBUG", "value": "libs.openssl.builds.debug.libs",
+ "eval": "true", "condition": "config.win32" },
+ { "type": "varAssign", "name": "OPENSSL_LIBS_RELEASE", "value": "libs.openssl.builds.release.libs",
+ "eval": "true", "condition": "config.win32" },
{ "type": "define", "name": "QT_LINKED_OPENSSL" }
]
},
"ssl": {
"description": "SSL",
- "condition": "features.securetransport || features.openssl",
+ "condition": "config.winrt || features.securetransport || features.openssl",
"output": [ "feature" ]
},
"sctp": {
@@ -1885,6 +1949,7 @@
},
"glib": {
"description": "GLib",
+ "autoDetect": "!config.win32",
"condition": "libs.glib",
"output": [ "feature" ]
},
@@ -1991,7 +2056,7 @@
},
"fontconfig": {
"description": "Fontconfig",
- "condition": "features.system-freetype && libs.fontconfig",
+ "condition": "!config.win32 && features.system-freetype && libs.fontconfig",
"output": [ "feature" ]
},
"harfbuzz": {
@@ -2002,7 +2067,7 @@
"description": " Using system HarfBuzz",
"enable": "input.harfbuzz == 'system'",
"disable": "input.harfbuzz == 'qt'",
- "autoDetect": "!config.darwin",
+ "autoDetect": "!config.darwin && !config.win32",
"condition": "features.harfbuzz && libs.harfbuzz",
"output": [ "publicQtConfig" ]
},
@@ -2012,7 +2077,7 @@
},
"dbus": {
"description": "Qt D-Bus",
- "autoDetect": "!config.android",
+ "autoDetect": "!config.android && !config.winrt",
"output": [ "feature" ]
},
"dbus-linked": {
@@ -2057,7 +2122,7 @@
},
"egl": {
"description": "EGL",
- "condition": "features.opengl && libs.egl",
+ "condition": "features.opengl && (features.angle || libs.egl)",
"output": [ "feature" ]
},
"egl_x11": {
@@ -2067,7 +2132,7 @@
},
"eglfs": {
"description": "EGLFS",
- "autoDetect": "!config.android",
+ "autoDetect": "!config.android && !config.win32",
"condition": "features.egl",
"output": [ "feature" ]
},
@@ -2228,11 +2293,17 @@
"emitIf": "features.xcb",
"output": [ { "type": "varAssign", "name": "QMAKE_X11_PREFIX", "value": "tests.x11prefix.value" } ]
},
+ "angle": {
+ "description": "ANGLE",
+ "autoDetect": "features.opengles2 || features.opengl-dynamic",
+ "condition": "config.win32 && tests.directx",
+ "output": [ "publicQtConfig" ]
+ },
"opengles2": {
"description": "OpenGL ES 2.0",
"enable": "input.opengl == 'es2'",
- "disable": "input.opengl == 'desktop' || input.opengl == 'no'",
- "condition": "!features.opengl-desktop && libs.opengl_es2",
+ "disable": "input.opengl == 'desktop' || input.opengl == 'dynamic' || input.opengl == 'no'",
+ "condition": "config.win32 || (!features.opengl-desktop && libs.opengl_es2)",
"output": [
"publicQtConfig",
{ "type": "define", "name": "QT_OPENGL_ES" },
@@ -2241,7 +2312,7 @@
},
"opengles3": {
"description": "OpenGL ES 3.0",
- "condition": "features.opengles2 && tests.opengles3",
+ "condition": "features.opengles2 && !features.angle && tests.opengles3",
"output": [ { "type": "define", "name": "QT_OPENGL_ES_3" } ]
},
"opengles31": {
@@ -2252,12 +2323,23 @@
"opengl-desktop": {
"description": "Desktop OpenGL",
"enable": "input.opengl == 'desktop'",
- "disable": "input.opengl == 'es2' || input.opengl == 'no'",
- "condition": "libs.opengl"
+ "disable": "input.opengl == 'es2' || input.opengl == 'dynamic' || input.opengl == 'no'",
+ "condition": "(config.win32 && !config.winrt && !features.opengles2 && (config.msvc || libs.opengl))
+ || (!config.win32 && libs.opengl)"
+ },
+ "opengl-dynamic": {
+ "description": "Dynamic OpenGL",
+ "enable": "input.opengl == 'dynamic'",
+ "autoDetect": false,
+ "condition": "config.win32 && !config.winrt",
+ "output": [
+ { "type": "feature", "name": "dynamicgl" },
+ { "type": "define", "name": "QT_OPENGL_DYNAMIC" }
+ ]
},
"opengl": {
"description": "OpenGL",
- "condition": "features.opengl-desktop || features.opengles2",
+ "condition": "features.opengl-desktop || features.opengl-dynamic || features.opengles2",
"output": [ "feature" ]
},
"db2": {
@@ -2364,6 +2446,12 @@
"condition": "features.directwrite && tests.directwrite2",
"output": [ "publicQtConfig" ]
},
+ "direct2d": {
+ "description": "Direct 2D",
+ "autoDetect": false,
+ "condition": "tests.direct2d",
+ "output": [ "publicQtConfig" ]
+ },
"sessionmanager": {
"description": "Session Management",
"output": [ "feature" ]
@@ -2376,6 +2464,32 @@
"description": "Compile examples",
"output": [ "privateConfig" ]
},
+ "incredibuild_xge": {
+ "description": "IncrediBuild",
+ "emitIf": "var.QMAKE_HOST.os == 'Windows'",
+ "condition": "tests.incredibuild_xge",
+ "output": [ "publicConfig" ]
+ },
+ "msvc_mp": {
+ "description": "Use multiple processors when compiling with MSVC",
+ "emitIf": "config.msvc",
+ "autoDetect": "false",
+ "output": [ "privateConfig" ]
+ },
+ "static_runtime": {
+ "description": "Statically link the C/C++ runtime library",
+ "emitIf": "config.win32",
+ "autoDetect": false,
+ "condition": "!features.shared",
+ "output": [ "publicConfig", "publicQtConfig" ]
+ },
+ "wmf-backend": {
+ "description": "Windows Media Foundation backend for Qt Multimedia",
+ "emitIf": "config.win32",
+ "autoDetect": false,
+ "condition": "tests.wmf",
+ "output": [ "publicQtConfig" ]
+ },
"qpa_default_platform": {
"description": "QPA default platform",
"condition": "features.gui",
@@ -2444,6 +2558,13 @@ or are able to read the logged output from journald, syslog or slog2."
},
{
"type": "warning",
+ "condition": "config.win32 && !config.msvc && features.oci",
+ "message": "Qt does not support compiling the Oracle database driver with
+MinGW, due to lack of such support from Oracle. Consider disabling the
+Oracle driver, as the current build will most likely fail."
+ },
+ {
+ "type": "warning",
"condition": "features.gui && config.linux && !features.xcb && !features.eglfs && !features.directfb && !features.linuxfb && !features.mirclient",
"message": "No QPA platform plugin enabled! This will
produce a Qt that cannot run GUI applications.
@@ -2465,7 +2586,7 @@ XKB configuration data. This is required for keyboard input support."
{
"type": "note",
"condition": "features.openssl-linked && libs.openssl.source != 0
- && input.openssl.prefix == '' && input.openssl.libs == ''",
+ && input.openssl.prefix == '' && input.openssl.libs == '' && input.openssl.libs.debug == ''",
"message": "When linking against OpenSSL, you can override the default
library names through OPENSSL_LIBS.
For example:
@@ -2482,6 +2603,13 @@ For example:
"message": "Accessibility disabled. This configuration of Qt is unsupported."
},
{
+ "type": "warning",
+ "condition": "config.win32 && (features.opengles2 || features.opengl-dynamic) && !features.angle",
+ "message": "Using OpenGL ES 2.0 on Windows without ANGLE.
+The build will most likely fail.
+Specify -opengl desktop to use regular OpenGL."
+ },
+ {
"type": "note",
"condition": "features.accessibility && features.xcb && !features.accessibility-atspi-bridge",
"message": "Disabling Linux Accessibility Bridge: D-Bus is missing."
@@ -2493,7 +2621,7 @@ For example:
},
{
"type": "error",
- "condition": "features.gui && input.opengl != 'no' && !features.opengl-desktop && !features.opengles2",
+ "condition": "features.gui && input.opengl != 'no' && !features.opengl-desktop && !features.opengles2 && !features.opengl-dynamic",
"message": "The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform."
@@ -2662,8 +2790,18 @@ Please apply the patch corresponding to your Standard Library vendor, found in
{
"section": "OpenGL",
"entries": [
+ {
+ "type": "feature",
+ "args": "angle",
+ "condition": "config.win32"
+ },
"egl",
"opengl-desktop",
+ {
+ "type": "feature",
+ "args": "opengl-dynamic",
+ "condition": "config.win32"
+ },
"opengles2",
"opengles3",
"opengles31"
diff --git a/configure.pri b/configure.pri
index 0e785349d7..4b98335dd7 100644
--- a/configure.pri
+++ b/configure.pri
@@ -10,6 +10,9 @@ defineTest(qtConfCommandline_qmakeArgs) {
}
defineTest(qtConfCommandline_cxxstd) {
+ msvc: \
+ qtConfAddError("Command line option -c++std is not supported with MSVC compilers.")
+
arg = $${1}
val = $${2}
isEmpty(val): val = $$qtConfGetNextCommandlineArg()
@@ -372,6 +375,33 @@ defineTest(qtConfLibrary_sybaseEnv) {
return(true)
}
+# Check for Direct X SDK (include, lib, and direct shader compiler 'fxc').
+# Up to Direct X SDK June 2010 and for MinGW, this is pointed to by the
+# DXSDK_DIR variable. Starting with Windows Kit 8, it is included in
+# the Windows SDK. Checking for the header is not sufficient, since it
+# is also present in MinGW.
+defineTest(qtConfTest_directX) {
+ dxdir = $$getenv("DXSDK_DIR")
+ !isEmpty(dxdir) {
+ EXTRA_INCLUDEPATH += $$dxdir/include
+ arch = $$qtConfEvaluate("tests.architecture.arch")
+ equals(arch, x86_64): \
+ EXTRA_LIBDIR += $$dxdir/lib/x64
+ else: \
+ EXTRA_LIBDIR += $$dxdir/lib/x86
+ EXTRA_PATH += $$dxdir/Utilities/bin/x86
+ }
+
+ $$qtConfEvaluate("features.sse2") {
+ ky = $$size($${1}.files._KEYS_)
+ $${1}.files._KEYS_ += $$ky
+ # Not present on MinGW-32
+ $${1}.files.$${ky} = "intrin.h"
+ }
+
+ qtConfTest_files($${1}): return(true)
+ return(false)
+}
defineTest(qtConfTest_xkbConfigRoot) {
qtConfTest_getPkgConfigVariable($${1}): return(true)
@@ -390,6 +420,7 @@ defineTest(qtConfTest_qpaDefaultPlatform) {
name =
!isEmpty(config.input.qpa_default_platform): name = $$config.input.qpa_default_platform
else: !isEmpty(QT_QPA_DEFAULT_PLATFORM): name = $$QT_QPA_DEFAULT_PLATFORM
+ else: winrt: name = winrt
else: win32: name = windows
else: android: name = android
else: osx: name = cocoa
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index c87c65289e..5a3f8410a2 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -312,7 +312,7 @@ defineReplace(qtConfFindInPathList) {
defineReplace(qtConfFindInPath) {
ensurePathEnv()
- return($$qtConfFindInPathList($$1, $$QMAKE_PATH_ENV))
+ return($$qtConfFindInPathList($$1, $$2 $$QMAKE_PATH_ENV))
}
defineReplace(qtConfPkgConfigEnv) {
@@ -694,7 +694,7 @@ defineTest(qtConfTest_files) {
file = $$qtConfFindInPathList($$f, $$EXTRA_LIBDIR $$QMAKE_DEFAULT_LIBDIRS)
} else {
# assume we're looking for an executable
- file = $$qtConfFindInPath($$f)
+ file = $$qtConfFindInPath($$f, $$EXTRA_PATH)
}
isEmpty(file) {
qtLog(" Not found.");
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 059d2b15e7..83807cef2b 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -76,7 +76,7 @@ static inline void promptKeyPress()
exit(0); // Exit cleanly for Ctrl+C
}
-Configure::Configure(int& argc, char** argv) : verbose(0)
+Configure::Configure(int& argc, char** argv)
{
// Default values for indentation
optionIndent = 4;
@@ -117,11 +117,9 @@ Configure::Configure(int& argc, char** argv) : verbose(0)
QDir(buildPath).mkpath("bin");
buildDir.mkpath("mkspecs");
+ buildDir.mkpath("config.tests");
}
- defaultBuildParts << QStringLiteral("libs") << QStringLiteral("tools") << QStringLiteral("examples");
- allBuildParts = defaultBuildParts;
- allBuildParts << QStringLiteral("tests");
dictionary[ "QT_INSTALL_PREFIX" ] = installPath;
dictionary[ "QMAKESPEC" ] = getenv("QMAKESPEC");
@@ -132,50 +130,7 @@ Configure::Configure(int& argc, char** argv) : verbose(0)
dictionary[ "QMAKESPEC_FROM" ] = "env";
}
- dictionary[ "WIDGETS" ] = "yes";
- dictionary[ "GUI" ] = "yes";
- dictionary[ "RTTI" ] = "yes";
- dictionary[ "STRIP" ] = "yes";
- dictionary[ "PCH" ] = "yes";
- dictionary[ "SEPARATE_DEBUG_INFO" ] = "no";
- dictionary[ "SSE2" ] = "auto";
- dictionary[ "SSE3" ] = "auto";
- dictionary[ "SSSE3" ] = "auto";
- dictionary[ "SSE4_1" ] = "auto";
- dictionary[ "SSE4_2" ] = "auto";
- dictionary[ "AVX" ] = "auto";
- dictionary[ "AVX2" ] = "auto";
- dictionary[ "AVX512" ] = "auto";
dictionary[ "SYNCQT" ] = "auto";
- dictionary[ "WMF_BACKEND" ] = "no";
- dictionary[ "QML_DEBUG" ] = "yes";
- dictionary[ "PLUGIN_MANIFESTS" ] = "no";
- dictionary[ "DIRECTWRITE" ] = "auto";
- dictionary[ "DIRECTWRITE2" ] = "auto";
- dictionary[ "DIRECT2D" ] = "no";
- dictionary[ "NIS" ] = "no";
- dictionary[ "NEON" ] = "auto";
- dictionary[ "LARGE_FILE" ] = "yes";
- dictionary[ "FONT_CONFIG" ] = "no";
- dictionary[ "POSIX_IPC" ] = "no";
- dictionary[ "QT_GLIB" ] = "no";
- dictionary[ "QT_ICONV" ] = "auto";
- dictionary[ "QT_EVDEV" ] = "auto";
- dictionary[ "QT_MTDEV" ] = "auto";
- dictionary[ "QT_TSLIB" ] = "auto";
- dictionary[ "QT_INOTIFY" ] = "auto";
- dictionary[ "QT_EVENTFD" ] = "auto";
- dictionary[ "QT_CUPS" ] = "auto";
- dictionary[ "CFG_GCC_SYSROOT" ] = "yes";
- dictionary[ "SLOG2" ] = "no";
- dictionary[ "QNX_IMF" ] = "no";
- dictionary[ "PPS" ] = "no";
- dictionary[ "LGMON" ] = "no";
- dictionary[ "SYSTEM_PROXIES" ] = "yes";
- dictionary[ "SCTP" ] = "no";
- dictionary[ "WERROR" ] = "auto";
- dictionary[ "QREAL" ] = "double";
- dictionary[ "ATOMIC64" ] = "auto";
//Only used when cross compiling.
dictionary[ "QT_INSTALL_SETTINGS" ] = "/etc/xdg";
@@ -210,70 +165,8 @@ Configure::Configure(int& argc, char** argv) : verbose(0)
dictionary[ "REDO" ] = "no";
- dictionary[ "BUILD" ] = "debug";
- dictionary[ "BUILDALL" ] = "auto"; // Means yes, but not explicitly
- dictionary[ "FORCEDEBUGINFO" ] = "no";
- dictionary[ "RELEASE_TOOLS" ] = "no";
-
dictionary[ "BUILDTYPE" ] = "none";
- dictionary[ "BUILDDEV" ] = "no";
-
- dictionary[ "COMPILE_EXAMPLES" ] = "yes";
-
- dictionary[ "C++STD" ] = "auto";
-
- dictionary[ "USE_GOLD_LINKER" ] = "no";
-
- dictionary[ "ENABLE_NEW_DTAGS" ] = "no";
-
- dictionary[ "SHARED" ] = "yes";
-
- dictionary[ "STATIC_RUNTIME" ] = "no";
-
- dictionary[ "SYSTEM_ZLIB" ] = "auto";
-
- dictionary[ "PCRE" ] = "auto";
-
- dictionary[ "ICU" ] = "no";
-
- dictionary[ "ANGLE" ] = "auto";
- dictionary[ "DYNAMICGL" ] = "no";
-
- dictionary[ "GIF" ] = "yes";
- dictionary[ "JPEG" ] = "yes";
- dictionary[ "PNG" ] = "yes";
- dictionary[ "LIBJPEG" ] = "auto";
- dictionary[ "LIBPNG" ] = "auto";
- dictionary[ "DOUBLECONVERSION" ] = "auto";
- dictionary[ "FREETYPE" ] = "yes";
- dictionary[ "FREETYPE_FROM" ] = "default";
- dictionary[ "HARFBUZZ" ] = "qt";
-
- dictionary[ "ACCESSIBILITY" ] = "yes";
- dictionary[ "OPENGL" ] = "yes";
- dictionary[ "OPENGL_ES_2" ] = "yes";
- dictionary[ "SSL" ] = "auto";
- dictionary[ "OPENSSL" ] = "auto";
- dictionary[ "LIBPROXY" ] = "no";
- dictionary[ "DBUS" ] = "auto";
-
- dictionary[ "STYLE_WINDOWS" ] = "yes";
- dictionary[ "STYLE_WINDOWSXP" ] = "auto";
- dictionary[ "STYLE_WINDOWSVISTA" ] = "auto";
- dictionary[ "STYLE_FUSION" ] = "yes";
-
- dictionary[ "SQL_MYSQL" ] = "no";
- dictionary[ "SQL_ODBC" ] = "no";
- dictionary[ "SQL_OCI" ] = "no";
- dictionary[ "SQL_PSQL" ] = "no";
- dictionary[ "SQL_TDS" ] = "no";
- dictionary[ "SQL_DB2" ] = "no";
- dictionary[ "SQL_SQLITE" ] = "auto";
- dictionary[ "SQL_SQLITE_LIB" ] = "qt";
- dictionary[ "SQL_SQLITE2" ] = "no";
- dictionary[ "SQL_IBASE" ] = "no";
-
QString tmp = dictionary[ "QMAKESPEC" ];
if (tmp.contains("\\")) {
tmp = tmp.mid(tmp.lastIndexOf("\\") + 1);
@@ -281,18 +174,6 @@ Configure::Configure(int& argc, char** argv) : verbose(0)
tmp = tmp.mid(tmp.lastIndexOf("/") + 1);
}
dictionary[ "QMAKESPEC" ] = tmp;
-
- dictionary[ "INCREDIBUILD_XGE" ] = "auto";
- dictionary[ "LTCG" ] = "no";
- dictionary[ "MSVC_MP" ] = "no";
-
- if (dictionary["QMAKESPEC"].startsWith("win32-g++")) {
- const QString zero = QStringLiteral("0");
- const QStringList parts = Environment::gccVersion().split(QLatin1Char('.'));
- dictionary["QT_GCC_MAJOR_VERSION"] = parts.value(0, zero);
- dictionary["QT_GCC_MINOR_VERSION"] = parts.value(1, zero);
- dictionary["QT_GCC_PATCH_VERSION"] = parts.value(2, zero);
- }
}
Configure::~Configure()
@@ -310,17 +191,6 @@ QString Configure::formatPath(const QString &path)
return ret;
}
-QString Configure::formatPaths(const QStringList &paths)
-{
- QString ret;
- foreach (const QString &path, paths) {
- if (!ret.isEmpty())
- ret += QLatin1Char(' ');
- ret += formatPath(path);
- }
- return ret;
-}
-
// #### somehow I get a compiler error about vc++ reaching the nesting limit without
// undefining the ansi for scoping.
#ifdef for
@@ -364,111 +234,12 @@ void Configure::parseCmdLine()
}
for (; i<configCmdLine.size(); ++i) {
- bool continueElse[] = {false, false};
-
- if (configCmdLine.at(i) == "-v" || configCmdLine.at(i) == "-verbose") {
- ++verbose;
- }
-
- else if (configCmdLine.at(i) == "-qreal") {
- ++i;
- if (i == argCount)
- break;
- QString s = dictionary[ "QREAL" ] = configCmdLine.at(i);
- if (s == "float") {
- dictionary[ "QREAL_STRING" ] = "\"float\"";
- } else {
- // escape
- s = s.simplified();
- s = '"' + s.toLatin1().toPercentEncoding(QByteArray(), "-._~", '_') + '"';
- dictionary[ "QREAL_STRING" ] = s;
- }
- }
-
- else if (configCmdLine.at(i) == "-release") {
- dictionary[ "BUILD" ] = "release";
- if (dictionary[ "BUILDALL" ] == "auto")
- dictionary[ "BUILDALL" ] = "no";
- } else if (configCmdLine.at(i) == "-debug") {
- dictionary[ "BUILD" ] = "debug";
- if (dictionary[ "BUILDALL" ] == "auto")
- dictionary[ "BUILDALL" ] = "no";
- } else if (configCmdLine.at(i) == "-debug-and-release")
- dictionary[ "BUILDALL" ] = "yes";
- else if (configCmdLine.at(i) == "-force-debug-info")
- dictionary[ "FORCEDEBUGINFO" ] = "yes";
- else if (configCmdLine.at(i) == "-no-separate-debug-info")
- dictionary[ "SEPARATE_DEBUG_INFO" ] = "no";
- else if (configCmdLine.at(i) == "-separate-debug-info")
- dictionary[ "SEPARATE_DEBUG_INFO" ] = "yes";
- else if (configCmdLine.at(i) == "-optimized-tools")
- dictionary[ "RELEASE_TOOLS" ] = "yes";
- else if (configCmdLine.at(i) == "-no-optimized-tools")
- dictionary[ "RELEASE_TOOLS" ] = "no";
-
- else if (configCmdLine.at(i) == "-compile-examples") {
- dictionary[ "COMPILE_EXAMPLES" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-compile-examples") {
- dictionary[ "COMPILE_EXAMPLES" ] = "no";
- }
-
- else if (configCmdLine.at(i) == "-c++std") {
- ++i;
- if (i == argCount)
- break;
-
- QString level = configCmdLine.at(i);
- if (level == "c++11" || level == "c++14" || level == "c++1z"
- || level == "auto") {
- dictionary[ "C++STD" ] = level;
- } else if (level == "11" || level == "14" || level == "1z") {
- dictionary[ "C++STD" ] = "c++" + level;
- } else {
- dictionary[ "DONE" ] = "error";
- cout << "ERROR: invalid C++ standard " << level
- << "; valid options are: c++11 c++14 c++1z auto" << endl;
- return;
- }
- }
-
-
- else if (configCmdLine.at(i) == "-use-gold-linker")
- dictionary[ "USE_GOLD_LINKER" ] = "yes";
- else if (configCmdLine.at(i) == "-no-use-gold-linker")
- dictionary[ "USE_GOLD_LINKER" ] = "no";
- else if (configCmdLine.at(i) == "-enable-new-dtags")
- dictionary[ "ENABLE_NEW_DTAGS" ] = "yes";
- else if (configCmdLine.at(i) == "-disable-new-dtags")
- dictionary[ "ENABLE_NEW_DTAGS" ] = "no";
- else if (configCmdLine.at(i) == "-shared")
- dictionary[ "SHARED" ] = "yes";
- else if (configCmdLine.at(i) == "-static")
- dictionary[ "SHARED" ] = "no";
- else if (configCmdLine.at(i) == "-static-runtime")
- dictionary[ "STATIC_RUNTIME" ] = "yes";
- else if (configCmdLine.at(i) == "-developer-build")
- dictionary[ "BUILDDEV" ] = "yes";
- else if (configCmdLine.at(i) == "-opensource") {
+ if (configCmdLine.at(i) == "-opensource") {
dictionary[ "BUILDTYPE" ] = "opensource";
}
else if (configCmdLine.at(i) == "-commercial") {
dictionary[ "BUILDTYPE" ] = "commercial";
}
- else if (configCmdLine.at(i) == "-ltcg") {
- dictionary[ "LTCG" ] = "yes";
- }
- else if (configCmdLine.at(i) == "-no-ltcg") {
- dictionary[ "LTCG" ] = "no";
- }
- else if (configCmdLine.at(i) == "-mp") {
- dictionary[ "MSVC_MP" ] = "yes";
- }
- else if (configCmdLine.at(i) == "-no-mp") {
- dictionary[ "MSVC_MP" ] = "no";
- }
- else if (configCmdLine.at(i) == "-force-asserts") {
- dictionary[ "FORCE_ASSERTS" ] = "yes";
- }
else if (configCmdLine.at(i) == "-platform") {
++i;
if (i == argCount)
@@ -487,438 +258,15 @@ void Configure::parseCmdLine()
devOpt.append("\n").append(option);
else
devOpt = option;
-
- } else if (configCmdLine.at(i) == "-qt-zlib") {
- dictionary[ "SYSTEM_ZLIB" ] = "no";
- } else if (configCmdLine.at(i) == "-system-zlib") {
- dictionary[ "SYSTEM_ZLIB" ] = "yes";
- }
-
- else if (configCmdLine.at(i) == "-qt-pcre") {
- dictionary[ "PCRE" ] = "qt";
- } else if (configCmdLine.at(i) == "-system-pcre") {
- dictionary[ "PCRE" ] = "system";
- }
-
- else if (configCmdLine.at(i) == "-icu") {
- dictionary[ "ICU" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-icu") {
- dictionary[ "ICU" ] = "no";
- }
-
- else if (configCmdLine.at(i) == "-angle") {
- dictionary[ "ANGLE" ] = "yes";
- dictionary[ "ANGLE_FROM" ] = "commandline";
- } else if (configCmdLine.at(i) == "-no-angle") {
- dictionary[ "ANGLE" ] = "no";
- dictionary[ "ANGLE_FROM" ] = "commandline";
- }
-
- // Image formats --------------------------------------------
- else if (configCmdLine.at(i) == "-no-gif")
- dictionary[ "GIF" ] = "no";
-
- else if (configCmdLine.at(i) == "-no-libjpeg") {
- dictionary[ "JPEG" ] = "no";
- dictionary[ "LIBJPEG" ] = "no";
- } else if (configCmdLine.at(i) == "-qt-libjpeg") {
- dictionary[ "LIBJPEG" ] = "qt";
- } else if (configCmdLine.at(i) == "-system-libjpeg") {
- dictionary[ "LIBJPEG" ] = "system";
- }
-
- else if (configCmdLine.at(i) == "-no-libpng") {
- dictionary[ "PNG" ] = "no";
- dictionary[ "LIBPNG" ] = "no";
- } else if (configCmdLine.at(i) == "-qt-libpng") {
- dictionary[ "LIBPNG" ] = "qt";
- } else if (configCmdLine.at(i) == "-system-libpng") {
- dictionary[ "LIBPNG" ] = "system";
- }
-
- // Double Conversion -----------------------------------------
- else if (configCmdLine.at(i) == "-no-doubleconversion")
- dictionary[ "DOUBLECONVERSION" ] = "no";
- else if (configCmdLine.at(i) == "-qt-doubleconversion")
- dictionary[ "DOUBLECONVERSION" ] = "qt";
- else if (configCmdLine.at(i) == "-system-doubleconversion")
- dictionary[ "DOUBLECONVERSION" ] = "system";
-
- // Text Rendering --------------------------------------------
- else if (configCmdLine.at(i) == "-no-freetype") {
- dictionary[ "FREETYPE" ] = "no";
- dictionary[ "FREETYPE_FROM" ] = "commandline";
- } else if (configCmdLine.at(i) == "-qt-freetype") {
- dictionary[ "FREETYPE" ] = "yes";
- dictionary[ "FREETYPE_FROM" ] = "commandline";
- } else if (configCmdLine.at(i) == "-system-freetype") {
- dictionary[ "FREETYPE" ] = "system";
- dictionary[ "FREETYPE_FROM" ] = "commandline";
- }
-
- else if (configCmdLine.at(i) == "-no-harfbuzz")
- dictionary[ "HARFBUZZ" ] = "no";
- else if (configCmdLine.at(i) == "-qt-harfbuzz")
- dictionary[ "HARFBUZZ" ] = "qt";
- else if (configCmdLine.at(i) == "-system-harfbuzz")
- dictionary[ "HARFBUZZ" ] = "system";
-
- // Styles ---------------------------------------------------
- else if (configCmdLine.at(i) == "-qt-style-windows")
- dictionary[ "STYLE_WINDOWS" ] = "yes";
- else if (configCmdLine.at(i) == "-no-style-windows")
- dictionary[ "STYLE_WINDOWS" ] = "no";
-
- else if (configCmdLine.at(i) == "-qt-style-windowsxp")
- dictionary[ "STYLE_WINDOWSXP" ] = "yes";
- else if (configCmdLine.at(i) == "-no-style-windowsxp")
- dictionary[ "STYLE_WINDOWSXP" ] = "no";
-
- else if (configCmdLine.at(i) == "-qt-style-windowsvista")
- dictionary[ "STYLE_WINDOWSVISTA" ] = "yes";
- else if (configCmdLine.at(i) == "-no-style-windowsvista")
- dictionary[ "STYLE_WINDOWSVISTA" ] = "no";
-
- else if (configCmdLine.at(i) == "-qt-style-fusion")
- dictionary[ "STYLE_FUSION" ] = "yes";
- else if (configCmdLine.at(i) == "-no-style-fusion")
- dictionary[ "STYLE_FUSION" ] = "no";
-
- // Work around compiler nesting limitation
- else
- continueElse[1] = true;
- if (!continueElse[1]) {
- }
-
- // OpenGL Support -------------------------------------------
- else if (configCmdLine.at(i) == "-no-opengl") {
- dictionary[ "OPENGL" ] = "no";
- dictionary[ "OPENGL_ES_2" ] = "no";
- } else if (configCmdLine.at(i) == "-opengl-es-2") {
- dictionary[ "OPENGL" ] = "yes";
- dictionary[ "OPENGL_ES_2" ] = "yes";
- } else if (configCmdLine.at(i) == "-opengl") {
- dictionary[ "OPENGL" ] = "yes";
- i++;
- if (i == argCount)
- break;
-
- dictionary[ "OPENGL_ES_2" ] = "no";
- if ( configCmdLine.at(i) == "es2" ) {
- dictionary[ "OPENGL_ES_2" ] = "yes";
- } else if ( configCmdLine.at(i) == "desktop" ) {
- // OPENGL=yes suffices
- } else if ( configCmdLine.at(i) == "dynamic" ) {
- dictionary[ "DYNAMICGL" ] = "yes";
- } else {
- cout << "Argument passed to -opengl option is not valid." << endl;
- dictionary[ "DONE" ] = "error";
- break;
- }
- }
-
- // Databases ------------------------------------------------
- else if (configCmdLine.at(i) == "-sql-mysql" || configCmdLine.at(i) == "-plugin-sql-mysql")
- dictionary[ "SQL_MYSQL" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-mysql")
- dictionary[ "SQL_MYSQL" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-odbc" || configCmdLine.at(i) == "-plugin-sql-odbc")
- dictionary[ "SQL_ODBC" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-odbc")
- dictionary[ "SQL_ODBC" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-oci" || configCmdLine.at(i) == "-plugin-sql-oci")
- dictionary[ "SQL_OCI" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-oci")
- dictionary[ "SQL_OCI" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-psql" || configCmdLine.at(i) == "-plugin-sql-psql")
- dictionary[ "SQL_PSQL" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-psql")
- dictionary[ "SQL_PSQL" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-tds" || configCmdLine.at(i) == "-plugin-sql-tds")
- dictionary[ "SQL_TDS" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-tds")
- dictionary[ "SQL_TDS" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-db2")
- dictionary[ "SQL_DB2" ] = "yes";
- else if (configCmdLine.at(i) == "-plugin-sql-db2")
- dictionary[ "SQL_DB2" ] = "plugin";
- else if (configCmdLine.at(i) == "-no-sql-db2")
- dictionary[ "SQL_DB2" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-sqlite" || configCmdLine.at(i) == "-plugin-sql-sqlite")
- dictionary[ "SQL_SQLITE" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-sqlite")
- dictionary[ "SQL_SQLITE" ] = "no";
- else if (configCmdLine.at(i) == "-system-sqlite")
- dictionary[ "SQL_SQLITE_LIB" ] = "system";
- else if (configCmdLine.at(i) == "-sql-sqlite2" || configCmdLine.at(i) == "-plugin-sql-sqlite2")
- dictionary[ "SQL_SQLITE2" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-sqlite2")
- dictionary[ "SQL_SQLITE2" ] = "no";
-
- else if (configCmdLine.at(i) == "-sql-ibase" || configCmdLine.at(i) == "-plugin-sql-ibase")
- dictionary[ "SQL_IBASE" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sql-ibase")
- dictionary[ "SQL_IBASE" ] = "no";
-
- else if (configCmdLine.at(i) == "-no-incredibuild-xge")
- dictionary[ "INCREDIBUILD_XGE" ] = "no";
- else if (configCmdLine.at(i) == "-incredibuild-xge")
- dictionary[ "INCREDIBUILD_XGE" ] = "yes";
- // Others ---------------------------------------------------
- else if (configCmdLine.at(i) == "-widgets")
- dictionary[ "WIDGETS" ] = "yes";
- else if (configCmdLine.at(i) == "-no-widgets")
- dictionary[ "WIDGETS" ] = "no";
-
- else if (configCmdLine.at(i) == "-gui")
- dictionary[ "GUI" ] = "yes";
- else if (configCmdLine.at(i) == "-no-gui")
- dictionary[ "GUI" ] = "no";
-
- else if (configCmdLine.at(i) == "-rtti")
- dictionary[ "RTTI" ] = "yes";
- else if (configCmdLine.at(i) == "-no-rtti")
- dictionary[ "RTTI" ] = "no";
-
- else if (configCmdLine.at(i) == "-strip")
- dictionary[ "STRIP" ] = "yes";
- else if (configCmdLine.at(i) == "-no-strip")
- dictionary[ "STRIP" ] = "no";
-
- else if (configCmdLine.at(i) == "-pch")
- dictionary[ "PCH" ] = "yes";
- else if (configCmdLine.at(i) == "-no-pch")
- dictionary[ "PCH" ] = "no";
-
- else if (configCmdLine.at(i) == "-accessibility")
- dictionary[ "ACCESSIBILITY" ] = "yes";
- else if (configCmdLine.at(i) == "-no-accessibility") {
- dictionary[ "ACCESSIBILITY" ] = "no";
- cout << "Setting accessibility to NO" << endl;
- }
-
- else if (configCmdLine.at(i) == "-no-sse2")
- dictionary[ "SSE2" ] = "no";
- else if (configCmdLine.at(i) == "-sse2")
- dictionary[ "SSE2" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sse3")
- dictionary[ "SSE3" ] = "no";
- else if (configCmdLine.at(i) == "-sse3")
- dictionary[ "SSE3" ] = "yes";
- else if (configCmdLine.at(i) == "-no-ssse3")
- dictionary[ "SSSE3" ] = "no";
- else if (configCmdLine.at(i) == "-ssse3")
- dictionary[ "SSSE3" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sse4.1")
- dictionary[ "SSE4_1" ] = "no";
- else if (configCmdLine.at(i) == "-sse4.1")
- dictionary[ "SSE4_1" ] = "yes";
- else if (configCmdLine.at(i) == "-no-sse4.2")
- dictionary[ "SSE4_2" ] = "no";
- else if (configCmdLine.at(i) == "-sse4.2")
- dictionary[ "SSE4_2" ] = "yes";
- else if (configCmdLine.at(i) == "-no-avx")
- dictionary[ "AVX" ] = "no";
- else if (configCmdLine.at(i) == "-avx")
- dictionary[ "AVX" ] = "yes";
- else if (configCmdLine.at(i) == "-no-avx2")
- dictionary[ "AVX2" ] = "no";
- else if (configCmdLine.at(i) == "-avx2")
- dictionary[ "AVX2" ] = "yes";
- else if (configCmdLine.at(i) == "-no-avx512")
- dictionary[ "AVX512" ] = "";
- else if (configCmdLine.at(i) == "-avx512")
- dictionary[ "AVX512" ] = "auto";
-
- else if (configCmdLine.at(i) == "-no-ssl") {
- dictionary[ "SSL"] = "no";
- } else if (configCmdLine.at(i) == "-ssl") {
- dictionary[ "SSL" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-openssl") {
- dictionary[ "OPENSSL"] = "no";
- } else if (configCmdLine.at(i) == "-openssl") {
- dictionary[ "OPENSSL" ] = "yes";
- dictionary[ "SSL" ] = "yes";
- } else if (configCmdLine.at(i) == "-openssl-linked") {
- dictionary[ "OPENSSL" ] = "linked";
- dictionary[ "SSL" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-libproxy") {
- dictionary[ "LIBPROXY"] = "no";
- } else if (configCmdLine.at(i) == "-libproxy") {
- dictionary[ "LIBPROXY" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-qdbus") {
- dictionary[ "DBUS" ] = "no";
- } else if (configCmdLine.at(i) == "-qdbus") {
- dictionary[ "DBUS" ] = "auto";
- } else if (configCmdLine.at(i) == "-no-dbus") {
- dictionary[ "DBUS" ] = "no";
- } else if (configCmdLine.at(i) == "-dbus") {
- dictionary[ "DBUS" ] = "auto";
- } else if (configCmdLine.at(i) == "-dbus-linked") {
- dictionary[ "DBUS" ] = "linked";
- } else if (configCmdLine.at(i) == "-dbus-runtime") {
- dictionary[ "DBUS" ] = "runtime";
- } else if (configCmdLine.at(i) == "-wmf-backend") {
- dictionary[ "WMF_BACKEND" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-wmf-backend") {
- dictionary[ "WMF_BACKEND" ] = "no";
- } else if (configCmdLine.at(i) == "-no-qml-debug") {
- dictionary[ "QML_DEBUG" ] = "no";
- } else if (configCmdLine.at(i) == "-qml-debug") {
- dictionary[ "QML_DEBUG" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-plugin-manifests") {
- dictionary[ "PLUGIN_MANIFESTS" ] = "no";
- } else if (configCmdLine.at(i) == "-plugin-manifests") {
- dictionary[ "PLUGIN_MANIFESTS" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-slog2") {
- dictionary[ "SLOG2" ] = "no";
- } else if (configCmdLine.at(i) == "-slog2") {
- dictionary[ "SLOG2" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-imf") {
- dictionary[ "QNX_IMF" ] = "no";
- } else if (configCmdLine.at(i) == "-imf") {
- dictionary[ "QNX_IMF" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-pps") {
- dictionary[ "PPS" ] = "no";
- } else if (configCmdLine.at(i) == "-pps") {
- dictionary[ "PPS" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-lgmon") {
- dictionary[ "LGMON" ] = "no";
- } else if (configCmdLine.at(i) == "-lgmon") {
- dictionary[ "LGMON" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-system-proxies") {
- dictionary[ "SYSTEM_PROXIES" ] = "no";
- } else if (configCmdLine.at(i) == "-system-proxies") {
- dictionary[ "SYSTEM_PROXIES" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-sctp") {
- dictionary[ "SCTP" ] = "no";
- } else if (configCmdLine.at(i) == "-sctp") {
- dictionary[ "SCTP" ] = "yes";
- } else if (configCmdLine.at(i) == "-warnings-are-errors" ||
- configCmdLine.at(i) == "-Werror") {
- dictionary[ "WERROR" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-warnings-are-errors") {
- dictionary[ "WERROR" ] = "no";
- } else if (configCmdLine.at(i) == "-no-headersclean") {
- dictionary[ "HEADERSCLEAN" ] = "no";
- } else if (configCmdLine.at(i) == "-headersclean") {
- dictionary[ "HEADERSCLEAN" ] = "yes";
- } else if (configCmdLine.at(i) == "-no-eventfd") {
- dictionary[ "QT_EVENTFD" ] = "no";
- } else if (configCmdLine.at(i) == "-eventfd") {
- dictionary[ "QT_EVENTFD" ] = "yes";
- }
-
- // Work around compiler nesting limitation
- else
- continueElse[0] = true;
- if (!continueElse[0]) {
}
else if (configCmdLine.at(i) == "-no-syncqt")
dictionary[ "SYNCQT" ] = "no";
- else if (configCmdLine.at(i) == "-qtnamespace") {
- ++i;
- if (i == argCount)
- break;
- dictionary[ "QT_NAMESPACE" ] = configCmdLine.at(i);
- } else if (configCmdLine.at(i) == "-qtlibinfix") {
- ++i;
- if (i == argCount)
- break;
- dictionary[ "QT_LIBINFIX" ] = configCmdLine.at(i);
- } else if (configCmdLine.at(i) == "-D") {
- ++i;
- if (i == argCount)
- break;
- qmakeDefines += configCmdLine.at(i);
- } else if (configCmdLine.at(i) == "-I") {
- ++i;
- if (i == argCount)
- break;
- qmakeIncludes += configCmdLine.at(i);
- } else if (configCmdLine.at(i) == "-L") {
- ++i;
- if (i == argCount)
- break;
- QFileInfo checkDirectory(configCmdLine.at(i));
- if (!checkDirectory.isDir()) {
- cout << "Argument passed to -L option is not a directory path. Did you mean the -l option?" << endl;
- dictionary[ "DONE" ] = "error";
- break;
- }
- qmakeLibs += configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS=")) {
- opensslLibs = configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS_DEBUG=")) {
- opensslLibsDebug = configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("OPENSSL_LIBS_RELEASE=")) {
- opensslLibsRelease = configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("OPENSSL_PATH=")) {
- opensslPath = QDir::fromNativeSeparators(configCmdLine.at(i).section("=", 1));
- } else if (configCmdLine.at(i).startsWith("PSQL_LIBS=")) {
- psqlLibs = configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("SYBASE=")) {
- sybase = configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("SYBASE_LIBS=")) {
- sybaseLibs = configCmdLine.at(i);
- } else if (configCmdLine.at(i).startsWith("DBUS_PATH=")) {
- dbusPath = QDir::fromNativeSeparators(configCmdLine.at(i).section("=", 1));
- } else if (configCmdLine.at(i).startsWith("DBUS_HOST_PATH=")) {
- dbusHostPath = QDir::fromNativeSeparators(configCmdLine.at(i).section("=", 1));
- } else if (configCmdLine.at(i).startsWith("MYSQL_PATH=")) {
- mysqlPath = QDir::fromNativeSeparators(configCmdLine.at(i).section("=", 1));
- } else if (configCmdLine.at(i).startsWith("ZLIB_LIBS=")) {
- zlibLibs = QDir::fromNativeSeparators(configCmdLine.at(i));
- }
-
else if (configCmdLine.at(i) == "-confirm-license") {
dictionary["LICENSE_CONFIRMED"] = "yes";
}
- else if (configCmdLine.at(i) == "-make") {
- ++i;
- if (i == argCount)
- break;
- QString part = configCmdLine.at(i);
- if (!allBuildParts.contains(part)) {
- cout << "Unknown part " << part << " passed to -make." << endl;
- dictionary["DONE"] = "error";
- }
- buildParts += part;
- } else if (configCmdLine.at(i) == "-nomake") {
- ++i;
- if (i == argCount)
- break;
- QString part = configCmdLine.at(i);
- if (!allBuildParts.contains(part)) {
- cout << "Unknown part " << part << " passed to -nomake." << endl;
- dictionary["DONE"] = "error";
- }
- nobuildParts += part;
- }
-
- else if (configCmdLine.at(i) == "-skip") {
- ++i;
- if (i == argCount)
- break;
- QString mod = configCmdLine.at(i);
- if (!mod.startsWith(QLatin1String("qt")))
- mod.insert(0, QStringLiteral("qt"));
- if (!QFileInfo(sourcePath + "/../" + mod).isDir()) {
- cout << "Attempting to skip non-existent module " << mod << "." << endl;
- dictionary["DONE"] = "error";
- }
- skipModules += mod;
- }
-
// Directories ----------------------------------------------
else if (configCmdLine.at(i) == "-prefix") {
++i;
@@ -1024,9 +372,6 @@ void Configure::parseCmdLine()
break;
dictionary[ "CFG_SYSROOT" ] = configCmdLine.at(i);
}
- else if (configCmdLine.at(i) == "-no-gcc-sysroot") {
- dictionary[ "CFG_GCC_SYSROOT" ] = "no";
- }
else if (configCmdLine.at(i) == "-hostprefix") {
++i;
@@ -1071,91 +416,10 @@ void Configure::parseCmdLine()
dictionary[ "MAKE" ] = configCmdLine.at(i);
}
- else if (configCmdLine.at(i).indexOf(QRegExp("^-(en|dis)able-")) != -1) {
- // Scan to see if any specific modules and drivers are enabled or disabled
- for (QStringList::Iterator module = modules.begin(); module != modules.end(); ++module) {
- if (configCmdLine.at(i) == QString("-enable-") + (*module)) {
- enabledModules += (*module);
- break;
- }
- else if (configCmdLine.at(i) == QString("-disable-") + (*module)) {
- disabledModules += (*module);
- break;
- }
- }
- }
-
- else if (configCmdLine.at(i) == "-directwrite") {
- dictionary["DIRECTWRITE"] = "yes";
- } else if (configCmdLine.at(i) == "-no-directwrite") {
- dictionary["DIRECTWRITE"] = "no";
- }
-
- else if (configCmdLine.at(i) == "-direct2d") {
- dictionary["DIRECT2D"] = "yes";
- } else if (configCmdLine.at(i) == "-no-direct2d") {
- dictionary["DIRECT2D"] = "no";
- }
-
- else if (configCmdLine.at(i) == "-nis") {
- dictionary["NIS"] = "yes";
- } else if (configCmdLine.at(i) == "-no-nis") {
- dictionary["NIS"] = "no";
- }
-
- else if (configCmdLine.at(i) == "-cups") {
- dictionary["QT_CUPS"] = "yes";
- } else if (configCmdLine.at(i) == "-no-cups") {
- dictionary["QT_CUPS"] = "no";
- }
-
- else if (configCmdLine.at(i) == "-iconv") {
- dictionary["QT_ICONV"] = "yes";
- } else if (configCmdLine.at(i) == "-no-iconv") {
- dictionary["QT_ICONV"] = "no";
- } else if (configCmdLine.at(i) == "-sun-iconv") {
- dictionary["QT_ICONV"] = "sun";
- } else if (configCmdLine.at(i) == "-gnu-iconv") {
- dictionary["QT_ICONV"] = "gnu";
- }
-
- else if (configCmdLine.at(i) == "-no-evdev") {
- dictionary[ "QT_EVDEV" ] = "no";
- } else if (configCmdLine.at(i) == "-evdev") {
- dictionary[ "QT_EVDEV" ] = "yes";
- }
-
- else if (configCmdLine.at(i) == "-no-mtdev") {
- dictionary[ "QT_MTDEV" ] = "no";
- } else if (configCmdLine.at(i) == "-mtdev") {
- dictionary[ "QT_MTDEV" ] = "yes";
- }
-
- else if (configCmdLine.at(i) == "-inotify") {
- dictionary["QT_INOTIFY"] = "yes";
- } else if (configCmdLine.at(i) == "-no-inotify") {
- dictionary["QT_INOTIFY"] = "no";
- }
-
- else if (configCmdLine.at(i) == "-fontconfig") {
- dictionary["FONT_CONFIG"] = "yes";
- } else if (configCmdLine.at(i) == "-no-fontconfig") {
- dictionary["FONT_CONFIG"] = "no";
- }
-
- else if (configCmdLine.at(i) == "-posix-ipc") {
- dictionary["POSIX_IPC"] = "yes";
- }
-
- else if (configCmdLine.at(i) == "-glib") {
- dictionary["QT_GLIB"] = "yes";
- }
-
else if (configCmdLine.at(i) == "-sysconfdir") {
++i;
if (i == argCount)
break;
-
dictionary["QT_INSTALL_SETTINGS"] = configCmdLine.at(i);
}
@@ -1184,7 +448,6 @@ void Configure::parseCmdLine()
++i;
if (i == argCount)
break;
-
dictionary[ "ANDROID_HOST" ] = configCmdLine.at(i);
}
@@ -1207,12 +470,6 @@ void Configure::parseCmdLine()
} else if (configCmdLine.at(i) == "-android-style-assets") {
dictionary[ "ANDROID_STYLE_ASSETS" ] = "yes";
}
-
- else {
- dictionary[ "DONE" ] = "error";
- cout << "Unknown option " << configCmdLine.at(i) << endl;
- break;
- }
}
// Ensure that QMAKESPEC exists in the mkspecs folder
@@ -1284,35 +541,6 @@ void Configure::parseCmdLine()
}
}
- // Allow tests for private classes to be compiled against internal builds
- if (dictionary["BUILDDEV"] == "yes") {
- qtConfig << "private_tests";
- if (dictionary["WERROR"] != "no")
- qmakeConfig << "warnings_are_errors";
- if (dictionary["HEADERSCLEAN"] != "no")
- qmakeConfig << "headersclean";
- } else {
- if (dictionary["WERROR"] == "yes")
- qmakeConfig << "warnings_are_errors";
- if (dictionary["HEADERSCLEAN"] == "yes")
- qmakeConfig << "headersclean";
- }
-
- if (dictionary["FORCE_ASSERTS"] == "yes")
- qtConfig += "force_asserts";
-
- for (QStringList::Iterator dis = disabledModules.begin(); dis != disabledModules.end(); ++dis) {
- modules.removeAll((*dis));
- }
- for (QStringList::Iterator ena = enabledModules.begin(); ena != enabledModules.end(); ++ena) {
- if (modules.indexOf((*ena)) == -1)
- modules += (*ena);
- }
- qtConfig += modules;
-
- for (QStringList::Iterator it = disabledModules.begin(); it != disabledModules.end(); ++it)
- qtConfig.removeAll(*it);
-
if ((dictionary["REDO"] != "yes") && (dictionary["DONE"] != "error"))
saveCmdLine();
}
@@ -1323,663 +551,8 @@ void Configure::parseCmdLine()
*/
void Configure::applySpecSpecifics()
{
- if (dictionary.contains("XQMAKESPEC")) {
- //Disable building tools when cross compiling.
- nobuildParts << "tools";
- }
-
- if (dictionary.value("XQMAKESPEC").startsWith("winphone") || dictionary.value("XQMAKESPEC").startsWith("winrt")) {
- dictionary[ "STYLE_WINDOWSXP" ] = "no";
- dictionary[ "STYLE_WINDOWSVISTA" ] = "no";
- dictionary[ "LIBJPEG" ] = "qt";
- dictionary[ "LIBPNG" ] = "qt";
- dictionary[ "FREETYPE" ] = "yes";
- dictionary[ "SSL" ] = "yes";
- dictionary[ "OPENSSL" ] = "no";
- dictionary[ "DBUS" ] = "no";
- dictionary[ "SYSTEM_ZLIB" ] = "no";
- dictionary[ "PCRE" ] = "qt";
- dictionary[ "ICU" ] = "qt";
- dictionary[ "LARGE_FILE" ] = "no";
- } else if (dictionary.value("XQMAKESPEC").startsWith("linux")) { //TODO actually wrong.
- //TODO
- dictionary[ "STYLE_WINDOWSXP" ] = "no";
- dictionary[ "STYLE_WINDOWSVISTA" ] = "no";
- dictionary[ "OPENGL" ] = "no";
- dictionary[ "DBUS"] = "no";
- dictionary[ "QT_INOTIFY" ] = "no";
- dictionary[ "QT_CUPS" ] = "no";
- dictionary[ "QT_GLIB" ] = "no";
- dictionary[ "QT_ICONV" ] = "no";
- dictionary[ "QT_EVDEV" ] = "no";
- dictionary[ "QT_MTDEV" ] = "no";
- dictionary[ "FONT_CONFIG" ] = "auto";
- dictionary[ "ANGLE" ] = "no";
-
- } else if (platform() == QNX) {
- dictionary[ "REDUCE_EXPORTS" ] = "yes";
- dictionary["STACK_PROTECTOR_STRONG"] = "auto";
- dictionary["SLOG2"] = "auto";
- dictionary["QNX_IMF"] = "auto";
- dictionary["PPS"] = "auto";
- dictionary["LGMON"] = "auto";
- dictionary["QT_XKBCOMMON"] = "no";
- dictionary[ "ANGLE" ] = "no";
- dictionary[ "DYNAMICGL" ] = "no";
- dictionary[ "FONT_CONFIG" ] = "auto";
- dictionary[ "ICU" ] = "auto";
- dictionary[ "POLL" ] = "poll";
- dictionary[ "ZLIB" ] = "system";
- } else if (platform() == ANDROID) {
- dictionary[ "REDUCE_EXPORTS" ] = "yes";
- dictionary[ "BUILD" ] = "release";
- dictionary[ "BUILDALL" ] = "no";
- dictionary[ "LARGE_FILE" ] = "no";
- dictionary[ "ANGLE" ] = "no";
- dictionary[ "DYNAMICGL" ] = "no";
- dictionary[ "REDUCE_RELOCATIONS" ] = "yes";
- dictionary[ "QT_GETIFADDRS" ] = "no";
- dictionary[ "QT_XKBCOMMON" ] = "no";
+ if (platform() == ANDROID)
dictionary["ANDROID_STYLE_ASSETS"] = "yes";
- dictionary[ "STYLE_ANDROID" ] = "yes";
- dictionary[ "POLL" ] = "poll";
- dictionary[ "ZLIB" ] = "system";
- }
-}
-
-// Locate a file and return its containing directory.
-QString Configure::locateFile(const QString &fileName) const
-{
- const QString mkspec = dictionary.contains(QStringLiteral("XQMAKESPEC"))
- ? dictionary[QStringLiteral("XQMAKESPEC")] : dictionary[QStringLiteral("QMAKESPEC")];
- const QString file = fileName.toLower();
- QStringList pathList;
- if (file.endsWith(".h")) {
- static const QStringList headerPaths =
- Environment::headerPaths(Environment::compilerFromQMakeSpec(mkspec));
- pathList = qmakeIncludes;
- pathList += headerPaths;
- } else if (file.endsWith(".lib") || file.endsWith(".a")) {
- static const QStringList libPaths =
- Environment::libraryPaths(Environment::compilerFromQMakeSpec(mkspec));
- pathList = libPaths;
- } else {
- // Fallback for .exe and .dll (latter are not covered by QStandardPaths).
- static const QStringList exePaths = Environment::path();
- pathList = exePaths;
- }
- return Environment::findFileInPaths(file, pathList);
-}
-
-/*!
- Default value for options marked as "auto" if the test passes.
- (Used both by the autoDetection() below, and the desc() function
- to mark (+) the default option of autodetecting options.
-*/
-QString Configure::defaultTo(const QString &option)
-{
- // We prefer using the system version of the 3rd party libs
- if (option == "PCRE"
- || option == "LIBJPEG"
- || option == "LIBPNG")
- return "system";
-
- // These database drivers and image formats can be built-in or plugins.
- // Prefer plugins when Qt is shared.
- if (dictionary[ "SHARED" ] == "yes") {
- if (option == "SQL_MYSQL"
- || option == "SQL_MYSQL"
- || option == "SQL_ODBC"
- || option == "SQL_OCI"
- || option == "SQL_PSQL"
- || option == "SQL_TDS"
- || option == "SQL_DB2"
- || option == "SQL_SQLITE"
- || option == "SQL_SQLITE2"
- || option == "SQL_IBASE")
- return "yes";
- }
-
- // By default we do not want to compile OCI driver when compiling with
- // MinGW, due to lack of such support from Oracle. It prob. won't work.
- // (Customer may force the use though)
- if (dictionary["QMAKESPEC"].endsWith("-g++")
- && option == "SQL_OCI")
- return "no";
-
- // keep 'auto' default for msvc, since we can't set the language supported
- if (option == "C++STD"
- && dictionary["QMAKESPEC"].contains("msvc"))
- return "auto";
-
- if (option == "SYNCQT"
- && (!QFile::exists(sourcePath + "/.git")))
- return "no";
-
- return "yes";
-}
-
-bool Configure::checkAngleAvailability(QString *errorMessage /* = 0 */) const
-{
- // Check for Direct X SDK (include lib and direct shader compiler 'fxc').
- // Up to Direct X SDK June 2010 and for MinGW, this is pointed to by the
- // DXSDK_DIR variable. Starting with Windows Kit 8, it is included
- // in the Windows SDK. Checking for the header is not sufficient since
- // it is also present in MinGW.
- const QString directXSdk = Environment::detectDirectXSdk();
- const Compiler compiler = Environment::compilerFromQMakeSpec(dictionary[QStringLiteral("QMAKESPEC")]);
- const QString compilerHeader = QStringLiteral("d3dcompiler.h");
- if (!findFile(compilerHeader)) {
- if (errorMessage)
- *errorMessage = QString::fromLatin1("The header '%1' could not be found.").arg(compilerHeader);
- return false;
- }
- if (dictionary["SSE2"] != "no") {
- const QString intrinHeader = QStringLiteral("intrin.h"); // Not present on MinGW-32
- if (!findFile(intrinHeader)) {
- if (errorMessage)
- *errorMessage = QString::fromLatin1("The header '%1' required for SSE2 could not be found.").arg(intrinHeader);
- return false;
- }
- }
-
- const QString directXLibrary = QStringLiteral("d3d11.lib"); // Ensures at least the June 2010 DXSDK is present
- if (!findFile(directXLibrary)) {
- if (errorMessage)
- *errorMessage = QString::fromLatin1("The library '%1' could not be found.").arg(directXLibrary);
- return false;
- }
- const QString fxcBinary = QStringLiteral("fxc.exe");
- QStringList additionalPaths;
- if (!directXSdk.isEmpty())
- additionalPaths.push_back(directXSdk + QStringLiteral("/Utilities/bin/x86"));
- QString fxcPath = QStandardPaths::findExecutable(fxcBinary, additionalPaths);
- if (fxcPath.isEmpty()) {
- if (errorMessage)
- *errorMessage = QString::fromLatin1("The shader compiler '%1' could not be found.").arg(fxcBinary);
- return false;
- }
- return true;
-}
-
-QString Configure::checkAvx512Availability()
-{
- static const char avx512features[][5] = { "cd", "er", "pf", "bw", "dq", "vl", "ifma", "vbmi" };
-
- // try AVX512 Foundation. No Foundation, nothing else works.
- if (!tryCompileProject("common/avx512", "AVX512=F"))
- return QString();
-
- QString available = "avx512f";
- for (size_t i = 0; i < sizeof(avx512features)/sizeof(avx512features[0]); ++i) {
- if (tryCompileProject("common/avx512", QStringLiteral("AVX512=%0").arg(avx512features[i]).toUpper())) {
- available += " avx512";
- available += avx512features[i];
- }
- }
- return available;
-}
-
-/*!
- Checks the system for the availability of a feature.
- Returns true if the feature is available, else false.
-*/
-
-bool Configure::checkAvailability(const QString &part)
-{
- bool available = false;
- if (part == "STYLE_WINDOWSXP")
- available = (platform() == WINDOWS) && findFile("uxtheme.h");
-
- else if (part == "OBJCOPY")
- available = tryCompileProject("unix/objcopy");
-
- else if (part == "ATOMIC64")
- available = tryCompileProject("common/atomic64");
-
- else if (part == "ATOMIC64-LIBATOMIC")
- available = tryCompileProject("common/atomic64", "LIBS+=-latomic");
-
- else if (part == "ATOMICFPTR")
- available = tryCompileProject("common/atomicfptr");
-
- else if (part == "SYSTEM_ZLIB")
- available = findFile("zlib.h");
-
- else if (part == "PCRE")
- available = findFile("pcre.h");
-
- else if (part == "ICU")
- available = tryCompileProject("unix/icu");
-
- else if (part == "HARFBUZZ")
- available = tryCompileProject("unix/harfbuzz");
-
- else if (part == "LIBJPEG")
- available = findFile("jpeglib.h");
- else if (part == "LIBPNG")
- available = findFile("png.h");
- else if (part == "SQL_MYSQL")
- available = findFile("mysql.h") && findFile("libmySQL.lib");
- else if (part == "SQL_ODBC")
- available = findFile("sql.h") && findFile("sqlext.h") && findFile("odbc32.lib");
- else if (part == "SQL_OCI")
- available = findFile("oci.h") && findFile("oci.lib");
- else if (part == "SQL_PSQL")
- available = findFile("libpq-fe.h") && findFile("libpq.lib") && findFile("ws2_32.lib") && findFile("advapi32.lib");
- else if (part == "SQL_TDS")
- available = findFile("sybfront.h") && findFile("sybdb.h") && findFile("ntwdblib.lib");
- else if (part == "SQL_DB2")
- available = findFile("sqlcli.h") && findFile("sqlcli1.h") && findFile("db2cli.lib");
- else if (part == "SQL_SQLITE")
- available = true; // Built in, we have a fork
- else if (part == "SQL_SQLITE_LIB") {
- if (dictionary[ "SQL_SQLITE_LIB" ] == "system") {
- if (platform() == QNX) {
- available = true;
- dictionary[ "QMAKE_LIBS_SQLITE" ] += "-lsqlite3 -lz";
- } else {
- available = findFile("sqlite3.h") && findFile("sqlite3.lib");
- if (available)
- dictionary[ "QMAKE_LIBS_SQLITE" ] += "sqlite3.lib";
- }
- } else {
- available = true;
- }
- } else if (part == "SQL_SQLITE2")
- available = findFile("sqlite.h") && findFile("sqlite.lib");
- else if (part == "SQL_IBASE")
- available = findFile("ibase.h") && (findFile("gds32_ms.lib") || findFile("gds32.lib"));
- else if (part == "SSE2")
- available = tryCompileProject("common/sse2");
- else if (part == "SSE3")
- available = tryCompileProject("common/sse3");
- else if (part == "SSSE3")
- available = tryCompileProject("common/ssse3");
- else if (part == "SSE4_1")
- available = tryCompileProject("common/sse4_1");
- else if (part == "SSE4_2")
- available = tryCompileProject("common/sse4_2");
- else if (part == "AVX")
- available = tryCompileProject("common/avx");
- else if (part == "AVX2")
- available = tryCompileProject("common/avx2");
- else if (part == "OPENSSL")
- available = findFile("openssl\\ssl.h");
- else if (part == "LIBPROXY")
- available = dictionary.contains("XQMAKESPEC") && tryCompileProject("common/libproxy");
- else if (part == "DBUS")
- available = findFile("dbus\\dbus.h");
- else if (part == "INCREDIBUILD_XGE") {
- available = !QStandardPaths::findExecutable(QStringLiteral("BuildConsole.exe")).isEmpty()
- && !QStandardPaths::findExecutable(QStringLiteral("xgConsole.exe")).isEmpty();
- } else if (part == "WMF_BACKEND") {
- available = findFile("mfapi.h") && findFile("mf.lib");
- } else if (part == "DIRECTWRITE") {
- available = tryCompileProject("win/directwrite");
- } else if (part == "DIRECTWRITE2") {
- available = tryCompileProject("win/directwrite2");
- } else if (part == "DIRECT2D") {
- available = tryCompileProject("qpa/direct2d");
- } else if (part == "ICONV") {
- available = tryCompileProject("unix/iconv") || tryCompileProject("unix/gnu-libiconv");
- } else if (part == "EVDEV") {
- available = tryCompileProject("unix/evdev");
- } else if (part == "MTDEV") {
- available = tryCompileProject("unix/mtdev");
- } else if (part == "TSLIB") {
- available = tryCompileProject("unix/tslib");
- } else if (part == "INOTIFY") {
- available = tryCompileProject("unix/inotify");
- } else if (part == "QT_EVENTFD") {
- available = tryCompileProject("unix/eventfd");
- } else if (part == "CUPS") {
- available = (platform() != WINDOWS) && (platform() != WINDOWS_RT) && tryCompileProject("unix/cups");
- } else if (part == "STACK_PROTECTOR_STRONG") {
- available = (platform() == QNX) && compilerSupportsFlag("qcc -fstack-protector-strong");
- } else if (part == "SLOG2") {
- available = tryCompileProject("unix/slog2");
- } else if (part == "QNX_IMF") {
- available = tryCompileProject("unix/qqnx_imf");
- } else if (part == "PPS") {
- available = (platform() == QNX) && tryCompileProject("unix/pps");
- } else if (part == "LGMON") {
- available = (platform() == QNX) && tryCompileProject("unix/lgmon");
- } else if (part == "SCTP") {
- available = tryCompileProject("unix/sctp");
- } else if (part == "NEON") {
- available = dictionary["QT_CPU_FEATURES"].contains("neon");
- } else if (part == "FONT_CONFIG") {
- available = tryCompileProject("unix/fontconfig");
- } else if (part == "DOUBLECONVERSION") {
- available = tryCompileProject("unix/doubleconversion");
- }
-
- return available;
-}
-
-/*
- Autodetect options marked as "auto".
-*/
-void Configure::autoDetection()
-{
- cout << "Running configuration tests..." << endl;
-
- // Auto-detect CPU architectures.
- detectArch();
-
- if (dictionary["C++STD"] == "auto" && !dictionary["QMAKESPEC"].contains("msvc")) {
- if (!tryCompileProject("common/c++14")) {
- dictionary["C++STD"] = "c++11";
- } else if (!tryCompileProject("common/c++1z")) {
- dictionary["C++STD"] = "c++14";
- } else {
- dictionary["C++STD"] = "c++1z";
- }
- }
-
- if (dictionary["ATOMIC64"] == "auto")
- dictionary["ATOMIC64"] = checkAvailability("ATOMIC64") ? "yes" :
- checkAvailability("ATOMIC64-LIBATOMIC") ? "libatomic" : "no";
-
- // special case:
- if (!checkAvailability("ATOMICFPTR")) {
- dictionary["DONE"] = "error";
- cout << "ERROR: detected an std::atomic implementation that fails for function pointers." << endl
- << "Please apply the patch corresponding to your Standard Library vendor, found in" << endl
- << sourcePath << "/config.tests/common/atomicfptr" << endl;
- return;
- }
-
- // Style detection
- if (dictionary["STYLE_WINDOWSXP"] == "auto")
- dictionary["STYLE_WINDOWSXP"] = checkAvailability("STYLE_WINDOWSXP") ? defaultTo("STYLE_WINDOWSXP") : "no";
- if (dictionary["STYLE_WINDOWSVISTA"] == "auto") // Vista style has the same requirements as XP style
- dictionary["STYLE_WINDOWSVISTA"] = checkAvailability("STYLE_WINDOWSXP") ? defaultTo("STYLE_WINDOWSVISTA") : "no";
-
- // Compression detection
- if (dictionary["SYSTEM_ZLIB"] == "auto")
- dictionary["SYSTEM_ZLIB"] = checkAvailability("SYSTEM_ZLIB") ? "yes" : "no";
-
- // PCRE detection
- if (dictionary["PCRE"] == "auto")
- dictionary["PCRE"] = checkAvailability("PCRE") ? defaultTo("PCRE") : "qt";
-
- // ICU detection
- if (dictionary["ICU"] == "auto")
- dictionary["ICU"] = checkAvailability("ICU") ? "yes" : "no";
-
- // ANGLE detection
- if (dictionary["ANGLE"] == "auto") {
- if (dictionary["OPENGL_ES_2"] == "yes" || dictionary["DYNAMICGL"] == "yes") {
- QString err;
- dictionary["ANGLE"] = checkAngleAvailability(&err) ? "yes" : "no";
- dictionary["ANGLE_FROM"] = "detected";
- dictionary["ANGLE_ERR"] = err;
- } else {
- dictionary["ANGLE"] = "no";
- }
- }
-
- // Image format detection
- if (dictionary["LIBJPEG"] == "auto")
- dictionary["LIBJPEG"] = checkAvailability("LIBJPEG") ? defaultTo("LIBJPEG") : "qt";
- if (dictionary["LIBPNG"] == "auto")
- dictionary["LIBPNG"] = checkAvailability("LIBPNG") ? defaultTo("LIBPNG") : "qt";
-
- // SQL detection (not on by default)
- if (dictionary["SQL_MYSQL"] == "auto")
- dictionary["SQL_MYSQL"] = checkAvailability("SQL_MYSQL") ? defaultTo("SQL_MYSQL") : "no";
- if (dictionary["SQL_ODBC"] == "auto")
- dictionary["SQL_ODBC"] = checkAvailability("SQL_ODBC") ? defaultTo("SQL_ODBC") : "no";
- if (dictionary["SQL_OCI"] == "auto")
- dictionary["SQL_OCI"] = checkAvailability("SQL_OCI") ? defaultTo("SQL_OCI") : "no";
- if (dictionary["SQL_PSQL"] == "auto")
- dictionary["SQL_PSQL"] = checkAvailability("SQL_PSQL") ? defaultTo("SQL_PSQL") : "no";
- if (dictionary["SQL_TDS"] == "auto")
- dictionary["SQL_TDS"] = checkAvailability("SQL_TDS") ? defaultTo("SQL_TDS") : "no";
- if (dictionary["SQL_DB2"] == "auto")
- dictionary["SQL_DB2"] = checkAvailability("SQL_DB2") ? defaultTo("SQL_DB2") : "no";
- if (dictionary["SQL_SQLITE"] == "auto")
- dictionary["SQL_SQLITE"] = checkAvailability("SQL_SQLITE") ? defaultTo("SQL_SQLITE") : "no";
- if (dictionary["SQL_SQLITE_LIB"] == "system")
- if (!checkAvailability("SQL_SQLITE_LIB"))
- dictionary["SQL_SQLITE_LIB"] = "no";
- if (dictionary["SQL_SQLITE2"] == "auto")
- dictionary["SQL_SQLITE2"] = checkAvailability("SQL_SQLITE2") ? defaultTo("SQL_SQLITE2") : "no";
- if (dictionary["SQL_IBASE"] == "auto")
- dictionary["SQL_IBASE"] = checkAvailability("SQL_IBASE") ? defaultTo("SQL_IBASE") : "no";
- if (dictionary["SSE2"] == "auto")
- dictionary["SSE2"] = checkAvailability("SSE2") ? "yes" : "no";
- if (dictionary["SSE3"] == "auto")
- dictionary["SSE3"] = checkAvailability("SSE3") ? "yes" : "no";
- if (dictionary["SSSE3"] == "auto")
- dictionary["SSSE3"] = checkAvailability("SSSE3") ? "yes" : "no";
- if (dictionary["SSE4_1"] == "auto")
- dictionary["SSE4_1"] = checkAvailability("SSE4_1") ? "yes" : "no";
- if (dictionary["SSE4_2"] == "auto")
- dictionary["SSE4_2"] = checkAvailability("SSE4_2") ? "yes" : "no";
- if (dictionary["AVX"] == "auto")
- dictionary["AVX"] = checkAvailability("AVX") ? "yes" : "no";
- if (dictionary["AVX2"] == "auto")
- dictionary["AVX2"] = checkAvailability("AVX2") ? "yes" : "no";
- if (dictionary["AVX512"] == "auto")
- dictionary["AVX512"] = checkAvx512Availability();
- if (dictionary["NEON"] == "auto")
- dictionary["NEON"] = checkAvailability("NEON") ? "yes" : "no";
- if (dictionary["SSL"] == "auto") {
- if (platform() == WINDOWS_RT) {
- dictionary["SSL"] = "yes";
- } else {
- // On Desktop Windows openssl and ssl always have the same value (for now). OpenSSL is
- // the only backend and if it is available and should be built, that also means that
- // SSL support in general is enabled.
- if (dictionary["OPENSSL"] == "auto")
- dictionary["OPENSSL"] = checkAvailability("OPENSSL") ? "yes" : "no";
- dictionary["SSL"] = dictionary["OPENSSL"];
- }
- }
- if (dictionary["OPENSSL"] == "auto")
- dictionary["OPENSSL"] = checkAvailability("OPENSSL") ? "yes" : "no";
- if (dictionary["LIBPROXY"] == "auto")
- dictionary["LIBPROXY"] = checkAvailability("LIBPROXY") ? "yes" : "no";
- if (dictionary["DBUS"] == "auto")
- dictionary["DBUS"] = checkAvailability("DBUS") ? "linked" : "runtime";
- if (dictionary["QML_DEBUG"] == "auto")
- dictionary["QML_DEBUG"] = dictionary["QML"] == "yes" ? "yes" : "no";
- if (dictionary["WMF_BACKEND"] == "auto")
- dictionary["WMF_BACKEND"] = checkAvailability("WMF_BACKEND") ? "yes" : "no";
-
- // Detection of IncrediBuild buildconsole
- if (dictionary["INCREDIBUILD_XGE"] == "auto")
- dictionary["INCREDIBUILD_XGE"] = checkAvailability("INCREDIBUILD_XGE") ? "yes" : "no";
-
- // Detection of iconv support
- if (dictionary["QT_ICONV"] == "auto")
- dictionary["QT_ICONV"] = checkAvailability("ICONV") ? "yes" : "no";
-
- // Detection of evdev support
- if (dictionary["QT_EVDEV"] == "auto")
- dictionary["QT_EVDEV"] = checkAvailability("EVDEV") ? "yes" : "no";
-
- // Detection of mtdev support
- if (dictionary["QT_MTDEV"] == "auto")
- dictionary["QT_MTDEV"] = checkAvailability("MTDEV") ? "yes" : "no";
-
- // Detection of tslib support
- if (dictionary["QT_TSLIB"] == "auto")
- dictionary["QT_TSLIB"] = checkAvailability("TSLIB") ? "yes" : "no";
-
- // Detection of inotify
- if (dictionary["QT_INOTIFY"] == "auto")
- dictionary["QT_INOTIFY"] = checkAvailability("INOTIFY") ? "yes" : "no";
-
- // Detection of cups support
- if (dictionary["QT_CUPS"] == "auto")
- dictionary["QT_CUPS"] = checkAvailability("CUPS") ? "yes" : "no";
-
- // Detection of -fstack-protector-strong support
- if (dictionary["STACK_PROTECTOR_STRONG"] == "auto")
- dictionary["STACK_PROTECTOR_STRONG"] = checkAvailability("STACK_PROTECTOR_STRONG") ? "yes" : "no";
-
- if (platform() == QNX && dictionary["SLOG2"] == "auto") {
- dictionary["SLOG2"] = checkAvailability("SLOG2") ? "yes" : "no";
- }
-
- if (platform() == QNX && dictionary["QNX_IMF"] == "auto") {
- dictionary["QNX_IMF"] = checkAvailability("QNX_IMF") ? "yes" : "no";
- }
-
- if (dictionary["PPS"] == "auto") {
- dictionary["PPS"] = checkAvailability("PPS") ? "yes" : "no";
- }
-
- if (platform() == QNX && dictionary["LGMON"] == "auto") {
- dictionary["LGMON"] = checkAvailability("LGMON") ? "yes" : "no";
- }
-
- if (dictionary["SCTP"] == "auto") {
- dictionary["SCTP"] = checkAvailability("SCTP") ? "yes" : "no";
- }
-
- if (dictionary["QT_EVENTFD"] == "auto")
- dictionary["QT_EVENTFD"] = checkAvailability("QT_EVENTFD") ? "yes" : "no";
-
- if (dictionary["FONT_CONFIG"] == "auto")
- dictionary["FONT_CONFIG"] = checkAvailability("FONT_CONFIG") ? "yes" : "no";
-
- if ((dictionary["FONT_CONFIG"] == "yes") && (dictionary["FREETYPE_FROM"] == "default"))
- dictionary["FREETYPE"] = "system";
-
- if (dictionary["DOUBLECONVERSION"] == "auto")
- dictionary["DOUBLECONVERSION"] = checkAvailability("DOUBLECONVERSION") ? "system" : "qt";
-
- if (dictionary["DIRECTWRITE"] == "auto")
- dictionary["DIRECTWRITE"] = checkAvailability("DIRECTWRITE") ? "yes" : "no";
-
- if (dictionary["DIRECTWRITE"] == "no")
- dictionary["DIRECTWRITE2"] = "no";
- else if (dictionary["DIRECTWRITE2"] == "auto")
- dictionary["DIRECTWRITE2"] = checkAvailability("DIRECTWRITE2") ? "yes" : "no";
-
- // Mark all unknown "auto" to the default value..
- for (QMap<QString,QString>::iterator i = dictionary.begin(); i != dictionary.end(); ++i) {
- if (i.value() == "auto")
- i.value() = defaultTo(i.key());
- }
-
- cout << "Done running configuration tests." << endl;
-}
-
-bool Configure::verifyConfiguration()
-{
- bool prompt = false;
- if (dictionary["C++STD"] != "auto"
- && dictionary["QMAKESPEC"].contains("msvc")) {
- cout << "WARNING: It is not possible to change the C++ standard edition with MSVC compilers. "
- "Therefore, the option -c++std " << dictionary["C++STD"] << " was ignored." << endl << endl;
- dictionary["C++STD"] = "auto";
- }
-
- if (dictionary["STATIC_RUNTIME"] == "yes" && dictionary["SHARED"] == "yes") {
- cout << "ERROR: -static-runtime requires -static" << endl << endl;
- dictionary[ "DONE" ] = "error";
- }
-
- if (dictionary["SEPARATE_DEBUG_INFO"] == "yes") {
- if (dictionary[ "SHARED" ] == "no") {
- cout << "ERROR: -separate-debug-info is incompatible with -static" << endl << endl;
- dictionary[ "DONE" ] = "error";
- } else if (dictionary[ "BUILD" ] != "debug"
- && dictionary[ "BUILDALL" ] == "no"
- && dictionary[ "FORCEDEBUGINFO" ] == "no") {
- cout << "ERROR: -separate-debug-info needs -debug, -debug-and-release, or -force-debug-info" << endl << endl;
- dictionary[ "DONE" ] = "error";
- } else if (dictionary["SEPARATE_DEBUG_INFO"] == "yes" && !checkAvailability("OBJCOPY")) {
- cout << "ERROR: -separate-debug-info was requested but this binutils does not support it." << endl;
- dictionary[ "DONE" ] = "error";
- }
- }
-
- if (dictionary["SQL_SQLITE_LIB"] == "no" && dictionary["SQL_SQLITE"] != "no") {
- cout << "WARNING: Configure could not detect the presence of a system SQLite3 lib." << endl
- << "Configure will therefore continue with the SQLite3 lib bundled with Qt." << endl;
- dictionary["SQL_SQLITE_LIB"] = "qt"; // Set to Qt's bundled lib an continue
- prompt = true;
- }
- if (dictionary["QMAKESPEC"].endsWith("-g++")
- && dictionary["SQL_OCI"] != "no") {
- cout << "WARNING: Qt does not support compiling the Oracle database driver with" << endl
- << "MinGW, due to lack of such support from Oracle. Consider disabling the" << endl
- << "Oracle driver, as the current build will most likely fail." << endl;
- prompt = true;
- }
- if (dictionary["DIRECTWRITE"] == "yes" && !checkAvailability("DIRECTWRITE")) {
- cout << "WARNING: To be able to compile the DirectWrite font engine you will" << endl
- << "need the Microsoft DirectWrite and Microsoft Direct2D development" << endl
- << "files such as headers and libraries." << endl;
- prompt = true;
- }
-
- if (dictionary["DIRECT2D"] == "yes" && !checkAvailability("DIRECT2D")) {
- cout << "WARNING: To be able to build the Direct2D platform plugin you will" << endl
- << "need the Microsoft DirectWrite and Microsoft Direct2D development" << endl
- << "files such as headers and libraries." << endl;
- prompt = true;
- }
-
- if (dictionary["ANGLE"] == "no") {
- if (dictionary["ANGLE_FROM"] == "detected") {
- QString errorMessage = dictionary["ANGLE_ERR"];
- cout << "WARNING: The DirectX SDK could not be detected:" << endl
- << " " << qPrintable(errorMessage) << endl
- << "Disabling the ANGLE backend." << endl;
- prompt = true;
- }
- if (dictionary["OPENGL_ES_2"] == "yes"
- && (platform() == WINDOWS || platform() == WINDOWS_RT)) {
- cout << endl << "WARNING: Using OpenGL ES 2.0 without ANGLE." << endl
- << "Specify -opengl desktop to use Open GL." << endl
- << "The build will most likely fail." << endl;
- prompt = true;
- }
- } else if (dictionary["ANGLE_FROM"] == "commandline") {
- QString errorMessage;
- if (!checkAngleAvailability(&errorMessage)) {
- cout << "WARNING: ANGLE specified, but the DirectX SDK could not be detected:" << endl
- << " " << qPrintable(errorMessage) << endl
- << "The build will most likely fail." << endl;
- }
- }
-
- if (dictionary["OPENGL"] == "no" || dictionary["OPENGL_ES_2"] == "no") {
- if (dictionary.value("XQMAKESPEC").startsWith("winphone") ||
- dictionary.value("XQMAKESPEC").startsWith("winrt")) {
- cout << "ERROR: Only '-opengl es2' is valid for WinRT." << endl;
- dictionary[ "DONE" ] = "error";
- }
- }
-
- if ((dictionary["FONT_CONFIG"] == "yes") && (dictionary["FREETYPE_FROM"] == "commandline")) {
- if (dictionary["FREETYPE"] == "yes") {
- cout << "WARNING: Bundled FreeType can't be used."
- " FontConfig use requires system FreeType." << endl;
- dictionary["FREETYPE"] = "system";
- dictionary["FREETYPE_FROM"] = "override";
- prompt = true;
- } else if (dictionary["FREETYPE"] == "no") {
- cout << "WARNING: FreeType can't be disabled."
- " FontConfig use requires system FreeType." << endl;
- dictionary["FREETYPE"] = "system";
- dictionary["FREETYPE_FROM"] = "override";
- prompt = true;
- }
- }
-
- if (prompt)
- promptKeyPress();
-
- return true;
}
void Configure::prepareConfigTests()
@@ -2001,650 +574,6 @@ void Configure::prepareConfigTests()
}
}
-void Configure::generateOutputVars()
-{
- // Generate variables for output
- QString build = dictionary[ "BUILD" ];
- bool buildAll = (dictionary[ "BUILDALL" ] == "yes");
- if (build == "debug") {
- if (buildAll)
- qtConfig += "debug_and_release build_all release";
- qtConfig += "debug";
- } else if (build == "release") {
- if (buildAll)
- qtConfig += "debug_and_release build_all debug";
- qtConfig += "release";
- }
- if (dictionary[ "RELEASE_TOOLS" ] == "yes")
- qtConfig += "release_tools";
-
- if (dictionary[ "PCH" ] == "yes")
- qmakeConfig += "precompile_header";
- else
- qmakeVars += "CONFIG -= precompile_header";
-
- if (dictionary[ "C++STD" ] == "c++11")
- qtConfig += "c++11";
- else if (dictionary[ "C++STD" ] == "c++14")
- qtConfig += "c++11 c++14";
- else if (dictionary[ "C++STD" ] == "c++1z")
- qtConfig += "c++11 c++14 c++1z";
-
- if (dictionary[ "USE_GOLD_LINKER" ] == "yes")
- qmakeConfig += "use_gold_linker";
-
- if (dictionary[ "ENABLE_NEW_DTAGS" ] == "yes")
- qmakeConfig += "enable_new_dtags";
-
- if (dictionary[ "SHARED" ] == "no")
- qtConfig += "static";
- else
- qtConfig += "shared";
-
- if (dictionary[ "STATIC_RUNTIME" ] == "yes")
- qtConfig += "static_runtime";
-
- if (dictionary[ "GUI" ] == "no") {
- qtConfig += "no-gui";
- dictionary [ "WIDGETS" ] = "no";
- }
-
- if (dictionary[ "WIDGETS" ] == "no")
- qtConfig += "no-widgets";
-
- // Compression --------------------------------------------------
- if (dictionary[ "SYSTEM_ZLIB" ] == "yes")
- qtConfig += "system-zlib";
-
- // PCRE ---------------------------------------------------------
- if (dictionary[ "PCRE" ] == "qt")
- qmakeConfig += "pcre";
-
- // ICU ---------------------------------------------------------
- if (dictionary[ "ICU" ] == "yes")
- qtConfig += "icu";
-
- // ANGLE --------------------------------------------------------
- if (dictionary[ "ANGLE" ] != "no") {
- qtConfig += "angle";
- }
-
- // Dynamic OpenGL loading ---------------------------------------
- if (dictionary[ "DYNAMICGL" ] != "no") {
- qtConfig += "dynamicgl";
- }
-
- // Image formates -----------------------------------------------
- if (dictionary[ "GIF" ] == "yes")
- qtConfig += "gif";
-
- if (dictionary[ "JPEG" ] == "yes")
- qtConfig += "jpeg";
- if (dictionary[ "LIBJPEG" ] == "system")
- qtConfig += "system-jpeg";
-
- if (dictionary[ "PNG" ] == "yes")
- qtConfig += "png";
- if (dictionary[ "LIBPNG" ] == "system")
- qtConfig += "system-png";
-
- // Double conversion -----------------------------------------------
- if (dictionary[ "DOUBLECONVERSION" ] != "no")
- qtConfig += "doubleconversion";
- if (dictionary[ "DOUBLECONVERSION" ] == "system")
- qtConfig += "system-doubleconversion";
-
- // Text rendering --------------------------------------------------
- if (dictionary[ "FREETYPE" ] != "no")
- qtConfig += "freetype";
- if (dictionary[ "FREETYPE" ] == "system")
- qtConfig += "system-freetype";
-
- if (dictionary[ "HARFBUZZ" ] != "no")
- qtConfig += "harfbuzz";
- if (dictionary[ "HARFBUZZ" ] == "system")
- qtConfig += "system-harfbuzz";
-
- // Styles -------------------------------------------------------
- if (dictionary[ "STYLE_WINDOWS" ] == "yes")
- qmakeStyles += "windows";
-
- if (dictionary[ "STYLE_FUSION" ] == "yes")
- qmakeStyles += "fusion";
-
- if (dictionary[ "STYLE_WINDOWSXP" ] == "yes")
- qmakeStyles += "windowsxp";
-
- if (dictionary[ "STYLE_WINDOWSVISTA" ] == "yes")
- qmakeStyles += "windowsvista";
-
- if (dictionary[ "STYLE_ANDROID" ] == "yes")
- qmakeStyles += "android";
-
- // Databases ----------------------------------------------------
- if (dictionary[ "SQL_MYSQL" ] == "yes")
- qmakeSql += "mysql";
- if (dictionary[ "SQL_ODBC" ] == "yes")
- qmakeSql += "odbc";
- if (dictionary[ "SQL_OCI" ] == "yes")
- qmakeSql += "oci";
- if (dictionary[ "SQL_PSQL" ] == "yes")
- qmakeSql += "psql";
- if (dictionary[ "SQL_TDS" ] == "yes")
- qmakeSql += "tds";
- if (dictionary[ "SQL_DB2" ] == "yes")
- qmakeSql += "db2";
- if (dictionary[ "SQL_SQLITE2" ] == "yes")
- qmakeSql += "sqlite2";
- if (dictionary[ "SQL_IBASE" ] == "yes")
- qmakeSql += "ibase";
- if (dictionary[ "SQL_SQLITE" ] == "yes")
- qmakeSql += "sqlite";
-
- if (dictionary[ "SQL_SQLITE_LIB" ] == "system")
- qmakeConfig += "system-sqlite";
-
- // Other options ------------------------------------------------
- if (dictionary[ "BUILDALL" ] == "yes") {
- qtConfig += "build_all";
- }
- if (dictionary[ "SEPARATE_DEBUG_INFO" ] == "yes")
- qtConfig += "separate_debug_info";
- if (dictionary[ "FORCEDEBUGINFO" ] == "yes")
- qmakeConfig += "force_debug_info";
- qmakeConfig += dictionary[ "BUILD" ];
-
- if (buildParts.isEmpty()) {
- buildParts = defaultBuildParts;
-
- if (dictionary["BUILDDEV"] == "yes")
- buildParts += "tests";
- }
- while (!nobuildParts.isEmpty())
- buildParts.removeAll(nobuildParts.takeFirst());
- if (!buildParts.contains("libs"))
- buildParts += "libs";
- buildParts.removeDuplicates();
- if (dictionary[ "COMPILE_EXAMPLES" ] == "yes")
- qmakeConfig += "compile_examples";
-
- if (dictionary["MSVC_MP"] == "yes")
- qmakeConfig += "msvc_mp";
-
- if (dictionary["ATOMIC64"] == "libatomic")
- qmakeConfig += "atomic64-libatomic";
-
- if (dictionary[ "ACCESSIBILITY" ] == "yes")
- qtConfig += "accessibility";
-
- if (!qmakeLibs.isEmpty())
- qmakeVars += "EXTRA_LIBDIR += " + formatPaths(qmakeLibs);
-
- if (!dictionary["QMAKE_LIBS_SQLITE"].isEmpty())
- qmakeVars += "QMAKE_LIBS_SQLITE += " + dictionary["QMAKE_LIBS_SQLITE"];
-
- if (dictionary[ "OPENGL" ] == "yes")
- qtConfig += "opengl";
-
- if (dictionary["OPENGL_ES_2"] == "yes") {
- qtConfig += "opengles2";
- qtConfig += "egl";
- }
-
- if (dictionary[ "SSL" ] == "yes")
- qtConfig += "ssl";
-
- if (dictionary[ "OPENSSL" ] == "yes")
- qtConfig += "openssl";
- else if (dictionary[ "OPENSSL" ] == "linked")
- qtConfig += "openssl-linked";
-
- if (dictionary[ "LIBPROXY" ] == "yes")
- qtConfig += "libproxy";
-
- if (dictionary[ "DBUS" ] == "runtime")
- qtConfig += "dbus";
- else if (dictionary[ "DBUS" ] == "linked")
- qtConfig += "dbus dbus-linked";
-
- if (dictionary["QML_DEBUG"] == "no")
- qtConfig += "no-qml-debug";
-
- if (dictionary["WMF_BACKEND"] == "yes")
- qtConfig += "wmf-backend";
-
- if (dictionary["DIRECTWRITE"] == "yes")
- qtConfig += "directwrite";
-
- if (dictionary["DIRECTWRITE2"] == "yes")
- qtConfig += "directwrite2";
-
- if (dictionary["DIRECT2D"] == "yes")
- qtConfig += "direct2d";
-
- if (dictionary["NIS"] == "yes")
- qtConfig += "nis";
-
- if (dictionary["QT_CUPS"] == "yes")
- qtConfig += "cups";
-
- if (dictionary["QT_ICONV"] != "no")
- qtConfig += "iconv";
- if (dictionary["QT_ICONV"] == "sun")
- qtConfig += "sun-libiconv";
- else if (dictionary["QT_ICONV"] == "gnu")
- qtConfig += "gnu-libiconv";
-
- if (dictionary["QT_EVDEV"] == "yes")
- qtConfig += "evdev";
-
- if (dictionary["QT_MTDEV"] == "yes")
- qtConfig += "mtdev";
-
- if (dictionary[ "QT_TSLIB" ] == "yes")
- qtConfig += "tslib";
-
- if (dictionary["QT_INOTIFY"] == "yes")
- qtConfig += "inotify";
-
- if (dictionary["QT_EVENTFD"] == "yes")
- qtConfig += "eventfd";
-
- if (dictionary["FONT_CONFIG"] == "yes") {
- qtConfig += "fontconfig";
- qmakeVars += "QMAKE_CFLAGS_FONTCONFIG =";
- qmakeVars += "QMAKE_LIBS_FONTCONFIG = -lfreetype -lfontconfig";
- }
-
- if (dictionary["QT_GLIB"] == "yes")
- qtConfig += "glib";
-
- if (dictionary["STACK_PROTECTOR_STRONG"] == "yes")
- qtConfig += "stack-protector-strong";
-
- if (dictionary["REDUCE_EXPORTS"] == "yes")
- qtConfig += "reduce_exports";
-
- if (!dictionary["POLL"].isEmpty())
- qtConfig += "poll_" + dictionary["POLL"];
-
- // We currently have no switch for QtConcurrent, so add it unconditionally.
- qtConfig += "concurrent";
-
- if (dictionary[ "SYSTEM_PROXIES" ] == "yes")
- qtConfig += "system-proxies";
-
- if (dictionary[ "SCTP" ] == "yes")
- qtConfig += "sctp";
-
- if (dictionary.contains("XQMAKESPEC") && (dictionary["QMAKESPEC"] != dictionary["XQMAKESPEC"])) {
- qmakeConfig += "cross_compile";
- dictionary["CROSS_COMPILE"] = "yes";
- }
-
- // Directories and settings for .qmake.cache --------------------
-
- if (dictionary.contains("XQMAKESPEC") && dictionary[ "XQMAKESPEC" ].startsWith("linux"))
- qtConfig += "rpath";
-
- if (!qmakeDefines.isEmpty())
- qmakeVars += QString("EXTRA_DEFINES += ") + qmakeDefines.join(' ');
- if (!qmakeIncludes.isEmpty())
- qmakeVars += QString("EXTRA_INCLUDEPATH += ") + formatPaths(qmakeIncludes);
- if (!opensslLibs.isEmpty())
- qmakeVars += opensslLibs;
- if (dictionary[ "OPENSSL" ] == "linked") {
- if (!opensslLibsDebug.isEmpty() || !opensslLibsRelease.isEmpty()) {
- if (opensslLibsDebug.isEmpty() || opensslLibsRelease.isEmpty()) {
- cout << "Error: either both or none of OPENSSL_LIBS_DEBUG/_RELEASE must be defined." << endl;
- exit(1);
- }
- qmakeVars += opensslLibsDebug;
- qmakeVars += opensslLibsRelease;
- } else if (opensslLibs.isEmpty()) {
- qmakeVars += QString("OPENSSL_LIBS = -lssleay32 -llibeay32");
- }
- if (!opensslPath.isEmpty()) {
- qmakeVars += QString("OPENSSL_CFLAGS += -I%1/include").arg(opensslPath);
- qmakeVars += QString("OPENSSL_LIBS += -L%1/lib").arg(opensslPath);
- }
- }
- if (dictionary[ "DBUS" ] == "linked") {
- if (!dbusPath.isEmpty()) {
- qmakeVars += QString("QMAKE_CFLAGS_DBUS = -I%1/include").arg(dbusPath);
- qmakeVars += QString("QMAKE_LIBS_DBUS = -L%1/lib").arg(dbusPath);
- if (dbusHostPath.isEmpty())
- qmakeVars += QString("QT_HOST_CFLAGS_DBUS = -I%1/include").arg(dbusPath);
- }
- if (!dbusHostPath.isEmpty())
- qmakeVars += QString("QT_HOST_CFLAGS_DBUS = -I%1/include").arg(dbusHostPath);
- }
- if (dictionary[ "SQL_MYSQL" ] != "no" && !mysqlPath.isEmpty()) {
- qmakeVars += QString("QMAKE_CFLAGS_MYSQL = -I%1/include").arg(mysqlPath);
- qmakeVars += QString("QMAKE_LIBS_MYSQL = -L%1/lib").arg(mysqlPath);
- }
- if (!psqlLibs.isEmpty())
- qmakeVars += QString("QMAKE_LIBS_PSQL=") + psqlLibs.section("=", 1);
- if (!zlibLibs.isEmpty())
- qmakeVars += zlibLibs;
-
- {
- QStringList lflagsTDS;
- if (!sybase.isEmpty())
- lflagsTDS += QString("-L") + formatPath(sybase.section("=", 1) + "/lib");
- if (!sybaseLibs.isEmpty())
- lflagsTDS += sybaseLibs.section("=", 1);
- if (!lflagsTDS.isEmpty())
- qmakeVars += QString("QMAKE_LIBS_TDS=") + lflagsTDS.join(' ');
- }
-
- if (!qmakeSql.isEmpty())
- qmakeVars += QString("sql-drivers += ") + qmakeSql.join(' ');
- if (!qmakeStyles.isEmpty())
- qmakeVars += QString("styles += ") + qmakeStyles.join(' ');
-
- if (!dictionary[ "QMAKESPEC" ].length()) {
- cout << "Configure could not detect your compiler. QMAKESPEC must either" << endl
- << "be defined as an environment variable, or specified as an" << endl
- << "argument with -platform" << endl;
-
- QStringList winPlatforms;
- QDir mkspecsDir(sourcePath + "/mkspecs");
- const QFileInfoList &specsList = mkspecsDir.entryInfoList();
- for (int i = 0; i < specsList.size(); ++i) {
- const QFileInfo &fi = specsList.at(i);
- if (fi.fileName().left(5) == "win32") {
- winPlatforms += fi.fileName();
- }
- }
- cout << "Available platforms are: " << qPrintable(winPlatforms.join(", ")) << endl;
- dictionary[ "DONE" ] = "error";
- }
-}
-
-void Configure::generateCachefile()
-{
- // Generate qmodule.pri, which is loaded only by Qt modules
- {
- FileWriter moduleStream(buildPath + "/mkspecs/qmodule.pri");
-
- moduleStream << "QT_BUILD_PARTS += " << buildParts.join(' ') << endl;
- if (!skipModules.isEmpty())
- moduleStream << "QT_SKIP_MODULES += " << skipModules.join(' ') << endl;
- moduleStream << endl;
-
- moduleStream << "host_build {" << endl;
- moduleStream << " QT_CPU_FEATURES." << dictionary["QT_HOST_ARCH"] <<
- " = " << dictionary["QT_HOST_CPU_FEATURES"] << endl;
- moduleStream << "} else {" << endl;
- moduleStream << " QT_CPU_FEATURES." << dictionary["QT_ARCH"] <<
- " = " << dictionary["QT_CPU_FEATURES"] << endl;
- moduleStream << "}" << endl;
- moduleStream << "QT_COORD_TYPE += " << dictionary["QREAL"] << endl;
-
- if (dictionary["QT_XKBCOMMON"] == "no")
- moduleStream << "DEFINES += QT_NO_XKBCOMMON" << endl;
-
- moduleStream << "CONFIG += " << qmakeConfig.join(' ');
- if (dictionary[ "SSE2" ] == "yes")
- moduleStream << " sse2";
- if (dictionary[ "SSE3" ] == "yes")
- moduleStream << " sse3";
- if (dictionary[ "SSSE3" ] == "yes")
- moduleStream << " ssse3";
- if (dictionary[ "SSE4_1" ] == "yes")
- moduleStream << " sse4_1";
- if (dictionary[ "SSE4_2" ] == "yes")
- moduleStream << " sse4_2";
- if (dictionary[ "AVX" ] == "yes")
- moduleStream << " avx";
- if (dictionary[ "AVX2" ] == "yes")
- moduleStream << " avx2";
- if (!dictionary[ "AVX512" ].isEmpty())
- moduleStream << ' ' << dictionary[ "AVX512" ];
- if (dictionary[ "NEON" ] == "yes")
- moduleStream << " neon";
- if (dictionary[ "LARGE_FILE" ] == "yes")
- moduleStream << " largefile";
- if (dictionary[ "STRIP" ] == "no")
- moduleStream << " nostrip";
- if (dictionary[ "LTCG" ] == "yes")
- moduleStream << " ltcg";
- moduleStream << endl;
-
- for (QStringList::Iterator var = qmakeVars.begin(); var != qmakeVars.end(); ++var)
- moduleStream << (*var) << endl;
-
- if (!moduleStream.flush())
- dictionary[ "DONE" ] = "error";
- }
-}
-
-void Configure::addSysroot(QString *command)
-{
- const QString &sysroot = dictionary["CFG_SYSROOT"];
- if (!sysroot.isEmpty() && dictionary["CFG_GCC_SYSROOT"] == "yes") {
- command->append(" QMAKE_LFLAGS+=--sysroot=" + sysroot);
- command->append(" QMAKE_CXXFLAGS+=--sysroot=" + sysroot);
- }
-}
-
-struct ArchData {
- bool isHost;
- const char *qmakespec;
- const char *key;
- const char *subarchKey;
- const char *type;
- ArchData() {}
- ArchData(bool h, const char *t, const char *qm, const char *k, const char *sak)
- : isHost(h), qmakespec(qm), key(k), subarchKey(sak), type(t)
- {}
-};
-
-/*
- Runs qmake on config.tests/arch/arch.pro, which will detect the target arch
- for the compiler we are using
-*/
-void Configure::detectArch()
-{
- QString oldpwd = QDir::currentPath();
-
- QString newpwd = QString("%1/config.tests/arch").arg(buildPath);
- if (!QDir().exists(newpwd) && !QDir().mkpath(newpwd)) {
- cout << "Failed to create directory " << qPrintable(QDir::toNativeSeparators(newpwd)) << endl;
- dictionary["DONE"] = "error";
- return;
- }
- if (!QDir::setCurrent(newpwd)) {
- cout << "Failed to change working directory to " << qPrintable(QDir::toNativeSeparators(newpwd)) << endl;
- dictionary["DONE"] = "error";
- return;
- }
-
- QVector<ArchData> qmakespecs;
- if (dictionary.contains("XQMAKESPEC"))
- qmakespecs << ArchData(false, "target", "XQMAKESPEC", "QT_ARCH", "QT_CPU_FEATURES");
- qmakespecs << ArchData(true, "host", "QMAKESPEC", "QT_HOST_ARCH", "QT_HOST_CPU_FEATURES");
-
- for (int i = 0; i < qmakespecs.count(); ++i) {
- const ArchData &data = qmakespecs.at(i);
- QString qmakespec = dictionary.value(data.qmakespec);
- QString key = data.key;
- QString subarchKey = data.subarchKey;
-
- // run qmake
- QString command = QString("%1 -spec %2 %3")
- .arg(QDir::toNativeSeparators(QDir(newpwd).relativeFilePath(buildPath + "/bin/qmake.exe")),
- QDir::toNativeSeparators(qmakespec),
- QDir::toNativeSeparators(sourcePath + "/config.tests/arch/arch"
- + (data.isHost ? "_host" : "") + ".pro"));
-
- if (!data.isHost) {
- if (qmakespec.startsWith("winrt") || qmakespec.startsWith("winphone"))
- command.append(" QMAKE_LFLAGS+=/ENTRY:main");
- addSysroot(&command);
- }
-
- int returnValue = 0;
- Environment::execute(command, &returnValue);
- if (returnValue != 0) {
- cout << "QMake failed!" << endl;
- dictionary["DONE"] = "error";
- return;
- }
-
- // compile
- command = dictionary[ "MAKE" ];
- if (command.contains("nmake") || command.contains("jom"))
- command += " /NOLOGO";
- command += " -s";
- Environment::execute(command);
-
- // find the executable that was generated
- QString arch_exe;
- if (qmakespec.startsWith("android")) {
- arch_exe = "libarch.so";
- } else {
- arch_exe = "arch.exe";
- }
- QFile exe(arch_exe);
- if (!exe.open(QFile::ReadOnly)) { // no Text, this is binary
- exe.setFileName("arch");
- if (!exe.open(QFile::ReadOnly)) {
- cout << "Could not find output file '" << qPrintable(arch_exe) << "' or 'arch' in " << qPrintable(newpwd) << " : " << qPrintable(exe.errorString()) << endl;
- dictionary["DONE"] = "error";
- return;
- }
- }
- QByteArray exeContents = exe.readAll();
- exe.close();
-
- static const char archMagic[] = "==Qt=magic=Qt== Architecture:";
- int magicPos = exeContents.indexOf(archMagic);
- if (magicPos == -1) {
- cout << "Internal error, could not find the architecture of the "
- << data.type << " executable" << endl;
- dictionary["DONE"] = "error";
- return;
- }
- //cout << "Found magic at offset 0x" << hex << magicPos << endl;
-
- // the conversion from QByteArray will stop at the ending NUL anyway
- QString arch = QString::fromLatin1(exeContents.constData() + magicPos
- + sizeof(archMagic) - 1);
- dictionary[key] = arch;
-
- static const char subarchMagic[] = "==Qt=magic=Qt== Sub-architecture:";
- magicPos = exeContents.indexOf(subarchMagic);
- if (magicPos == -1) {
- cout << "Internal error, could not find the sub-architecture of the "
- << data.type << " executable" << endl;
- dictionary["DONE"] = "error";
- return;
- }
-
- QString subarch = QString::fromLatin1(exeContents.constData() + magicPos
- + sizeof(subarchMagic) - 1);
- dictionary[subarchKey] = subarch;
-
- //cout << "Detected arch '" << qPrintable(arch) << "'\n";
- //cout << "Detected sub-arch '" << qPrintable(subarch) << "'\n";
-
- // clean up
- Environment::execute(command + " distclean");
- }
-
- if (!dictionary.contains("QT_HOST_ARCH"))
- dictionary["QT_HOST_ARCH"] = "unknown";
- if (!dictionary.contains("QT_ARCH")) {
- dictionary["QT_ARCH"] = dictionary["QT_HOST_ARCH"];
- dictionary["QT_CPU_FEATURES"] = dictionary["QT_HOST_CPU_FEATURES"];
- }
-
- QDir::setCurrent(oldpwd);
-}
-
-bool Configure::tryCompileProject(const QString &projectPath, const QString &extraOptions,
- bool distClean)
-{
- QString oldpwd = QDir::currentPath();
-
- QString newpwd = QString("%1/config.tests/%2").arg(buildPath, projectPath);
- if (!QDir().exists(newpwd) && !QDir().mkpath(newpwd)) {
- cout << "Failed to create directory " << qPrintable(QDir::toNativeSeparators(newpwd)) << endl;
- dictionary["DONE"] = "error";
- return false;
- }
- if (!QDir::setCurrent(newpwd)) {
- cout << "Failed to change working directory to " << qPrintable(QDir::toNativeSeparators(newpwd)) << endl;
- dictionary["DONE"] = "error";
- return false;
- }
-
- // run qmake
- QString command = QString("%1 %2 %3")
- .arg(QDir::toNativeSeparators(QDir(newpwd).relativeFilePath(buildPath + "/bin/qmake.exe")),
- QDir::toNativeSeparators(sourcePath + "/config.tests/" + projectPath),
- extraOptions);
-
- if (dictionary.contains("XQMAKESPEC")) {
- const QString qmakespec = dictionary["XQMAKESPEC"];
- if (qmakespec.startsWith("winrt") || qmakespec.startsWith("winphone"))
- command.append(" QMAKE_LFLAGS+=/ENTRY:main");
- addSysroot(&command);
- }
-
- if (verbose)
- cout << qPrintable(command) << endl;
- else
- command += " 2>&1";
-
- int code = 0;
- QString output = Environment::execute(command, &code);
- //cout << output << endl;
-
- if (code == 0) {
- // compile
- command = dictionary[ "MAKE" ];
- if (command.contains("nmake") || command.contains("jom"))
- command += " /NOLOGO";
- if (verbose)
- cout << qPrintable(command) << endl;
- else
- command += " -s 2>&1";
- output = Environment::execute(command, &code);
- //cout << output << endl;
-
- // clean up
- if (distClean)
- Environment::execute(command + " distclean 2>&1");
- }
-
- QDir::setCurrent(oldpwd);
- return code == 0;
-}
-
-bool Configure::compilerSupportsFlag(const QString &compilerAndArgs)
-{
- QFile file("conftest.cpp");
- if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
- cout << "could not open temp file for writing" << endl;
- return false;
- }
- if (!file.write("int main() { return 0; }\r\n")) {
- cout << "could not write to temp file" << endl;
- return false;
- }
- file.close();
- // compilerAndArgs contains compiler because there is no way to query it
- QString command = compilerAndArgs + " -o conftest-out.o conftest.cpp";
- int code = 0;
- QString output = Environment::execute(command, &code);
- file.remove();
- QFile::remove("conftest-out.o");
- return code == 0;
-}
-
void Configure::generateQDevicePri()
{
FileWriter deviceStream(buildPath + "/mkspecs/qdevice.pri");
@@ -2687,240 +616,6 @@ void Configure::generateQDevicePri()
dictionary[ "DONE" ] = "error";
}
-void Configure::generateQConfigPri()
-{
- // Generate qconfig.pri
- {
- FileWriter configStream(buildPath + "/mkspecs/qconfig.pri");
-
- configStream << "CONFIG+= ";
- configStream << dictionary[ "BUILD" ];
- configStream << (dictionary[ "SHARED" ] == "no" ? " static" : " shared");
-
- if (dictionary["STATIC_RUNTIME"] == "yes")
- configStream << " static_runtime";
- if (dictionary[ "RTTI" ] == "yes")
- configStream << " rtti";
- if (dictionary["INCREDIBUILD_XGE"] == "yes")
- configStream << " incredibuild_xge";
- if (dictionary["PLUGIN_MANIFESTS"] == "no")
- configStream << " no_plugin_manifest";
- if (dictionary["CROSS_COMPILE"] == "yes")
- configStream << " cross_compile";
-
- if (dictionary[ "SLOG2" ] == "yes")
- configStream << " slog2";
-
- if (dictionary[ "QNX_IMF" ] == "yes")
- configStream << " qqnx_imf";
-
- if (dictionary[ "PPS" ] == "yes")
- configStream << " qqnx_pps";
-
- if (dictionary[ "LGMON" ] == "yes")
- configStream << " lgmon";
-
- if (dictionary["ANDROID_STYLE_ASSETS"] == "yes")
- configStream << " android-style-assets";
-
- configStream << endl;
- configStream << "host_build {" << endl;
- configStream << " QT_ARCH = " << dictionary["QT_HOST_ARCH"] << endl;
- configStream << " QT_TARGET_ARCH = " << dictionary["QT_ARCH"] << endl;
- configStream << "} else {" << endl;
- configStream << " QT_ARCH = " << dictionary["QT_ARCH"] << endl;
- configStream << "}" << endl;
- configStream << "QT_CONFIG += " << qtConfig.join(' ') << endl;
-
- configStream << "#versioning " << endl
- << "QT_VERSION = " << dictionary["VERSION"] << endl
- << "QT_MAJOR_VERSION = " << dictionary["VERSION_MAJOR"] << endl
- << "QT_MINOR_VERSION = " << dictionary["VERSION_MINOR"] << endl
- << "QT_PATCH_VERSION = " << dictionary["VERSION_PATCH"] << endl;
-
- configStream << endl
- << "QT_EDITION = " << dictionary["EDITION"] << endl;
-
- if (dictionary["EDITION"] != "OpenSource" && dictionary["EDITION"] != "Preview") {
- configStream << "QT_LICHECK = " << dictionary["LICHECK"] << endl;
- configStream << "QT_RELEASE_DATE = " << dictionary["RELEASEDATE"] << endl;
- }
-
- if (!dictionary["CFG_SYSROOT"].isEmpty() && dictionary["CFG_GCC_SYSROOT"] == "yes") {
- configStream << endl
- << "# sysroot" << endl
- << "!host_build {" << endl
- << " QMAKE_CFLAGS += --sysroot=$$[QT_SYSROOT]" << endl
- << " QMAKE_CXXFLAGS += --sysroot=$$[QT_SYSROOT]" << endl
- << " QMAKE_LFLAGS += --sysroot=$$[QT_SYSROOT]" << endl
- << "}" << endl;
- }
-
- if (!dictionary["QT_LIBINFIX"].isEmpty())
- configStream << "QT_LIBINFIX = " << dictionary["QT_LIBINFIX"] << endl;
-
- if (!dictionary["QT_NAMESPACE"].isEmpty())
- configStream << "#namespaces" << endl << "QT_NAMESPACE = " << dictionary["QT_NAMESPACE"] << endl;
-
- if (dictionary[ "SHARED" ] == "no")
- configStream << "QT_DEFAULT_QPA_PLUGIN = q" << qpaPlatformName() << endl;
-
- if (!dictionary["QT_GCC_MAJOR_VERSION"].isEmpty()) {
- configStream << "QT_GCC_MAJOR_VERSION = " << dictionary["QT_GCC_MAJOR_VERSION"] << endl
- << "QT_GCC_MINOR_VERSION = " << dictionary["QT_GCC_MINOR_VERSION"] << endl
- << "QT_GCC_PATCH_VERSION = " << dictionary["QT_GCC_PATCH_VERSION"] << endl;
- }
-
- if (!configStream.flush())
- dictionary[ "DONE" ] = "error";
- }
-}
-
-QString Configure::addDefine(QString def)
-{
- QString result, defNeg, defD = def;
-
- defD.replace(QRegExp("=.*"), "");
- def.replace(QRegExp("="), " ");
-
- if (def.startsWith("QT_NO_")) {
- defNeg = defD;
- defNeg.replace("QT_NO_", "QT_");
- } else if (def.startsWith("QT_")) {
- defNeg = defD;
- defNeg.replace("QT_", "QT_NO_");
- }
-
- if (defNeg.isEmpty()) {
- result = "#ifndef $DEFD\n"
- "# define $DEF\n"
- "#endif\n\n";
- } else {
- result = "#if defined($DEFD) && defined($DEFNEG)\n"
- "# undef $DEFD\n"
- "#elif !defined($DEFD)\n"
- "# define $DEF\n"
- "#endif\n\n";
- }
- result.replace("$DEFNEG", defNeg);
- result.replace("$DEFD", defD);
- result.replace("$DEF", def);
- return result;
-}
-
-void Configure::generateConfigfiles()
-{
- {
- FileWriter tmpStream(buildPath + "/src/corelib/global/qconfig.h");
-
- tmpStream << "#define QT_VERSION_MAJOR " << dictionary["VERSION_MAJOR"] << endl
- << "#define QT_VERSION_MINOR " << dictionary["VERSION_MINOR"] << endl
- << "#define QT_VERSION_PATCH " << dictionary["VERSION_PATCH"] << endl
- << "#define QT_VERSION_STR \"" << dictionary["VERSION"] << "\"\n"
- << endl;
- tmpStream << endl;
-
- if (dictionary[ "SHARED" ] == "no") {
- tmpStream << "/* Qt was configured for a static build */" << endl
- << "#if !defined(QT_SHARED) && !defined(QT_STATIC)" << endl
- << "# define QT_STATIC" << endl
- << "#endif" << endl
- << endl;
- }
- tmpStream << "/* License information */" << endl;
- tmpStream << "#define QT_PRODUCT_LICENSEE \"" << dictionary[ "LICENSEE" ] << "\"" << endl;
- tmpStream << "#define QT_PRODUCT_LICENSE \"" << dictionary[ "EDITION" ] << "\"" << endl;
- tmpStream << endl;
- if (dictionary["BUILDDEV"] == "yes") {
- tmpStream << "/* Used for example to export symbols for the certain autotests*/" << endl;
- tmpStream << "#define QT_BUILD_INTERNAL" << endl;
- tmpStream << endl;
- }
-
- tmpStream << endl << "// Compiler sub-arch support" << endl;
- if (dictionary[ "SSE2" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_SSE2 1" << endl;
- if (dictionary[ "SSE3" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_SSE3 1" << endl;
- if (dictionary[ "SSSE3" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_SSSE3 1" << endl;
- if (dictionary[ "SSE4_1" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_SSE4_1 1" << endl;
- if (dictionary[ "SSE4_2" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_SSE4_2 1" << endl;
- if (dictionary[ "AVX" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_AVX 1" << endl;
- if (dictionary[ "AVX2" ] == "yes")
- tmpStream << "#define QT_COMPILER_SUPPORTS_AVX2 1" << endl;
- foreach (const QString &avx512feature, dictionary[ "AVX512" ].split(' ', QString::SkipEmptyParts))
- tmpStream << "#define QT_COMPILER_SUPPRTS_" << avx512feature.toUpper() << " 1" << endl;
-
- if (dictionary["QREAL"] != "double") {
- tmpStream << "#define QT_COORD_TYPE " << dictionary["QREAL"] << endl;
- tmpStream << "#define QT_COORD_TYPE_STRING " << dictionary["QREAL_STRING"] << endl;
- }
-
- tmpStream << endl << "// Compile time features" << endl;
-
- QStringList qconfigList;
- if (dictionary["PNG"] != "yes") qconfigList += "QT_NO_IMAGEFORMAT_PNG";
-
- if (dictionary["ACCESSIBILITY"] == "no") qconfigList += "QT_NO_ACCESSIBILITY";
- if (dictionary["WIDGETS"] == "no") qconfigList += "QT_NO_WIDGETS";
- if (dictionary["GUI"] == "no") qconfigList += "QT_NO_GUI";
- if (dictionary["OPENGL"] == "no") qconfigList += "QT_NO_OPENGL";
- if (dictionary["SSL"] == "no") qconfigList += "QT_NO_SSL";
- if (dictionary["OPENSSL"] == "no") qconfigList += "QT_NO_OPENSSL";
- if (dictionary["OPENSSL"] == "linked") qconfigList += "QT_LINKED_OPENSSL";
- if (dictionary["DBUS"] == "no") qconfigList += "QT_NO_DBUS";
- if (dictionary["FREETYPE"] == "no") qconfigList += "QT_NO_FREETYPE";
- if (dictionary["HARFBUZZ"] == "no") qconfigList += "QT_NO_HARFBUZZ";
-
- if (dictionary["OPENGL_ES_2"] == "yes") qconfigList += "QT_OPENGL_ES";
- if (dictionary["OPENGL_ES_2"] == "yes") qconfigList += "QT_OPENGL_ES_2";
- if (dictionary["DYNAMICGL"] == "yes") qconfigList += "QT_OPENGL_DYNAMIC";
-
- if (dictionary["POSIX_IPC"] == "yes")
- qconfigList += "QT_POSIX_IPC";
- else if ((platform() != ANDROID) && (platform() != WINDOWS) && (platform() != WINDOWS_RT))
- qconfigList << "QT_NO_SYSTEMSEMAPHORE" << "QT_NO_SHAREDMEMORY";
-
- if (dictionary["FONT_CONFIG"] == "no") qconfigList += "QT_NO_FONTCONFIG";
-
- if (dictionary["NIS"] == "yes")
- qconfigList += "QT_NIS";
- else
- qconfigList += "QT_NO_NIS";
-
- if (dictionary["SCTP"] == "no") qconfigList += "QT_NO_SCTP";
-
- if (dictionary["LARGE_FILE"] == "yes") qconfigList += "QT_LARGEFILE_SUPPORT=64";
- if (dictionary["QT_CUPS"] == "no") qconfigList += "QT_NO_CUPS";
- if (dictionary["QT_ICONV"] == "no") qconfigList += "QT_NO_ICONV";
- if (dictionary["QT_EVDEV"] == "no") qconfigList += "QT_NO_EVDEV";
- if (dictionary["QT_MTDEV"] == "no") qconfigList += "QT_NO_MTDEV";
- if (dictionary["QT_TSLIB"] == "no") qconfigList += "QT_NO_TSLIB";
- if (dictionary["QT_GLIB"] == "no") qconfigList += "QT_NO_GLIB";
- if (dictionary["QT_INOTIFY"] == "no") qconfigList += "QT_NO_INOTIFY";
- if (dictionary["QT_EVENTFD"] == "no") qconfigList += "QT_NO_EVENTFD";
- if (dictionary["ATOMIC64"] == "no") qconfigList += "QT_NO_STD_ATOMIC64";
-
- if (dictionary["REDUCE_EXPORTS"] == "yes") qconfigList += "QT_VISIBILITY_AVAILABLE";
- if (dictionary["REDUCE_RELOCATIONS"] == "yes") qconfigList += "QT_REDUCE_RELOCATIONS";
- if (dictionary["QT_GETIFADDRS"] == "no") qconfigList += "QT_NO_GETIFADDRS";
-
- qconfigList.sort();
- for (int i = 0; i < qconfigList.count(); ++i)
- tmpStream << addDefine(qconfigList.at(i));
-
- tmpStream<<"#define QT_QPA_DEFAULT_PLATFORM_NAME \"" << qpaPlatformName() << "\""<<endl;
-
- if (!tmpStream.flush())
- dictionary[ "DONE" ] = "error";
- }
-
-}
-
QString Configure::formatConfigPath(const char *var)
{
QString val = dictionary[var];
@@ -2931,227 +626,10 @@ QString Configure::formatConfigPath(const char *var)
return QDir::toNativeSeparators(val);
}
-void Configure::displayConfig()
-{
- fstream sout;
- sout.open(QString(buildPath + "/config.summary").toLocal8Bit().constData(),
- ios::in | ios::out | ios::trunc);
-
- // Give some feedback
- sout << "Environment:" << endl;
- QString env = QString::fromLocal8Bit(getenv("INCLUDE")).replace(QRegExp("[;,]"), "\n ");
- if (env.isEmpty())
- env = "Unset";
- sout << " INCLUDE=\n " << env << endl;
- env = QString::fromLocal8Bit(getenv("LIB")).replace(QRegExp("[;,]"), "\n ");
- if (env.isEmpty())
- env = "Unset";
- sout << " LIB=\n " << env << endl;
- env = QString::fromLocal8Bit(getenv("PATH")).replace(QRegExp("[;,]"), "\n ");
- if (env.isEmpty())
- env = "Unset";
- sout << " PATH=\n " << env << endl;
-
- if (dictionary[QStringLiteral("EDITION")] != QLatin1String("OpenSource")) {
- QString l1 = dictionary[ "LICENSEE" ];
- QString l2 = dictionary[ "LICENSEID" ];
- QString l3 = dictionary["EDITION"] + ' ' + "Edition";
- QString l4 = dictionary[ "EXPIRYDATE" ];
- sout << "Licensee...................." << (l1.isNull() ? "" : l1) << endl;
- sout << "License ID.................." << (l2.isNull() ? "" : l2) << endl;
- sout << "Product license............." << (l3.isNull() ? "" : l3) << endl;
- sout << "Expiry Date................." << (l4.isNull() ? "" : l4) << endl;
- sout << endl;
- }
-
- sout << "Configuration:" << endl;
- sout << " " << qmakeConfig.join("\n ") << endl;
- sout << "Qt Configuration:" << endl;
- sout << " " << qtConfig.join("\n ") << endl;
- sout << endl;
-
- if (dictionary.contains("XQMAKESPEC"))
- sout << "QMAKESPEC..................." << dictionary[ "XQMAKESPEC" ] << " (" << dictionary["QMAKESPEC_FROM"] << ")" << endl;
- else
- sout << "QMAKESPEC..................." << dictionary[ "QMAKESPEC" ] << " (" << dictionary["QMAKESPEC_FROM"] << ")" << endl;
- sout << "Architecture................" << dictionary["QT_ARCH"]
- << ", features:" << dictionary["QT_CPU_FEATURES"] << endl;
- sout << "Host Architecture..........." << dictionary["QT_HOST_ARCH"]
- << ", features:" << dictionary["QT_HOST_CPU_FEATURES"] << endl;
- sout << "Maketool...................." << dictionary[ "MAKE" ] << endl;
- if (dictionary[ "BUILDALL" ] == "yes") {
- sout << "Debug build................." << "yes (combined)" << endl;
- sout << "Default build..............." << dictionary[ "BUILD" ] << endl;
- } else {
- sout << "Debug......................." << (dictionary[ "BUILD" ] == "debug" ? "yes" : "no") << endl;
- }
- if (dictionary[ "BUILD" ] == "release" || dictionary[ "BUILDALL" ] == "yes")
- sout << "Force debug info............" << dictionary[ "FORCEDEBUGINFO" ] << endl;
- if (dictionary[ "BUILD" ] == "debug")
- sout << "Force optimized tools......." << dictionary[ "RELEASE_TOOLS" ] << endl;
- sout << "C++ language standard......." << dictionary[ "C++STD" ] << endl;
- sout << "Link Time Code Generation..." << dictionary[ "LTCG" ] << endl;
- sout << "Using PCH .................." << dictionary[ "PCH" ] << endl;
- sout << "Accessibility support......." << dictionary[ "ACCESSIBILITY" ] << endl;
- sout << "RTTI support................" << dictionary[ "RTTI" ] << endl;
- sout << "SSE support................."
- << (dictionary[ "SSE2" ] == "no" ? "<none>" : "SSE2")
- << (dictionary[ "SSE3" ] == "no" ? "" : " SSE3")
- << (dictionary[ "SSSE3" ] == "no" ? "" : " SSSE3")
- << (dictionary[ "SSE4_1" ] == "no" ? "" : " SSE4.1")
- << (dictionary[ "SSE4_2" ] == "no" ? "" : " SSE4.2")
- << endl;
- sout << "AVX support................."
- << (dictionary[ "AVX" ] == "no" ? "<none>" : "AVX")
- << (dictionary[ "AVX2" ] == "no" ? "" : " AVX2")
- << endl;
- sout << "AVX512 support.............."
- << (dictionary[ "AVX512" ].isEmpty() ? QString("<none>") : dictionary[ "AVX512" ].toUpper()) << endl;
- sout << "NEON support................" << dictionary[ "NEON" ] << endl;
- sout << "OpenGL support.............." << dictionary[ "OPENGL" ] << endl;
- sout << "NIS support................." << dictionary[ "NIS" ] << endl;
- sout << "Iconv support..............." << dictionary[ "QT_ICONV" ] << endl;
- sout << "Evdev support..............." << dictionary[ "QT_EVDEV" ] << endl;
- sout << "Mtdev support..............." << dictionary[ "QT_MTDEV" ] << endl;
- sout << "Inotify support............." << dictionary[ "QT_INOTIFY" ] << endl;
- sout << "eventfd(7) support.........." << dictionary[ "QT_EVENTFD" ] << endl;
- sout << "Glib support................" << dictionary[ "QT_GLIB" ] << endl;
- sout << "CUPS support................" << dictionary[ "QT_CUPS" ] << endl;
- sout << "SSL support................." << dictionary[ "SSL" ] << endl;
- sout << "OpenSSL support............." << dictionary[ "OPENSSL" ] << endl;
- sout << "libproxy support............" << dictionary[ "LIBPROXY" ] << endl;
- sout << "Qt D-Bus support............" << dictionary[ "DBUS" ] << endl;
- sout << "Qt Widgets module support..." << dictionary[ "WIDGETS" ] << endl;
- sout << "Qt GUI module support......." << dictionary[ "GUI" ] << endl;
- sout << "QML debugging..............." << dictionary[ "QML_DEBUG" ] << endl;
- sout << "DirectWrite support........." << dictionary[ "DIRECTWRITE" ] << endl;
- sout << "DirectWrite 2 support......." << dictionary[ "DIRECTWRITE2" ] << endl;
- sout << "Use system proxies.........." << dictionary[ "SYSTEM_PROXIES" ] << endl;
- sout << "SCTP support................" << dictionary[ "SCTP" ] << endl;
- sout << endl;
-
- sout << "QPA Backends:" << endl;
- sout << " GDI....................." << "yes" << endl;
- sout << " Direct2D................" << dictionary[ "DIRECT2D" ] << endl;
- sout << endl;
-
- sout << "Third Party Libraries:" << endl;
- sout << " ZLIB support............" << (dictionary[ "SYSTEM_ZLIB" ] == QLatin1String("yes") ? QLatin1String("system") : QLatin1String("qt")) << endl;
- sout << " GIF support............." << dictionary[ "GIF" ] << endl;
- sout << " JPEG support............" << dictionary[ "JPEG" ] << " (" << dictionary[ "LIBJPEG" ] << ")" << endl;
- sout << " PNG support............." << dictionary[ "PNG" ] << " (" << dictionary[ "LIBPNG" ] << ")" << endl;
- sout << " DoubleConversion........" << dictionary[ "DOUBLECONVERSION" ] << endl;
- sout << " FreeType support........" << dictionary[ "FREETYPE" ] << endl;
- sout << " Fontconfig support......" << dictionary[ "FONT_CONFIG" ] << endl;
- sout << " HarfBuzz support........" << dictionary[ "HARFBUZZ" ] << endl;
- sout << " PCRE support............" << dictionary[ "PCRE" ] << endl;
- sout << " ICU support............." << dictionary[ "ICU" ] << endl;
- if (platform() == QNX) {
- sout << " SLOG2 support..........." << dictionary[ "SLOG2" ] << endl;
- sout << " IMF support............." << dictionary[ "QNX_IMF" ] << endl;
- sout << " PPS support............." << dictionary[ "PPS" ] << endl;
- sout << " LGMON support..........." << dictionary[ "LGMON" ] << endl;
- }
- sout << " ANGLE..................." << dictionary[ "ANGLE" ] << endl;
- sout << " Dynamic OpenGL.........." << dictionary[ "DYNAMICGL" ] << endl;
- sout << endl;
-
- sout << "Styles:" << endl;
- sout << " Windows................." << dictionary[ "STYLE_WINDOWS" ] << endl;
- sout << " Windows XP.............." << dictionary[ "STYLE_WINDOWSXP" ] << endl;
- sout << " Windows Vista..........." << dictionary[ "STYLE_WINDOWSVISTA" ] << endl;
- sout << " Fusion.................." << dictionary[ "STYLE_FUSION" ] << endl;
- sout << endl;
-
- sout << "Sql Drivers:" << endl;
- sout << " ODBC...................." << dictionary[ "SQL_ODBC" ] << endl;
- sout << " MySQL..................." << dictionary[ "SQL_MYSQL" ] << endl;
- sout << " OCI....................." << dictionary[ "SQL_OCI" ] << endl;
- sout << " PostgreSQL.............." << dictionary[ "SQL_PSQL" ] << endl;
- sout << " TDS....................." << dictionary[ "SQL_TDS" ] << endl;
- sout << " DB2....................." << dictionary[ "SQL_DB2" ] << endl;
- sout << " SQLite.................." << dictionary[ "SQL_SQLITE" ] << " (" << dictionary[ "SQL_SQLITE_LIB" ] << ")" << endl;
- sout << " SQLite2................." << dictionary[ "SQL_SQLITE2" ] << endl;
- sout << " InterBase..............." << dictionary[ "SQL_IBASE" ] << endl;
- sout << endl;
-
- sout << "Sources are in.............." << QDir::toNativeSeparators(sourcePath) << endl;
- sout << "Build is done in............" << QDir::toNativeSeparators(buildPath) << endl;
- sout << "Install prefix.............." << QDir::toNativeSeparators(dictionary["QT_INSTALL_PREFIX"]) << endl;
- sout << "Headers installed to........" << formatConfigPath("QT_REL_INSTALL_HEADERS") << endl;
- sout << "Libraries installed to......" << formatConfigPath("QT_REL_INSTALL_LIBS") << endl;
- sout << "Arch-dep. data to..........." << formatConfigPath("QT_REL_INSTALL_ARCHDATA") << endl;
- sout << "Plugins installed to........" << formatConfigPath("QT_REL_INSTALL_PLUGINS") << endl;
- sout << "Library execs installed to.." << formatConfigPath("QT_REL_INSTALL_LIBEXECS") << endl;
- sout << "QML1 imports installed to..." << formatConfigPath("QT_REL_INSTALL_IMPORTS") << endl;
- sout << "QML2 imports installed to..." << formatConfigPath("QT_REL_INSTALL_QML") << endl;
- sout << "Binaries installed to......." << formatConfigPath("QT_REL_INSTALL_BINS") << endl;
- sout << "Arch-indep. data to........." << formatConfigPath("QT_REL_INSTALL_DATA") << endl;
- sout << "Docs installed to..........." << formatConfigPath("QT_REL_INSTALL_DOCS") << endl;
- sout << "Translations installed to..." << formatConfigPath("QT_REL_INSTALL_TRANSLATIONS") << endl;
- sout << "Examples installed to......." << formatConfigPath("QT_REL_INSTALL_EXAMPLES") << endl;
- sout << "Tests installed to.........." << formatConfigPath("QT_REL_INSTALL_TESTS") << endl;
-
- if (checkAvailability("INCREDIBUILD_XGE"))
- sout << "Using IncrediBuild XGE......" << dictionary["INCREDIBUILD_XGE"] << endl;
- if (!qmakeDefines.isEmpty()) {
- sout << "Defines.....................";
- for (QStringList::Iterator defs = qmakeDefines.begin(); defs != qmakeDefines.end(); ++defs)
- sout << (*defs) << " ";
- sout << endl;
- }
- if (!qmakeIncludes.isEmpty()) {
- sout << "Include paths...............";
- for (QStringList::Iterator incs = qmakeIncludes.begin(); incs != qmakeIncludes.end(); ++incs)
- sout << (*incs) << " ";
- sout << endl;
- }
- if (!qmakeLibs.isEmpty()) {
- sout << "Additional libraries........";
- for (QStringList::Iterator libs = qmakeLibs.begin(); libs != qmakeLibs.end(); ++libs)
- sout << (*libs) << " ";
- sout << endl;
- }
- if (dictionary[ "SHARED" ] == "no") {
- sout << "WARNING: Using static linking will disable the use of plugins." << endl;
- sout << " Make sure you compile ALL needed modules into the library." << endl;
- }
- if (dictionary[ "OPENSSL" ] == "linked") {
- if (!opensslLibsDebug.isEmpty() || !opensslLibsRelease.isEmpty()) {
- sout << "Using OpenSSL libraries:" << endl;
- sout << " debug : " << opensslLibsDebug << endl;
- sout << " release: " << opensslLibsRelease << endl;
- sout << " both : " << opensslLibs << endl;
- } else if (opensslLibs.isEmpty()) {
- sout << "NOTE: When linking against OpenSSL, you can override the default" << endl;
- sout << "library names through OPENSSL_LIBS and optionally OPENSSL_LIBS_DEBUG/OPENSSL_LIBS_RELEASE" << endl;
- sout << "For example:" << endl;
- sout << " configure -openssl-linked OPENSSL_LIBS=\"-lssleay32 -llibeay32\"" << endl;
- }
- }
- if (dictionary["RELEASE_TOOLS"] == "yes" && dictionary["BUILD"] != "debug" ) {
- sout << endl
- << "NOTE: -optimized-tools is not useful in -release mode." << endl;
- }
- if (!dictionary["PREFIX_COMPLAINTS"].isEmpty()) {
- sout << endl
- << dictionary["PREFIX_COMPLAINTS"] << endl
- << endl;
- }
-
- // display config.summary
- sout.seekg(0, ios::beg);
- while (sout.good()) {
- string str;
- getline(sout, str);
- cout << str << endl;
- }
-}
-
void Configure::generateHeaders()
{
if (dictionary["SYNCQT"] == "auto")
- dictionary["SYNCQT"] = defaultTo("SYNCQT");
+ dictionary["SYNCQT"] = QFile::exists(sourcePath + "/.git") ? "yes" : "no";
if (dictionary["SYNCQT"] == "yes") {
if (!QStandardPaths::findExecutable(QStringLiteral("perl.exe")).isEmpty()) {
@@ -3534,6 +1012,58 @@ void Configure::buildQmake()
}
+void Configure::configure()
+{
+ static const char * const files[] = { "qmodule", "qconfig" };
+
+ for (int i = 0; i < 2; i++) {
+ QFile file(buildPath + "/mkspecs/" + files[i] + ".pri");
+ QString oldfn = file.fileName() + ".old";
+ if (file.exists() && !QFileInfo::exists(oldfn))
+ QFile::rename(file.fileName(), oldfn);
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+ cout << "Failed to create file " << qPrintable(file.fileName()) << endl;
+ dictionary[ "DONE" ] = "error";
+ return;
+ }
+ file.close();
+ }
+
+ FileWriter ci(buildPath + "/config.tests/configure.cfg");
+ ci << "# Feature defaults set by configure command line\n"
+ << "config.input.qt_edition = " << dictionary["EDITION"] << "\n"
+ << "config.input.qt_licheck = " << dictionary["LICHECK"] << "\n"
+ << "config.input.qt_release_date = " << dictionary["RELEASEDATE"];
+ if (!ci.flush()) {
+ dictionary[ "DONE" ] = "error";
+ return;
+ }
+
+ QStringList args;
+ args << buildPath + "/bin/qmake"
+ << "-o" << "Makefile.cfg"
+ << sourcePath + "/configure.pri"
+ << "--" << configCmdLine;
+
+ if (int exitCode = Environment::execute(args, QStringList(), QStringList())) {
+ cout << "Qmake failed, return code " << exitCode << endl << endl;
+ dictionary[ "DONE" ] = "error";
+ }
+
+ for (int i = 0; i < 2; i++) {
+ QFile file(buildPath + "/mkspecs/" + files[i] + ".pri");
+ QFile oldFile(file.fileName() + ".old");
+ if (oldFile.open(QIODevice::ReadOnly | QIODevice::Text)
+ && file.open(QIODevice::ReadOnly | QIODevice::Text)
+ && oldFile.readAll() == file.readAll()) {
+ file.remove();
+ oldFile.rename(file.fileName());
+ } else {
+ oldFile.remove();
+ }
+ }
+}
+
void Configure::generateMakefiles()
{
QString pwd = QDir::currentPath();
@@ -3556,13 +1086,6 @@ void Configure::generateMakefiles()
QDir::setCurrent(pwd);
}
-void Configure::showSummary()
-{
- QString make = dictionary[ "MAKE" ];
- cout << endl << endl << "Qt is now configured for building. Just run " << qPrintable(make) << "." << endl;
- cout << "To reconfigure, run " << qPrintable(make) << " confclean and configure." << endl << endl;
-}
-
bool Configure::showLicense(QString orgLicenseFile)
{
if (dictionary["LICENSE_CONFIRMED"] == "yes") {
@@ -3754,23 +1277,6 @@ QString Configure::platformName() const
}
}
-QString Configure::qpaPlatformName() const
-{
- switch (platform()) {
- default:
- case WINDOWS:
- return QStringLiteral("windows");
- case WINDOWS_RT:
- return QStringLiteral("winrt");
- case QNX:
- return QStringLiteral("qnx");
- case ANDROID:
- return QStringLiteral("android");
- case OTHER:
- return QStringLiteral("xcb");
- }
-}
-
int Configure::platform() const
{
const QString xQMakeSpec = dictionary.value("XQMAKESPEC");
diff --git a/tools/configure/configureapp.h b/tools/configure/configureapp.h
index 9d3f7e39a8..6af83d44cd 100644
--- a/tools/configure/configureapp.h
+++ b/tools/configure/configureapp.h
@@ -44,76 +44,32 @@ public:
void parseCmdLine();
- QString defaultTo(const QString &option);
- bool checkAvailability(const QString &part);
void generateQConfigCpp();
void buildQmake();
- void autoDetection();
- bool verifyConfiguration();
- void generateOutputVars();
+ void prepareConfigureInput();
+ void configure();
+
void generateHeaders();
- void generateCachefile();
- void displayConfig();
void generateMakefiles();
- void generateConfigfiles();
- void detectArch();
- void generateQConfigPri();
void generateQDevicePri();
void prepareConfigTests();
- void showSummary();
bool showLicense(QString licenseFile);
void readLicense();
- QString addDefine(QString def);
-
bool isDone();
bool isOk();
int platform() const;
QString platformName() const;
- QString qpaPlatformName() const;
private:
- bool checkAngleAvailability(QString *errorMessage = 0) const;
- QString checkAvx512Availability();
-
int verbose;
// Our variable dictionaries
QMap<QString,QString> dictionary;
- QStringList allBuildParts;
- QStringList defaultBuildParts;
- QStringList buildParts;
- QStringList nobuildParts;
- QStringList skipModules;
- QStringList disabledModules;
- QStringList enabledModules;
- QStringList modules;
QStringList configCmdLine;
- QStringList qmakeConfig;
- QStringList qtConfig;
-
- QStringList qmakeSql;
-
- QStringList qmakeStyles;
-
- QStringList qmakeVars;
- QStringList qmakeDefines;
- QStringList qmakeIncludes;
- QStringList qmakeLibs;
- QString opensslLibs;
- QString opensslLibsDebug;
- QString opensslLibsRelease;
- QString opensslPath;
- QString dbusPath;
- QString dbusHostPath;
- QString mysqlPath;
- QString psqlLibs;
- QString zlibLibs;
- QString sybase;
- QString sybaseLibs;
QString outputLine;
@@ -132,19 +88,10 @@ private:
void addConfStr(int group, const QString &val);
QString formatPath(const QString &path);
- QString formatPaths(const QStringList &paths);
- QString locateFile(const QString &fileName) const;
- bool findFile(const QString &fileName) const { return !locateFile(fileName).isEmpty(); }
- static QString findFileInPaths(const QString &fileName, const QStringList &paths);
void reloadCmdLine(int idx);
void saveCmdLine();
- void addSysroot(QString *command);
- bool tryCompileProject(const QString &projectPath, const QString &extraOptions = QString(),
- bool distClean = true);
- bool compilerSupportsFlag(const QString &compilerAndArgs);
-
void applySpecSpecifics();
QString formatConfigPath(const char *var);
diff --git a/tools/configure/environment.cpp b/tools/configure/environment.cpp
index dfcc322065..78298f1068 100644
--- a/tools/configure/environment.cpp
+++ b/tools/configure/environment.cpp
@@ -118,35 +118,6 @@ QString Environment::detectQMakeSpec()
return spec;
}
-Compiler Environment::compilerFromQMakeSpec(const QString &qmakeSpec)
-{
- if (qmakeSpec == QLatin1String("win32-msvc2015"))
- return CC_MSVC2015;
- if (qmakeSpec == QLatin1String("win32-msvc2013"))
- return CC_MSVC2013;
- if (qmakeSpec == QLatin1String("win32-msvc2012"))
- return CC_MSVC2012;
- if (qmakeSpec == QLatin1String("win32-icc"))
- return CC_INTEL;
- if (qmakeSpec == QLatin1String("win32-g++"))
- return CC_MINGW;
- if (qmakeSpec == QLatin1String("win32-borland"))
- return CC_BORLAND;
- return CC_UNKNOWN;
-}
-
-QString Environment::gccVersion()
-{
- CompilerInfo *info = compilerInfo(CC_MINGW);
- int returnValue = 0;
- QString version = execute(QStringLiteral("%1 -dumpversion").arg(info->executable), &returnValue);
- if (returnValue != 0) {
- cout << "Could not get mingw version" << returnValue << qPrintable(version);
- version.resize(0);
- }
- return version;
-}
-
/*!
Returns the enum of the compiler which was detected on the system.
The compilers are detected in the order as entered into the
@@ -431,126 +402,4 @@ QString Environment::execute(const QString &command, int *returnCode)
return output;
}
-static QStringList splitPathList(const QString &path)
-{
-#if defined(Q_OS_WIN)
- QRegExp splitReg(QStringLiteral("[;,]"));
-#else
- QRegExp splitReg(QStringLiteral("[:]"));
-#endif
- QStringList result = path.split(splitReg, QString::SkipEmptyParts);
- const QStringList::iterator end = result.end();
- for (QStringList::iterator it = result.begin(); it != end; ++it) {
- // Remove any leading or trailing ", this is commonly used in the environment
- // variables
- if (it->startsWith('"'))
- it->remove(0, 1);
- if (it->endsWith('"'))
- it->chop(1);
- *it = QDir::cleanPath(*it);
- if (it->endsWith(QLatin1Char('/')))
- it->chop(1);
- }
- return result;
-}
-
-QString Environment::findFileInPaths(const QString &fileName, const QStringList &paths)
-{
- if (!paths.isEmpty()) {
- QDir d;
- const QChar separator = QDir::separator();
- foreach (const QString &path, paths)
- if (d.exists(path + separator + fileName))
- return path;
- }
- return QString();
-}
-
-QStringList Environment::path()
-{
- return splitPathList(QString::fromLocal8Bit(qgetenv("PATH")));
-}
-
-static QStringList mingwPaths(const QString &mingwPath, const QString &pathName)
-{
- QStringList ret;
- QDir mingwDir(mingwPath);
- const QFileInfoList subdirs = mingwDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
- for (int i = 0 ;i < subdirs.length(); ++i) {
- const QFileInfo &fi = subdirs.at(i);
- const QString name = fi.fileName();
- if (name == pathName)
- ret += fi.absoluteFilePath();
- else if (name.contains(QLatin1String("mingw"))) {
- ret += fi.absoluteFilePath() + QLatin1Char('/') + pathName;
- }
- }
- return ret;
-}
-
-// Return MinGW location from "c:\mingw\bin" -> "c:\mingw"
-static inline QString detectMinGW()
-{
- const QString gcc = QStandardPaths::findExecutable(QLatin1String("g++.exe"));
- return gcc.isEmpty() ?
- gcc : QFileInfo(QFileInfo(gcc).absolutePath()).absolutePath();
-}
-
-// Detect Direct X SDK up tp June 2010. Included in Windows Kit 8.
-QString Environment::detectDirectXSdk()
-{
- const QByteArray directXSdkEnv = qgetenv("DXSDK_DIR");
- if (directXSdkEnv.isEmpty())
- return QString();
- QString directXSdk = QDir::cleanPath(QString::fromLocal8Bit(directXSdkEnv));
- if (directXSdk.endsWith(QLatin1Char('/')))
- directXSdk.truncate(directXSdk.size() - 1);
- return directXSdk;
-}
-
-QStringList Environment::headerPaths(Compiler compiler)
-{
- QStringList headerPaths;
- if (compiler == CC_MINGW) {
- const QString mingwPath = detectMinGW();
- headerPaths = mingwPaths(mingwPath, QLatin1String("include"));
- // Additional compiler paths
- const QFileInfoList mingwConfigs = QDir(mingwPath + QLatin1String("/lib/gcc")).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
- for (int i = 0; i < mingwConfigs.length(); ++i) {
- const QDir mingwLibDir = mingwConfigs.at(i).absoluteFilePath();
- foreach (const QFileInfo &version, mingwLibDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot))
- headerPaths += version.absoluteFilePath() + QLatin1String("/include");
- }
- } else {
- headerPaths = splitPathList(QString::fromLocal8Bit(getenv("INCLUDE")));
- }
-
- // Add Direct X SDK for ANGLE
- const QString directXSdk = detectDirectXSdk();
- if (!directXSdk.isEmpty()) // Add Direct X SDK for ANGLE
- headerPaths += directXSdk + QLatin1String("/include");
- return headerPaths;
-}
-
-QStringList Environment::libraryPaths(Compiler compiler)
-{
- QStringList libraryPaths;
- if (compiler == CC_MINGW) {
- libraryPaths = mingwPaths(detectMinGW(), "lib");
- } else {
- libraryPaths = splitPathList(QString::fromLocal8Bit(qgetenv("LIB")));
- }
-
- // Add Direct X SDK for ANGLE
- const QString directXSdk = detectDirectXSdk();
- if (!directXSdk.isEmpty()) {
-#ifdef Q_OS_WIN64
- libraryPaths += directXSdk + QLatin1String("/lib/x64");
-#else
- libraryPaths += directXSdk + QLatin1String("/lib/x86");
-#endif
- }
- return libraryPaths;
-}
-
QT_END_NAMESPACE
diff --git a/tools/configure/environment.h b/tools/configure/environment.h
index 12646b6d88..d14961b5ac 100644
--- a/tools/configure/environment.h
+++ b/tools/configure/environment.h
@@ -50,19 +50,10 @@ class Environment
public:
static Compiler detectCompiler();
static QString detectQMakeSpec();
- static Compiler compilerFromQMakeSpec(const QString &qmakeSpec);
- static QString gccVersion();
static int execute(QStringList arguments, const QStringList &additionalEnv, const QStringList &removeEnv);
static QString execute(const QString &command, int *returnCode = 0);
- static QString findFileInPaths(const QString &fileName, const QStringList &paths);
- static QStringList path();
-
- static QString detectDirectXSdk();
- static QStringList headerPaths(Compiler compiler);
- static QStringList libraryPaths(Compiler compiler);
-
private:
static Compiler detectedCompiler;
diff --git a/tools/configure/main.cpp b/tools/configure/main.cpp
index 426cdbd294..ac521f42e4 100644
--- a/tools/configure/main.cpp
+++ b/tools/configure/main.cpp
@@ -75,29 +75,12 @@ int runConfigure( int argc, char** argv )
if (!app.isOk())
return 3;
- // Auto-detect modules and settings.
- app.autoDetection();
-
- // After reading all command-line arguments, and doing all the
- // auto-detection, it's time to do some last minute validation.
- // If the validation fails, we cannot continue.
- if (!app.verifyConfiguration())
+ // run qmake based configure
+ app.configure();
+ if (!app.isOk())
return 3;
- app.generateOutputVars();
-
- if( !app.isDone() )
- app.generateCachefile();
- if( !app.isDone() )
- app.generateConfigfiles();
- if (!app.isDone())
- app.generateQConfigPri();
- if (!app.isDone())
- app.displayConfig();
- if( !app.isDone() )
- app.generateMakefiles();
- if( !app.isDone() )
- app.showSummary();
+ app.generateMakefiles();
if( !app.isOk() )
return 2;