4 # TODO : document the role of this Makefile
7 FUSIONFORGE=FusionForge
9 PKGNAME=$(shell head -1 $(PKGDIR)/debian/changelog | sed 's/ .*//')
10 PKGLETTER=$(shell echo $(PKGNAME) | cut -c1)
11 ORIGIN=debian.fusionforge.org
12 BRANCH=$(shell [ "$(shell echo $(basename $(CURDIR)) | sed 's/.*runk.*/trunk/')" = "trunk" ] && echo svn || echo brc)
14 ifeq (,$(shell echo "$$BUILDERDIR"))
15 BUILDERDIR=$(CURDIR)/builder
17 BUILDERDIR=$(shell echo $$BUILDERDIR)
19 BUILDRESULT=$(CURDIR)/result
20 TARBALLS=$(CURDIR)/tarballs
22 BUILDPLACE=$(BUILDERDIR)/buildplace
23 BUILDFILES=$(BUILDERDIR)/buildfiles
24 COWBUILDERBASE=$(BUILDERDIR)/cow
25 PBUILDERTGZ=$(BUILDERDIR)/tgz
26 APTCACHE=$(BUILDERDIR)/cache
28 LOCALREPODEB=/var/www/debian-fusionforge-$(BRANCH)
29 LOCALREPOUBU=/var/www/ubuntu-fusionforge-$(BRANCH)
31 DISTRIB=$(shell echo $(XDISTRIB) | cut -c2-)
33 DEBIANLIST=1lenny 2squeeze 3sid
35 DEBLIST=$(DEBIANLIST) $(DEBIANLISTP)
36 UBUNTULIST=1hardy 1intrepid 1jaunty 1karmic
37 UBUNTULIST=1jaunty 1karmic 1lucid
39 UBULIST=$(UBUNTULIST) $(UBUNTULISTP)
40 # Try if a local mirror is available
41 LOCALMIRROR=http://localhost/ubuntu
42 UBUNTUOP=$(shell wget -q -S http://localhost/ubuntu -O /dev/null 2>&1 && echo "--mirror $(LOCALMIRROR)" || echo "--mirror http://archive.ubuntu.com/ubuntu") --debootstrap debootstrap
43 UBUNTUOP=--mirror http://archive.ubuntu.com/ubuntu --debootstrap debootstrap
44 DEBIANOP=--debootstrapopts --include=apt --debootstrap debootstrap
45 ASKPASS=--ask-passphrase
48 MAJOR=$(shell head -1 $(PKGDIR)/debian/changelog | sed 's/.*(\(.*\)-[^-]*).*/\1/')
49 in_svn_repo:= $(wildcard .svn/)
50 ifeq ($(strip $(in_svn_repo)),)
51 #in_bzr_repo:= $(shell bzr info | grep parent | cut -d: -f2-)
52 in_bzr_repo:= $(wildcard .bzr/)
53 ifeq ($(strip $(in_bzr_repo)),)
56 #svnrev=$(shell LANG=C bzr log -r-1 2>&1 | grep "svn revno" | cut -d" " -f3)
57 svnrev=bzr$(shell bzr revno)
60 svnrev=$(shell LANG=C svn info 2>&1 | grep Revision | cut -d: -f2| sed 's/ //g')
64 MINOR=-$(BRANCH)$(svnrev)+$(XDISTRIB)
68 DEBBUILDOPTS=--debbuildopts -sa
69 ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
71 UBUHOOK="--hookdir $(CURDIR)/hook/ubuntu"
72 # Some doc found there http://wiki.debian.org/cowbuilder
73 # Hook are not anymore necessary, but I keep as an example
74 UBUHOOK="--components 'main universe' --debootstrapopts --exclude=udev,pcmciautils,initramfs-tools"
75 UBUHOOK=--components "main universe" --hookdir $(CURDIR)/hook/ubuntu
77 ORIGFILE=$(PKGNAME)_$(MAJOR).orig.tar.gz
78 DSCFILE=$(PKGNAME)_$(MAJOR)$(MINOR).dsc
79 PDSCFILE=$(PKGNAME)_$(MAJOR)$(MINOR)+p.dsc
80 CHANGEFILE=$(PKGNAME)_$(MAJOR)$(MINOR)_$(ARCH).changes
81 PCHANGEFILE=$(PKGNAME)_$(MAJOR)$(MINOR)+p_$(ARCH).changes
83 # Quite heavy version, but still requires to be root
84 COWBUILDERCMD=cd $(BUILDPLACE) && dpkg-source -x $(BUILDFILES)/$(DSCFILE) ; cd $(BUILDPLACE)/$(PKGNAME)-$(MAJOR) && pdebuild --pbuilder cowbuilder --buildresult $(BUILDRESULT) -- --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --buildplace $(BUILDPLACE) --aptcache $(APTCACHE) ; rm -rf $(BUILDPLACE)/$(PKGNAME)-$(MAJOR)
85 # This one is with sudo and probably faster
86 COWBUILDERCMD=sudo /usr/sbin/cowbuilder --build --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --configfile $(COWBUILDERBASE)/configfile $(BUILDFILES)/$(DSCFILE) $(DEBBUILDOPTS)
88 # This one is with pbuilder
89 PBUILDERCMD=cd $(BUILDFILES) && sudo /usr/sbin/pbuilder --build --basetgz $(PBUILDERTGZ)/base-$(DISTRIB).tgz --configfile $(PBUILDERTGZ)/configfile $(BUILDFILES)/$(PDSCFILE)
94 @echo ======================================================================================
95 @echo '= Available targets are listed below ($(BRANCH))($(ARCH)) ='
96 @echo '= BUILDERDIR = $(BUILDERDIR) ='
97 @echo ======================================================================================
98 @cat Makefile.debian | grep '^.*:.*#$$' | sed 's/FUSIONFORGE/$(FUSIONFORGE)/' | sed 's/^\(.*:\).*#\(.*\)#$$/\1 \2/'
99 @echo ======================================================================================
104 #:======== Debian Builds ============#
105 lenny: # Simply build lenny packages #
106 $(MAKE) cowbuilddeb DEBIANLIST=1lenny
108 rlenny: # Make a lenny repository #
109 $(MAKE) repodeb DEBIANLIST=1lenny
111 squeeze: # Simply build squeeze packages #
112 $(MAKE) cowbuilddeb DEBIANLIST=2squeeze
114 rsqueeze: # Make a squeeze repository #
115 $(MAKE) repodeb DEBIANLIST=2squeeze
117 sid: # Simply build sid packages #
118 $(MAKE) cowbuilddeb DEBIANLIST=3sid
120 rsid: # Make a sid repository #
121 $(MAKE) repodeb DEBIANLIST=3sid
123 #:======== Ubuntu Builds ============#
124 intrepid: # Simply build intrepid packages #
125 $(MAKE) cowbuildubu UBUNTULIST=1intrepid
127 rintrepid: # Make an intrepid repository #
128 $(MAKE) repoubu UBUNTULIST=1intrepid
130 jaunty: # Simply build jaunty packages #
131 $(MAKE) cowbuildubu UBUNTULIST=1jaunty
133 rjaunty: # Make a jaunty repository #
134 $(MAKE) repoubu UBUNTULIST=1jaunty
136 karmic: # Simply build karmic packages #
137 $(MAKE) cowbuildubu UBUNTULIST=1karmic
139 rkarmic: # Make a karmic repository #
140 $(MAKE) repoubu UBUNTULIST=1karmic
142 lucid: # Simply build lucid packages #
143 $(MAKE) cowbuildubu UBUNTULIST=1lucid
145 rlucid: # Make a lucid repository #
146 $(MAKE) repoubu UBUNTULIST=1lucid
148 #:======== Other and Multiple Builds ============#
150 documentor_url=http://downloads.sourceforge.net/project/phpdocu/PhpDoc/phpDocumentor-1.4.3/PhpDocumentor-1.4.3.tgz
151 documentor_file=PhpDocumentor-1.4.3.tgz
152 documentor_subdir=PhpDocumentor-1.4.3
158 orig: $(TARBALLS)/$(ORIGFILE) # Make FUSIONFORGE orig file
163 # Get phpdocumentor, install phpdocumentor, build $(PKGNAME) phpdoc
164 phpdoc: $(PKGDIR)/docs/phpdoc/docs
167 (cd gforge/docs/docbook ; make debian)
170 (cd gforge/docs/docbook ; make clean)
173 [ ! -f $(documentor_path)/$(documentor_file) ] && \
174 cd $(documentor_path) && \
175 wget $(documentor_url) || true
176 phpdocumentor_unpack: phpdocumentor_get
177 [ ! -d $(documentor_path)/$(documentor_subdir) ] && \
178 cd $(documentor_path) && \
179 tar -xvzf $(documentor_file) || true
180 $(documentor_path)/$(documentor_subdir)/patched: phpdocumentor_unpack
181 cd $(documentor_path)/$(documentor_subdir) && \
182 patch < $(CURDIR)/$(PKGDIR)/docs/phpdoc/phpDocumentor.ini.patch \
183 && touch $(documentor_path)/$(documentor_subdir)/patched
184 $(PKGDIR)/docs/phpdoc/docs: $(documentor_path)/$(documentor_subdir)/patched
185 cd $(PKGDIR)/docs/phpdoc/ && ./makedoc.sh
188 # Build with cowbuilder or pbuilder
191 all: cleanorig cowbuilddeb cowbuildubu # ***** Build all package for debian and ubuntu ***** #
193 deploy: repodeb repoubu # ***** Deploy packages in Debian and Ubuntu repositories ***** #
196 @for dist in $(DEBIANLIST); do \
197 $(MAKE) -f Makefile.debian localrepo reprepro XDISTRIB=$$dist LOCALREPO=$(LOCALREPODEB) DISTRIBLIST="$(DEBLIST)" ; \
201 @for dist in $(UBUNTULIST); do \
202 $(MAKE) -f Makefile.debian localrepo reprepro XDISTRIB=$$dist LOCALREPO=$(LOCALREPOUBU) DISTRIBLIST="$(UBULIST)" ; \
206 @echo "Will build $(PKGNAME)_$(MAJOR)$(MINOR)$(DISTRIB)"
208 cowbuilddeb: # ***** This is the one to cowbuild debian packages ***** #
209 @for dist in $(DEBIANLIST); do \
210 $(MAKE) -f Makefile.debian cowbuilddist XDISTRIB=$$dist DISTROOP="$(DEBIANOP)" ; \
213 cowbuildubu: # ***** This is the one to cowbuild ubuntu packages ***** #
214 @for dist in $(UBUNTULIST); do \
215 $(MAKE) -f Makefile.debian cowbuilddist XDISTRIB=$$dist DISTROOP="$(UBUNTUOP)" HOOK='$(UBUHOOK)' ; \
218 pbuilddeb: # pbuild debian packages (less recommended) #
219 @for dist in $(DEBIANLISTP); do \
220 $(MAKE) -f Makefile.debian pbuilddist XDISTRIB=$$dist DISTROOP="$(DEBIANOP)" LOCALREPO=$(LOCALREPODEB) ; \
223 pbuildubu: # pbuild ubuntu packages (less recommended) #
224 @for dist in $(UBUNTULISTP); do \
225 $(MAKE) -f Makefile.debian pbuilddist XDISTRIB=$$dist DISTROOP="$(UBUNTUOP)" LOCALREPO=$(LOCALREPOUBU) ; \
228 cowbuilddist: cowbuilderenv $(BUILDFILES) $(BUILDRESULT)/$(CHANGEFILE)
230 pbuilddist: pbuilderenv $(BUILDFILES) $(BUILDRESULT)/$(PCHANGEFILE)
232 $(BUILDRESULT)/$(CHANGEFILE): $(BUILDFILES)/$(DSCFILE)
235 $(BUILDRESULT)/$(PCHANGEFILE): $(BUILDFILES)/$(PDSCFILE)
238 $(BUILDFILES)/$(DSCFILE):
239 @echo "================> Have to cowbuild $@ <=================="
240 cd $(PKGDIR) ; debclean
241 find $(PKGDIR) -type f -or -type l | grep -v '/CVS/' | \
242 grep -v '/.svn/' | grep -v '/.testbox/' | \
243 grep -v rpm-specific | grep -v docs/phpdoc/docs | \
244 grep -v ^./debian/ | cpio -pdumB $(BUILDFILES)/
245 # Set version for given distrib
246 cd $(BUILDFILES)/$(PKGDIR); dch -b -v $(MAJOR)$(MINOR) -D UNRELEASED "This is $(DISTRIB) autobuild"
247 perl -pi -e "s/UNRELEASED/$(DISTRIB)/" $(BUILDFILES)/$(PKGDIR)/debian/changelog
248 cd $(BUILDFILES) ; dpkg-source -b $(PKGDIR)
249 rm -rf $(BUILDFILES)/$(PKGDIR)
251 $(BUILDFILES)/$(PDSCFILE):
252 @echo "================> Have to pbuild $@ <=================="
253 cd $(PKGDIR) ; debclean
254 find $(PKGDIR) -type f -or -type l | grep -v '/CVS/' | \
255 grep -v '/.svn/' | grep -v '/.testbox/' | \
256 grep -v rpm-specific | grep -v docs/phpdoc/docs | \
257 grep -v ^./debian/ | cpio -pdumB $(BUILDFILES)/
258 # Set version for given distrib
259 cd $(BUILDFILES)/$(PKGDIR); dch -b -v $(MAJOR)$(MINOR)+p -D UNRELEASED "This is $(DISTRIB) autobuild"
260 perl -pi -e "s/UNRELEASED/$(DISTRIB)/" $(BUILDFILES)/$(PKGDIR)/debian/changelog
261 cd $(BUILDFILES) ; dpkg-source -b $(PKGDIR)
262 rm -rf $(BUILDFILES)/$(PKGDIR)
264 $(BUILDFILES)/$(ORIGFILE): $(TARBALLS)/$(ORIGFILE)
265 cp $(TARBALLS)/$(ORIGFILE) $(BUILDFILES)
267 $(TARBALLS)/$(ORIGFILE): $(TARBALLS)
268 cd $(PKGDIR) ; debclean
269 find $(PKGDIR) -type f -or -type l | grep -v '/CVS/' | \
270 grep -v '/.svn/' | grep -v '/.testbox/' | \
271 grep -v rpm-specific | grep -v docs/phpdoc/docs | \
272 grep -v ^./debian/ | grep -v \\.jar$$ | \
273 grep -v \\.pdf$$ | grep -v plugins/fckeditor/www/_samples | \
274 grep -v plugins/wiki/www/lib/pear | \
275 cpio -o -H ustar | gzip > $(TARBALLS)/$(ORIGFILE)
277 pbuilderenv: $(PBUILDERTGZ) $(PBUILDERTGZ)/base-$(DISTRIB).tgz
278 @echo "=========> Ready for $(DISTRIB)"
280 cowbuilderenv: $(COWBUILDERBASE)/doconfig $(COWBUILDERBASE)/base-$(DISTRIB).stamp.update
281 @echo "=========> Ready for $(DISTRIB)"
283 forceupdatecow: # Force update of cowbuilder env #
284 rm -f $(COWBUILDERBASE)/base-*.stamp.update
286 $(COWBUILDERBASE)/base-$(DISTRIB).stamp.update: $(COWBUILDERBASE)/base-$(DISTRIB).stamp
287 sudo /usr/sbin/cowbuilder --update $(HOOK) --distribution $(DISTRIB) --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --configfile $(COWBUILDERBASE)/configfile $(DISTROOP)
290 $(PBUILDERTGZ)/base-$(DISTRIB).tgz: $(PBUILDERTGZ)/doconfig
291 [ -f $@ ] || sudo /usr/sbin/pbuilder --create --distribution $(DISTRIB) --basetgz $(PBUILDERTGZ)/base-$(DISTRIB).tgz --configfile $(PBUILDERTGZ)/configfile $(DISTROOP)
293 $(COWBUILDERBASE)/base-$(DISTRIB).stamp:
294 [ -d $(COWBUILDERBASE)/base-$(DISTRIB).cow ] || sudo /usr/sbin/cowbuilder --create $(HOOK) --distribution $(DISTRIB) --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --configfile $(COWBUILDERBASE)/configfile $(DISTROOP)
298 $(PBUILDERTGZ)/doconfig: /usr/sbin/pbuilder
299 @echo "APTCACHE=$(APTCACHE)" > $(PBUILDERTGZ)/configfile
300 @echo "BUILDPLACE=$(BUILDPLACE)" >> $(PBUILDERTGZ)/configfile
301 @echo "BUILDRESULT=$(BUILDRESULT)" >> $(PBUILDERTGZ)/configfile
303 $(COWBUILDERBASE)/doconfig: /usr/sbin/cowbuilder
304 @echo "APTCACHE=$(APTCACHE)" > $(COWBUILDERBASE)/configfile
305 @echo "BUILDPLACE=$(BUILDPLACE)" >> $(COWBUILDERBASE)/configfile
306 @echo "BUILDRESULT=$(BUILDRESULT)" >> $(COWBUILDERBASE)/configfile
309 sudo apt-get install pbuilder
312 gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
313 gpg --export --armor 40976EAF437D05B5 | sudo apt-key add -
315 /usr/sbin/cowbuilder:
316 sudo apt-get install cowdancer
318 localrepo: $(LOCALREPO) $(LOCALREPO)/conf $(LOCALREPO)/conf/distributions
320 reprepro: $(LOCALREPO)/pool/main/$(PKGLETTER)/$(PKGNAME)/$(DSCFILE) # Install in repository
322 $(LOCALREPO)/pool/main/$(PKGLETTER)/$(PKGNAME)/$(DSCFILE): $(BUILDRESULT)/$(CHANGEFILE)
323 @echo "Installing $(BUILDRESULT)/$(CHANGEFILE) in $@"
324 cd $(BUILDRESULT); reprepro $(ASKPASS) -Vb $(LOCALREPO) include $(DISTRIB) $(CHANGEFILE)
326 $(LOCALREPO)/conf/distributions:
327 for xdist in $(DISTRIBLIST) ; do \
328 dist=`echo $$xdist | cut -c2-` ; \
329 echo "Codename: $$dist" ; \
330 echo "Suite: $$dist" ; \
331 echo "Components: main" ; \
332 echo "UDebComponents: main" ; \
333 echo "Architectures: amd64 i386 source" ; \
334 echo "Origin: $(ORIGIN)" ; \
335 echo "Version: 5.0" ; \
336 echo "Description: My $(FUSIONFORGE) $$dist repository" ; \
337 echo "SignWith: $(SIGNKEY)" ; \
338 echo "" ; done >> $(LOCALREPO)/conf/distributions
341 mkdir $(LOCALREPO)/conf
347 mkdir -p $(BUILDFILES)
350 mkdir -p $(COWBUILDERBASE)
353 mkdir -p $(PBUILDERTGZ)
357 sudo chown `id -u`.`id -g` $@
359 clean: # Clean $(BUILDPLACE) $(BUILDFILES) $(TARBALLS) (intermediate files) #
360 rm -rf $(BUILDPLACE) $(BUILDFILES) $(TARBALLS)
362 cleanenv: # Clean $(COWBUILDERBASE) $(PBUILDERTGZ) (chroots)#
363 rm -rf $(COWBUILDERBASE) $(PBUILDERTGZ)
365 cleancache: # Clean $(APTCACHE) (apt cache) #
368 cleanorig: # Clean $(TARBALLS)/$(ORIGFILE) #
369 rm -f $(TARBALLS)/$(ORIGFILE)