
# For Qt applications we want Xcode project files as the generated output,
# but since qmake doesn't handle the transition between makefiles and Xcode
# project files (which happens when using subdirs), we can't just override
# MAKEFILE_GENERATOR. Instead, we generate the Xcode project by spawing a
# child qmake process with -spec macx-xcode and let the top level qmake
# process generate a wrapper makefile that forwards everything to xcodebuild.

TEMPLATE = aux

SOURCES =
OBJECTIVE_SOURCES =
RESOURCES =
INSTALLS =
QMAKE_EXTRA_COMPILERS =

!mkpath($$OUT_PWD): \
    error("Failed to create $$OUT_PWD")

args =
prev_arg =
for(arg, QMAKE_ARGS) {
    !equals(arg, "-spec"):!equals(prev_arg, "-spec"): \
        args += $$system_quote($$arg)
    prev_arg = $$arg
}

cmd = "$$QMAKE_QMAKE $$system_quote($$_PRO_FILE_) -spec macx-xcode $$args"
debug(1, "Generating Xcode project in $$OUT_PWD using '$$cmd'")
system("$$QMAKE_CD $$system_quote($$OUT_PWD) && $$cmd")

QMAKE_EXTRA_VARIABLES += PRE_TARGETDEPS

# Subtargets

for(build, BUILDS): \
    SUBTARGETS += $$eval($${build}.target)
QMAKE_EXTRA_VARIABLES += SUBTARGETS

CONFIG += no_default_goal_deps

DEVICE_SDK = $${device.sdk}
SIMULATOR_SDK = $${simulator.sdk}
ios {
    DEVICE_FILTER = --platform iOS --minimum-deployment-target $$QMAKE_IOS_DEPLOYMENT_TARGET
    GENERIC_DEVICE_DESTINATION = "generic/platform=iOS"
}
tvos {
    DEVICE_FILTER = --platform tvOS --minimum-deployment-target $$QMAKE_TVOS_DEPLOYMENT_TARGET
    GENERIC_DEVICE_DESTINATION = "generic/platform=tvOS"
}
watchos {
    DEVICE_FILTER = --platform watchOS --minimum-deployment-target $$QMAKE_WATCHOS_DEPLOYMENT_TARGET
    GENERIC_DEVICE_DESTINATION = "generic/platform=watchOS"
}
QMAKE_EXTRA_VARIABLES += DEVICE_SDK SIMULATOR_SDK DEVICE_FILTER GENERIC_DEVICE_DESTINATION

QMAKE_EXTRA_INCLUDES += $$shell_quote($$PWD/xcodebuild.mk)

# Distclean

distfiles = $${TARGET}.xcodeproj
for(build, BUILDS): \
    distfiles += $$title($$eval($${build}.target))
distclean_xcodebuild.commands = -$(DEL_FILE) -R $$distfiles

distclean.depends += clean_all distclean_xcodebuild
QMAKE_EXTRA_TARGETS += distclean distclean_xcodebuild

# Empty exclusive builds, we've set them up manually
BUILDS =
