# Makefile for PS utilities

BINMODE=0755
MANMODE=0644
CHMOD=chmod
INSTALL=install -c -m $(BINMODE)
INSTALLMAN=install -c -m $(MANMODE)
BINDIR=/usr/local/bin
SCRIPTDIR=$(BINDIR)
MANDIR=/usr/local/share/man/man1
MANEXT=1
PAPER=a4
INCLUDEDIR=/usr/local/share/tex/dvips
PERL=/usr/local/bin/perl

# CFLAGS variable controls compilation. Add following flags if necessary:
#	-DVMS	if compiling under VMS
#	-DMSDOS	if compiling under MSDOS
CFLAGS=-g -DPAPER=\"$(PAPER)\"

# epsffit fits an epsf file to a given bounding box
# psbook rearranges pages into signatures
# psselect selects page ranges
# pstops performs general page rearrangement and merging
# psnup puts multiple logical pages on one physical page

# definitions for Unix
exe =
obj = .o
BIN = psbook psselect pstops epsffit psnup
SHELLSCRIPTS = getafm
PERLSCRIPTS = fixfmps fixmacps fixpsditps fixpspps fixtpps fixwfwps fixwpps \
              fixwwps
INCLUDES = md68_0.ps md71_0.ps
MANPAGES = psbook.$(MANEXT) psselect.$(MANEXT) pstops.$(MANEXT) \
           epsffit.$(MANEXT) psnup.$(MANEXT) getafm.$(MANEXT) \
           fixfmps.$(MANEXT) fixmacps.$(MANEXT) fixpsditps.$(MANEXT) \
           fixpspps.$(MANEXT) fixtpps.$(MANEXT) fixwfwps.$(MANEXT) \
           fixwpps.$(MANEXT) fixwwps.$(MANEXT)
RM = rm -f

# Definitions for MSDOS
#exe = .exe
#obj = .obj
#BIN = psbook$(exe) psselect$(exe) pstops$(exe) epsffit$(exe) psnup$(exe)
#PERLSCRIPTS =
#INCLUDES =
#MANPAGES =
#RM = del

.SUFFIXES: .man .$(MANEXT)

.man.$(MANEXT):
	R=`sed -n "s/.*RELEASE *//p" patchlevel.h`; \
	P=`sed -n "s/.*PATCHLEVEL *//p" patchlevel.h`; \
	M=`echo $(MANPAGES) | sed -e "s/\.$(MANEXT)/($(MANEXT)),/g" -e "s/, *$$//"`; \
	sed -e "s/@PL@/$$P/" -e "s/@REL@/$$R/" -e "s/@MAN@/$$M/" \
	    -e "s/@PAPER@/$(PAPER)/" $< >$@

all: $(BIN) $(PERLSCRIPTS) $(MANPAGES)

epsffit$(exe): epsffit.c
	$(CC) $(CFLAGS) -o epsffit$(exe) epsffit.c

psnup$(exe): psnup$(obj) psutil$(obj) psspec$(obj)
	$(CC) $(CFLAGS) -o psnup$(exe) psutil$(obj) psspec$(obj) psnup$(obj)

psbook$(exe): psbook$(obj) psutil$(obj)
	$(CC) $(CFLAGS) -o psbook$(exe) psutil$(obj) psbook$(obj)

psselect$(exe): psselect$(obj) psutil$(obj)
	$(CC) $(CFLAGS) -o psselect$(exe) psutil$(obj) psselect$(obj)

pstops$(exe): pstops$(obj) psutil$(obj) psspec$(obj)
	$(CC) $(CFLAGS) -o pstops$(exe) psutil$(obj) psspec$(obj) pstops$(obj)

psnup$(obj): psutil.h patchlevel.h psspec.h psnup.c

psbook$(obj): psutil.h patchlevel.h psbook.c

pstops$(obj): psutil.h patchlevel.h psspec.h pstops.c

psselect$(obj): psutil.h patchlevel.h psselect.c

psutil$(obj): psutil.h patchlevel.h psutil.c

psspec$(obj): psutil.h patchlevel.h psspec.h psspec.c

fixfmps: fixfmps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixmacps: fixmacps.pl
	sed -e "s%@PERL@%$(PERL)%" \
	    -e "s%@INCLUDE@%$(INCLUDEDIR)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixpsditps: fixpsditps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixpspps: fixpspps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixtpps: fixtpps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixwfwps: fixwfwps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixwpps: fixwpps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

fixwwps: fixwwps.pl
	sed -e "s%@PERL@%$(PERL)%" $? >$@; \
	$(CHMOD) $(BINMODE) $@

clean:
	$(RM) *$(obj)

veryclean realclean: clean
	$(RM) $(BIN) $(PERLSCRIPTS) $(MANPAGES)

install: install.bin install.script install.man install.include

install.bin: $(BIN)
	@for i in $(BIN); do \
		echo Installing $$i; \
		$(INSTALL) $$i $(BINDIR); \
	done

install.script: $(PERLSCRIPTS) $(SHELLSCRIPTS)
	@for i in $(PERLSCRIPTS) $(SHELLSCRIPTS); do \
		echo Installing $$i; \
		$(INSTALL) $$i $(SCRIPTDIR); \
	done

install.include: $(INCLUDES)
	@for i in $(INCLUDES); do \
		echo Installing $$i; \
		$(INSTALLMAN) $$i $(INCLUDEDIR); \
	done

install.man: $(MANPAGES)
	@for i in $(MANPAGES); do \
		echo Installing manual page for $$i; \
		$(INSTALLMAN) $$i $(MANDIR)/$$i; \
	done

