#$Id: Makefile,v 1.0 1991/02/20 16:25:01 ggv Exp $
#
# Makefile for installing TeX Metafont and related programs in Unix/386
# systems.
#
# Author: Geraldo Veiga
#
# Usage:
#
# 0. make install
# Installs basic binaries, manual pages, inputs, tex formats, and
# metafont bases.
#
# 1. make ins_core 
# Install binaries, manual pages, TeX inputs, Metafont inputs and font
# metrics in distribution.
#
# 2. make ins_fmts [formats="[tex.fmt] [latex.fmt] [slitex.fmt]"]  
# Generates and install tex formats, linking an executable of the same
# name (without the .fmt extension) to virtex.
#
# Built-in format descriptions are:
# 	tex.fmt - plain tex
# 	latex.fmt - latex macros
# 	slitex.fmt - slitex macros
#
# Other formats would have to be added to makefile.
#
# 3. make ins_bases [localmodes=<mode defs>]
# Generates and install metafont bases, linking an executable of the
# same name (without the .base extension) to virmf.
#
# Built-in base descriptions are:
#	mf.base - plain metafont with local modes added
#
# 4. make ins_pk [MODE=<mode_def>] [MAG=<magnification>]
# Generates and installs basic set of font pk bitmaps . <mode_def>
# should be part of the local mode_defs.
# 
# 5. make clean
# Removes all temporary files created by the installation procedure
#
# 6. make uninstall
# Removes all files and directories created by the installation
# procedure.  Nonempty directories are not removed.  Rasterized fonts
# and its directory shoud be removed manually.

# Suffixes used in this makefile

.SUFFIXES=

# Commands

SHELL= /bin/sh
MAKE= /bin/make

# Compress and uncompress to stdout

COMPRESS= /usr/local/bin/compress -c
ZCAT= /usr/local/bin/zcat
ZEXT=.Z

# Gnu install

OWN= bin
GRP= bin
INSTALL= etc/install -o $(OWN) -g $(GRP)
fileinstall= $(INSTALL) -m 664
proginstall= $(INSTALL) -m 755
dirinstall= $(INSTALL) -m 777 -d

# These pathnames are where the working files are located

bindir= /usr/local/bin

manext= l
mandir= /usr/catman/local/man$(manext)

texlibdir= /usr/local/lib/tex
texpooldir= $(texlibdir)
texinputdir= $(texlibdir)/inputs
texfontdir= $(texlibdir)/fonts/tfm
texpkdir= $(texlibdir)/fonts/pk
formatdir= $(texlibdir)/formats

mflibdir= /usr/local/lib/mf
mfpooldir= $(mflibdir)
mfinputdir= $(mflibdir)/inputs
basedir= $(mflibdir)/bases

# TeX format automatically generated and installed with "make fmts"

formats= tex.fmt latex.fmt slitex.fmt

# METAFONT bases automatically generated and installed with "make bases"

bases= mf.base

# File defining local devices for use with Metafont

localmodes=local.mf

# Set environment variables for use during installation

SETENV= TEXPOOL=$(texpooldir); TEXINPUT=$(texinputdir); \
        TEXFONTS=$(texfontdir); TEXFORMATS=$(formatdir); \
        MFPOOL=$(mfpooldir); MFINPUTS=$(mfinputdir); \
        MFBASES=$(basedir); export TEXPOOL TEXINPUT TEXFONTS \
	TEXFORMATS MFPOOL MFINPUTS MFBASES;

# TeX and metafont commands used during installation

INITEX= $(SETENV) $(bindir)/initex
INIMF= $(SETENV) $(bindir)/inimf
MF= $(SETENV) $(bindir)/mf

# List names of fonts for each magnification

