# -*- mode: makefile; coding: utf-8 -*- # Copyright (c) 2007-2008 Fabien Tassin # Description: The 'mozclient' module of mozilla-devscripts # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2, or (at # your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ##################################################################### # Don't include this file directly, include one of the project.mk # file instead, which will include this file for you. # The caller could specify the following parameters: # DEBIAN_DATE in the form YYYYMMDDtHHMM # ex: DEBIAN_DATE=20070911t1711 # or # DEBIAN_TAG in the form CVS_TAG=debian_version # ex: DEBIAN_TAG=FIREFOX_3_0b2_RC1=3.0~b2~rc1 # The following targets are available to the caller: # - get-orig-source # Build a tarball according to parameters from project.mk # and optionally using either DEBIAN_DATE or DEBIAN_TAG # - mozclient-status # List all the registered CVS tags from upstream server # project.mk contains the following parameters # - MOZCLIENT_TARGET (mandatory): a label, usually 'project-orig' # - MOZCLIENT_APPNAME (mandatory): package name # - MOZCLIENT_MODULES (optional): list of modules/directories for direct checkout # - MOZCLIENT_PROJECT (mandatory): CVS project name. If $(NULL), then #  $(MOZCLIENT_MODULES) becomes mandatory # - MOZCLIENT_BRANCH (optional): CVS branch name # - MOZCLIENT_FILE (mandatory): source file containing the version # - MOZCLIENT_GETVERSION (mandatory): how to transform the version # - MOZCLIENT_URL (mandatory): an URL (usually on Bonsai) listing commits # - MOZCLIENT_GETDATE (mandatory): get the last commit date for the project # - MOZCLIENT_EMBEDDED (optional): create an embedded tarball (default: 0) # - MOZCLIENT_WANTMOZDIR (optional): should the root dir be 'mozilla'? # (default: 0 unless MOZCLIENT_EMBEDDED=1) # Example with firefox-3.0: # # - in debian/control, add mozilla-devscripts to Build-Depends # - in debian/rules, add: # include /usr/share/mozilla-devscripts/firefox-3.0.mk # # That's it. You've gained get-orig-source. # # You can now call it: # - debian/rules get-orig-source # => firefox-3.0_3.0~b2~cvs20071120t1456+nobinonly.orig.tar.gz # # - debian/rules get-orig-source DEBIAN_DATE=20070914t1713 # => firefox-3.0_3.0~a8~cvs20070914t1713+nobinonly.orig.tar.gz # # - debian/rules get-orig-source DEBIAN_TAG=FIREFOX_3_0b2_RC1=3.0~b2~rc1 # => firefox-3.0_3.0~b2~rc1+nobinonly.orig.tar.gz # Notes: # - the script 'remove.binonly.sh' is applied to all projects, in order # to remove binary-only files before packing. Traces of the cleaning # are preserved inside that resulting tarball in REMOVED+nobinonly.txt. # If nothing has been removed, the log and the "+nobinonly" signature # are both dropped. MOZ_CLIENT = mozilla/client.mk MOZCLIENT_CVS_LOC = :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot MOZCLIENT_STAMP ?= stamped MOZCLIENT_TMP := mozclient-tmp MOZCLIENT_PATCHES := ../patches MOZCLIENT_EXCLUDE_SCRIPT := ../../remove.binonly.sh NOBINONLY := nobinonly TAR_EXCLUDE := --exclude=CVS --exclude=.cvsignore DATE_FILTER := sed -e 's,\(....\)\(..\)\(..\)[rt]\(..\)\(..\),\1/\2/\3 \4:\5 PST,' ifdef DEBIAN_TAG DEBIAN_DATE = $(NULL) DEBIAN_LTAG = $(shell echo $(DEBIAN_TAG) | sed -e 's/=.*//') DEBIAN_DTAG = $(shell echo $(DEBIAN_TAG) | sed -e 's/.*=//') DEBIAN_CO_TAG = -r $(DEBIAN_LTAG) DEBIAN_MOZ_CO_TAG = MOZ_CO_TAG=$(DEBIAN_LTAG) else DEBIAN_MOZ_CO_TAG = $(NULL) ifdef DEBIAN_DATE DEBIAN_CO_DATE = $(shell echo "-D \"$(DEBIAN_DATE)\"" | $(DATE_FILTER)) endif ifdef DEBIAN_BRANCH DEBIAN_CO_TAG = -r $(DEBIAN_BRANCH) endif endif ############################################################################ mozclient-deps: @if [ ! -f /usr/bin/cvs ] ; then echo "**ERROR** Depends on missing cvs. Abort"; exit 1; fi @if [ ! -f /usr/bin/quilt ] ; then echo "**ERROR** Depends on missing quilt. Abort"; exit 1; fi @if [ ! -f /usr/bin/wget ] ; then echo "**ERROR** Depends on missing wget. Abort"; exit 1; fi mozclient-dir: rm -rf $(MOZCLIENT_TMP) mkdir $(MOZCLIENT_TMP) # Get the client ifneq (,$(MOZCLIENT_BRANCH)) $(MOZ_CLIENT): MOZCLIENT_TBRANCH = -r $(MOZCLIENT_BRANCH) else $(MOZ_CLIENT): MOZCLIENT_TBRANCH = $(NULL) endif $(MOZ_CLIENT): mozclient-deps mozclient-dir cd $(MOZCLIENT_TMP) && cvs -d $(MOZCLIENT_CVS_LOC) co $(MOZCLIENT_TBRANCH) $(DEBIAN_CO_DATE) $(DEBIAN_CO_TAG) $@ mozclient-client: $(MOZCLIENT_TMP)/$(MOZCLIENT_STAMP) # List all tags mozclient-status: $(MOZ_CLIENT) cd $(MOZCLIENT_TMP)/mozilla && cvs status -v client.mk # Patch # - don't patch when a branch name is specified mozclient-patch: $(MOZCLIENT_TMP)/$(MOZCLIENT_STAMP) $(MOZCLIENT_TMP)/$(MOZCLIENT_STAMP): $(MOZ_CLIENT) ifeq (,$(MOZCLIENT_BRANCH)) if [ ! -L $(MOZCLIENT_TMP)/patches ] ; then ln -s $(MOZCLIENT_PATCHES) $(MOZCLIENT_TMP)/patches ; fi cd $(MOZCLIENT_TMP) && quilt --quiltrc /dev/null push -a || test $$? = 2 endif touch $(MOZCLIENT_TMP)/$(MOZCLIENT_STAMP) # Unpatch mozclient-unpatch: ifeq (,$(MOZCLIENT_BRANCH)) cd $(MOZCLIENT_TMP) && quilt --quiltrc /dev/null pop -a -R || test $$? = 2 endif rm -rf $(MOZCLIENT_TMP)/.pc $(MOZCLIENT_TMP)/$(MOZCLIENT_STAMP) $(MOZCLIENT_TMP)/patches # Clean mozclient-clean: rm -rf $(MOZCLIENT_TMP) # Checkout using either a TAG, a date or nothing (last commit date) # Use mozclient.mk if $(MOZCLIENT_PROJECT) is specified, otherwise, do a direct cvs checkout # using $(MOZCLIENT_MODULES) ifneq (,$(MOZCLIENT_PROJECT)) ifneq (,$(DEBIAN_TAG)) mozclient-checkout: MOZCLIENT_DATE = $(NULL) else ifneq (,$(DEBIAN_DATE)) mozclient-checkout: MOZCLIENT_DATE = MOZ_CO_DATE="$(DEBIAN_DATE)" else mozclient-checkout: DEBIAN_DATE = $(shell $(MOZCLIENT_GETDATE)) mozclient-checkout: MOZCLIENT_DATE = MOZ_CO_DATE="$(shell echo $(DEBIAN_DATE) | $(DATE_FILTER))" endif endif mozclient-checkout: cd $(MOZCLIENT_TMP) && make -f $(MOZ_CLIENT) checkout MOZ_CO_PROJECT=$(MOZCLIENT_PROJECT) $(MOZCLIENT_DATE) $(DEBIAN_MOZ_CO_TAG) echo $(DEBIAN_DATE) > $(MOZCLIENT_TMP)/.date else ifneq (,$(DEBIAN_TAG)) mozclient-checkout: MOZCLIENT_DATE = $(NULL) else ifneq (,$(DEBIAN_DATE)) mozclient-checkout: MOZCLIENT_DATE = -D "$(DEBIAN_DATE)" else mozclient-checkout: DEBIAN_DATE = $(shell $(MOZCLIENT_GETDATE)) mozclient-checkout: MOZCLIENT_DATE = -D "$(shell echo $(DEBIAN_DATE) | $(DATE_FILTER))" endif endif mozclient-checkout: cd $(MOZCLIENT_TMP) && cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot -q -z 3 co -P -A $(MOZCLIENT_DATE) $(DEBIAN_CO_TAG) $(MOZCLIENT_MODULES) echo $(DEBIAN_DATE) > $(MOZCLIENT_TMP)/.date endif # Remove bin-only files using the remove.binonly.sh script. # Keep a log in REMOVED+nobinonly.txt mozclient-remove-bin: cd $(MOZCLIENT_TMP)/mozilla && sh $(MOZCLIENT_EXCLUDE_SCRIPT) > REMOVED+$(NOBINONLY).txt 2>&1 if [ ! -s $(MOZCLIENT_TMP)/mozilla/REMOVED+$(NOBINONLY).txt ] ; then rm $(MOZCLIENT_TMP)/mozilla/REMOVED+$(NOBINONLY).txt ; fi # Pack # - only use the +nobinonly suffix is something has been deleted # - for embedded tarballs (bzipped), use MOZCLIENT_EMBEDDED=1 # - to preserve the mozilla root dir, use MOZCLIENT_WANTMOZDIR=1 ifneq (,$(DEBIAN_TAG)) mozclient-pack: MOZCLIENT_TVERSION = $(DEBIAN_DTAG) else mozclient-pack: MOZCLIENT_TVERSION = $(shell cd $(MOZCLIENT_TMP) && $(MOZCLIENT_GETVERSION))~cvs$(shell cat $(MOZCLIENT_TMP)/.date) endif mozclient-pack: MOZCLIENT_VERSION = $(MOZCLIENT_TVERSION)$(shell test -f $(MOZCLIENT_TMP)/mozilla/REMOVED+$(NOBINONLY).txt && echo "+$(NOBINONLY)") mozclient-pack: rm -rf $(MOZCLIENT_TMP)/$(MOZCLIENT_APPNAME)-$(MOZCLIENT_VERSION) ifneq (,$(findstring 1,$(MOZCLIENT_WANTMOZDIR)$(MOZCLIENT_EMBEDDED))) mkdir $(MOZCLIENT_TMP)/$(MOZCLIENT_APPNAME)-$(MOZCLIENT_VERSION) endif ifeq (1,$(MOZCLIENT_EMBEDDED)) cd $(MOZCLIENT_TMP) && tar jcf $(MOZCLIENT_APPNAME)-$(MOZCLIENT_VERSION)/$(MOZCLIENT_PROJECT)-$(MOZCLIENT_TVERSION)-source.tar.bz2 $(TAR_EXCLUDE) mozilla else mv $(MOZCLIENT_TMP)/mozilla $(MOZCLIENT_TMP)/$(MOZCLIENT_APPNAME)-$(MOZCLIENT_VERSION) endif rm -f $(MOZCLIENT_APPNAME)_$(MOZCLIENT_VERSION).orig.tar.gz cd $(MOZCLIENT_TMP) && tar zcf ../$(MOZCLIENT_APPNAME)_$(MOZCLIENT_VERSION).orig.tar.gz $(TAR_EXCLUDE) $(MOZCLIENT_APPNAME)-$(MOZCLIENT_VERSION) rm -rf $(MOZCLIENT_TMP) -ls -l $(MOZCLIENT_APPNAME)_$(MOZCLIENT_VERSION).orig.tar.gz # The real target ifneq (,$(MOZCLIENT_PROJECT)) $(MOZCLIENT_TARGET): $(MOZ_CLIENT) $(MOZCLIENT_TMP)/$(MOZCLIENT_STAMP) mozclient-checkout mozclient-remove-bin mozclient-pack else $(MOZCLIENT_TARGET): mozclient-deps mozclient-dir mozclient-checkout mozclient-remove-bin mozclient-pack endif get-orig-source: $(MOZCLIENT_TARGET) .PHONY: mozclient-deps mozclient-dir mozclient-patch mozclient-unpatch mozclient-checkout mozclient-remove-bin mozclient-pack $(MOZCLIENT_TARGET) get-orig-source