summaryrefslogtreecommitdiffstats
path: root/mkspecs/macx-ios-clang/features
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-06-16 17:14:53 +0200
committerTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2015-08-04 11:59:01 +0000
commite405665318a7a666a945929eb6ef7829af804557 (patch)
tree6802de8f95d3822173e8bd951441e9b0447d013c /mkspecs/macx-ios-clang/features
parent5d511039f71a110fa757132cdca079e72fe87654 (diff)
iOS: Refactor xcodebuild exclusive build logic into standalone makefile
Instead of going to qmake to generate the makefile that we want, we write the makefile directly and include it from the generated makefile. This leaves us with a single top level makefile for handling exclusive builds through xcodebuild, and covers all the various build configurations in a unified manner. It also allows for improved test device handling. Change-Id: I66851f181ac4da2c8938645e0aa95ffa0fee33c7 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Diffstat (limited to 'mkspecs/macx-ios-clang/features')
-rw-r--r--mkspecs/macx-ios-clang/features/testcase_targets.prf3
-rw-r--r--mkspecs/macx-ios-clang/features/xcodebuild.prf90
2 files changed, 26 insertions, 67 deletions
diff --git a/mkspecs/macx-ios-clang/features/testcase_targets.prf b/mkspecs/macx-ios-clang/features/testcase_targets.prf
new file mode 100644
index 0000000000..e0a2922c3f
--- /dev/null
+++ b/mkspecs/macx-ios-clang/features/testcase_targets.prf
@@ -0,0 +1,3 @@
+# For the xcodebuild wrapper makefile we deal with test targets manually
+!xcodebuild: \
+ load(testcase_targets)
diff --git a/mkspecs/macx-ios-clang/features/xcodebuild.prf b/mkspecs/macx-ios-clang/features/xcodebuild.prf
index 627e1e2930..b897432a43 100644
--- a/mkspecs/macx-ios-clang/features/xcodebuild.prf
+++ b/mkspecs/macx-ios-clang/features/xcodebuild.prf
@@ -14,80 +14,36 @@ RESOURCES =
INSTALLS =
QMAKE_EXTRA_COMPILERS =
-!build_pass {
- # Top level makefile that aggregates all exclusive builds
+!mkpath($$OUT_PWD): \
+ error("Failed to create $$OUT_PWD")
- !mkpath($$OUT_PWD): \
- error("Failed to create $$OUT_PWD")
+args =
+for(arg, QMAKE_ARGS): \
+ args += $$system_quote($$arg)
- args =
- for(arg, QMAKE_ARGS): \
- args += $$system_quote($$arg)
+cmd = "$$QMAKE_QMAKE $$args $$system_quote($$_PRO_FILE_) -spec macx-xcode"
+debug(1, "Generating Xcode project in $$OUT_PWD using '$$cmd'")
+system("cd $$system_quote($$OUT_PWD) && $$cmd")
- cmd = "$$QMAKE_QMAKE $$args $$system_quote($$_PRO_FILE_) -spec macx-xcode"
- debug(1, "Generating Xcode project in $$OUT_PWD using '$$cmd'")
- system("cd $$system_quote($$OUT_PWD) && $$cmd")
+# Subtargets
- distclean_files += $${TARGET}.xcodeproj
+for(build, BUILDS): \
+ SUBTARGETS += $$eval($${build}.target)
+QMAKE_EXTRA_VARIABLES += SUBTARGETS
- # Pretend we have a target, even though our template is aux
- CONFIG += have_target
+CONFIG += no_default_goal_deps
-} else {
- # Leaf makefile for a single exclusive build
+QMAKE_EXTRA_INCLUDES += $$shell_quote($$QMAKESPEC/xcodebuild.mk)
- iphonesimulator: \
- sdk = iphonesimulator
- else: \
- sdk = iphoneos
+# Distclean
- debug: \
- cfg = debug
- else: \
- cfg = release
+distfiles = $${TARGET}.xcodeproj
+for(build, BUILDS): \
+ distfiles += $$title($$eval($${build}.target))
+distclean_xcodebuild.commands = -$(DEL_FILE) -R $$distfiles
- for(action, $$list(build install clean test)) {
- equals(action, build) {
- action_target_suffix =
- action_target = all
- } else: equals(action, test) {
- action_target_suffix = -check
- action_target = check
- } else {
- action_target_suffix = -$$action
- action_target = $$action
- }
-
- target = $${sdk}-$${cfg}$${action_target_suffix}
-
- xcodebuild = "xcodebuild $$action -scheme $(TARGET) -sdk $$sdk -configuration $$title($$cfg)"
-
- equals(action, test):equals(sdk, iphoneos) {
- AVAILABLE_DEVICE_IDS = "$(shell system_profiler SPUSBDataType | sed -n -E -e '/(iPhone|iPad|iPod)/,/Serial/s/ *Serial Number: *(.+)/\1/p')"
- CUSTOM_DEVICE_IDS = "$(filter $(EXPORT_AVAILABLE_DEVICE_IDS), $(IOS_TEST_DEVICE_IDS))"
- TEST_DEVICE_IDS = "$(strip $(if $(EXPORT_CUSTOM_DEVICE_IDS), $(EXPORT_CUSTOM_DEVICE_IDS), $(EXPORT_AVAILABLE_DEVICE_IDS)))"
-
- QMAKE_EXTRA_VARIABLES += AVAILABLE_DEVICE_IDS CUSTOM_DEVICE_IDS TEST_DEVICE_IDS
-
- xcodebuild = "@$(if $(EXPORT_TEST_DEVICE_IDS),"\
- "echo Running tests on $(words $(EXPORT_TEST_DEVICE_IDS)) device\\(s\\): && ("\
- "$(foreach deviceid, $(EXPORT_TEST_DEVICE_IDS),"\
- "(echo Testing on device ID '$(deviceid)' ... && $${xcodebuild} -destination 'platform=iOS,id=$(deviceid)' && echo) &&"\
- ") echo Tests completed successfully on all devices"\
- "), $(error No iOS devices connected, please connect at least one device that can be used for testing.))"
- }
-
- $${target}.commands = $$xcodebuild
- QMAKE_EXTRA_TARGETS += $$target
-
- $${action_target}.depends += $$target
- QMAKE_EXTRA_TARGETS *= $${action_target}
- }
-
- # Remove build dir
- distclean_files += $$title($$cfg)-$${sdk}
-}
-
-distclean_xcodebuild.commands = -$(DEL_FILE) -R $$distclean_files
-distclean.depends += distclean_xcodebuild
+distclean.depends += clean_all distclean_xcodebuild
QMAKE_EXTRA_TARGETS += distclean distclean_xcodebuild
+
+# Empty exclusive builds, we've set them up manually
+BUILDS =