3 FUSIONFORGE=FusionForge
5 PKGNAME=$(shell head -1 $(PKGDIR)/debian/changelog | sed 's/ .*//')
6 PKGLETTER=$(shell echo $(PKGNAME) | cut -c1)
7 ORIGIN=debian.fusionforge.org
8 BRANCH=$(shell [ "$(shell echo $(basename $(CURDIR)) | sed 's/.*runk.*/trunk/')" = "trunk" ] && echo svn || echo brc)
10 ifeq (,$(shell echo "$$BUILDERDIR"))
11 BUILDERDIR=$(CURDIR)/builder
13 BUILDERDIR=$(shell echo $$BUILDERDIR)
15 BUILDRESULT=$(CURDIR)/result
16 TARBALLS=$(CURDIR)/tarballs
18 BUILDPLACE=$(BUILDERDIR)/buildplace
19 BUILDFILES=$(BUILDERDIR)/buildfiles
20 COWBUILDERBASE=$(BUILDERDIR)/cow
21 PBUILDERTGZ=$(BUILDERDIR)/tgz
22 APTCACHE=$(BUILDERDIR)/cache
24 LOCALREPODEB=/var/www/debian-fusionforge-$(BRANCH)
25 LOCALREPOUBU=/var/www/ubuntu-fusionforge-$(BRANCH)
27 DISTRIB=$(shell echo $(XDISTRIB) | cut -c2-)
29 DEBIANLIST=1lenny 2squeeze 3sid
31 DEBLIST=$(DEBIANLIST) $(DEBIANLISTP)
32 UBUNTULIST=1hardy 1intrepid 1jaunty 1karmic
33 UBUNTULIST=1jaunty 1karmic 1lucid
35 UBULIST=$(UBUNTULIST) $(UBUNTULISTP)
36 # Try if a local mirror is available
37 LOCALMIRROR=http://localhost/ubuntu
38 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
39 UBUNTUOP=--mirror http://archive.ubuntu.com/ubuntu --debootstrap debootstrap
40 DEBIANOP=--debootstrapopts --include=apt --debootstrap debootstrap
41 ASKPASS=--ask-passphrase
44 MAJOR=$(shell head -1 $(PKGDIR)/debian/changelog | sed 's/.*(\(.*\)-[^-]*).*/\1/')
45 in_svn_repo:= $(wildcard .svn/)
46 ifeq ($(strip $(in_svn_repo)),)
47 #in_bzr_repo:= $(shell bzr info | grep parent | cut -d: -f2-)
48 in_bzr_repo:= $(wildcard .bzr/)
49 ifeq ($(strip $(in_bzr_repo)),)
52 #svnrev=$(shell LANG=C bzr log -r-1 2>&1 | grep "svn revno" | cut -d" " -f3)
53 svnrev=bzr$(shell bzr revno)
56 svnrev=$(shell LANG=C svn info 2>&1 | grep Revision | cut -d: -f2| sed 's/ //g')
60 MINOR=-$(BRANCH)$(svnrev)+$(XDISTRIB)
64 DEBBUILDOPTS=--debbuildopts -sa
65 ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
67 UBUHOOK="--hookdir $(CURDIR)/hook/ubuntu"
68 # Some doc found there http://wiki.debian.org/cowbuilder
69 # Hook are not anymore necessary, but I keep as an example
70 UBUHOOK="--components 'main universe' --debootstrapopts --exclude=udev,pcmciautils,initramfs-tools"
71 UBUHOOK=--components "main universe" --hookdir $(CURDIR)/hook/ubuntu
73 ORIGFILE=$(PKGNAME)_$(MAJOR).orig.tar.gz
74 DSCFILE=$(PKGNAME)_$(MAJOR)$(MINOR).dsc
75 PDSCFILE=$(PKGNAME)_$(MAJOR)$(MINOR)+p.dsc
76 CHANGEFILE=$(PKGNAME)_$(MAJOR)$(MINOR)_$(ARCH).changes
77 PCHANGEFILE=$(PKGNAME)_$(MAJOR)$(MINOR)+p_$(ARCH).changes
79 # Quite heavy version, but still requires to be root
80 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)
81 # This one is with sudo and probably faster
82 COWBUILDERCMD=sudo /usr/sbin/cowbuilder --build --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --configfile $(COWBUILDERBASE)/configfile $(BUILDFILES)/$(DSCFILE) $(DEBBUILDOPTS)
84 # This one is with pbuilder
85 PBUILDERCMD=cd $(BUILDFILES) && sudo /usr/sbin/pbuilder --build --basetgz $(PBUILDERTGZ)/base-$(DISTRIB).tgz --configfile $(PBUILDERTGZ)/configfile $(BUILDFILES)/$(PDSCFILE)
90 @echo ======================================================================================
91 @echo '= Available targets are listed below ($(BRANCH))($(ARCH)) ='
92 @echo '= BUILDERDIR = $(BUILDERDIR) ='
93 @echo ======================================================================================
94 @cat Makefile.debian | grep '^.*:.*#$$' | sed 's/FUSIONFORGE/$(FUSIONFORGE)/' | sed 's/^\(.*:\).*#\(.*\)#$$/\1 \2/'
95 @echo ======================================================================================
100 #:======== Debian Builds ============#
101 lenny: # Simply build lenny packages #
102 $(MAKE) cowbuilddeb DEBIANLIST=1lenny
104 rlenny: # Make a lenny repository #
105 $(MAKE) repodeb DEBIANLIST=1lenny
107 squeeze: # Simply build squeeze packages #
108 $(MAKE) cowbuilddeb DEBIANLIST=2squeeze
110 rsqueeze: # Make a squeeze repository #
111 $(MAKE) repodeb DEBIANLIST=2squeeze
113 sid: # Simply build sid packages #
114 $(MAKE) cowbuilddeb DEBIANLIST=3sid
116 rsid: # Make a sid repository #
117 $(MAKE) repodeb DEBIANLIST=3sid
119 #:======== Ubuntu Builds ============#
120 intrepid: # Simply build intrepid packages #
121 $(MAKE) cowbuildubu UBUNTULIST=1intrepid
123 rintrepid: # Make an intrepid repository #
124 $(MAKE) repoubu UBUNTULIST=1intrepid
126 jaunty: # Simply build jaunty packages #
127 $(MAKE) cowbuildubu UBUNTULIST=1jaunty
129 rjaunty: # Make a jaunty repository #
130 $(MAKE) repoubu UBUNTULIST=1jaunty
132 karmic: # Simply build karmic packages #
133 $(MAKE) cowbuildubu UBUNTULIST=1karmic
135 rkarmic: # Make a karmic repository #
136 $(MAKE) repoubu UBUNTULIST=1karmic
138 lucid: # Simply build lucid packages #
139 $(MAKE) cowbuildubu UBUNTULIST=1lucid
141 rlucid: # Make a lucid repository #
142 $(MAKE) repoubu UBUNTULIST=1lucid
144 #:======== Other and Multiple Builds ============#
146 documentor_url=http://downloads.sourceforge.net/project/phpdocu/PhpDoc/phpDocumentor-1.4.3/PhpDocumentor-1.4.3.tgz
147 documentor_file=PhpDocumentor-1.4.3.tgz
148 documentor_subdir=PhpDocumentor-1.4.3
154 orig: $(TARBALLS)/$(ORIGFILE) # Make FUSIONFORGE orig file
159 # Get phpdocumentor, install phpdocumentor, build $(PKGNAME) phpdoc
160 phpdoc: $(PKGDIR)/docs/phpdoc/docs
163 (cd gforge/docs/docbook ; make debian)
166 (cd gforge/docs/docbook ; make clean)
169 [ ! -f $(documentor_path)/$(documentor_file) ] && \
170 cd $(documentor_path) && \
171 wget $(documentor_url) || true
172 phpdocumentor_unpack: phpdocumentor_get
173 [ ! -d $(documentor_path)/$(documentor_subdir) ] && \
174 cd $(documentor_path) && \
175 tar -xvzf $(documentor_file) || true
176 $(documentor_path)/$(documentor_subdir)/patched: phpdocumentor_unpack
177 cd $(documentor_path)/$(documentor_subdir) && \
178 patch < $(CURDIR)/$(PKGDIR)/docs/phpdoc/phpDocumentor.ini.patch \
179 && touch $(documentor_path)/$(documentor_subdir)/patched
180 $(PKGDIR)/docs/phpdoc/docs: $(documentor_path)/$(documentor_subdir)/patched
181 cd $(PKGDIR)/docs/phpdoc/ && ./makedoc.sh
184 # Build with cowbuilder or pbuilder
187 all: cleanorig cowbuilddeb cowbuildubu # ***** Build all package for debian and ubuntu ***** #
189 deploy: repodeb repoubu # ***** Deploy packages in Debian and Ubuntu repositories ***** #
192 @for dist in $(DEBIANLIST); do \
193 $(MAKE) -f Makefile.debian localrepo reprepro XDISTRIB=$$dist LOCALREPO=$(LOCALREPODEB) DISTRIBLIST="$(DEBLIST)" ; \
197 @for dist in $(UBUNTULIST); do \
198 $(MAKE) -f Makefile.debian localrepo reprepro XDISTRIB=$$dist LOCALREPO=$(LOCALREPOUBU) DISTRIBLIST="$(UBULIST)" ; \
202 @echo "Will build $(PKGNAME)_$(MAJOR)$(MINOR)$(DISTRIB)"
204 cowbuilddeb: # ***** This is the one to cowbuild debian packages ***** #
205 @for dist in $(DEBIANLIST); do \
206 $(MAKE) -f Makefile.debian cowbuilddist XDISTRIB=$$dist DISTROOP="$(DEBIANOP)" ; \
209 cowbuildubu: # ***** This is the one to cowbuild ubuntu packages ***** #
210 @for dist in $(UBUNTULIST); do \
211 $(MAKE) -f Makefile.debian cowbuilddist XDISTRIB=$$dist DISTROOP="$(UBUNTUOP)" HOOK='$(UBUHOOK)' ; \
214 pbuilddeb: # pbuild debian packages (less recommended) #
215 @for dist in $(DEBIANLISTP); do \
216 $(MAKE) -f Makefile.debian pbuilddist XDISTRIB=$$dist DISTROOP="$(DEBIANOP)" LOCALREPO=$(LOCALREPODEB) ; \
219 pbuildubu: # pbuild ubuntu packages (less recommended) #
220 @for dist in $(UBUNTULISTP); do \
221 $(MAKE) -f Makefile.debian pbuilddist XDISTRIB=$$dist DISTROOP="$(UBUNTUOP)" LOCALREPO=$(LOCALREPOUBU) ; \
224 cowbuilddist: cowbuilderenv $(BUILDFILES) $(BUILDRESULT)/$(CHANGEFILE)
226 pbuilddist: pbuilderenv $(BUILDFILES) $(BUILDRESULT)/$(PCHANGEFILE)
228 $(BUILDRESULT)/$(CHANGEFILE): $(BUILDFILES)/$(DSCFILE)
231 $(BUILDRESULT)/$(PCHANGEFILE): $(BUILDFILES)/$(PDSCFILE)
234 $(BUILDFILES)/$(DSCFILE):
235 @echo "================> Have to cowbuild $@ <=================="
236 cd $(PKGDIR) ; debclean
237 find $(PKGDIR) -type f -or -type l | grep -v '/CVS/' | \
238 grep -v '/.svn/' | grep -v '/.testbox/' | \
239 grep -v rpm-specific | grep -v docs/phpdoc/docs | \
240 grep -v ^./debian/ | cpio -pdumB $(BUILDFILES)/
241 # Set version for given distrib
242 cd $(BUILDFILES)/$(PKGDIR); dch -b -v $(MAJOR)$(MINOR) -D UNRELEASED "This is $(DISTRIB) autobuild"
243 perl -pi -e "s/UNRELEASED/$(DISTRIB)/" $(BUILDFILES)/$(PKGDIR)/debian/changelog
244 cd $(BUILDFILES) ; dpkg-source -b $(PKGDIR)
245 rm -rf $(BUILDFILES)/$(PKGDIR)
247 $(BUILDFILES)/$(PDSCFILE):
248 @echo "================> Have to pbuild $@ <=================="
249 cd $(PKGDIR) ; debclean
250 find $(PKGDIR) -type f -or -type l | grep -v '/CVS/' | \
251 grep -v '/.svn/' | grep -v '/.testbox/' | \
252 grep -v rpm-specific | grep -v docs/phpdoc/docs | \
253 grep -v ^./debian/ | cpio -pdumB $(BUILDFILES)/
254 # Set version for given distrib
255 cd $(BUILDFILES)/$(PKGDIR); dch -b -v $(MAJOR)$(MINOR)+p -D UNRELEASED "This is $(DISTRIB) autobuild"
256 perl -pi -e "s/UNRELEASED/$(DISTRIB)/" $(BUILDFILES)/$(PKGDIR)/debian/changelog
257 cd $(BUILDFILES) ; dpkg-source -b $(PKGDIR)
258 rm -rf $(BUILDFILES)/$(PKGDIR)
260 $(BUILDFILES)/$(ORIGFILE): $(TARBALLS)/$(ORIGFILE)
261 cp $(TARBALLS)/$(ORIGFILE) $(BUILDFILES)
263 $(TARBALLS)/$(ORIGFILE): $(TARBALLS)
264 cd $(PKGDIR) ; debclean
265 find $(PKGDIR) -type f -or -type l | grep -v '/CVS/' | \
266 grep -v '/.svn/' | grep -v '/.testbox/' | \
267 grep -v rpm-specific | grep -v docs/phpdoc/docs | \
268 grep -v ^./debian/ | grep -v \\.jar$$ | \
269 grep -v \\.pdf$$ | grep -v plugins/fckeditor/www/_samples | \
270 grep -v plugins/wiki/www/lib/pear | \
271 cpio -o -H ustar | gzip > $(TARBALLS)/$(ORIGFILE)
273 pbuilderenv: $(PBUILDERTGZ) $(PBUILDERTGZ)/base-$(DISTRIB).tgz
274 @echo "=========> Ready for $(DISTRIB)"
276 cowbuilderenv: $(COWBUILDERBASE)/doconfig $(COWBUILDERBASE)/base-$(DISTRIB).stamp.update
277 @echo "=========> Ready for $(DISTRIB)"
279 forceupdatecow: # Force update of cowbuilder env #
280 rm -f $(COWBUILDERBASE)/base-*.stamp.update
282 $(COWBUILDERBASE)/base-$(DISTRIB).stamp.update: $(COWBUILDERBASE)/base-$(DISTRIB).stamp
283 sudo /usr/sbin/cowbuilder --update $(HOOK) --distribution $(DISTRIB) --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --configfile $(COWBUILDERBASE)/configfile $(DISTROOP)
286 $(PBUILDERTGZ)/base-$(DISTRIB).tgz: $(PBUILDERTGZ)/doconfig
287 [ -f $@ ] || sudo /usr/sbin/pbuilder --create --distribution $(DISTRIB) --basetgz $(PBUILDERTGZ)/base-$(DISTRIB).tgz --configfile $(PBUILDERTGZ)/configfile $(DISTROOP)
289 $(COWBUILDERBASE)/base-$(DISTRIB).stamp:
290 [ -d $(COWBUILDERBASE)/base-$(DISTRIB).cow ] || sudo /usr/sbin/cowbuilder --create $(HOOK) --distribution $(DISTRIB) --basepath $(COWBUILDERBASE)/base-$(DISTRIB).cow --configfile $(COWBUILDERBASE)/configfile $(DISTROOP)
294 $(PBUILDERTGZ)/doconfig: /usr/sbin/pbuilder
295 @echo "APTCACHE=$(APTCACHE)" > $(PBUILDERTGZ)/configfile
296 @echo "BUILDPLACE=$(BUILDPLACE)" >> $(PBUILDERTGZ)/configfile
297 @echo "BUILDRESULT=$(BUILDRESULT)" >> $(PBUILDERTGZ)/configfile
299 $(COWBUILDERBASE)/doconfig: /usr/sbin/cowbuilder
300 @echo "APTCACHE=$(APTCACHE)" > $(COWBUILDERBASE)/configfile
301 @echo "BUILDPLACE=$(BUILDPLACE)" >> $(COWBUILDERBASE)/configfile
302 @echo "BUILDRESULT=$(BUILDRESULT)" >> $(COWBUILDERBASE)/configfile
305 sudo apt-get install pbuilder
308 gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
309 gpg --export --armor 40976EAF437D05B5 | sudo apt-key add -
311 /usr/sbin/cowbuilder:
312 sudo apt-get install cowdancer
314 localrepo: $(LOCALREPO) $(LOCALREPO)/conf $(LOCALREPO)/conf/distributions
316 reprepro: $(LOCALREPO)/pool/main/$(PKGLETTER)/$(PKGNAME)/$(DSCFILE) # Install in repository
318 $(LOCALREPO)/pool/main/$(PKGLETTER)/$(PKGNAME)/$(DSCFILE): $(BUILDRESULT)/$(CHANGEFILE)
319 @echo "Installing $(BUILDRESULT)/$(CHANGEFILE) in $@"
320 cd $(BUILDRESULT); reprepro $(ASKPASS) -Vb $(LOCALREPO) include $(DISTRIB) $(CHANGEFILE)
322 $(LOCALREPO)/conf/distributions:
323 for xdist in $(DISTRIBLIST) ; do \
324 dist=`echo $$xdist | cut -c2-` ; \
325 echo "Codename: $$dist" ; \
326 echo "Suite: $$dist" ; \
327 echo "Components: main" ; \
328 echo "UDebComponents: main" ; \
329 echo "Architectures: amd64 i386 source" ; \
330 echo "Origin: $(ORIGIN)" ; \
331 echo "Version: 5.0" ; \
332 echo "Description: My $(FUSIONFORGE) $$dist repository" ; \
333 echo "SignWith: $(SIGNKEY)" ; \
334 echo "" ; done >> $(LOCALREPO)/conf/distributions
337 mkdir $(LOCALREPO)/conf
343 mkdir -p $(BUILDFILES)
346 mkdir -p $(COWBUILDERBASE)
349 mkdir -p $(PBUILDERTGZ)
353 sudo chown `id -u`.`id -g` $@
355 clean: # Clean $(BUILDPLACE) $(BUILDFILES) $(TARBALLS) (intermediate files) #
356 rm -rf $(BUILDPLACE) $(BUILDFILES) $(TARBALLS)
358 cleanenv: # Clean $(COWBUILDERBASE) $(PBUILDERTGZ) (chroots)#
359 rm -rf $(COWBUILDERBASE) $(PBUILDERTGZ)
361 cleancache: # Clean $(APTCACHE) (apt cache) #
364 cleanorig: # Clean $(TARBALLS)/$(ORIGFILE) #
365 rm -f $(TARBALLS)/$(ORIGFILE)