refactor build config resolution

the current approach of having "free-flying" prf files for such a core
issue is rather insane. this was noticed early on, as evidenced by the
forcible loading of debug/release/debug_and_release in default_post.
however, things remained a mess, in particular static vs. shared.

consequently, the commit merges all related feature files. the actual
config resolution is put in a separate feature file, so it can be loaded
by resolve_target if that happens to be loaded early on.

Change-Id: Ie30e7c63cabe9409a3263ca1650e323a870926f2
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
Oswald Buddenhagen 2013-02-15 18:15:18 +01:00 committed by The Qt Project
parent 18a65b6cdf
commit 9dcbfc1c44
11 changed files with 75 additions and 49 deletions

View File

@ -1,7 +0,0 @@
CONFIG -= release
QMAKE_CFLAGS += $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_DEBUG
QMAKE_LFLAGS += $$QMAKE_LFLAGS_DEBUG
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_DEBUG
!debug_and_release:fix_output_dirs:fixExclusiveOutputDirs(debug, release)

View File

@ -1 +0,0 @@
!macx-xcode:addExclusiveBuilds(debug, Debug, release, Release)

View File

@ -4,10 +4,7 @@ contains(TEMPLATE, ".*(lib|app)"):CONFIG += have_target
!have_target:!force_qt: CONFIG -= qt
!shared:!dll:!static:!staticlib {
contains(QT_CONFIG, static): CONFIG += static
else: CONFIG += shared
}
load(resolve_config)
QT_BREAKPAD_ROOT_PATH = $$(QT_BREAKPAD_ROOT_PATH)
!isEmpty(QT_BREAKPAD_ROOT_PATH): \ # quick test first whether requested ...
@ -24,9 +21,27 @@ force_debug_info {
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
}
CONFIG(debug, debug|release):load(debug)
else:load(release)
debug_and_release:load(debug_and_release)
debug {
QMAKE_CFLAGS += $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_DEBUG
QMAKE_LFLAGS += $$QMAKE_LFLAGS_DEBUG
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_DEBUG
} else {
QMAKE_CFLAGS += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_RELEASE
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_RELEASE
QMAKE_LFLAGS += $$QMAKE_LFLAGS_RELEASE
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE
}
dll:win32: QMAKE_LFLAGS += $$QMAKE_LFLAGS_DLL
static:mac: QMAKE_LFLAGS += $$QMAKE_LFLAGS_STATIC_LIB
staticlib:unix {
QMAKE_CFLAGS += $$QMAKE_CFLAGS_STATIC_LIB
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_STATIC_LIB
}
incredibuild_xge {
CONFIG -= incredibuild_xge
CONFIG = incredibuild_xge $$CONFIG

View File

@ -1,2 +0,0 @@
CONFIG += shared

View File

@ -1,7 +0,0 @@
CONFIG -= debug
QMAKE_CFLAGS += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_RELEASE
QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_RELEASE
QMAKE_LFLAGS += $$QMAKE_LFLAGS_RELEASE
QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE
!debug_and_release:fix_output_dirs:fixExclusiveOutputDirs(release, debug)

View File

@ -0,0 +1,51 @@
#
# W A R N I N G
# -------------
#
# This file is not part of the Qt API. It exists purely as an
# implementation detail. It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#
staticlib: \
CONFIG += static
else: dll: \
CONFIG += shared
!shared:!static {
contains(QT_CONFIG, static): CONFIG += static
else: CONFIG += shared
}
CONFIG(static, static|shared) {
CONFIG -= shared dll
contains(TEMPLATE, ".*lib"): CONFIG += staticlib
} else {
CONFIG -= static staticlib
contains(TEMPLATE, ".*lib"): CONFIG += dll
}
static_and_shared {
!macx-xcode: addExclusiveBuilds(static, Static, shared, Shared)
} else: fix_output_dirs {
static: \
fixExclusiveOutputDirs(static, shared)
else: \
fixExclusiveOutputDirs(shared, static)
}
CONFIG(debug, debug|release): \
CONFIG -= release
else: \
CONFIG -= debug
debug_and_release {
!macx-xcode: addExclusiveBuilds(debug, Debug, release, Release)
} else: fix_output_dirs {
debug: \
fixExclusiveOutputDirs(debug, release)
else: \
fixExclusiveOutputDirs(release, debug)
}

View File

@ -9,6 +9,8 @@
# We mean it.
#
load(resolve_config)
QMAKE_RESOLVED_TARGET = $$absolute_path($$DESTDIR, $$OUT_PWD)/
win32 {

View File

@ -1,7 +0,0 @@
CONFIG -= static
contains(TEMPLATE, ".*lib"): {
CONFIG += dll
CONFIG -= staticlib
win32:QMAKE_LFLAGS += $$QMAKE_LFLAGS_DLL
}
!static_and_shared:fix_output_dirs:fixExclusiveOutputDirs(shared, static)

View File

@ -1,14 +0,0 @@
CONFIG -= shared dll
contains(TEMPLATE, ".*lib"):{
CONFIG += staticlib
unix {
QMAKE_CFLAGS += $$QMAKE_CFLAGS_STATIC_LIB
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_STATIC_LIB
}
}
mac {
QMAKE_LFLAGS += $$QMAKE_LFLAGS_STATIC_LIB
}
!static_and_shared:fix_output_dirs:fixExclusiveOutputDirs(static, shared)

View File

@ -1,3 +0,0 @@
have_target:!macx-xcode {
addExclusiveBuilds(static, Static, shared, Shared)
}

View File

@ -1 +0,0 @@
CONFIG += static