#
#  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

CONFIG(static, static|shared) {
    CONFIG -= shared dll
    contains(TEMPLATE, ".*lib"): CONFIG += staticlib
} else {
    CONFIG -= static staticlib
    contains(TEMPLATE, ".*lib"): CONFIG += dll
}

!macx-xcode: \
    addExclusiveBuilds(shared, static)

CONFIG(debug, debug|release) {
    CONFIG -= release
    !force_debug_plist:debug_and_release: \
        CONFIG += no_plist
} else {
    CONFIG -= debug
}

!macx-xcode {
    addExclusiveBuilds(debug, release)
} else {
    # The Xcode generator always generates project files with
    # debug and release configurations, regardless of whether
    # or not debug_and_release is active.
    for(build, $$list(debug release)) {
        suffix =
        qtConfig(debug_and_release) {
            equals(build, debug): \
                suffix = _debug
        } else {
            contains(QT_CONFIG, debug): \
                suffix = _debug
        }

        library_suffix_$${build}.name = $$QMAKE_XCODE_LIBRARY_SUFFIX_SETTING
        library_suffix_$${build}.value = $$suffix
        library_suffix_$${build}.build = $$build
        QMAKE_MAC_XCODE_SETTINGS += library_suffix_$${build}

        CONFIG *= xcode_dynamic_library_suffix
    }
}
