diff options
Diffstat (limited to 'toolkit/mozapps/installer/packager.mk')
-rw-r--r-- | toolkit/mozapps/installer/packager.mk | 250 |
1 files changed, 250 insertions, 0 deletions
diff --git a/toolkit/mozapps/installer/packager.mk b/toolkit/mozapps/installer/packager.mk new file mode 100644 index 000000000..80e87a1ec --- /dev/null +++ b/toolkit/mozapps/installer/packager.mk @@ -0,0 +1,250 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +include $(MOZILLA_DIR)/toolkit/mozapps/installer/package-name.mk +include $(MOZILLA_DIR)/toolkit/mozapps/installer/upload-files.mk +include $(MOZILLA_DIR)/toolkit/mozapps/installer/make-eme.mk + +# This is how we create the binary packages we release to the public. + +# browser/locales/Makefile uses this makefile for its variable defs, but +# doesn't want the libs:: rule. +ifndef PACKAGER_NO_LIBS +libs:: make-package +endif + +installer-stage: prepare-package +ifndef MOZ_PKG_MANIFEST + $(error MOZ_PKG_MANIFEST unspecified!) +endif + @rm -rf $(DEPTH)/installer-stage $(DIST)/xpt + @echo 'Staging installer files...' + @$(NSINSTALL) -D $(DEPTH)/installer-stage/core + @cp -av $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)$(_BINPATH)/. $(DEPTH)/installer-stage/core +ifdef MOZ_SIGN_PREPARED_PACKAGE_CMD +# The && true is necessary to make sure Pymake spins a shell + $(MOZ_SIGN_PREPARED_PACKAGE_CMD) $(DEPTH)/installer-stage && true +endif + $(call MAKE_SIGN_EME_VOUCHER,$(DEPTH)/installer-stage/core) + @(cd $(DEPTH)/installer-stage/core && $(CREATE_PRECOMPLETE_CMD)) + +ifeq (gonk,$(MOZ_WIDGET_TOOLKIT)) +ELF_HACK_FLAGS = --fill +endif +export USE_ELF_HACK ELF_HACK_FLAGS + +# Override the value of OMNIJAR_NAME from config.status with the value +# set earlier in this file. + +stage-package: $(MOZ_PKG_MANIFEST) $(MOZ_PKG_MANIFEST_DEPS) + OMNIJAR_NAME=$(OMNIJAR_NAME) \ + NO_PKG_FILES="$(NO_PKG_FILES)" \ + $(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/packager.py $(DEFINES) $(ACDEFINES) \ + --format $(MOZ_PACKAGER_FORMAT) \ + $(addprefix --removals ,$(MOZ_PKG_REMOVALS)) \ + $(if $(filter-out 0,$(MOZ_PKG_FATAL_WARNINGS)),,--ignore-errors) \ + $(if $(MOZ_PACKAGER_MINIFY),--minify) \ + $(if $(MOZ_PACKAGER_MINIFY_JS),--minify-js \ + $(addprefix --js-binary ,$(JS_BINARY)) \ + ) \ + $(if $(JARLOG_DIR),$(addprefix --jarlog ,$(wildcard $(JARLOG_FILE_AB_CD)))) \ + $(if $(OPTIMIZEJARS),--optimizejars) \ + $(if $(DISABLE_JAR_COMPRESSION),--disable-compression) \ + $(addprefix --unify ,$(UNIFY_DIST)) \ + $(MOZ_PKG_MANIFEST) $(DIST) $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)$(if $(MOZ_PKG_MANIFEST),,$(_BINPATH)) \ + $(if $(filter omni,$(MOZ_PACKAGER_FORMAT)),$(if $(NON_OMNIJAR_FILES),--non-resource $(NON_OMNIJAR_FILES))) + $(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/find-dupes.py $(DEFINES) $(ACDEFINES) $(MOZ_PKG_DUPEFLAGS) $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR) +ifndef MOZ_THUNDERBIRD + # Package mozharness + $(call py_action,test_archive, \ + mozharness \ + $(ABS_DIST)/$(PKG_PATH)$(MOZHARNESS_PACKAGE)) +endif # MOZ_THUNDERBIRD +ifdef MOZ_PACKAGE_JSSHELL + # Package JavaScript Shell + @echo 'Packaging JavaScript Shell...' + $(RM) $(PKG_JSSHELL) + $(MAKE_JSSHELL) +endif # MOZ_PACKAGE_JSSHELL +ifdef MOZ_ARTIFACT_BUILD_SYMBOLS + @echo 'Packaging existing crashreporter symbols from artifact build...' + $(NSINSTALL) -D $(DIST)/$(PKG_PATH) + cd $(DIST)/crashreporter-symbols && \ + zip -r5D '../$(PKG_PATH)$(SYMBOL_ARCHIVE_BASENAME).zip' . -i '*.sym' -i '*.txt' +endif # MOZ_ARTIFACT_BUILD_SYMBOLS +ifdef MOZ_CODE_COVERAGE + # Package code coverage gcno tree + @echo 'Packaging code coverage data...' + $(RM) $(CODE_COVERAGE_ARCHIVE_BASENAME).zip + $(PYTHON) -mmozbuild.codecoverage.packager \ + --output-file='$(DIST)/$(PKG_PATH)$(CODE_COVERAGE_ARCHIVE_BASENAME).zip' +endif +ifeq (Darwin, $(OS_ARCH)) +ifdef MOZ_ASAN + @echo "Rewriting ASan runtime dylib paths for all binaries in $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)$(_BINPATH) ..." + $(PYTHON) $(MOZILLA_DIR)/build/unix/rewrite_asan_dylib.py $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)$(_BINPATH) +endif # MOZ_ASAN +endif # Darwin + +prepare-package: stage-package + +make-package-internal: prepare-package make-sourcestamp-file make-buildinfo-file make-mozinfo-file + @echo 'Compressing...' + cd $(DIST) && $(MAKE_PACKAGE) + +make-package: FORCE + $(MAKE) make-package-internal + $(TOUCH) $@ + +GARBAGE += make-package + +make-sourcestamp-file:: + $(NSINSTALL) -D $(DIST)/$(PKG_PATH) + @echo '$(BUILDID)' > $(MOZ_SOURCESTAMP_FILE) +ifdef MOZ_INCLUDE_SOURCE_INFO + @awk '$$2 == "MOZ_SOURCE_URL" {print $$3}' $(DEPTH)/source-repo.h >> $(MOZ_SOURCESTAMP_FILE) +endif + +.PHONY: make-buildinfo-file +make-buildinfo-file: + $(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/informulate.py \ + $(MOZ_BUILDINFO_FILE) \ + BUILDID=$(BUILDID) \ + $(addprefix MOZ_SOURCE_REPO=,MOZ_SOURCE_REPO=$(shell awk '$$2 == "MOZ_SOURCE_REPO" {print $$3}' $(DEPTH)/source-repo.h)) \ + MOZ_SOURCE_STAMP=$(shell awk '$$2 == "MOZ_SOURCE_STAMP" {print $$3}' $(DEPTH)/source-repo.h) \ + MOZ_PKG_PLATFORM=$(MOZ_PKG_PLATFORM) + echo "buildID=$(BUILDID)" > $(MOZ_BUILDID_INFO_TXT_FILE) + +.PHONY: make-mozinfo-file +make-mozinfo-file: + cp $(DEPTH)/mozinfo.json $(MOZ_MOZINFO_FILE) + +# The install target will install the application to prefix/lib/appname-version +# In addition if INSTALL_SDK is set, it will install the development headers, +# libraries, and IDL files as follows: +# dist/include -> prefix/include/appname-version +# dist/idl -> prefix/share/idl/appname-version +# dist/sdk/lib -> prefix/lib/appname-devel-version/lib +# prefix/lib/appname-devel-version/* symlinks to the above directories +install:: prepare-package +ifeq ($(OS_ARCH),WINNT) + $(error "make install" is not supported on this platform. Use "make package" instead.) +endif +ifeq (bundle,$(MOZ_FS_LAYOUT)) + $(error "make install" is not supported on this platform. Use "make package" instead.) +endif + $(NSINSTALL) -D $(DESTDIR)$(installdir) + (cd $(DIST)/$(MOZ_PKG_DIR) && $(TAR) --exclude=precomplete $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DESTDIR)$(installdir) && tar -xf -) + $(NSINSTALL) -D $(DESTDIR)$(bindir) + $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME) + ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir) +ifdef INSTALL_SDK # Here comes the hard part + $(NSINSTALL) -D $(DESTDIR)$(includedir) + (cd $(DIST)/include && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DESTDIR)$(includedir) && tar -xf -) + $(NSINSTALL) -D $(DESTDIR)$(idldir) + (cd $(DIST)/idl && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DESTDIR)$(idldir) && tar -xf -) +# SDK directory is the libs + a bunch of symlinks + $(NSINSTALL) -D $(DESTDIR)$(sdkdir)/sdk/lib + $(NSINSTALL) -D $(DESTDIR)$(sdkdir)/sdk/bin + if test -f $(DIST)/include/xpcom-config.h; then \ + $(SYSINSTALL) $(IFLAGS1) $(DIST)/include/xpcom-config.h $(DESTDIR)$(sdkdir); \ + fi + find $(DIST)/sdk -name '*.pyc' | xargs rm -f + (cd $(DIST)/sdk/lib && $(TAR) $(TAR_CREATE_FLAGS) - .) | (cd $(DESTDIR)$(sdkdir)/sdk/lib && tar -xf -) + (cd $(DIST)/sdk/bin && $(TAR) $(TAR_CREATE_FLAGS) - .) | (cd $(DESTDIR)$(sdkdir)/sdk/bin && tar -xf -) + $(RM) -f $(DESTDIR)$(sdkdir)/lib $(DESTDIR)$(sdkdir)/bin $(DESTDIR)$(sdkdir)/include $(DESTDIR)$(sdkdir)/include $(DESTDIR)$(sdkdir)/sdk/idl $(DESTDIR)$(sdkdir)/idl + ln -s $(sdkdir)/sdk/lib $(DESTDIR)$(sdkdir)/lib + ln -s $(installdir) $(DESTDIR)$(sdkdir)/bin + ln -s $(includedir) $(DESTDIR)$(sdkdir)/include + ln -s $(idldir) $(DESTDIR)$(sdkdir)/idl +endif # INSTALL_SDK + +make-sdk: +ifndef SDK_UNIFY + $(MAKE) stage-package UNIVERSAL_BINARY= STAGE_SDK=1 MOZ_PKG_DIR=sdk-stage +endif + @echo 'Packaging SDK...' + $(RM) -rf $(DIST)/$(MOZ_APP_NAME)-sdk + $(NSINSTALL) -D $(DIST)/$(MOZ_APP_NAME)-sdk/bin +ifdef SDK_UNIFY + (cd $(UNIFY_DIST)/sdk-stage && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/bin && tar -xf -) +else + (cd $(DIST)/sdk-stage && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/bin && tar -xf -) +endif + $(NSINSTALL) -D $(DIST)/$(MOZ_APP_NAME)-sdk/host/bin + (cd $(DIST)/host/bin && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/host/bin && tar -xf -) + $(NSINSTALL) -D $(DIST)/$(MOZ_APP_NAME)-sdk/sdk + find $(DIST)/sdk -name '*.pyc' | xargs rm -f + (cd $(DIST)/sdk && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/sdk && tar -xf -) + $(NSINSTALL) -D $(DIST)/$(MOZ_APP_NAME)-sdk/include + (cd $(DIST)/include && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/include && tar -xf -) + $(NSINSTALL) -D $(DIST)/$(MOZ_APP_NAME)-sdk/idl + (cd $(DIST)/idl && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/idl && tar -xf -) + $(NSINSTALL) -D $(DIST)/$(MOZ_APP_NAME)-sdk/lib +# sdk/lib is the same as sdk/sdk/lib + (cd $(DIST)/sdk/lib && $(TAR) $(TAR_CREATE_FLAGS) - .) | \ + (cd $(DIST)/$(MOZ_APP_NAME)-sdk/lib && tar -xf -) + $(NSINSTALL) -D $(DIST)/$(SDK_PATH) +ifndef PKG_SKIP_STRIP + USE_ELF_HACK= $(PYTHON) $(MOZILLA_DIR)/toolkit/mozapps/installer/strip.py $(DIST)/$(MOZ_APP_NAME)-sdk +endif + cd $(DIST) && $(MAKE_SDK) +ifdef UNIFY_DIST +ifndef SDK_UNIFY + $(MAKE) -C $(UNIFY_DIST)/.. sdk SDK_UNIFY=1 +endif +endif + +checksum: + mkdir -p `dirname $(CHECKSUM_FILE)` + @$(PYTHON) $(MOZILLA_DIR)/build/checksums.py \ + -o $(CHECKSUM_FILE) \ + $(CHECKSUM_ALGORITHM_PARAM) \ + -s $(call QUOTED_WILDCARD,$(DIST)) \ + $(UPLOAD_FILES) + @echo 'CHECKSUM FILE START' + @cat $(CHECKSUM_FILE) + @echo 'CHECKSUM FILE END' + $(SIGN_CHECKSUM_CMD) + + +upload: checksum + $(PYTHON) -u $(MOZILLA_DIR)/build/upload.py --base-path $(DIST) \ + --package '$(PACKAGE)' \ + --properties-file $(DIST)/mach_build_properties.json \ + $(UPLOAD_FILES) \ + $(CHECKSUM_FILES) + +# source-package creates a source tarball from the files in MOZ_PKG_SRCDIR, +# which is either set to a clean checkout or defaults to $topsrcdir +source-package: + @echo 'Generate the sourcestamp file' + # Make sure to have repository information available and then generate the + # sourcestamp file. + $(MAKE) -C $(DEPTH) 'source-repo.h' + $(MAKE) make-sourcestamp-file + @echo 'Packaging source tarball...' + # We want to include the sourcestamp file in the source tarball, so copy it + # in the root source directory. This is useful to enable telemetry submissions + # from builds made from the source package with the correct revision information. + # Don't bother removing it as this is only used by automation. + @cp $(MOZ_SOURCESTAMP_FILE) '$(MOZ_PKG_SRCDIR)/sourcestamp.txt' + $(MKDIR) -p $(DIST)/$(PKG_SRCPACK_PATH) + (cd $(MOZ_PKG_SRCDIR) && $(CREATE_SOURCE_TAR) - ./ ) | xz -9e > $(SOURCE_TAR) + +hg-bundle: + $(MKDIR) -p $(DIST)/$(PKG_SRCPACK_PATH) + $(CREATE_HG_BUNDLE_CMD) + +source-upload: + $(MAKE) upload UPLOAD_FILES='$(SOURCE_UPLOAD_FILES)' CHECKSUM_FILE='$(SOURCE_CHECKSUM_FILE)' |