MAGSTEP0= cmb10 cmbsy10 cmbx10 cmbx12 cmbx5 cmbx6 cmbx7 cmbx8 cmbx9 \
          cmcsc10 cmdunh10 cmex10 cmmi10 cmmi12 cmmi5 cmmi6 cmmi7 \
	  cmmi8 cmmi9 cmmib10 cmr10 cmr12 cmr17 cmr5 cmr6 cmr7 cmr8 \
	  cmr9 cmsl10 cmsl12 cmsl8 cmsl9 cmsltt10 cmss10 cmss12 cmss17 \
	  cmssbx10 cmssi10 cmssi12 cmssi17 cmssq8 cmssqi8 cmsy10 cmsy5 \
	  cmsy6 cmsy7 cmsy8 cmsy9 cmtex10 cmtex9 cmti10 cmti12 cmti7 \
	  cmti8 cmti9 cmtt10 cmtt12 cmtt8 cmtt9 cmu10 icmex10 icmmi8 \
	  icmsy8 icmtt8 ilasy8 ilcmss8 ilcmssb8 ilcmssi8 lasy10 lasy5 \
	  lasy6 lasy7 lasy8 lasy9 lasyb10 lcircle10 lcirclew10 lcmss8 \
	  lcmssb8 lcmssi8 line10 linew10 manfnt

MAGSTEPH= cmbx10 cmmi10 cmr10 cmsl10 cmss10 cmsy10 cmti10 cmtt10 \
	  lasy10 lasy5 lasy7 lasyb10

MAGSTEP1= cmsy10 lasy10 lasy5 lasy7 lasyb10

MAGSTEP2= cmbx10 cmmi10 cmr10 cmssbx10 cmsy10 cmtt10 \
	  lasy10 lasy5 lasy7 lasyb10

MAGSTEP3= cmbx10 cmsy10 lasy10 lasy5 lasy7 lasy8 lasyb10 lcmss8 \
	  lcmssi8 lcmssb8 cmmi8 cmsy8 cmtt8 cmex10 ilcmss8 ilcmssi8 \
	  ilcmssb8 icmmi8 icmsy8 icmtt8 icmex10 ilasy8


MAGSTEP4= cmbx10 cmmi10 cmr10 cmr7 cmsy10 lasy10 lasy5 lasy7 lasy8 \
	  lasyb10 lcmss8 lcmssi8 lcmssb8 cmmi8 cmsy8 cmtt8 ilcmss8 \
	  ilcmssi8 ilcmssb8 icmmi8 icmsy8 icmtt8 ilasy8

MAGSTEP5= cmbx10 cmr10 lasy10 lasy5 lasy7 lasy8 lasyb10 lcmss8 \
	  lcmssi8 lcmssb8 cmmi8 cmsy8 cmtt8 ilcmss8 ilcmssi8 ilcmssb8 \
	  icmmi8 icmsy8 icmtt8 ilasy8

MAGSTEP6= lasy8 lcmss8 lcmssi8 lcmssb8 cmmi8 cmsy8 cmtt8 ilcmss8 \
	  ilcmssi8 ilcmssb8 icmmi8 icmsy8 icmtt8 ilasy8

MAGSTEP7= lasy8 lcmss8 lcmssi8 lcmssb8 cmmi8 cmsy8 cmtt8 \
	  ilcmss8 ilcmssi8 ilcmssb8 icmmi8 icmsy8 icmtt8 ilasy8

MAGSTEP8= lasy8 lcmss8 lcmssi8 lcmssb8 cmmi8 cmsy8 cmtt8 \
	  ilcmss8 ilcmssi8 ilcmssb8 icmmi8 icmsy8 icmtt8 ilasy8

MAGSTEP9= lcmss8 ilcmss8

# Initialize parameters

FONTLIST= $(MAGSTEP0)
MAGSTEP= 0
MODE= localfont
MAG= 1000

default: 
	@echo "\tTo install TeX386 type 'make install'"
	@echo ""
	@echo "\tTo create the basic font bitmaps type"
	@echo "'\tmake ins_pk [MODE=<mode_def>] [MAG=<magnification>]'"

install: ins_core ins_fmts ins_bases

ins_core: ins_dirs ins_bin ins_man ins_texinputs ins_mfinputs ins_tfm
	touch ins_core

