summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/groff/Makefile.gnu
blob: 65a54950542307260653ab424c2b7455646c95c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
#Copyright (C) 1989, 1990, 1991 Free Software Foundation, Inc.
#     Written by James Clark (jjc@jclark.uucp)
#
#This file is part of groff.
#
#groff is free software; you can redistribute it and/or modify it under
#the terms of the GNU General Public License as published by the Free
#Software Foundation; either version 1, or (at your option) any later
#version.
#
#groff is distributed in the hope that it will be useful, but WITHOUT ANY
#WARRANTY; without even the implied warranty of MERCHANTABILITY or
#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
#for more details.
#
#You should have received a copy of the GNU General Public License along
#with groff; see the file LICENSE.  If not, write to the Free Software
#Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

# Define PAGE to be letter if your PostScript printer uses 8.5x11 paper (USA)
# and define it to be A4, if it uses A4 paper (rest of the world).
PAGE=A4
#PAGE=letter

# BINDIR says where to install executables.
BINDIR=/usr/local/bin

GROFFLIBDIR=/usr/local/lib/groff

# FONTDIR says where to install dev*/*.
FONTDIR=$(GROFFLIBDIR)/font

# FONTPATH says where to look for dev*/*.
FONTPATH=.:$(FONTDIR):/usr/local/lib/font:/usr/lib/font

# MACRODIR says where to install macros.
MACRODIR=$(GROFFLIBDIR)/tmac

# MACROPATH says where to look for macro files.
MACROPATH=.:$(MACRODIR):/usr/lib/tmac

# DEVICE is the default device.
DEVICE=ps

# PSPRINT is the command to use for printing a PostScript file.
# It must be a simple command, not a pipeline.
PSPRINT=lpr

# DVIPRINT is the command to use for printing a TeX dvi file.
# It must be a simple command, not a pipeline.
DVIPRINT=lpr -d

# HYPHENFILE is the file containing the hyphenation patterns.
HYPHENFILE=$(GROFFLIBDIR)/hyphen

# MANROOT is the root of the man page directory tree.
MANROOT=/usr/local/man

# MAN1EXT is the man section for user commands.
MAN1EXT=1
MAN1DIR=$(MANROOT)/man$(MAN1EXT)

# MAN5EXT is the man section for file formats.
MAN5EXT=5
MAN5DIR=$(MANROOT)/man$(MAN5EXT)

# MAN7EXT is the man section for macros.
MAN7EXT=7
MAN7DIR=$(MANROOT)/man$(MAN7EXT)

# The groff ms macros will be available as -m$(TMAC_S).
# If you use `TMAC_S=s', you can use the Unix ms macros by using
# groff -ms -M/usr/lib/tmac.
TMAC_S=gs

# Include -DBROKEN_SPOOLER in CPPDEFINES if you have a PostScript
# spooler or previewer that is unable to cope with anything after
# %%EndProlog and before the first page (old versions of TranScript
# have this problem) or gets confused by included documents (the Sun
# pageview previewer has this problem), or if you are going to be
# sharing PostScript documents with others who might be running such a
# spooler or previewer.
# Include -DCFRONT_ANSI_BUG if you are using AT&T C++ 2.0 with an ANSI C
# compiler backend.
# Include -DHAVE_VFORK if you have vfork().
# Include -DHAVE_SYS_SIGLIST if you have sys_siglist[].
# Include -DHAVE_UNION_WAIT if wait() is declared by osfcn.h to take
# an argument of type union wait * (Sun C++ does this).  Don't include
# it if you're using the libg++ header files.
CPPDEFINES=-DBROKEN_SPOOLER -DHAVE_VFORK -DHAVE_SYS_SIGLIST # -DHAVE_UNION_WAIT -DCFRONT_ANSI_BUG

# Uncomment the next line if you don't have fmod in your math library.
# I believe this is needed on Ultrix and BSD 4.3.
# FMOD=fmod.o

# Uncomment the next line if you don't have strtol in your C library.
# I believe this is needed on BSD 4.3.
# STRTOL=strtol.o

# Additional flags needed to compile lib/malloc.c
# Use this with BSD.
MALLOCFLAGS=-DBSD
# Use this with System V
# MALLOCFLAGS=-DUSG
# Use this with SunOS 4.1
# MALLOCFLAGS=-DBSD -DSUNOS_LOCALTIME_BUG

