summaryrefslogtreecommitdiff
path: root/src/mozclient.mk.in
blob: 8262b511cc39f2940ee29ec297787a740b8192c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# -*- mode: makefile; coding: utf-8 -*-

# Copyright (c) 2007-2008 Fabien Tassin <fta@sofaraway.org>
# 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: mozclient-deps mozclient-dir
	cd $(MOZCLIENT_TMP) && cvs -d $(MOZCLIENT_CVS_LOC) co $(MOZCLIENT_FILE)
	cd $(MOZCLIENT_TMP)/mozilla && cvs status -v $(subst mozilla/,,$(MOZCLIENT_FILE))
	rm -rf $(MOZCLIENT_TMP)

# 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="$(shell echo $(DEBIAN_DATE) | $(DATE_FILTER))"
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:
	@if [ "Z$(DEBIAN_TAG)" = "Z" ] && [ "Z$(DEBIAN_DATE)" = "Z" ] ; then echo "*Error* DEBIAN_DATE is empty, MOZCLIENT_GETDATE failed ?" ; exit 1 ; fi
	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 "$(shell echo $(DEBIAN_DATE) | $(DATE_FILTER))"
else
mozclient-checkout: DEBIAN_DATE    = $(shell $(MOZCLIENT_GETDATE))
mozclient-checkout: MOZCLIENT_DATE = -D "$(shell echo $(DEBIAN_DATE) | $(DATE_FILTER))"
endif
endif
mozclient-checkout:
	@if [ "Z$(DEBIAN_TAG)" = "Z" ] && [ "Z$(DEBIAN_DATE)" = "Z" ] ; then echo "*Error* DEBIAN_DATE is empty, MOZCLIENT_GETDATE failed ?" ; exit 1 ; fi
	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