ins_dirs:
	$(dirinstall) $(bindir)
	$(dirinstall) $(mandir)
	$(dirinstall) $(texlibdir)
	$(dirinstall) $(texpooldir)
	$(dirinstall) $(texinputdir)
	$(dirinstall) $(texfontdir)
	$(dirinstall) $(formatdir)
	$(dirinstall) $(mflibdir)
	$(dirinstall) $(mfpooldir)
	$(dirinstall) $(mfinputdir)
	$(dirinstall) $(basedir)
	touch ins_dirs

pk_dir:
	$(dirinstall) $(texpkdir)
	touch pk_dir

# Binaries from web2c

ins_bin: bin
	cd bin;\
	for i in *;\
	do \
	  ../$(proginstall) $$i $(bindir);\
	done
	touch ins_bin


# Manual pages from web2c

ins_man: man
	cd man;\
	for i in *;\
	do \
	   $(COMPRESS) $$i > $$i$(ZEXT);\
	  ../$(fileinstall) $$i$(ZEXT) $(mandir);\
	  rm -f $$i$(ZEXT);\
	done
	touch ins_man

# Input files from LaTex, TeX (lib directory) and bibtex sources in
# in labrea.stanford.edu distribution
# Additions:  texinfo.tex

ins_texinputs: texinputs
	$(fileinstall) tex.pool $(texpooldir)
	cd texinputs;\
	for i in *;\
	do \
	    ../$(fileinstall) $$i $(texinputdir);\
	done
	touch ins_texinputs


# Metafont sources from labrea.stanford.edu cmfonts, latex and metafont
#  (lib directory) distributions
# Additions: local.mf (local mode_defs, mostly from U_Wash.mf)

ins_mfinputs: mfinputs
	  $(fileinstall) mf.pool $(mfpooldir)
	  cd mfinputs;\
	  for i in *;\
	  do \
	    ../$(fileinstall) $$i $(mfinputdir);\
	  done
	  touch ins_mfinputs

# tfm file for fonts from labrea.stanford.edu cmfonts, latex and
# metafont #  (lib directory) distributions

ins_tfm: tfm
	cd tfm;\
	for i in *;\
	do \
	  ../$(fileinstall) $$i $(texfontdir);\
	done
	touch ins_tfm

ins_fmts: $(formats)

tex.fmt: ins_core
	$(INITEX) plain '\dump'
	mv plain.fmt tex.fmt
	mv plain.log tex.log
	$(fileinstall) tex.fmt $(formatdir)
	$(fileinstall) tex.log $(formatdir)
	rm -f $(bindir)/tex
	ln $(bindir)/virtex $(bindir)/tex

latex.fmt: ins_core
	$(INITEX) lplain '\dump'
	mv lplain.fmt latex.fmt
	mv lplain.log latex.log
	$(fileinstall) latex.fmt latex.log $(formatdir)
	rm -f $(bindir)/latex
	ln $(bindir)/virtex $(bindir)/latex

slitex.fmt: ins_core
	$(INITEX) splain '\dump'
	mv  splain.fmt slitex.fmt
	rm -f $(bindir)/slitex
	ln $(bindir)/virtex $(bindir)/slitex

ins_bases: $(bases)

mf.base:
	$(INIMF) plain '\input $(localmodes); \dump'
	mv plain.base mf.base
	mv plain.log mf.log
	$(fileinstall) mf.base mf.log $(basedir)
	rm -f $(bindir)/mf
	ln $(bindir)/virmf $(bindir)/mf

# Generate bitmaps of a list of fonts for given Magstep and
# Magnification.  This segment of code is somewhat convoluted.
#
# It generates gf bitmaps and pk bitmaps in separate directories,
# named uniquely to each process. This way concurrent runs of
# "make ins_pk" can coexist gracefully.
#
# Separate directories for pk and gf files are necessary due to
# System V 14 char limitation on file names.  For fonts with long names,
# the "pk" tag can be lost.  This way we can distinguish between the pk
# and gf files and hope for the best when the pk bitmaps are actually
# used.

