michael@0: # michael@0: # This Source Code Form is subject to the terms of the Mozilla Public michael@0: # License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: # file, You can obtain one at http://mozilla.org/MPL/2.0/. michael@0: michael@0: ifneq (,$(filter automation/%,$(MAKECMDGOALS))) michael@0: ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION)))) michael@0: MAKEFLAGS += --output-sync=target michael@0: else michael@0: .NOTPARALLEL: michael@0: endif michael@0: endif michael@0: michael@0: include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk michael@0: michael@0: # Log file from the 'make upload' step. We need this to parse out the URLs of michael@0: # the uploaded files. michael@0: AUTOMATION_UPLOAD_OUTPUT = $(DIST)/automation-upload.txt michael@0: michael@0: # Helper variables to convert from MOZ_AUTOMATION_* variables to the michael@0: # corresponding the make target michael@0: tier_BUILD_SYMBOLS = buildsymbols michael@0: tier_L10N_CHECK = l10n-check michael@0: tier_PRETTY_L10N_CHECK = pretty-l10n-check michael@0: tier_INSTALLER = installer michael@0: tier_PRETTY_INSTALLER = pretty-installer michael@0: tier_PACKAGE = package michael@0: tier_PRETTY_PACKAGE = pretty-package michael@0: tier_PACKAGE_TESTS = package-tests michael@0: tier_PRETTY_PACKAGE_TESTS = pretty-package-tests michael@0: tier_UPDATE_PACKAGING = update-packaging michael@0: tier_PRETTY_UPDATE_PACKAGING = pretty-update-packaging michael@0: tier_UPLOAD_SYMBOLS = uploadsymbols michael@0: tier_UPLOAD = upload michael@0: michael@0: # Automation build steps. Everything in MOZ_AUTOMATION_TIERS also gets used in michael@0: # TIERS for mach display. As such, the MOZ_AUTOMATION_TIERS are roughly sorted michael@0: # here in the order that they will be executed (since mach doesn't know of the michael@0: # dependencies between them). michael@0: moz_automation_symbols = \ michael@0: PACKAGE_TESTS \ michael@0: PRETTY_PACKAGE_TESTS \ michael@0: BUILD_SYMBOLS \ michael@0: UPLOAD_SYMBOLS \ michael@0: PACKAGE \ michael@0: PRETTY_PACKAGE \ michael@0: INSTALLER \ michael@0: PRETTY_INSTALLER \ michael@0: UPDATE_PACKAGING \ michael@0: PRETTY_UPDATE_PACKAGING \ michael@0: L10N_CHECK \ michael@0: PRETTY_L10N_CHECK \ michael@0: UPLOAD \ michael@0: $(NULL) michael@0: MOZ_AUTOMATION_TIERS := $(foreach sym,$(moz_automation_symbols),$(if $(filter 1,$(MOZ_AUTOMATION_$(sym))),$(tier_$(sym)))) michael@0: michael@0: # Dependencies between automation build steps michael@0: automation/uploadsymbols: automation/buildsymbols michael@0: michael@0: automation/update-packaging: automation/package michael@0: automation/pretty-update-packaging: automation/pretty-package michael@0: automation/pretty-update-packaging: automation/pretty-installer michael@0: michael@0: automation/l10n-check: automation/package michael@0: automation/l10n-check: automation/installer michael@0: automation/pretty-l10n-check: automation/pretty-package michael@0: automation/pretty-l10n-check: automation/pretty-installer michael@0: michael@0: automation/upload: automation/installer michael@0: automation/upload: automation/package michael@0: automation/upload: automation/package-tests michael@0: automation/upload: automation/buildsymbols michael@0: automation/upload: automation/update-packaging michael@0: michael@0: # automation/{pretty-}package should depend on build (which is implicit due to michael@0: # the way client.mk invokes automation/build), but buildsymbols changes the michael@0: # binaries/libs, and that's what we package/test. michael@0: automation/pretty-package: automation/buildsymbols michael@0: michael@0: # The 'pretty' versions of targets run before the regular ones to avoid michael@0: # conflicts in writing to the same files. michael@0: automation/installer: automation/pretty-installer michael@0: automation/package: automation/pretty-package michael@0: automation/package-tests: automation/pretty-package-tests michael@0: automation/l10n-check: automation/pretty-l10n-check michael@0: automation/update-packaging: automation/pretty-update-packaging michael@0: michael@0: automation/build: $(addprefix automation/,$(MOZ_AUTOMATION_TIERS)) michael@0: $(PYTHON) $(topsrcdir)/build/gen_mach_buildprops.py --complete-mar-file $(DIST)/$(COMPLETE_MAR) $(addprefix --partial-mar-file ,$(wildcard $(DIST)/$(PARTIAL_MAR))) --upload-output $(AUTOMATION_UPLOAD_OUTPUT) michael@0: michael@0: # We need the log from make upload to grep it for urls in order to set michael@0: # properties. michael@0: AUTOMATION_EXTRA_CMDLINE-upload = 2>&1 | tee $(AUTOMATION_UPLOAD_OUTPUT) michael@0: michael@0: # Note: We have to force -j1 here, at least until bug 1036563 is fixed. michael@0: AUTOMATION_EXTRA_CMDLINE-l10n-check = -j1 michael@0: AUTOMATION_EXTRA_CMDLINE-pretty-l10n-check = -j1 michael@0: michael@0: # And force -j1 here until bug 1077670 is fixed. michael@0: AUTOMATION_EXTRA_CMDLINE-package-tests = -j1 michael@0: AUTOMATION_EXTRA_CMDLINE-pretty-package-tests = -j1 michael@0: michael@0: # The commands only run if the corresponding MOZ_AUTOMATION_* variable is michael@0: # enabled. This means, for example, if we enable MOZ_AUTOMATION_UPLOAD, then michael@0: # 'buildsymbols' will only run if MOZ_AUTOMATION_BUILD_SYMBOLS is also set. michael@0: # However, the target automation/buildsymbols will still be executed in this michael@0: # case because it is a prerequisite of automation/upload. michael@0: define automation_commands michael@0: $(call BUILDSTATUS,TIER_START $1) michael@0: @$(MAKE) $1 $(AUTOMATION_EXTRA_CMDLINE-$1) michael@0: $(call BUILDSTATUS,TIER_FINISH $1) michael@0: endef michael@0: michael@0: automation/%: michael@0: $(if $(filter $*,$(MOZ_AUTOMATION_TIERS)),$(call automation_commands,$*))