# 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 $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR) @(cd $(DIST)/$(MOZ_PKG_DIR) && $(CREATE_PRECOMPLETE_CMD)) 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 @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) # 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)'