#===========================================================================
# CONFIGURABLE MACROS

# BINDIR: The directory into which 'nca' will be installed.  Must
# be on your root partition if you wish to use NCA before any other
# filesystems have been mounted

BINDIR=/sbin

# SSH_PREFIX: ncad will be installed as SSH_PREFIX/sbin/ncad.  Only
# change this if for some reason you don't want ncad installed in /sbin.

SSH_PREFIX = /

# SYSCONF_DIR: the directory in which ncad will look for the
# ncad_config file

SYSCONF_DIR = /etc/nca

# MANDIR: The directory beneath which to install the man pages

MANDIR=/usr/local/man

# Your favourite C compiler

CC = gcc

#===========================================================================
# Little of interest to see below here, play with things at your peril

VERSION=0.9.0

CFLAGS = -O2
BDIR = build
NCADIR = nca
NCA = $(NCADIR)/nca
PKG_VER = nca-$(VERSION)
PKG_DIR = $(BDIR)/$(PKG_VER)
PKG_STUFF = package_stuff
PKG_TAR = nca-$(VERSION).tar.gz

REL_BUILD_DIR = $(HOME)/build
REL_DIR = $(PKG_VER)
REL_BDIR = $(REL_BUILD_DIR)/$(REL_DIR)
REL_TGZ = $(REL_DIR).tar.gz
CHANGELOG = $(REL_BDIR)/ChangeLog

.PHONY: build install spotless clean

#---------------------------------------------------------------------------
# Useful targets


build: nca openssh man

install: install_nca install_ssh install_man install_rc

spotless: rm_nca rm_ssh rm_pkg rm_man clean

clean:
	find . \( -name "*~" -o -name "#*" \) -exec rm -f {} \;

#===========================================================================

#---------------------------------------------------------------------------
# Man pages
.PHONY: man rm_man install_man

man:
	cd man; $(MAKE) man VERSION=$(VERSION)

rm_man:
	cd man; $(MAKE) clean

install_man:
	cd man; $(MAKE) install VERSION=$(VERSION) MANDIR=$(MANDIR)

#---------------------------------------------------------------------------
# rc scripts
.PHONY: install_rc

install_rc:
	cd rc; $(MAKE) install

#---------------------------------------------------------------------------
# OpenSSH targets

.PHONY:  openssh install_ssh unpack_ssh patch_ssh rm_ssh

openssh: openssh.stamp

openssh.stamp: unpack_ssh.stamp patch_ssh.stamp
	ssh_dir=$(BDIR)/openssh* ; \
	cd $$ssh_dir ; \
	set -e ; \
	./configure --prefix=$(SSH_PREFIX) --sysconfdir=$(SYSCONF_DIR) --without-pam --without-rand-helper ; \
	$(MAKE)
	touch openssh.stamp


install_ssh: openssh
	ssh_dir=$(BDIR)/openssh* ; \
	cd $$ssh_dir ; \
	pwd ; \
	$(MAKE) install

unpack_ssh: unpack_ssh.stamp

unpack_ssh.stamp:
	openssh_tgz=openssh-*.tar.gz ; \
	tar -C $(BDIR) -xvzf $$openssh_tgz ;
	touch unpack_ssh.stamp

patch_ssh: patch_ssh.stamp

patch_ssh.stamp:
	ssh_dir=$(BDIR)/openssh* ; \
	patch_dir=`pwd` ; \
	cd $$ssh_dir ; \
	set -e ; \
	patch -p1 < $$patch_dir/keepalive.patch ; \
	patch -p1 < $$patch_dir/mmap-shm.patch ; \
	patch -p1 < $$patch_dir/ncad.patch 
	touch patch_ssh.stamp

rm_ssh:
	rm -fr $(BDIR)/openssh*
	rm -fr *ssh.stamp


#---------------------------------------------------------------------------
# nca targets

.PHONY: nca install_nca unpack_nca rm_nca

nca: 
	cd $(NCADIR) ; $(MAKE) CFLAGS=$(CFLAGS) CC=$(CC)

install_nca:
	cd $(NCADIR) ; $(MAKE) install BINDIR=$(BINDIR)

unpack_nca:
	tar -C $(BDIR) -xvzf nca.tar.gz
	touch unpack_nca.stamp

rm_nca:
	cd $(NCADIR) ; $(MAKE) clean


#---------------------------------------------------------------------------
# binary package builder

.PHONY: package rm_pkg

package: openssh.stamp nca
	rm -fr $(PKG_DIR)
	mkdir $(PKG_DIR)
	cp $(PKG_STUFF)/* $(PKG_DIR)
	cp $(NCADIR)/nca $(PKG_DIR)
	cp README $(PKG_DIR)
	set -e ; \
	ssh_dir=$(BDIR)/openssh* ; \
	cp $$ssh_dir/sshd $(PKG_DIR)/ncad ; \
	cp $$ssh_dir/ncad_config $(PKG_DIR)
	cd $(BDIR) ; \
	tar -cvzf $(PKG_TAR) $(PKG_VER)
	@echo
	@echo Binary tarball built as $(PKG_TAR) in $(BDIR)

rm_pkg:
	rm -fr $(PKG_DIR) $(BDIR)/$(PKG_TAR)

#---------------------------------------------------------------------------
# And a couple of targets that are really only useful if you're the package
# maintainer.

.PHONY: refresh release

# Fetches the latest ncakit sources from James' website

refresh:
	set -e ; \
	tmp=tmp$$$$ ; \
	mkdir $$tmp ; \
	cd $$tmp ; \
	wget -np -nH -mr http://131.111.64.221/ncakit/index.html ; \
	rm ncakit/index.html ; \
	cp ncakit/* . ; \
	cd .. ; rm -fr $$tmp

# Builds a release tarball and signs it
release: spotless
	@if [ -e $(REL_BDIR) ]; then echo "Please delete $(REL_BDIR)"; exit 1; fi
	@if [ -e $(REL_BUILD_DIR)/$(REL_TGZ) ]; then echo "Please delete $(REL_BUILD_DIR)/$(REL_TGZ)"; exit 1; fi
	thisdir=$$(pwd); \
	ln -s $$thisdir $(REL_BDIR);
	tla changelog > $(CHANGELOG)
	cd $(REL_BUILD_DIR); \
	tar --exclude \{arch\} --exclude .arch-ids --exclude .todo --exclude +* --exclude ,* -cvhzf $(REL_TGZ) $(REL_DIR);\
	gpg -b --armor --sign $(REL_TGZ)
	rm $(CHANGELOG)
	rm $(REL_BDIR)

