###############################################################################
# #
# Make file for installing Lout #
# #
# Jeffrey H. Kingston #
# #
# make prg2lout Compile a small auxiliary program called prg2lout #
# make lout Compile the Lout source #
# make all Equivalent to "make prg2lout" and "make lout" #
# #
# make install Install the Lout and prg2lout binaries and libraries #
# make installman Install the Lout and prg2lout manual entries #
# make installdoc Install the Lout documentation #
# make allinstall Equivalent to "make install", "make installman", #
# and "make installdoc". #
# #
# make installfr Install French error messages (optional) #
# make installde Install German error messages (optional) #
# make clean Remove compilation temporaries #
# make uninstall Undo the effect of make install, installman, #
# installdoc, installfr, and installde #
# make restart Undo everything except changes to this makefile, #
# ready for a fresh start. #
# #
# Most installations of Lout should require only the following steps. If #
# something goes wrong, you can start again with "make restart". Please #
# carry out all the steps, in exactly the order given. Believe me, it #
# will be much faster than doing it any other way. #
# #
# (1) Set exactly one of the following macros defined below to 1 and the #
# others all to 0, to indicate the operating system under which the #
# Lout binary is to run. At present OSUNIX and OSDOS work but OSMAC #
# doesn't work. #
# #
# OSUNIX Unix in all its flavours, including Linux. #
# OSDOS MS-DOS etc. ("rb" and "wb" file access modes where needed) #
# OSMAC Macintosh #
# #
# (2) If you want to install Lout with debugging on for some reason, for #
# example if a guru has asked you to do this in the course of tracking #
# down some problem with Lout, then set these two macros as follows: #
# #
# DEBUGGING = 1 #
# TRACING = -g #
# #
# Lout will run a bit slower and its binary will be a bit larger if #
# you do this. The normal, non-debugging values are #
# #
# DEBUGGING = 0 #
# TRACING = #
# #
# These should appear like this below. #
# #
# (3) Set the USESTAT macro defined below to 1 if the system you are #
# compiling onto has the stat() file status system call. If you are #
# unsure, or know it doesn't, set USESTAT to 0. The stat() call, #
# if used, will allow Lout to determine the time of last change #
# of database index files and rebuild them automatically if required. #
# #
# (4) Set the SAFEDFT macro defined below to 1 if you want safe execution #
# (i.e. disabling calls to system()) to be the default behaviour. You #
# can always specify safe or unsafe execution by means of the -S and #
# -U options to lout when processing a document; SAFEDFT means that #
# -S rather than -U is the default behaviour. Unsafe execution is #
# required when formatting computer programs, so if in doubt, do not #
# change the value of SAFEDFT. #
# #
# (5) Set the following four macros defined below to appropriate values: #
# #
# BINDIR Directory where Lout's binary goes. This directory is #
# assumed to exist. #
# #
# LOUTLIBDIR Directory where Lout's libraries go. This directory will #
# be created and must not exist already (but its parent #
# must exist already). It will be completely removed by #
# an uninstall. In short, it is the library directory for #
# Lout only, not a general library directory. #
# #
# LOUTDOCDIR Directory where the documents describing the Lout system #
# (written in Lout) go. This directory will be created #
# (but its parent must exist already). #
# #
# MANDIR Directory where the lout and prg2lout manual entries #
# (in nroff -man) go. This directory is assumed to exist. #
# #
# They are currently defined using a common stem called $(PREFIX), #
# but you don't have to use $(PREFIX) if you don't want to. #
# #
# (6) Set the following two macros defined below to appropriate values. #
# I strongly recommend CHARIN=1 and CHAROUT=0 for all sites (English #
# and non-English language). This way we get a truly international #
# standard in which everyone has access to accented characters, yet #
# Lout's output is in the strict 7-bit ASCII that is recommended in #
# the PostScript manual. #
# #
# CHARIN This macro determines the assignment of characters in Lout #
# source files to character classes by the lexical analyser. #
# That is, it determines which characters are letters, which #
# is the comment character, etc. Supported values are: #
# #
# 0 For English language only ASCII installations #
# #
# 1 For installations using the ISO-LATIN-1 character set #
# (adds accented letters to the LETTER character class) #
# #
# Lout will accept any 8-bit character except '\0'; CHARIN #
# does not determine the acceptability of any character, just #
# its class. #
# #
# CHAROUT This macro determines the format of strings of literal #
# characters in the PostScript output. Currently supported #
# values are: #
# #
# 0 Every output character will be printable ASCII #
# #
# 1 Every output character will be printable ISO-LATIN-1 #
# #
# The output will be valid PostScript irrespective of the #
# value given to CHAROUT, which may be set independently of #
# CHARIN. It just determines which characters are printed #
# as \ddd escape sequences and which are printed as one-byte #
# literal characters. #
# #
# (7) Set macro USELOC to one of the following values, NOT TO A LOCALE. #
# #
# 0 Lout's error messages will always appear in English, and no #
# source code related to locales will be executed (although #
# file <locale.h> will be read for collation stuff). #
# #
# 1 Lout's error messages may appear in languages other than #
# English, depending on the current locale. The Lout source #
# will be compiled including <locale.h>, <nl_types.h>, and #
# calls to setlocale(), catopen(), catgets(), and catclose() #
# #
# If you choose to set USELOC to 1, you now need to set one or more of #
# these macros: #
# #
# LOC_FR If you want French language error messages, set this macro #
# to your French locale name, i.e. to the value that you #
# expect setlocale(LC_MESSAGES, "") to return when you want #
# to get French language error messages #
# #
# LOC_DE If you want German language error messages, set this macro #
# to your German locale name, i.e. to the value that you #
# expect setlocale(LC_MESSAGES, "") to return when you want #
# to get German language error messages #
# #
# For error messages in other languages, consult ./locale/README. #
# #
# (8) Set macro COLLATE to either 0 or 1. If you set it to 1, Lout will #
# use the strcoll() routine by default when sorting alphabetically #
# (e.g. when sorting indexes), otherwise Lout will sort by default #
# based on the ISO codes of the characters. This default setting may #
# be changed during individual runs of Lout by the -l and -L flags. #
# #
# (9) Execute "make prg2lout". This will compile the prg2lout program, #
# leaving its binary in this directory. Other directories unchanged. #
# #
# (10) If you want to be able to produce compressed PDF files, as opposed to #
# uncompressed ones, you need to: #
# #
# (a) obtain the zlib compression library from #
# <http://www.cdrom.com/pub/infozip/zlib/>. #
# #
# (b) decompress the zlib source files using gunzip and/or tar and #
# then build the library by issuing the "make zlib.a" command #
# whilst in the zlib directory. If you want to test the library, #
# you should use the "make test" command (which also builds the #
# library). #
# #
# (c) set the PDF_COMPRESSION variable below to 1 #
# #
# (d) set the ZLIB variable to the path of the libz.a file. For example: #
# ZLIB = /usr/cs3/vtan/lout/lout.3.11/zlib-1.1.1/libz.a #
# #
# (e) set the ZLIBPATH variable to the path of the zlib directory with #
# -I in front. For example: #
# ZLIBPATH = -I/usr/cs3/vtan/lout/lout.3.11/zlib-1.1.1/ #
# #
# If you don't want zlib support or cannot obtain it or cannot use it, #
# leave the PDF_COMPRESSION, ZLIB, and ZLIBPATH variables as they are. #
# #
# (11) Execute "make lout". This will compile the Lout source, leaving the #
# binary in this directory. No changes are made in other directories. #
# #
# (12) This makefile assumes that Lout is not installed on your system #
# already. If you do have an earlier version of Lout installed, the #
# simplest way to get rid of it is to type "make uninstall" now. Of #
# course, this is assuming that the old version was installed in the #
# same directories as where you are about to install the new version. #
# #
# (13) Execute "make install". This will do the following things: #
# #
# (a) It will copy the lout and prg2lout binaries into $(BINDIR); #
# #
# (b) It will create $(LOUTLIBDIR) and copy the library files into it; #
# #
# (c) It will perform an initializing "lout -x" run. This run will #
# do the following checks and initializations: #
# #
# (i) It will read all the hyphenation (.lh) files mentioned #
# in file $(LOUTLIBDIR)/include/langdefs, check them, and #
# build the packed (.lp) versions; #
# #
# (ii) It will read and check the four standard database (.ld) #
# files in directory $(LOUTLIBDIR)/data, and build the #
# corresponding database index (.li) files. #
# #
# (d) It will change the mode of the files created in (c) to be #
# publicly readable, just in case they weren't created that way. #
# #
# It is good to build the various files during installation because #
# later runs will not have write permission in the library directories. #
# #
# (14) Execute "make installman". This installs the manual entries for lout #
# and prg2lout into directory $(MANDIR), which is assumed to exist. #
# These entries are troff files; plain text versions are also available #
# in directory ./man if you need them (install them yourself). #
# #
# (15) Execute "make installdoc". This creates directory $(LOUTDOCDIR) and #
# copies the Lout documentation into it. #
# #
# (16) If you want French error messages, execute "make installfr" now. #
# If you want German error messages, execute "make installde" now. #
# These commands compile the error messages files into packed forms #
# using the gencat command, and store them in $(LOUTLIBDIR)/locale. #
# #
# (17) Execute "make clean". This cleans up this directory. #
# #
# (18) If the usual language at your site is not English, you might like to #
# now change the default value of the @InitialLanguage option on line #
# 265 (or thereabouts) of file $(LOUTLIBDIR)/include/bsf. This will #
# mean that by default the date and words like Chapter and July will #
# appear in a different language, and hyphenation will be carried out #
# according to patterns designed for that language. You can find the #
# list of known languages in file $(LOUTLIBDIR)/include/langdefs, or in #
# the User's Guide; if yours is not there, let me know and we can work #
# together to add it. This has nothing to do with locales and USELOC. #
# #
# (19) If the usual size of a piece of paper at your site is not A4, you #
# might like to now change the default value of the @PageType option #
# on line 65 (or thereabouts) of file $(LOUTLIBDIR)/include/dsf: #
# #
# named @PageType { A4 @OrIfPlain Other } #
# #
# This says that the page type is to be A4 by default, unless plain #
# text output is in effect (lout -p), in which case the page type is #
# Other, which means that the page dimensions come from the @PageWidth #
# and @PageHeight options. Just change the A4, not the rest. You can #
# find the list of known page types, alternative to A4, in the User's #
# Guide, or at line 764 (or thereabouts) in $(LOUTLIBDIR)/include/dsf. #
# #
# Mail jeff@it.usyd.edu.au if you have any problems. #
# #
###############################################################################
OSUNIX = 1
OSDOS = 0
OSMAC = 0
DBFIX = 0
USESTAT = 1
SAFEDFT = 0
DEBUGGING = 0
TRACING =
# DEBUGGING = 1
# TRACING = -g
PREFIX = /home/jeff
BINDIR = $(PREFIX)/bin
LOUTLIBDIR = $(PREFIX)/lout.lib
LOUTDOCDIR = $(PREFIX)/lout.doc
MANDIR = $(PREFIX)/lout.man
LIBFONT = font
LIBMAPS = maps
LIBINCL = include
LIBDATA = data
LIBHYPH = hyph
LIBLOCA = locale
CHARIN = 1
CHAROUT = 0
USELOC = 1
LOC_FR = fr
LOC_DE = de
COLLATE = 1
PDF_COMPRESSION = 0
ZLIB =
ZLIBPATH =
CC = gcc
RCOPY = cp -r
COPTS = -ansi -pedantic -Wall -O3
CFLAGS = -DOS_UNIX=$(OSUNIX) \
-DOS_DOS=$(OSDOS) \
-DOS_MAC=$(OSMAC) \
-DDB_FIX=$(DBFIX) \
-DUSE_STAT=$(USESTAT) \
-DSAFE_DFT=$(SAFEDFT) \
-DCOLLATE=$(COLLATE) \
-DLIB_DIR=\"$(LOUTLIBDIR)\" \
-DFONT_DIR=\"$(LIBFONT)\" \
-DMAPS_DIR=\"$(LIBMAPS)\" \
-DINCL_DIR=\"$(LIBINCL)\" \
-DDATA_DIR=\"$(LIBDATA)\" \
-DHYPH_DIR=\"$(LIBHYPH)\" \
-DLOCALE_DIR=\"$(LIBLOCA)\" \
-DCHAR_IN=$(CHARIN) \
-DCHAR_OUT=$(CHAROUT) \
-DLOCALE_ON=$(USELOC) \
-DASSERT_ON=1 $(COPTS) \
-DDEBUG_ON=$(DEBUGGING) \
$(TRACING) \
-DPDF_COMPRESSION=$(PDF_COMPRESSION) \
$(ZLIBPATH)
OBJS = z01.o z02.o z03.o z04.o z05.o z06.o z07.o z08.o \
z09.o z10.o z11.o z12.o z13.o z14.o z15.o z16.o \
z17.o z18.o z19.o z20.o z21.o z22.o z23.o z24.o \
z25.o z26.o z27.o z28.o z29.o z30.o z31.o z32.o \
z33.o z34.o z35.o z36.o z37.o z38.o z39.o z40.o \
z41.o z42.o z43.o z44.o z45.o z46.o z47.o z48.o \
z49.o z50.o z51.o z52.o
lout: $(OBJS)
$(CC) -o lout $(OBJS) $(ZLIB) -lm
chmod a+x lout
$(OBJS): externs.h
externs.h:
prg2lout: prg2lout.c
$(CC) $(COPTS) -o prg2lout prg2lout.c
chmod a+x prg2lout
all: lout prg2lout
install: lout prg2lout
@echo ""
@echo "(a) Installing lout and prg2lout binaries into BINDIR $(BINDIR)"
cp lout $(BINDIR)/lout
chmod 755 $(BINDIR)/lout
cp prg2lout $(BINDIR)/prg2lout
chmod 755 $(BINDIR)/prg2lout
@echo ""
@echo "(b) Installing library files into LOUTLIBDIR $(LOUTLIBDIR)"
mkdir $(LOUTLIBDIR)
chmod 755 $(LOUTLIBDIR)
@echo ""
mkdir $(LOUTLIBDIR)/$(LIBINCL)
chmod 755 $(LOUTLIBDIR)/$(LIBINCL)
cp include/* $(LOUTLIBDIR)/$(LIBINCL)
chmod 644 $(LOUTLIBDIR)/$(LIBINCL)/*
@echo ""
mkdir $(LOUTLIBDIR)/$(LIBDATA)
chmod 755 $(LOUTLIBDIR)/$(LIBDATA)
cp data/* $(LOUTLIBDIR)/$(LIBDATA)
chmod 644 $(LOUTLIBDIR)/$(LIBDATA)/*
@echo ""
mkdir $(LOUTLIBDIR)/$(LIBHYPH)
chmod 755 $(LOUTLIBDIR)/$(LIBHYPH)
cp hyph/* $(LOUTLIBDIR)/$(LIBHYPH)
chmod 644 $(LOUTLIBDIR)/$(LIBHYPH)/*
@echo ""
mkdir $(LOUTLIBDIR)/$(LIBFONT)
chmod 755 $(LOUTLIBDIR)/$(LIBFONT)
cp font/* $(LOUTLIBDIR)/$(LIBFONT)
chmod 644 $(LOUTLIBDIR)/$(LIBFONT)/*
@echo ""
mkdir $(LOUTLIBDIR)/$(LIBMAPS)
chmod 755 $(LOUTLIBDIR)/$(LIBMAPS)
cp maps/* $(LOUTLIBDIR)/$(LIBMAPS)
chmod 644 $(LOUTLIBDIR)/$(LIBMAPS)/*
@echo ""
mkdir $(LOUTLIBDIR)/$(LIBLOCA)
chmod 755 $(LOUTLIBDIR)/$(LIBLOCA)
@echo ""
@echo "(c) Initializing run (should be silent, no errors expected)"
$(BINDIR)/lout -x -s $(LOUTLIBDIR)/$(LIBINCL)/init
@echo ""
@echo "(d) Changing mode of files just created by initializing run"
chmod 644 $(LOUTLIBDIR)/$(LIBDATA)/*
chmod 644 $(LOUTLIBDIR)/$(LIBHYPH)/*
installman:
@echo ""
@echo "Installing manual entries into MANDIR $(MANDIR)"
sed -e "s@<BINDIR>@$(BINDIR)@" -e "s@<LIBDIR>@$(LOUTLIBDIR)@" \
-e "s@<LOUTDOCDIR>@$(LOUTDOCDIR)@" -e "s@<MANDIR>@$(MANDIR)@" \
man/lout.1 > $(MANDIR)/lout.1
chmod 644 $(MANDIR)/lout.1
cp man/prg2lout.1 $(MANDIR)/prg2lout.1
chmod 644 $(MANDIR)/prg2lout.1
installdoc:
@echo ""
@echo "Creating LOUTDOCDIR $(LOUTDOCDIR) and copying documentation into it"
$(RCOPY) doc/* $(LOUTDOCDIR)
chmod 755 $(LOUTDOCDIR)
chmod 755 $(LOUTDOCDIR)/*
chmod 644 $(LOUTDOCDIR)/*/*
allinstall: install installman installdoc
installfr:
@echo ""
@echo "Putting French error messages into $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)"
mkdir $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)
chmod 755 $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)
mkdir $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)/LC_MESSAGES
chmod 755 $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)/LC_MESSAGES
cp locale/msgs.fr $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)/LC_MESSAGES/msgs.$(LOC_FR)
gencat $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)/LC_MESSAGES/errors.$(LOC_FR) \
$(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)/LC_MESSAGES/msgs.$(LOC_FR)
chmod 644 $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_FR)/LC_MESSAGES/*
installde:
@echo ""
@echo "Putting German error messages into $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)"
mkdir $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)
chmod 755 $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)
mkdir $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)/LC_MESSAGES
chmod 755 $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)/LC_MESSAGES
cp locale/msgs.de $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)/LC_MESSAGES/msgs.$(LOC_DE)
gencat $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)/LC_MESSAGES/errors.$(LOC_DE) \
$(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)/LC_MESSAGES/msgs.$(LOC_DE)
chmod 644 $(LOUTLIBDIR)/$(LIBLOCA)/$(LOC_DE)/LC_MESSAGES/*
uninstall:
-rm -f $(BINDIR)/lout $(BINDIR)/prg2lout
-rm -fr $(LOUTLIBDIR)
-rm -fr $(LOUTDOCDIR)
-rm -f $(MANDIR)/lout.1 $(MANDIR)/prg2lout.1
clean:
-rm -f lout prg2lout *.o
restart: clean uninstall