
hints:
	@echo To build apt-cacher-ng and/or helper programs, use:
	@echo 'make acng        (create apt-cacher-ng binary with some method)'
	@echo 'make acng-whole  (simple GCC based build, dynamic linking, optimized)'
	@echo 'make acng-debug  (simple GCC based build, with debug logging)'
	@echo 'make acng-static (simple GCC based build, static linking)'
	@echo 'make in.acng     (wrapper client for use with inetd)'
	@echo 'make acngfs      (http file system, needs FUSE library)'

acng: acng-whole acng-debug
	cp build/acng-whole apt-cacher-ng
	cp build/acng-debug apt-cacher-ng.debug

SRCS = $(wildcard source/*.cc) 3rd-party/md5.cc
embedded: acng-small
acng-small: $(SRCS)
	$(CXX) -o $@ -combine -Os -fno-exceptions $(SRCS) $(CXXFLAGS) -I include -lpthread -lz -lbz2
	strip $@

embstatic: acng-static
acng-static: $(SRCS)
	$(CXX) -o $@ -combine -Os -fno-exceptions $(CXXFLAGS) $(SRCS) -I include -static $(LDFLAGS) -lpthread -lz -lbz2

acng-whole: build/acng-whole
	
build/acng-whole: $(SRCS)
	mkdir -p build
	# for some reason -combine doesn't work well with -fwhole-program, trying a workaround...
	cat $(SRCS) > build/all.cc
	$(CXX) -o $@ -fwhole-program -g -O2 $(CXXFLAGS) build/all.cc -Iinclude -I3rd-party -lpthread $(LDFLAGS) -lz -lbz2
	@-test -d ../unstripped && cp build/acng-whole ../unstripped/apt-cacher-ng.$$(dpkg-parsechangelog |grep ^Version: | cut -f2 -d:) || true
	strip $@

acng-debug: build/acng-debug
	
build/acng-debug: $(SRCS)
	mkdir -p build
	# for some reason -combine doesn't work well with -fwhole-program, trying a workaround...
	cat $(SRCS) > build/all.cc
	$(CXX) -o $@ -fwhole-program -g -O2 $(CXXFLAGS) -DDEBUG build/all.cc -Iinclude -I3rd-party -lpthread $(LDFLAGS) -lz -lbz2

lite: $(SRCS)
	$(CXX) -o $@ -combine -Os -fno-exceptions $(CXXFLAGS) $(SRCS) -I include $(LDFLAGS) -lpthread

in.acng: source/acbuf.cc client/client.cc
	mkdir -p build/cl
	$(CXX) $(CXXFLAGS) -O2 -c -o build/cl/client.o client/client.cc -Iinclude
	$(CXX) -O2 -c -o build/cl/acbuf.o source/acbuf.cc -Iinclude
	$(CC) -o $@ build/cl/client.o build/cl/acbuf.o -lsupc++ -Wl,--as-needed
	strip $@

SRCSMOUNT=source/dlcon.cc source/header.cc fs/src/httpfs.cc source/lockable.cc source/meta.cc source/acbuf.cc source/rechecks.cc source/caddrinfo.cc
acngfs: build/acngfs
build/acngfs: $(SRCSMOUNT)
	mkdir -p build/fs
	$(CXX) -Iinclude -o acngfs `pkg-config fuse --cflags` $(SRCSMOUNT)  -Wl,--as-needed `pkg-config fuse --libs`

doc: doc/src/README.but doc/src/manpage.but doc/src/acngfs.but
	mkdir -p doc/.build doc/html doc/man
	cd doc/.build && halibut --text=README.txt --html --pdf ../src/README.but
	mv doc/.build/*.pdf doc
	mv doc/.build/README.txt doc/README
	mv doc/.build/*.html doc/html
	cd doc/.build && halibut --man ../src/manpage.but && halibut --man ../src/acngfs.but
	mv doc/.build/*.8 doc/man

fixversion: VERSION
	mkdir -p build/tmp
	sed -e 's,^.*define.*ACVERSION.*,#define ACVERSION "$(VERSION)",' < include/acfg.h > build/tmp/hh
	cmp include/acfg.h build/tmp/hh || cp build/tmp/hh include/acfg.h

VERSION=$(shell cat VERSION)
DISTNAME=apt-cacher-ng-$(VERSION)
DEBSRCNAME=apt-cacher-ng_$(shell echo $(VERSION) | sed -e "s,pre,~pre,").orig.tar.gz

clean:
	rm -rf build apt-cacher-ng apt-cacher-ng.debug in.acng acngfs

tarball: fixversion doc
#	if test "$(shell svn status | grep -v -i make)" ; then echo Uncommited files found. Run \"svn status\" to display them. ; exit 1 ; fi
	@if test -f ../$(DISTNAME).tar.gz ; then echo ../$(DISTNAME).tar.gz exists, not overwritting ; exit 1; fi
	-svn up
	rm -rf tmp
	mkdir tmp
	svn export . tmp/$(DISTNAME)
	cp -l tmp/$(DISTNAME)/doc/README tmp/$(DISTNAME)
	rm -rf tmp/$(DISTNAME)/debian tmp/$(DISTNAME)/tmp tmp/$(DISTNAME)/orig tmp/$(DISTNAME)/trash tmp/$(DISTNAME)/contrib
	tar -f - -c -C tmp $(DISTNAME) | gzip -9 > ../$(DISTNAME).tar.gz
	rm -rf tmp
	test -e /etc/debian_version && ln -f ../$(DISTNAME).tar.gz ../$(DEBSRCNAME) || true
	test -e ../tarballs && ln -f ../$(DISTNAME).tar.gz ../tarballs/$(DEBSRCNAME) || true

tarball-remove:
	rm -f ../$(DISTNAME).tar.gz ../tarballs/$(DEBSRCNAME) ../$(DEBSRCNAME) ../build-area/$(DEBSRCNAME)

SVNBASE=$(shell svn info | grep URL: | cut -f2 -d' ' | xargs dirname)
release: tarball
	svn ci
	svn cp $(SVNBASE)/trunk $(SVNBASE)/tags/release_$(shell cat VERSION)

.PHONY: install all doc

