cd46e9d959
Enabling check target to run test apps in iPhone simulator. Task-number: QTBUG-36639 Change-Id: I700d998fe9f1a6c910431789e98e4789d820f3e4 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Tony Sarajärvi <tony.sarajarvi@digia.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
215 lines
8.2 KiB
Plaintext
215 lines
8.2 KiB
Plaintext
|
|
# In case the user sets the SDK manually
|
|
contains(QMAKE_MAC_SDK, ^iphonesimulator.*) {
|
|
iphonesimulator_and_iphoneos: \
|
|
error("iOS simulator is handled automatically for iphonesimulator_and_iphoneos")
|
|
|
|
CONFIG += iphonesimulator
|
|
}
|
|
|
|
iphonesimulator_and_iphoneos:iphonesimulator: \
|
|
QMAKE_MAC_SDK ~= s,^iphoneos,iphonesimulator,
|
|
|
|
# Resolve config so we don't need to use CONFIG() later on
|
|
CONFIG(iphonesimulator, iphonesimulator|iphoneos) {
|
|
CONFIG -= iphoneos
|
|
} else {
|
|
CONFIG -= iphonesimulator
|
|
CONFIG += iphoneos
|
|
}
|
|
|
|
equals(TEMPLATE, app) {
|
|
# If the application uses Qt, it needs to be an application bundle
|
|
# to be able to deploy and run on iOS. The only exception to this
|
|
# is if you're working with a jailbroken device and can run the
|
|
# resulting binary from the console/over SSH, but that's not a
|
|
# use-case we care about, so no need to complicate the logic.
|
|
qt: CONFIG *= app_bundle
|
|
|
|
app_bundle {
|
|
macx-xcode {
|
|
# There is no way to genereate Xcode projects that are limited to either
|
|
# simulator or device builds, so iphonesimulator_and_iphoneos 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_iphonesimulator.name = "$${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING}[sdk=iphonesimulator*]"
|
|
library_suffix_iphonesimulator.value = "_iphonesimulator$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING})"
|
|
QMAKE_MAC_XCODE_SETTINGS += library_suffix_iphonesimulator
|
|
CONFIG *= xcode_dynamic_library_suffix
|
|
} else {
|
|
# 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 create a wrapper
|
|
# makefile that takes care of generating the Xcode project, and allows
|
|
# building by calling out to xcodebuild.
|
|
TEMPLATE = aux
|
|
|
|
SOURCES =
|
|
OBJECTIVE_SOURCES =
|
|
RESOURCES =
|
|
INSTALLS =
|
|
QMAKE_EXTRA_COMPILERS =
|
|
QMAKE_EXTRA_TARGETS =
|
|
|
|
!build_pass {
|
|
CONFIG += debug_and_release
|
|
load(resolve_config)
|
|
|
|
CONFIG += iphonesimulator_and_iphoneos
|
|
iphonesimulator.name = Simulator
|
|
iphoneos.name = Device
|
|
addExclusiveBuilds(iphonesimulator, iphoneos)
|
|
|
|
load(exclusive_builds_post)
|
|
|
|
xcode_distclean.commands = "$(DEL_FILE) -R $${TARGET}.xcodeproj"
|
|
xcode_distclean.depends = \
|
|
debug-iphonesimulator-distclean debug-iphoneos-distclean \
|
|
release-iphonesimulator-distclean release-iphoneos-distclean
|
|
QMAKE_EXTRA_TARGETS += xcode_distclean
|
|
distclean.depends = xcode_distclean
|
|
QMAKE_EXTRA_TARGETS += distclean
|
|
|
|
mkpath($$OUT_PWD)|error("Aborting.")
|
|
args =
|
|
for(arg, QMAKE_ARGS): \
|
|
args += $$system_quote($$arg)
|
|
system("cd $$system_quote($$OUT_PWD) && $$QMAKE_QMAKE $$args $$system_quote($$_PRO_FILE_) -spec macx-xcode")
|
|
|
|
check.commands = "$(MAKE) -f $(MAKEFILE).ReleaseSimulator xcode_build_check"
|
|
QMAKE_EXTRA_TARGETS += check
|
|
|
|
} else {
|
|
load(resolve_config)
|
|
|
|
iphonesimulator: \
|
|
sdk = iphonesimulator
|
|
else: \
|
|
sdk = iphoneos
|
|
|
|
debug: \
|
|
cfg = debug
|
|
else: \
|
|
cfg = release
|
|
|
|
for(action, $$list(build install clean)) {
|
|
equals(action, build) {
|
|
action_target_suffix =
|
|
action_target = all
|
|
} else {
|
|
action_target_suffix = -$$action
|
|
action_target = $$action
|
|
}
|
|
|
|
target = $${sdk}-$${cfg}$${action_target_suffix}
|
|
|
|
$${target}.commands = "@bash -o pipefail -c 'xcodebuild $$action -sdk $$sdk -configuration $$title($$cfg) | grep -v setenv'"
|
|
QMAKE_EXTRA_TARGETS += $$target
|
|
|
|
$${action_target}.depends += $$target
|
|
QMAKE_EXTRA_TARGETS *= $${action_target}
|
|
}
|
|
|
|
xcode_build_dir_distclean.commands = "$(DEL_FILE) -R $$title($$cfg)-$${sdk}"
|
|
xcode_build_dir_distclean.depends = clean
|
|
QMAKE_EXTRA_TARGETS += xcode_build_dir_distclean
|
|
distclean.depends = xcode_build_dir_distclean
|
|
QMAKE_EXTRA_TARGETS += distclean
|
|
|
|
xcode_build_check.commands = "$(TESTRUNNER) $$title($$cfg)-$${sdk}/$(TARGET).app $(TESTARGS)"
|
|
QMAKE_EXTRA_TARGETS += xcode_build_check
|
|
}
|
|
|
|
CONFIG =
|
|
}
|
|
}
|
|
} else: equals(TEMPLATE, lib) {
|
|
iphonesimulator.name = Simulator
|
|
iphoneos.name = Device
|
|
addExclusiveBuilds(iphonesimulator, iphoneos)
|
|
} else: equals(TEMPLATE, subdirs) {
|
|
# Prevent recursion into host_builds
|
|
for(subdir, SUBDIRS) {
|
|
contains($${subdir}.CONFIG, host_build) {
|
|
$${subdir}.CONFIG += no_iphoneos_target no_iphonesimulator_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}-iphonesimulator.depends = $$target
|
|
$${target}-iphoneos.depends = $$target
|
|
QMAKE_EXTRA_TARGETS += $${target}-iphonesimulator $${target}-iphoneos
|
|
}
|
|
}
|
|
|
|
prepareRecursiveTarget(iphonesimulator)
|
|
prepareRecursiveTarget(iphoneos)
|
|
QMAKE_EXTRA_TARGETS += iphonesimulator iphoneos
|
|
|
|
} else: equals(TEMPLATE, aux) {
|
|
# Dummy targets for the 'aux' TEMPLATE, so we can always recurse
|
|
QMAKE_EXTRA_TARGETS *= iphonesimulator iphoneos
|
|
}
|
|
|
|
macx-xcode {
|
|
ios_device_family.name = TARGETED_DEVICE_FAMILY
|
|
ios_device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY
|
|
QMAKE_MAC_XCODE_SETTINGS += ios_device_family
|
|
|
|
# Set up default 4-inch iPhone/iPod launch image so that our apps
|
|
# support the full screen resolution of those devices.
|
|
launch_image = Default-568h@2x.png
|
|
copy_image.input = $$QMAKESPEC/$$launch_image
|
|
copy_image.output = $$OUT_PWD/$${TARGET}.xcodeproj/$$launch_image
|
|
copy_image.CONFIG = verbatim
|
|
QMAKE_SUBSTITUTES += copy_image
|
|
launch_images.files = $$copy_image.output
|
|
QMAKE_BUNDLE_DATA += launch_images
|
|
}
|
|
|
|
macx-xcode {
|
|
arch_iphoneos.name = "ARCHS[sdk=iphoneos*]"
|
|
arch_iphoneos.value = $$QMAKE_IOS_DEVICE_ARCHS
|
|
arch_iphonesimulator.name = "ARCHS[sdk=iphonesimulator*]"
|
|
arch_iphonesimulator.value = $$QMAKE_IOS_SIMULATOR_ARCHS
|
|
|
|
QMAKE_MAC_XCODE_SETTINGS += arch_iphoneos arch_iphonesimulator
|
|
unset(QMAKE_XCODE_ARCHS)
|
|
} else {
|
|
# Be more specific about which architecture we're targeting
|
|
equals(QT_ARCH, arm): \
|
|
actual_archs = $$QMAKE_IOS_DEVICE_ARCHS
|
|
else: \
|
|
actual_archs = $$QMAKE_IOS_SIMULATOR_ARCHS
|
|
|
|
for(arch, actual_archs): \
|
|
arch_flags += -arch $$arch
|
|
|
|
QMAKE_CFLAGS += $$arch_flags
|
|
QMAKE_CXXFLAGS += $$arch_flags
|
|
QMAKE_OBJECTIVE_CFLAGS += $$arch_flags
|
|
QMAKE_LFLAGS += $$arch_flags
|
|
}
|
|
unset(actual_archs)
|
|
|
|
load(default_post)
|