# vim: noexpandtab tabstop=8 shiftwidth=8 syntax=make # # Builds Subversion. # # Links statically, if you need to debug mod_dav_svn # this file can't help you. # # Pass the branch you want to build in BRANCH, e.g. # $ make BRANCH="1.5.x" # BRANCH ?= trunk SVN_WC = $(PWD)/svn-${BRANCH} PREFIX = $(PWD)/prefix SVN_PREFIX = $(PREFIX)/svn-$(BRANCH) DISTDIR = $(PWD)/distfiles SRCDIR = $(PWD)/src OBJDIR = $(PWD)/obj APR_VER = 1.3.2 NEON_VER = 0.28.2 SERF_VER = 0.2.0 SQLITE_VER = 3.6.3 APR_DIST = apr-$(APR_VER).tar.gz APR_UTIL_DIST = apr-util-$(APR_VER).tar.gz NEON_DIST = neon-$(NEON_VER).tar.gz SERF_DIST = serf-$(SERF_VER).tar.bz2 SQLITE_DIST = sqlite-$(SQLITE_VER).tar.gz # We do basic MD5 checking to prevent hassle with broken downloads. APR_DIST_MD5 = de95101173669bed731bede628a8cf69 APR_UTIL_DIST_MD5 = ec615024cf2bbf30f67007ed8dcaf744 NEON_DIST_MD5 = b99b3f44e8507ae2d17362f1b34aaf02 SERF_DIST_MD5 = cda4d1f871fbbad1b32ed8fd6a8149cc SQLITE_DIST_MD5 = 671d2715f33158abc47a7a2ddd6066c5 DISTFILES = $(DISTDIR)/$(APR_DIST) \ $(DISTDIR)/$(APR_UTIL_DIST) \ $(DISTDIR)/$(NEON_DIST) \ $(DISTDIR)/$(SERF_DIST) \ $(DISTDIR)/$(SQLITE_DIST) ifeq ($(shell uname),Linux) FETCH_CMD = wget MD5_CMD = md5sum MD5_GET = cut -d ' ' -f 1 else # *BSD FETCH_CMD = ftp MD5_CMD = md5 MD5_GET = cut -d'=' -f 2 endif APR_URL = ftp://ftp.fu-berlin.de/unix/www/apache/apr/$(APR_DIST) APR_UTIL_URL = ftp://ftp.fu-berlin.de/unix/www/apache/apr/$(APR_UTIL_DIST) NEON_URL = http://webdav.org/neon/$(NEON_DIST) SERF_URL = http://serf.googlecode.com/files/$(SERF_DIST) SQLITE_URL = http://www.sqlite.org/$(SQLITE_DIST) APR_SRCDIR = $(SRCDIR)/apr-$(APR_VER) APR_UTIL_SRCDIR = $(SRCDIR)/apr-util-$(APR_VER) NEON_SRCDIR = $(SRCDIR)/neon-$(NEON_VER) SERF_SRCDIR = $(SRCDIR)/serf-$(SERF_VER) SERF_SRCDIR = $(SRCDIR)/serf-$(SERF_VER) SQLITE_SRCDIR = $(SRCDIR)/sqlite-$(SQLITE_VER) SVN_SRCDIR = $(SVN_WC) APR_OBJDIR = $(OBJDIR)/apr-$(APR_VER) APR_UTIL_OBJDIR = $(OBJDIR)/apr-util-$(APR_VER) NEON_OBJDIR = $(OBJDIR)/neon-$(NEON_VER) SERF_OBJDIR = $(OBJDIR)/serf-$(SERF_VER) SQLITE_OBJDIR = $(OBJDIR)/sqlite-$(SQLITE_VER) SVN_OBJDIR = $(OBJDIR)/$(shell basename $(SVN_WC)) # Tweak this for out-of-tree builds. Note that running individual # tests in the test suite won't work conveniently with out-of-tree # builds! svn_builddir ?=$(SVN_SRCDIR) ####################################################################### # Main targets. ####################################################################### .PHONY: all fetch reset clean nuke all: dirs-create apr-install apr-util-install neon-install \ serf-install sqlite-install svn-install # If you just want to download distfiles, use this target. fetch: $(PWD)/.dirs-created $(DISTFILES) # Use these to start a build from the beginning. reset: dirs-reset apr-reset apr-util-reset neon-reset serf-reset sqlite-reset # Use to save disc space. clean: apr-clean apr-util-clean neon-clean serf-clean svn-clean sqlite-clean # Nukes everything (including installed binaries!) # Use this to start ALL OVER AGAIN! Use with caution! nuke: @echo @echo "I will now remove the following directories PERMANENTLY:" @echo @echo " $(SRCDIR)" @echo " $(OBJDIR)" @echo " $(PREFIX)" @echo @echo -n 'Do you want me to continue? ([no]/yes): ' @read ANSWER ; \ case $$ANSWER in \ yes) echo "You said $$ANSWER. I will continue."; \ echo rm -rf $(SRCDIR) $(OBJDIR) $(PREFIX); \ rm -rf $(SRCDIR) $(OBJDIR) $(PREFIX); \ echo "Remember to reset the build!"; \ ;; \ "") echo "You said no."; \ ;; \ *) echo "You said $$ANSWER."; \ ;; \ esac ####################################################################### # directories ####################################################################### dirs-create: $(PWD)/.dirs-created dirs-reset: rm -f $(PWD)/.dirs-created $(PWD)/.dirs-created: -$(foreach d,$(PREFIX) $(DISTDIR) $(SRCDIR) $(OBJDIR), \ [ -d ${d} ] || mkdir -p ${d};) touch $@ ####################################################################### # apr ####################################################################### apr-unpack: $(APR_OBJDIR)/.unpacked apr-configure: $(APR_OBJDIR)/.configured apr-compile: $(APR_OBJDIR)/.compiled apr-install: $(APR_OBJDIR)/.installed apr-reset: rm -f $(foreach f, .unpacked .configured .compiled .installed, \ $(APR_OBJDIR)/$(f)) apr-clean: -(cd $(APR_OBJDIR) && make clean) # fetch distfile for apr $(DISTDIR)/$(APR_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(APR_URL) # unpack apr $(APR_OBJDIR)/.unpacked: $(DISTDIR)/$(APR_DIST) [ -d $(APR_OBJDIR) ] || mkdir -p $(APR_OBJDIR) test `$(MD5_CMD) $(DISTDIR)/$(APR_DIST) | $(MD5_GET)` \ = $(APR_DIST_MD5) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(APR_DIST) touch $@ # configure apr $(APR_OBJDIR)/.configured: $(APR_OBJDIR)/.unpacked cd $(APR_OBJDIR) \ && $(APR_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --disable-shared \ --enable-maintainer-mode touch $@ # compile apr $(APR_OBJDIR)/.compiled: $(APR_OBJDIR)/.configured (cd $(APR_OBJDIR) && make) touch $@ # install apr $(APR_OBJDIR)/.installed: $(APR_OBJDIR)/.compiled (cd $(APR_OBJDIR) && make install) touch $@ ####################################################################### # apr-util ####################################################################### apr-util-unpack: $(APR_UTIL_OBJDIR)/.unpacked apr-util-configure: $(APR_UTIL_OBJDIR)/.configured apr-util-compile: $(APR_UTIL_OBJDIR)/.compiled apr-util-install: $(APR_UTIL_OBJDIR)/.installed apr-util-reset: rm -f $(foreach f, .unpacked .configured .compiled .installed, \ $(APR_UTIL_OBJDIR)/$(f)) apr-util-clean: -(cd $(APR_UTIL_OBJDIR) && make clean) # fetch distfile for apr-util $(DISTDIR)/$(APR_UTIL_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(APR_UTIL_URL) # unpack apr-util $(APR_UTIL_OBJDIR)/.unpacked: $(DISTDIR)/$(APR_UTIL_DIST) [ -d $(APR_UTIL_OBJDIR) ] || mkdir -p $(APR_UTIL_OBJDIR) test `$(MD5_CMD) $(DISTDIR)/$(APR_UTIL_DIST) | $(MD5_GET)` \ = $(APR_UTIL_DIST_MD5) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(APR_UTIL_DIST) touch $@ # configure apr-util $(APR_UTIL_OBJDIR)/.configured: $(APR_UTIL_OBJDIR)/.unpacked cd $(APR_UTIL_OBJDIR) \ && $(APR_UTIL_SRCDIR)/configure \ --prefix=$(PREFIX)/apr \ --disable-shared \ --enable-maintainer-mode \ --with-apr=$(PREFIX)/apr \ --with-expat=/usr/local \ --with-iconv=/usr/local \ --with-berkeley-db=/usr/local touch $@ # compile apr-util $(APR_UTIL_OBJDIR)/.compiled: $(APR_UTIL_OBJDIR)/.configured (cd $(APR_UTIL_OBJDIR) && make) touch $@ # install apr-util $(APR_UTIL_OBJDIR)/.installed: $(APR_UTIL_OBJDIR)/.compiled (cd $(APR_UTIL_OBJDIR) && make install) touch $@ ####################################################################### # neon ####################################################################### neon-unpack: $(NEON_OBJDIR)/.unpacked neon-configure: $(NEON_OBJDIR)/.configured neon-compile: $(NEON_OBJDIR)/.compiled neon-install: $(NEON_OBJDIR)/.installed neon-reset: rm -f $(foreach f, .unpacked .configured .compiled .installed, \ $(NEON_OBJDIR)/$(f)) neon-clean: -(cd $(NEON_OBJDIR) && make clean) # fetch distfile for neon $(DISTDIR)/$(NEON_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(NEON_URL) # unpack neon $(NEON_OBJDIR)/.unpacked: $(DISTDIR)/$(NEON_DIST) [ -d $(NEON_OBJDIR) ] || mkdir -p $(NEON_OBJDIR) test `$(MD5_CMD) $(DISTDIR)/$(NEON_DIST) | $(MD5_GET)` \ = $(NEON_DIST_MD5) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(NEON_DIST) touch $@ # configure neon $(NEON_OBJDIR)/.configured: $(NEON_OBJDIR)/.unpacked cd $(NEON_OBJDIR) \ && env CFLAGS="-g" $(NEON_SRCDIR)/configure \ --prefix=$(PREFIX)/neon \ --disable-shared \ --with-ssl touch $@ # compile neon $(NEON_OBJDIR)/.compiled: $(NEON_OBJDIR)/.configured (cd $(NEON_OBJDIR) && make) touch $@ # install neon $(NEON_OBJDIR)/.installed: $(NEON_OBJDIR)/.compiled (cd $(NEON_OBJDIR) && make install) touch $@ ####################################################################### # serf ####################################################################### serf-unpack: $(SERF_OBJDIR)/.unpacked serf-configure: $(SERF_OBJDIR)/.configured serf-compile: $(SERF_OBJDIR)/.compiled serf-install: $(SERF_OBJDIR)/.installed serf-reset: rm -f $(foreach f, .unpacked .configured .compiled .installed, \ $(SERF_OBJDIR)/$(f)) serf-clean: -(cd $(SERF_OBJDIR) && make clean) # fetch distfile for serf $(DISTDIR)/$(SERF_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(SERF_URL) # unpack serf $(SERF_OBJDIR)/.unpacked: $(DISTDIR)/$(SERF_DIST) [ -d $(SERF_OBJDIR) ] || mkdir -p $(SERF_OBJDIR) test `$(MD5_CMD) $(DISTDIR)/$(SERF_DIST) | $(MD5_GET)` \ = $(SERF_DIST_MD5) tar -C $(SRCDIR) -jxf $(DISTDIR)/$(SERF_DIST) touch $@ # compile serf (serf won't compile outside its source tree) $(SERF_OBJDIR)/.compiled: $(SERF_OBJDIR)/.unpacked cd $(SERF_SRCDIR) && \ ./serfmake --with-apr=$(PREFIX)/apr \ --prefix=$(PREFIX)/serf \ build touch $@ # install serf $(SERF_OBJDIR)/.installed: $(SERF_OBJDIR)/.compiled cd $(SERF_SRCDIR) && \ ./serfmake --with-apr=$(PREFIX)/apr \ --prefix=$(PREFIX)/serf \ install touch $@ ####################################################################### # sqlite ####################################################################### sqlite-unpack: $(SQLITE_OBJDIR)/.unpacked sqlite-configure: $(SQLITE_OBJDIR)/.configured sqlite-compile: $(SQLITE_OBJDIR)/.compiled sqlite-install: $(SQLITE_OBJDIR)/.installed sqlite-reset: rm -f $(foreach f, .unpacked .configured .compiled .installed, \ $(SQLITE_OBJDIR)/$(f)) sqlite-clean: -(cd $(SQLITE_OBJDIR) && make clean) # fetch distfile for sqlite $(DISTDIR)/$(SQLITE_DIST): cd $(DISTDIR) && $(FETCH_CMD) $(SQLITE_URL) # unpack sqlite $(SQLITE_OBJDIR)/.unpacked: $(DISTDIR)/$(SQLITE_DIST) [ -d $(SQLITE_OBJDIR) ] || mkdir -p $(SQLITE_OBJDIR) test `$(MD5_CMD) $(DISTDIR)/$(SQLITE_DIST) | $(MD5_GET)` \ = $(SQLITE_DIST_MD5) tar -C $(SRCDIR) -zxf $(DISTDIR)/$(SQLITE_DIST) touch $@ # configure sqlite $(SQLITE_OBJDIR)/.configured: $(SQLITE_OBJDIR)/.unpacked cd $(SQLITE_OBJDIR) \ && $(SQLITE_SRCDIR)/configure \ --prefix=$(PREFIX)/sqlite \ --disable-shared \ --enable-debug touch $@ # compile sqlite $(SQLITE_OBJDIR)/.compiled: $(SQLITE_OBJDIR)/.configured (cd $(SQLITE_OBJDIR) && make) touch $@ # install sqlite $(SQLITE_OBJDIR)/.installed: $(SQLITE_OBJDIR)/.compiled (cd $(SQLITE_OBJDIR) && make install) touch $@ ####################################################################### # svn ####################################################################### .PHONY: svn-configure svn-compile svn-install svn-bindings-compile \ svn-bindings-install svn-clean svn-install-all: svn-install svn-bindings-install svn-configure: $(SVN_OBJDIR)/.configured svn-compile: $(SVN_OBJDIR)/.compiled svn-bindings-compile: $(SVN_OBJDIR)/.bindings-compiled svn-install: $(SVN_OBJDIR)/.installed svn-bindings-install: $(SVN_OBJDIR)/.bindings-installed svn-reset: rm -f $(foreach f, .configured .compiled .installed \ .bindings-compiled .bindings-installed, \ $(SVN_OBJDIR)/$(f)) svn-clean: -(cd $(svn_builddir) && make clean) # checkout svn if not present yet $(SVN_OBJDIR)/.checked-out: [ -d $(SVN_OBJDIR) ] || mkdir -p $(SVN_OBJDIR) if [ $(BRANCH) != trunk ]; then \ branchdir="branches/"; \ else \ branchdir=""; \ fi; \ if [ ! -d svn-$(BRANCH) ]; then \ svn co https://svn.collab.net/repos/svn/$${branchdir}$(BRANCH) \ svn-$(BRANCH); \ fi touch $@ # configure svn $(SVN_OBJDIR)/.configured: $(SVN_OBJDIR)/.checked-out cd $(SVN_SRCDIR) && ./autogen.sh cd $(svn_builddir) && \ $(SVN_SRCDIR)/configure --enable-maintainer-mode \ --disable-shared \ --with-ssl \ --prefix="$(SVN_PREFIX)" \ --with-apr="$(PREFIX)/apr" \ --with-apr-util="$(PREFIX)/apr" \ --with-neon="$(PREFIX)/neon" \ --with-serf="$(PREFIX)/serf" \ --with-sqlite="$(PREFIX)/sqlite" touch $@ # compile svn $(SVN_OBJDIR)/.compiled: $(SVN_OBJDIR)/.configured cd $(svn_builddir) \ && make touch $@ # install svn $(SVN_OBJDIR)/.installed: $(SVN_OBJDIR)/.compiled cd $(svn_builddir) \ && make install touch $@ $(SVN_OBJDIR)/.bindings-compiled: $(SVN_OBJDIR)/.installed cd $(svn_builddir) \ && make swig-py \ && make swig-rb \ && make swig-pl touch $@ $(SVN_OBJDIR)/.bindings-installed: $(SVN_OBJDIR)/.bindings-compiled cd $(svn_builddir) \ && make install-swig-py DESTDIR="$(SVN_PREFIX)" \ && make install-swig-rb DESTDIR="$(SVN_PREFIX)" \ && make install-swig-pl-lib cd $(svn_builddir)/subversion/bindings/swig/perl/native \ && perl Makefile.PL PREFIX="$(SVN_PREFIX)" \ && make install touch $@