# Topal: GPG/GnuPG and Alpine/Pine integration
# Copyright (C) 2001--2018  Phillip J. Brooke
# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

.PHONY:	all binary doc clean realclean distclean package tarball install distrib all2 FORCE

RELEASECODE=$(shell grep '^<dt>' Changelog.html | tail -1 | sed 's/.* release //; sx</a>.*$$xx')
ifdef SOURCE_DATE_EPOCH
  BUILDDATE := $(shell date '+%Y-%m-%dT%H%M%S%Z' -d @$(SOURCE_DATE_EPOCH))
else
  BUILDDATE := $(shell date '+%Y-%m-%dT%H%M%S%Z')
endif

# If you intend to redistribute this package, you will obviously need
# to substitute your own key id here.
MYKEY=0x47DC67A1

include Buildflags.mk

GENFILES=$(addprefix ./,version_id.adb help.ads help.adb b~topal.ads b~topal.adb)
CFILES=$(shell find . -maxdepth 1 -name \*.c)
ADSFILES=$(filter-out $(GENFILES),$(shell find . -maxdepth 1 -name \*.ads))
ADBFILES=$(filter-out $(GENFILES),$(shell find . -maxdepth 1 -name \*.adb))
OTHERFILES=Makefile Buildflags.mk Changelog.html Features.html topal.tex topal.man COPYING mkversionid mkversionidtex mkhelp help.txt mkdistrib cygwin.patch $(shell find . -maxdepth 1 -name pine-\*.patch) $(shell find . -maxdepth 1 -name alpine-\*.patch) $(shell find . -maxdepth 1 -name alpine-\*.patch-\*)
c_objects := $(CFILES:c=o)
TOPALDEPS=$(c_objects) version_id.adb help.ads help.adb $(ADSFILES) $(ADBFILES)

DESTDIR ?=
prefix ?= /usr
INSTALLPATH ?= $(DESTDIR)$(prefix)
INSTALLPATHBIN ?= $(INSTALLPATH)/bin
INSTALLPATHMAN ?= $(INSTALLPATH)/share/man
INSTALLPATHDOC ?= $(INSTALLPATH)/share/doc/topal
INSTALLPATHPATCHES ?= $(INSTALLPATH)/share/topal/patches

# Set this to "true" to keep debugging symbols.
strip ?= strip


# The default action.
all:	binary topal.pdf

binary: topal mime-tool

all2:	package distrib

$(c_objects): %.o: %.c
	$(CC) -c $(default_CFLAGS) $(CFLAGS) $(CPPFLAGS) $< -o $@

mime-tool:	
	make -C MIME-tool

topal:	$(TOPALDEPS)
	gnatmake $(gnatmake_options) topal.adb \
	  -cargs $(default_ADAFLAGS) $(ADAFLAGS) \
	  -largs $(default_LDFLAGS) $(LDFLAGS) \

# FORCE, because BUILDDATE changes each time....
version_id.adb:	mkversionid FORCE
	./mkversionid $(RELEASECODE) $(BUILDDATE)

versionid.tex:	mkversionidtex FORCE
	./mkversionidtex $(RELEASECODE) $(BUILDDATE)

help.ads help.adb: mkhelp help.txt
	./mkhelp

doc:	topal.pdf

topal.pdf:	topal.tex versionid.tex
	pdflatex topal.tex && pdflatex topal.tex

install:	all
	install -d $(INSTALLPATHBIN) $(INSTALLPATHDOC) $(INSTALLPATHMAN)/man1 $(INSTALLPATHPATCHES)
	install -m 755 -s --strip-program=$(strip) topal $(INSTALLPATHBIN)
	install -m 644 Features.html Changelog.html topal.pdf COPYING $(INSTALLPATHDOC)
	install -m 644 topal.man $(INSTALLPATHMAN)/man1/topal.1
	install -m 644 pine-*.patch alpine-*.patch alpine-*.patch-* $(INSTALLPATHPATCHES)
	install -m 755 -s --strip-program=$(strip) MIME-tool/mime-tool $(INSTALLPATHBIN)
	install -m 644 MIME-tool/mime-tool.man $(INSTALLPATHMAN)/man1/mime-tool.1

clean:
	$(RM) *.o *.ali $(GENFILES)
	# Clean LaTeX stuff.
	$(RM) $(addprefix topal.,toc out log aux)
	# Clean packaging directories.
	-$(RM) -r topal-[0-9]*
	make -C MIME-tool clean

distclean realclean:	clean
	$(RM) topal README.txt *~ \
	  $(addprefix topal,.gz .gz.asc -ps -ps.gz -ps.gz.asc) \
	  $(addprefix topal-package*,.tgz .tgz.sig .tgz.asc)
	-$(RM) -r www www.bak
	make -C MIME-tool realclean

package:	topal-package-$(RELEASECODE).tgz topal-package-$(RELEASECODE).tgz.asc

tarball:	topal-package-$(RELEASECODE).tgz

topal-package-$(RELEASECODE).tgz:	$(CFILES) $(ADSFILES) $(ADBFILES) $(OTHERFILES)
	-$(RM) -r topal-$(RELEASECODE)
	mkdir -p topal-$(RELEASECODE)/MIME-tool
	cp -r $(CFILES) $(ADSFILES) $(ADBFILES) $(OTHERFILES) screens topal-$(RELEASECODE)
	cp -r $(filter-out MIME-tool/mime-tool,$(wildcard MIME-tool/*)) topal-$(RELEASECODE)/MIME-tool
	find topal-$(RELEASECODE) -type f | xargs chmod 644
	find topal-$(RELEASECODE) -type f -name mk\* | xargs chmod 755
	chmod 755 topal-$(RELEASECODE)
	tar cvzf topal-package-$(RELEASECODE).tgz topal-$(RELEASECODE)

topal-package-$(RELEASECODE).tgz.asc:	topal-package-$(RELEASECODE).tgz
	$(RM) topal-package-$(RELEASECODE).tgz.asc
	-gpg --detach-sign --armor --local-user=$(MYKEY) --use-agent topal-package-$(RELEASECODE).tgz

distrib:	 topal-package-$(RELEASECODE).tgz.asc mkdistrib
	-$(RM) -r www
	mkdir www
	cp topal-package-$(RELEASECODE).tgz topal-package-$(RELEASECODE).tgz.asc topal.pdf Changelog.html COPYING www
	cd www && ../mkdistrib $(RELEASECODE)

FORCE:
