#
# Makefile for tapt88 -- variable-block .tap <-> fixed-block (T88) .tap converter
#
# Copyright (c) 2026 Large Scale Systems Museum
# By Dave McGuire <mcguire@lssmuseum.org>
#

PROG    = tapt88
SRCS    = tapt88.c
HDRS    = version.h
MAN     = docs/tapt88.1
FMTDOC  = docs/t88_format
DOCS    = $(MAN) $(FMTDOC).tex $(FMTDOC).pdf
TESTS   = test_tapt88.sh

VERSION   = $(shell sed -n 's/.*VERSION[ \t]*"\(.*\)".*/\1/p' version.h)
DISTDIR   = $(PROG)-$(VERSION)
DISTFILES = Makefile $(SRCS) $(HDRS) $(DOCS) $(TESTS)

CC      ?= cc
CFLAGS  ?= -O2
CFLAGS  += -std=c99 -D_POSIX_C_SOURCE=200809L -Wall -Wextra -pedantic
LDFLAGS ?=

PREFIX  ?= /usr/local
BINDIR  ?= $(PREFIX)/bin
MANDIR  ?= $(PREFIX)/share/man
MAN1DIR  = $(MANDIR)/man1
DOCDIR  ?= $(PREFIX)/share/docs/$(PROG)

INSTALL ?= install

.PHONY: all clean install uninstall test dist doc

all: $(PROG)

$(PROG): $(SRCS) $(HDRS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRCS)

test: $(PROG)
	./test_tapt88.sh ./$(PROG)

doc: $(FMTDOC).pdf

$(FMTDOC).pdf: $(FMTDOC).tex
	cd docs && latexmk -pdf -interaction=nonstopmode t88_format.tex

install: $(PROG) $(MAN)
	$(INSTALL) -d $(DESTDIR)$(BINDIR) $(DESTDIR)$(MAN1DIR)
	$(INSTALL) -m 755 $(PROG) $(DESTDIR)$(BINDIR)/$(PROG)
	$(INSTALL) -m 644 $(MAN) $(DESTDIR)$(MAN1DIR)/$(PROG).1
	if [ -f $(FMTDOC).pdf ]; then $(INSTALL) -d $(DESTDIR)$(DOCDIR); \
	    $(INSTALL) -m 644 $(FMTDOC).pdf $(DESTDIR)$(DOCDIR)/; fi

uninstall:
	rm -f $(DESTDIR)$(BINDIR)/$(PROG) $(DESTDIR)$(MAN1DIR)/$(PROG).1
	rm -f $(DESTDIR)$(DOCDIR)/t88_format.pdf

clangd:
	bear -- make

# Only the files named in DISTFILES are copied, so .svn and build products
# never end up in the distribution.  --parents keeps docs/; -p keeps
# timestamps, so the formatted PDF stays newer than its source.
dist: $(DISTFILES)
	@test -n "$(VERSION)" || { echo "Cannot read VERSION from version.h"; exit 1; }
	@rm -rf $(DISTDIR)
	@rm -f $(DISTDIR).tar.bz2
	@mkdir $(DISTDIR)
	@cp -p --parents $(DISTFILES) $(DISTDIR)
	@tar -cjf $(DISTDIR).tar.bz2 $(DISTDIR)
	@rm -rf $(DISTDIR)
	@echo Distribution file $(DISTDIR).tar.bz2 created.

# The formatted PDF is a distributed file, so clean leaves it; only
# LaTeX's intermediate files are removed.
clean:
	rm -f $(PROG) *.o *~ docs/*~ $(DISTDIR).tar.bz2
	cd docs && latexmk -c t88_format.tex >/dev/null 2>&1 || true
