diff options
author | Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com> | 2015-06-16 17:14:53 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com> | 2015-08-04 11:59:01 +0000 |
commit | e405665318a7a666a945929eb6ef7829af804557 (patch) | |
tree | 6802de8f95d3822173e8bd951441e9b0447d013c /mkspecs/macx-ios-clang/features | |
parent | 5d511039f71a110fa757132cdca079e72fe87654 (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.prf | 3 | ||||
-rw-r--r-- | mkspecs/macx-ios-clang/features/xcodebuild.prf | 90 |
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 = |