91479d6a30
When using Xcode7 (beta 6) "xcrun simctl list devices" will also list iWatch devices. So we need to filter them out so we don't end up picking one when building and running auto tests. This will fix a build failure when building Qt with latest Xcode7. Change-Id: Ie40489d670298ec75332a6c2b54565d55e9dbbba Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
97 lines
3.0 KiB
Makefile
97 lines
3.0 KiB
Makefile
|
|
# We don't want xcodebuild to run in parallel
|
|
.NOTPARALLEL:
|
|
|
|
# Functions
|
|
targets = $(foreach target, $(EXPORT_SUBTARGETS), $(target)-$(strip $(1)))
|
|
toupper = $(shell echo $1 | tr '[:lower:]' '[:upper:]')
|
|
tolower = $(shell echo $1 | tr '[:upper:]' '[:lower:]')
|
|
basesdk = $(shell echo $1 | sed 's/[0-9.]*$$//')
|
|
|
|
# Explicit comma variable
|
|
, := ,
|
|
|
|
# Default targets
|
|
first: build
|
|
all: build_all
|
|
|
|
.DEFAULT_GOAL = first
|
|
|
|
# Top level targets
|
|
build: build_first
|
|
clean: clean_first
|
|
install: install_first
|
|
check: check_first
|
|
distclean: clean_all
|
|
|
|
$(EXPORT_SUBTARGETS): % : %-build
|
|
|
|
# Generic targets
|
|
%_first: $(firstword $(call targets, %)) ;
|
|
%_all: $(call targets, %) ;
|
|
|
|
# Actions
|
|
%-build: ACTION = build
|
|
%-build: xcodebuild-% ;
|
|
|
|
%-clean: ACTION = clean
|
|
%-clean: xcodebuild-% ;
|
|
|
|
%-install: ACTION = install
|
|
%-install: xcodebuild-% ;
|
|
|
|
# Limit check to a single configuration
|
|
%-iphoneos-check: check-iphoneos ;
|
|
%-iphonesimulator-check: check-iphonesimulator ;
|
|
|
|
# SDK
|
|
%-iphoneos: SDK = iphoneos
|
|
%-iphonesimulator: SDK = iphonesimulator
|
|
|
|
# Configuration
|
|
release-%: CONFIGURATION = Release
|
|
debug-%: CONFIGURATION = Debug
|
|
|
|
# Test and build (device) destinations
|
|
ifneq ($(filter check%,$(MAKECMDGOALS)),)
|
|
ifeq ($(DEVICES),)
|
|
$(info Enumerating test destinations (you may override this by setting DEVICES explicitly), please wait...)
|
|
SPECDIR := $(dir $(lastword $(MAKEFILE_LIST)))
|
|
DESTINATIONS_INCLUDE = /tmp/ios_destinations.mk
|
|
$(shell $(SPECDIR)/ios_destinations.sh $(TARGET) > $(DESTINATIONS_INCLUDE))
|
|
include $(DESTINATIONS_INCLUDE)
|
|
endif
|
|
endif
|
|
|
|
%-iphonesimulator: DEVICES = $(firstword $(IPHONESIMULATOR_DEVICES))
|
|
%-iphoneos: DEVICES = $(IPHONEOS_DEVICES)
|
|
|
|
IPHONEOS_GENERIC_DESTINATION := "generic/platform=iOS"
|
|
IPHONESIMULATOR_GENERIC_DESTINATION := "id=$(shell xcrun simctl list devices | grep -E 'iPhone|iPad' | grep -v unavailable | perl -lne 'print $$1 if /\((.*?)\)/' | tail -n 1)"
|
|
|
|
DESTINATION = $(if $(DESTINATION_ID),"id=$(DESTINATION_ID)",$(value $(call toupper,$(call basesdk,$(SDK)))_GENERIC_DESTINATION))
|
|
|
|
# Xcodebuild
|
|
|
|
DESTINATION_MESSAGE = "Running $(call tolower,$(CONFIGURATION)) $(ACTION) \
|
|
on '$(DESTINATION_NAME)' ($(DESTINATION_ID))$(if $(DESTINATION_OS),$(,) $(DESTINATION_PLATFORM) $(DESTINATION_OS),)"
|
|
|
|
xcodebuild-%:
|
|
@$(if $(DESTINATION_NAME), echo $(DESTINATION_MESSAGE),)
|
|
xcodebuild $(ACTION) -scheme $(TARGET) $(if $(SDK), -sdk $(SDK),) $(if $(CONFIGURATION), -configuration $(CONFIGURATION),) $(if $(DESTINATION), -destination $(DESTINATION) -destination-timeout 1,)
|
|
|
|
xcodebuild-check-device_%: DESTINATION_ID=$(lastword $(subst _, ,$@))
|
|
|
|
# Special check target (requires SECONDEXPANSION due to devices)
|
|
.SECONDEXPANSION:
|
|
check-%: ACTION = test
|
|
check-%: $$(foreach device, $$(DEVICES), xcodebuild-check-device_$$(device)) ;
|
|
@echo $(if $^, Ran $(call tolower,$(CONFIGURATION)) tests on $(words $^) $(SDK) destination\(s\): $(DEVICES), No compatible test devices found for \'$(SDK)\' SDK && false)
|
|
|
|
# Determined by device
|
|
check-%: SDK =
|
|
|
|
# Default to debug for testing
|
|
check-%: CONFIGURATION = Debug
|
|
|