# Comment this out if the GNU malloc gives you problems, or if you would
# prefer to use the system malloc.
MALLOC=malloc.o

GROFF=
# Comment the next line out if groff.c gives problems.
GROFF=groff

# CC is the C++ compiler
CC=g++
# I'm told that -fno-inline is needed on a 68030-based Apollo
# CC=g++ -fno-inline

# OLDCC is the C compiler.
OLDCC=gcc

PROFILE_FLAG=
DEBUG_FLAG=-g
OPTIMIZE_FLAG=-O
WARNING_FLAGS=#-Wall -Wcast-qual -Wwrite-strings

# Use this to pass additional flags on the command line.
XCFLAGS=

# CFLAGS are passed to sub makes
CFLAGS=$(PROFILE_FLAG) $(DEBUG_FLAG) $(OPTIMIZE_FLAG) $(WARNING_FLAGS) \
	$(CPPDEFINES) $(XCFLAGS)

XOLDCFLAGS=
# OLDCFLAGS are passed to sub makes
OLDCFLAGS=$(DEBUG_FLAG) $(PROFILE_FLAG) $(OPTIMIZE_FLAG) $(XOLDCFLAGS)

XLDFLAGS=
LDFLAGS=$(PROFILE_FLAG) $(DEBUG_FLAG) $(XLDFLAGS)
# Libraries needed for linking C++ programs.
LIBS=
# Libraries needed for linking C++ programs that use libm.a.
MLIBS=$(LIBS) -lm

AR=ar

# Define RANLIB to be empty if you don't have ranlib.
RANLIB=ranlib

# YACC can be either yacc or bison -y
YACC=bison -y
YACCFLAGS=-v

ETAGS=/usr/local/bin/etags
# Flag to make etags treat *.[ch] files as C++
ETAGSFLAGS=-p

SHELL=/bin/sh

SUBDIRS=lib troff pic tbl eqn etc driver ps tty dvi macros man

# SUBFLAGS says what flags to pass to sub makes
SUBFLAGS="CC=$(CC)" "CFLAGS=$(CFLAGS)" "LDFLAGS=$(LDFLAGS)" \
	"OLDCC=$(OLDCC)" "OLDCFLAGS=$(OLDCFLAGS)" \
	"YACC=$(YACC)" "YACCFLAGS=$(YACCFLAGS)" \
	"DEVICE=$(DEVICE)" "FONTPATH=$(FONTPATH)" "MACROPATH=$(MACROPATH)" \
	"MALLOCFLAGS=$(MALLOCFLAGS)" "MALLOC=$(MALLOC)" \
	"FMOD=$(FMOD)" "STRTOL=$(STRTOL)" \
	"AR=$(AR)" "RANLIB=$(RANLIB)" "LIBS=$(LIBS)" "MLIBS=$(MLIBS)" \
	"FONTDIR=$(FONTDIR)" "BINDIR=$(BINDIR)" "PAGE=$(PAGE)" \
	"MACRODIR=$(MACRODIR)" "HYPHENFILE=$(HYPHENFILE)" \
	"TMAC_S=$(TMAC_S)" "MAN1EXT=$(MAN1EXT)" "MAN1DIR=$(MAN1DIR)" \
	"MAN5EXT=$(MAN5EXT)" "MAN5DIR=$(MAN5DIR)" \
	"MAN7EXT=$(MAN7EXT)" "MAN7DIR=$(MAN7DIR)"

all: $(SUBDIRS) $(GROFF) shgroff

$(SUBDIRS): FORCE
	@cd $@; \
	echo Making all in $@; \
	$(MAKE) $(SUBFLAGS) all

troff pic tbl eqn etc ps tty dvi: lib
ps tty dvi: driver

TAGS: FORCE
	@for dir in $(SUBDIRS); do \
	echo Making TAGS in $$dir; \
	(cd $$dir; $(MAKE) "ETAGSFLAGS=$(ETAGSFLAGS)" "ETAGS=$(ETAGS)" TAGS); \
	done

topclean: FORCE
	-rm -f shgroff
	-rm -f groff *.o core

clean: topclean FORCE
	@for dir in $(SUBDIRS) doc; do \
	echo Making clean in $$dir; \
	(cd $$dir; $(MAKE) clean); done