MAG$(MAGSTEP).$(MAG): pk_dir ins_core
	-gfdir=gf$$$$; pkdir=pk$$$$;\
	if [ ! -d $$gfdir ] ; then mkdir $$gfdir; fi;\
	if [ ! -d $$pkdir ] ; then mkdir $$pkdir; fi;\
	for i in $(FONTLIST);\
	do \
	(cd $$gfdir; echo "***** Font $$i";\
	$(MF) '\mode=$(MODE);' 'mag:=magstep($(MAGSTEP))*$(MAG)/1000;'\
	'batchmode;' input $$i);\
	$(fileinstall) $$gfdir/$$i.tfm $(texfontdir);\
	rm -f $$gfdir/$$i.tfm $$gfdir/$$i.log;\
	(cd $$pkdir; $(bindir)/gftopk ../$$gfdir/$$i.*);\
	$(fileinstall) $$pkdir/$$i.* $(texpkdir);\
	rm -f $$gfdir/$$i.* $$pkdir/$$i.*;\
	done
	-rmdir $$pkdir $$gfdir
	-touch MAG$(MAGSTEP).$(MAG)

# Invoke make recursively and generate bit maps for all magsteps

ins_pk:
	$(MAKE) MAGSTEP=0   FONTLIST="$(MAGSTEP0)" MAG0.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=0.5 FONTLIST="$(MAGSTEPH)" MAG0.5.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=1   FONTLIST="$(MAGSTEP1)" MAG1.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=2   FONTLIST="$(MAGSTEP2)" MAG2.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=3   FONTLIST="$(MAGSTEP3)" MAG3.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=4   FONTLIST="$(MAGSTEP4)" MAG4.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=5   FONTLIST="$(MAGSTEP5)" MAG5.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=6   FONTLIST="$(MAGSTEP6)" MAG6.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=7   FONTLIST="$(MAGSTEP7)" MAG7.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=8   FONTLIST="$(MAGSTEP8)" MAG8.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)
	$(MAKE) MAGSTEP=9   FONTLIST="$(MAGSTEP9)" MAG9.$(MAG) \
		MODE=$(MODE) MAG=$(MAG)

clean:
	rm -rf ins_* *.log *.fmt *.base MAG* gf pk

# Removes all files installed by this makefile
# This will only remove files installed from TeX386 distribution.
# Non empty directories wont be deleted

uninstall: clean
	cd bin;\
	for i in *;\
	do \
	  rm -f $(bindir)/$$i;\
	done

	cd man;\
	for i in *;\
	do \
	  rm -f $(mandir)/$$i$(ZEXT);\
	done

	rm -f $(texpooldir)/tex.pool 
	cd texinputs;\
	for i in *;\
	do \
	  rm -f $(texinputdir)/$$i;\
	done

	rm -f $(mfpooldir)/mf.pool 
	  cd mfinputs;\
	  for i in *;\
	  do \
	    rm -f $(mfinputdir)/$$i;\
	  done

	cd tfm;\
	for i in *;\
	do \
	  rm -f $(texfontdir)/$$i;\
	done

	for i in $(formats);\
	do \
	  rm -f $(formatdir)/$$i $(formatdir)/`basename $$i .fmt`.log \
		$(bindir)/`basename $$i .fmt`;\
	done

	for i in $(bases);\
	do \
	  rm -f $(basedir)/$$i $(basedir)/`basename $$i .base`.log \
		$(bindir)/`basename $$i .base`;\
	done

	-rmdir $(bindir)
	-rmdir $(mandir)
	-rmdir $(texinputdir)
	-rmdir $(texfontdir)
	-rmdir $(formatdir)
	-rmdir $(texpooldir)
	-rmdir $(texlibdir)
	-rmdir $(mfinputdir)
	-rmdir $(basedir)
	-rmdir $(mfpooldir)
	-rmdir $(mflibdir)
