PROJECT = webapi
VERSION = 4.2.0

PACKAGE = $(shell dpkg-parsechangelog -S Source)_$(shell dpkg-parsechangelog -S Version)
CHANGES = ../$(PACKAGE)_$(shell dpkg-architecture -qDEB_HOST_ARCH).changes

PREFIX = $(if $(DEB_BUILD_ARCH),$(DESTDIR)/usr,/usr/machine/rz)

BINDIR = $(PREFIX)/bin
PERLDIR = $(if $(DEB_BUILD_ARCH),$(DESTDIR)/usr/share,/usr/machine/lib)/perl5
SUPER = NET
MANDIR = $(if $(DEB_BUILD_ARCH),$(DESTDIR)/usr/share,/usr/segment)/man/man3

LIBEXECDIR = /usr/local/libexec
#HOSTS = scc-big-ip-01.scc.kit.edu scc-big-ip-02.scc.kit.edu
#HOSTS = scc-big-ip-03.scc.kit.edu scc-big-ip-04.scc.kit.edu
DEBHOSTS = web-master.scc.kit.edu web1.scc.kit.edu web2.scc.kit.edu web3.scc.kit.edu web4.scc.kit.edu web5.scc.kit.edu lists-mgmt-bookworm.scc.kit.edu lists-kit-02.scc.kit.edu lists-dfn-02.scc.kit.edu lists-test-bookworm.scc.kit.edu ftp.scc.kit.edu proxy2.scc.kit.edu andy.scc.kit.edu # proxy1.scc.kit.edu

SYMPA = lists4.scc.kit.edu

SCRIPTS = fqdn a ptr txt cname soa ns
PERL_MODULES = $(SUPER)/WebAPI.pm
MANPAGE = WebAPI.3pm

#INSTALL = /usr/machine/bin/install -c -p
INSTALL_DATA = $(INSTALL) -m 644
INSTALL_SCRIPT = $(INSTALL) -m 755

.PHONY: all install f5 sympa clean dist deb

all: $(SCRIPTS) $(PERL_MODULES) $(MANPAGE)
	# Fix version number in perl modules
	perl -pi -MCwd -e 'BEGIN{$$version=cwd=~s/.*-//r}s/^(#.*\sv)\S+(\s+\(c\))/$$1$$version$$2/;s/^(our\s+\$$VERSION\s*=\s*")[v\d._]+(";)/$$1v$$version$$2/' $(PERL_MODULES)

$(MANPAGE): $(SUPER)/WebAPI.pm
	pod2man -s 3pm $< >$@

install: all
	test -d $(BINDIR) || mkdir -p $(BINDIR)
	#$(INSTALL_SCRIPT) $(SCRIPTS) $(BINDIR)
	# F5 has no perldiag.pod
	set -x; for file in $(SCRIPTS); do sed 's/^use diagnostics;$$/#&/' "$${file}" >"$(BINDIR)/$${file}" && chmod 755 "$(BINDIR)/$${file}"; done
	test -d $(PERLDIR)/$(SUPER) || mkdir -p $(PERLDIR)/$(SUPER)
	$(INSTALL_SCRIPT) $(PERL_MODULES) $(PERLDIR)/$(SUPER)
	test -d $(MANDIR) || mkdir -p $(MANDIR)
	$(INSTALL_DATA) $(MANPAGE) $(MANDIR)/$(SUPER)::$(MANPAGE)
	printenv >/tmp/install

f5: all
	ssh=/usr/bin/ssh; test -x $${ssh} || ssh=ssh2; \
	scp=/usr/bin/scp; test -x $${scp} || scp=scp2; \
	for host in $(HOSTS); do \
		$${ssh} -x -a -k root@$${host} 'mount -o rw,remount /usr'; \
		$${ssh} -x -a -k root@$${host} 'mkdir -p $(LIBEXECDIR)/$(SUPER)'; \
		$${scp} -p $(PERL_MODULES) root@$${host}:$(LIBEXECDIR)/$(SUPER); \
		$${ssh} -x -a -k root@$${host} 'mount -o ro,remount /usr'; \
		tar cCf $$HOME - .access/smime/NET-WebAPI | $${ssh} -x -a -k $${host} 'tar xf -'; \
	done

sympa: all
	ssh=/usr/bin/ssh; test -x $${ssh} || ssh=ssh2; \
	scp=/usr/bin/scp; test -x $${scp} || scp=scp2; \
	for host in $(SYMPA); do \
		tar cCf $$HOME - .access/smime/NET-WebAPI | $${ssh} -x -a -k $${host} 'tar xf -'; \
	done

clean:
	rm -f $(MANPAGE)

dist: clean
	cd ..; 	tar cf - $(PROJECT)-$(VERSION) | bzip2 >$(PROJECT)-$(VERSION).tar.bz2

deb $(CHANGES): $(MAKEFILE_LIST) debian/* debian/*/* $(SCRIPTS) $(PERL_MODULES)
	cme check -strict dpkg
	# While we share directory structure with rzsoft, fix VERSION in Makefile and Homepage in debian/control
	perl -pi -MCwd -e 'BEGIN{$$version=cwd=~s/.*-//r}s/^(VERSION\s*=\s*).*$$/$$1$$version/' Makefile
	perl -pi -MCwd -e 'BEGIN{$$dir=cwd=~s!.*/!!r}s!^(Homepage:.*/)[^/]+/$$!$$1$$dir/!' debian/control
	env LC_ALL=C.UTF-8 dpkg-buildpackage -I -I.old --check-command=lintian --check-option=-i --check-option=-I --check-option=--suppress-tags-from-file=debian/changes/lintian-overrides -tc

dput: $(CHANGES)
	# Assert all debugging uses have been commented
	! egrep '^use (lib|diagnostics)' $(SCRIPTS)
	dput $(CHANGES) && rm -f ../$(PACKAGE)[_.]* || echo "Failure might mean same version is already uploaded; consider dput-remove"

deploy: $(CHANGES)
	for host in $(DEBHOSTS); do \
		echo "*** $${host} ***"; \
		ssh root@$${host} 'dpkg-deb --fsys-tarfile - | tar -C / -x' < ../$$(sed -ne '1s/^\([^ ]*\)  *(\([^)]*\)).*/\1_\2/p' debian/changelog)_all.deb; \
	done
	rm -f ../$(PACKAGE)[_.]*

upgrade:
	for host in $(DEBHOSTS); do \
		echo "*** $${host} ***"; \
		ssh root@$${host} 'apt-get update && env DEBIAN_FRONTEND=noninteractive apt-get -y upgrade'; \
	done
