From 4d289edb14aeb4976218cc306bfc514e37521b82 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 22 Jul 2019 10:45:26 +0200 Subject: Disable debug-and-release builds for MinGW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The requirement to separate debug and release DLLs on Windows stems from the Visual Studio C run-time library appearing in two different variants (debug and release) and not mixing well. It's possible to perform builds without optimzations and with debug symbols while linking against the release version of the C run-time, but at the same time the debug version of the run-time brings other developer visible advantages. MinGW on the other hand does not have this distinction, does not ship with separate DLLS and does also not require the VS C runtime library. Therefore we do not need this separation for MinGW, which means that our packages can be reduced in size and application developers wishing to debug their applications do not have to use debug builds of the Qt libraries or run into Qt internal debug code. Task-number: QTBUG-78445 Change-Id: Idf588606091298dc44262c4c89e689df18d34747 Reviewed-by: Cristian Adam Reviewed-by: Jörg Bornemann --- configure.json | 2 +- mkspecs/common/g++-win32.conf | 2 +- mkspecs/features/qt_functions.prf | 2 +- src/angle/src/config.pri | 1 + .../corelib/io/qresourceengine/qresourceengine_test.pro | 2 +- tests/auto/corelib/plugin/qlibrary/lib/lib.pro | 2 +- tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro | 14 ++++++++++---- tests/auto/corelib/plugin/qlibrary/tst/tst.pro | 2 +- tests/auto/corelib/plugin/qpluginloader/tst/tst.pro | 2 +- tests/auto/network/socket/qudpsocket/test/test.pro | 2 +- 10 files changed, 19 insertions(+), 12 deletions(-) diff --git a/configure.json b/configure.json index 13cca852f6..5ee27fec62 100644 --- a/configure.json +++ b/configure.json @@ -766,7 +766,7 @@ "debug_and_release": { "label": "Compile libs in debug and release mode", "autoDetect": "input.debug == ''", - "condition": "config.darwin || config.win32", + "condition": "config.darwin || (config.win32 && !config.gcc)", "output": [ "publicFeature", "publicQtConfig", "debugAndRelease" ] }, "force_debug_info": { diff --git a/mkspecs/common/g++-win32.conf b/mkspecs/common/g++-win32.conf index c3a1f3a373..6369436863 100644 --- a/mkspecs/common/g++-win32.conf +++ b/mkspecs/common/g++-win32.conf @@ -17,7 +17,7 @@ include(g++-base.conf) MAKEFILE_GENERATOR = MINGW QMAKE_PLATFORM = win32 mingw -CONFIG += debug_and_release debug_and_release_target precompile_header +CONFIG += precompile_header DEFINES += UNICODE _UNICODE WIN32 MINGW_HAS_SECURE_API=1 QMAKE_COMPILER_DEFINES += __GNUC__ _WIN32 # can't add 'DEFINES += WIN64' and 'QMAKE_COMPILER_DEFINES += _WIN64' defines for diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index ede494eec1..2c68e91cd7 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -5,7 +5,7 @@ defineReplace(qtPlatformTargetSuffix) { else: CONFIG(debug, debug|release) { !debug_and_release|build_pass { mac: return($${suffix}_debug) - win32: return($${suffix}d) + win32:!gcc: return($${suffix}d) } } return($$suffix) diff --git a/src/angle/src/config.pri b/src/angle/src/config.pri index cafae0e742..af53d4c621 100644 --- a/src/angle/src/config.pri +++ b/src/angle/src/config.pri @@ -53,6 +53,7 @@ CONFIG(debug, debug|release) { } !isEmpty(BUILD_PASS): BUILDSUBDIR = $$lower($$BUILD_PASS)/ +else: BUILDSUBDIR = $$PWD/ # c++11 is needed by MinGW to get support for unordered_map. CONFIG += stl exceptions c++11 c++14 diff --git a/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro b/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro index 3838a72c21..f523116cc9 100644 --- a/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro +++ b/tests/auto/corelib/io/qresourceengine/qresourceengine_test.pro @@ -22,7 +22,7 @@ android:!android-embedded { RESOURCES += android_testdata.qrc } -win32 { +win32:debug_and_release { CONFIG(debug, debug|release): LIBS += -Lstaticplugin/debug else: LIBS += -Lstaticplugin/release } else { diff --git a/tests/auto/corelib/plugin/qlibrary/lib/lib.pro b/tests/auto/corelib/plugin/qlibrary/lib/lib.pro index c44cd46597..2c3305e872 100644 --- a/tests/auto/corelib/plugin/qlibrary/lib/lib.pro +++ b/tests/auto/corelib/plugin/qlibrary/lib/lib.pro @@ -12,7 +12,7 @@ msvc: DEFINES += WIN32_MSVC target.path = $$[QT_INSTALL_TESTS]/tst_qlibrary INSTALLS += target -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { DESTDIR = ../debug/ } else { diff --git a/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro b/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro index bfda0e0194..3db4bed973 100644 --- a/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro +++ b/tests/auto/corelib/plugin/qlibrary/lib2/lib2.pro @@ -13,12 +13,18 @@ msvc: DEFINES += WIN32_MSVC # We want to test if we can load a shared library with *any* filename... win32 { - CONFIG(debug, debug|release) { - BUILD_FOLDER = debug + + debug_and_release { + CONFIG(debug, debug|release)) { + BUILD_FOLDER = debug + } else { + BUILD_FOLDER = release + } + DESTDIR = ../$$BUILD_FOLDER/ } else { - BUILD_FOLDER = release + BUILD_FOLDER = + DESTDIR = ../ } - DESTDIR = ../$$BUILD_FOLDER/ # vcproj and Makefile generators refer to target differently contains(TEMPLATE,vc.*) { diff --git a/tests/auto/corelib/plugin/qlibrary/tst/tst.pro b/tests/auto/corelib/plugin/qlibrary/tst/tst.pro index 56bef14405..5894bee9d5 100644 --- a/tests/auto/corelib/plugin/qlibrary/tst/tst.pro +++ b/tests/auto/corelib/plugin/qlibrary/tst/tst.pro @@ -3,7 +3,7 @@ TARGET = ../tst_qlibrary QT = core testlib SOURCES = ../tst_qlibrary.cpp -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { TARGET = ../../debug/tst_qlibrary } else { diff --git a/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro b/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro index a3885f4134..d49bff14fd 100644 --- a/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro +++ b/tests/auto/corelib/plugin/qpluginloader/tst/tst.pro @@ -5,7 +5,7 @@ qtConfig(private_tests): QT += core-private SOURCES = ../tst_qpluginloader.cpp ../fakeplugin.cpp HEADERS = ../theplugin/plugininterface.h -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { TARGET = ../../debug/tst_qpluginloader LIBS += -L../staticplugin/debug diff --git a/tests/auto/network/socket/qudpsocket/test/test.pro b/tests/auto/network/socket/qudpsocket/test/test.pro index 969e4d72cf..994b360370 100644 --- a/tests/auto/network/socket/qudpsocket/test/test.pro +++ b/tests/auto/network/socket/qudpsocket/test/test.pro @@ -6,7 +6,7 @@ QT = core network testlib MOC_DIR=tmp -win32 { +win32:debug_and_release { CONFIG(debug, debug|release) { DESTDIR = ../debug } else { -- cgit v1.2.3