PREFIX?=/usr/local
LOCALBASE?=/usr/local/

BINDIR=${PREFIX}/bin
SHAREDIR=${PREFIX}/share/charles
MAN1DIR=${PREFIX}/man/man1
MAN5DIR=${PREFIX}/man/man5

INSTALL_PROGRAM=/usr/bin/install -o root -g wheel -m555 -c -s
INSTALL_MAN=/usr/bin/install -o root -g wheel -m444 -c
INSTALL_DATA?=/usr/bin/install -o root -g wheel -m444 -c

RM=/bin/rm -f
MKDIR=/bin/mkdir -p
SED=/usr/bin/sed
CHOWN=/usr/sbin/chown
CHMOD=/bin/chmod
GZIP_CMD?=/usr/bin/gzip -f
MV=/bin/mv

VERSION=3.52

CC=clang
CP=/bin/cp
MKDIR=/bin/mkdir -p
CFLAGS+= -Wall -DVERSION=\"${VERSION}\"
IFLAGS=-I./
LFLAGS=-lm -lz

.PHONY: all
all: charles

charles: charles.c formatter.o stringstack.o text.o epub.o
	${CC} ${CFLAGS} -o charles charles.c formatter.o text.o epub.o stringstack.o ${IFLAGS} ${LFLAGS}

deflater: deflater.c
	${CC} ${CFLAGS} -o deflater deflater.c ${LFLAGS}

.PHONY: fonts
fonts: deflater courier-prime.z courier-prime-bold.z courier-prime-italic.z

courier-prime.z: courier-prime-cid.ttf
	./deflater courier-prime-cid.ttf courier-prime.z 2> courier-prime-lengths.txt

courier-prime-bold.z: courier-prime-bold-cid.ttf
	./deflater courier-prime-bold-cid.ttf courier-prime-bold.z 2> courier-prime-bold-lengths.txt

courier-prime-italic.z: courier-prime-italic-cid.ttf
	./deflater courier-prime-italic-cid.ttf courier-prime-italic.z 2> courier-prime-italic-lengths.txt

.PHONY: debug
debug: charles.c formatter.c stringstack.c text.c epub.c fonts
	${CC} ${CFLAGS} -g -O0 -o charles charles.c formatter.c text.c epub.c stringstack.c ${IFLAGS} ${LFLAGS}

formatter.c: formatter.pre
	${SED} -e "s|%%PATH%%|${SHAREDIR}|1" formatter.pre > formatter.c

formatter.o: formatter.c fonts
	${CC} ${CFLAGS} -c -o formatter.o formatter.c ${IFLAGS}

text.o: text.c
	${CC} ${CFLAGS} -c -o text.o text.c ${IFLAGS}

epub.o: epub.c
	${CC} ${CFLAGS} -c -o epub.o epub.c ${IFLAGS}

stringstack.o: stringstack.c
	${CC} ${CFLAGS} -c -o stringstack.o stringstack.c ${IFLAGS}

.PHONY: zip
zip:
	cd ebook && zip -X ../ebook.epub mimetype && zip -r ../ebook.epub META-INF OEBPS
	rm -r ebook
	
.PHONY: install
install: all
	${MKDIR} ${BINDIR} ${SHAREDIR}
	${INSTALL_PROGRAM} charles ${BINDIR}
	${INSTALL_DATA} *.z ${SHAREDIR}
	${CP} charles.man charles.1
	${GZIP_CMD} -f charles.1
	${MKDIR} ${MAN1DIR} ${MAN5DIR}
	${INSTALL_MAN} charles.1.gz ${MAN1DIR}
	${CP} tsml.man tsml.5
	${GZIP_CMD} -f tsml.5
	${INSTALL_MAN} tsml.5.gz ${MAN5DIR}

.PHONY: deinstall
deinstall:
	${RM} ${BINDIR}/charles
	${RM} -r ${SHAREDIR}
	${RM} ${MAN1DIR}/charles.*
	${RM} ${MAN5DIR}/tsml.*

.PHONY: clean
clean:
	rm -rf ebook test charles formatter.c deflater *.epub *.pdf *.txt *.z *.z *.rtf *.o *tmp *backup *gz *.core
