
xcodebuild {
    # Xcode project files always support both Debug and Release configurations
    # and iOS device and simulator targets, so we make sure the wrapper-makefile
    # also does.
    CONFIG += debug_and_release simulator_and_device
}

load(resolve_config)

# Legacy exclusive build configurations for backwards compatibility
CONFIG($${device.CONFIG}, $${device.CONFIG}|$${simulator.CONFIG}): \
    CONFIG += device
else: CONFIG($${simulator.CONFIG}, $${device.CONFIG}|$${simulator.CONFIG}): \
    CONFIG += simulator

CONFIG(simulator, simulator|device): \
    CONFIG -= device $${device.CONFIG}
else: \
    CONFIG -= simulator $${simulator.CONFIG}

macx-xcode {
    # There is no way to genereate Xcode projects that are limited to either
    # simulator or device builds, so simulator_and_device is always
    # effectivly active, even if the user disabled it explicitly.
    # The Xcode generator doesn't support multiple BUILDS though (exclusive
    # builds), so we have to manually set up the simulator suffix.
    library_suffix_simulator.name = "$${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING}[sdk=$${simulator.sdk}*]"
    library_suffix_simulator.value = "_$${simulator.sdk}$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING})"
    QMAKE_MAC_XCODE_SETTINGS += library_suffix_simulator
    CONFIG *= xcode_dynamic_library_suffix
} else {
    # Switch the order to make sure that the first Makefile target is the right one
    !contains(QT_CONFIG, simulator_and_device):contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \
        addExclusiveBuildsProper(simulator_and_device, simulator device)
    else: \
        addExclusiveBuildsProper(simulator_and_device, device simulator)
}

equals(TEMPLATE, subdirs) {
    # Prevent recursion into host_builds
    for(subdir, SUBDIRS) {
        contains($${subdir}.CONFIG, host_build) {
            $${subdir}.CONFIG += no_$${simulator.target}_target no_$${device.target}_target

            # Other targets which we do want to recurse into may depend on this target,
            # for example corelib depends on moc, rcc, bootstrap, etc, and other libs
            # may depend on host-tools that are needed to build the lib, so we resolve
            # the final target name and redirect it to the base target, so that the
            # dependency chain is not broken for the other targets.

            !isEmpty($${subdir}.target) {
                target = $$eval($${subdir}.target)
            } else {
                !isEmpty($${subdir}.file): \
                    file = $$eval($${subdir}.file)
                else: !isEmpty($${subdir}.subdir): \
                    file = $$eval($${subdir}.subdir)
                else: \
                    file = $$subdir

                target = sub-$$file
            }

            target ~= s,[^a-zA-Z0-9_],-,

            $${target}-$${simulator.target}.depends = $$target
            $${target}-$${device.target}.depends = $$target
            QMAKE_EXTRA_TARGETS += $${target}-$${simulator.target} $${target}-$${device.target}
        }
    }
}