distclean: topclean FORCE
	@for dir in $(SUBDIRS) doc; do \
	echo Making distclean in $$dir; \
	(cd $$dir; $(MAKE) distclean); done

# You really don't want to use this target.
realclean: topclean FORCE
	@for dir in $(SUBDIRS) doc; do \
	echo Making realclean in $$dir; \
	(cd $$dir; $(MAKE) realclean); done

install.nobin: FORCE shgroff
	-[ -d $(BINDIR) ] || mkdir $(BINDIR)
	-[ -d $(GROFFLIBDIR) ] || mkdir $(GROFFLIBDIR)
	-[ -d $(MANROOT) ] || mkdir $(MANROOT)
	@for dir in $(SUBDIRS); do \
	echo Making install.nobin in $$dir; \
	(cd $$dir; $(MAKE) $(SUBFLAGS) install.nobin); done
	if [ -z "$(GROFF)" ] ; then cp shgroff $(BINDIR)/groff ; fi

install.bin: FORCE $(GROFF)
	-[ -d $(BINDIR) ] || mkdir $(BINDIR)
	@for dir in $(SUBDIRS); do \
	echo Making install.bin in $$dir; \
	(cd $$dir; $(MAKE) $(SUBFLAGS) install.bin); done
	if [ -n "$(GROFF)" ] ; then cp groff $(BINDIR)/groff ; fi

install: install.bin install.nobin

install.mm: FORCE
	-[ -d $(GROFFLIBDIR) ] || mkdir $(GROFFLIBDIR)
	-[ -d $(MACRODIR) ] || mkdir $(MACRODIR)
	sed -f macros/fixmacros.sed -e 's;/usr/lib/tmac;$(MACRODIR);' \
	    /usr/lib/macros/mmt >$(MACRODIR)/tmac.m
	sed -f macros/fixmacros.sed /usr/lib/tmac/sys.name \
	    >$(MACRODIR)/sys.name
	patch -s $(MACRODIR)/tmac.m macros/mm.diff

shgroff: groff.sh
	@echo Making $@ from groff.sh
	@-rm -f $@
	@sed -e "s;@BINDIR@;$(BINDIR);" \
	-e "s;@DEVICE@;$(DEVICE);" \
	-e "s;@PROG_PREFIX@;$(PROG_PREFIX);" \
	-e "s;@FONTDIR@;$(FONTDIR);" \
	-e "s;@PSPRINT@;$(PSPRINT);" \
	-e "s;@DVIPRINT@;$(DVIPRINT);" \
	groff.sh >$@ || rm -f $@
	@chmod +x $@

groff: groff.o lib/libgroff.a
	$(CC) $(LDFLAGS) -o $@ groff.o lib/libgroff.a $(LIBS)

lib/libgroff.a: lib

groff.o: groff.c stringify
	$(CC) -c -Ilib $(CFLAGS) -DDEVICE=\"$(DEVICE)\" \
	"-DPSPRINT=`$(SHELL) stringify $(PSPRINT)`" \
	"-DDVIPRINT=`$(SHELL) stringify $(DVIPRINT)`" \
	groff.c

groff.o: lib/lib.h lib/errarg.h lib/error.h lib/stringclass.h lib/font.h

bindist: all VERSION Makefile.bd README.bd FORCE
	-[ -d bindist ] || mkdir bindist
	@topdir=`pwd`; \
	for dir in $(SUBDIRS); do \
	(cd $$dir; $(MAKE) "BINDIR=$$topdir/bindist" install.bin); done
	cp README.bd bindist/README
	cp VERSION bindist
	if [ "$(GROFF)" ] ; then cp groff bindist/groff ; fi
	@echo Making bindist/Makefile
	@sed -e "s;@GROFFLIBDIR@;$(GROFFLIBDIR);" \
	-e "s;@FONTDIR@;$(FONTDIR);" \
	-e "s;@FONTPATH@;$(FONTPATH);" \
	-e "s;@MACRODIR@;$(MACRODIR);" \
	-e "s;@MACROPATH@;$(MACROPATH);" \
	-e "s;@HYPHENFILE@;$(HYPHENFILE);" \
	-e "s;@DEVICE@;$(DEVICE);" \
	-e "s;@GROFF@;$(GROFF);" \
	Makefile.bd >bindist/Makefile

FORCE: