1###=====================================================================
2### Makefile for files in /u/sy/beebe/src/ndiff
3###
4### Copyright (C) 2000 Nelson H. F. Beebe
5### See the file ndiff.sin for a full copyright notice.
6###
7### Current target list:
8###	all
9###	$(PROGNAME).jar
10###	$(PROGNAME).tar
11###	$(PROGNAME).zip
12###	$(PROGNAME).zoo
13###	check
14###	check-ndiff
15###	clean
16###	cleandist
17###	cleandocs
18###	clobber
19###	config.hin
20###	configure
21###	dist
22###	distclean
23###	docs
24###	dust
25###	dw
26###	html
27###	install
28###	install-exe
29###	install-ftp
30###	install-man
31###	install-show
32###	install-shrlib
33###	maintainer-check-regress
34###	maintainer-checknr
35###	maintainer-clean
36###	Makefile
37###	maketab
38###	mostlyclean
39###	pdf
40###	ps
41###	spell
42###	tgrind
43###	txt
44###	uninstall
45###	uninstall-exe
46###	uninstall-man
47###	uninstall-shrlib
48###
49### [10-Dec-2000] -- update for version 2.00
50### [28-Jan-2000] -- original version 1.00
51###=====================================================================
52### Program definitions
53
54PROGNAME	= ndiff
55PROGRAMS	= $(PROGNAME)
56VERSION		= @VERSION@
57DATE		= @DATE@
58
59###=====================================================================
60### Installation locations
61
62prefix		= @prefix@
63bindir		= $(prefix)/bin
64catdir		= $(prefix)/man/cat$(manext)
65mandir		= $(prefix)/man/man$(manext)
66manext		= 1
67shrlibdir	= ${DESTDIR}/usr/local/share/ndiff
68
69
70FTPDIR		= /u/ftp/pub/misc
71
72###=====================================================================
73### Macro definitions
74
75AUTOCONF	= @AUTOCONF@
76
77AUTOHEADER	= @AUTOHEADER@
78
79AWK		= @AWK@
80
81CAT		= @CAT@
82
83CC		= @CC@
84
85CHECKNR		= @CHECKNR@
86
87CHECKOKAY	= @CHECKOKAY@
88
89CHECKSUM	= @CHECKSUM@
90
91CHMOD		= @CHMOD@
92
93CMP		= @CMP@
94
95CP		= @CP@ -p
96
97DEROFF		= @DEROFF@
98
99DIFF		= @DIFF@
100
101DISTILL		= @DISTILL@
102
103DITROFF		= @DITROFF@
104
105### dw is available at:
106###	ftp://ftp.math.utah.edu/pub/misc/dw.jar
107###	ftp://ftp.math.utah.edu/pub/misc/dw.shar
108###	ftp://ftp.math.utah.edu/pub/misc/dw.tar.gz
109###	ftp://ftp.math.utah.edu/pub/misc/dw.zip
110###	ftp://ftp.math.utah.edu/pub/misc/dw.zoo
111###
112###	http://www.math.utah.edu/pub/misc/dw.jar
113###	http://www.math.utah.edu/pub/misc/dw.shar
114###	http://www.math.utah.edu/pub/misc/dw.tar.gz
115###	http://www.math.utah.edu/pub/misc/dw.zip
116###	http://www.math.utah.edu/pub/misc/dw.zoo
117DW		= @DW@
118
119ETAGS		= @ETAGS@
120
121GREP		= @GREP@
122
123GZIP		= @GZIP@
124
125ISPELL		= @ISPELL@
126
127JAR		= @JAR@
128
129LN		= @LN@
130
131LS		= @LS@
132
133### man2html is available at
134###	ftp://ftp.math.utah.edu/pub/sgml/man2html-x.yy.*
135###	http://www.math.utah.edu/pub/sgml/index.html#man2html
136MAN2HTML	= @MAN2HTML@
137
138MAN2HTMLFLAGS	= -grammar-level 3.2
139
140MKDIR		= @MKDIR@ -p
141
142MV		= @MV@
143
144NROFF		= @NROFF@
145
146RM		= @RM@ -f
147
148SED		= @SED@
149
150SEDCMD		= $(SED) -e 's%AWK=.*$$%AWK=$(AWK)%' \
151			-e 's%LIBDIR=/.*$$%LIBDIR=$(shrlibdir)%' \
152			-e 's%@LIBDIR@%$(shrlibdir)%g' \
153			-e 's%@BINDIR@%$(bindir)%g' \
154			-e 's%@VERSIONREGEXP@%$(VERSION)%g' \
155			-e 's%@DATE@%$(DATE)%g' \
156			-e 's%^\#! /bin/sh%\#! $(SHELL)%'
157
158SHELL		= @SH@
159
160SORT		= @SORT@
161
162SPELL		= @SPELL@
163
164TAGSFILES	= awklib.c awklib.h ndiff.c ndiff.h
165
166TAR		= @TAR@
167
168### The enhanced tgrind utility is available at:
169###
170###	ftp://ftp.math.utah.edu/pub/misc/tgrind-3.00.jar
171###	ftp://ftp.math.utah.edu/pub/misc/tgrind-3.00.tar.gz
172###	ftp://ftp.math.utah.edu/pub/misc/tgrind-3.00.zip
173###	ftp://ftp.math.utah.edu/pub/misc/tgrind-3.00.zoo
174###
175###	http://www.math.utah.edu/pub/misc/tgrind-3.00.jar
176###	http://www.math.utah.edu/pub/misc/tgrind-3.00.tar.gz
177###	http://www.math.utah.edu/pub/misc/tgrind-3.00.zip
178###	http://www.math.utah.edu/pub/misc/tgrind-3.00.zoo
179TGRIND		= @TGRIND@
180
181UNZIP		= @UNZIP@
182
183ZIP		= @ZIP@
184
185ZOO		= @ZOO@
186
187###=====================================================================
188### Compiler flags:
189
190CFLAGS		= @CFLAGS@ $(INCLUDES) $(DEFINES) $(OPT) $(XCFLAGS)
191
192DEFINES		= -DVERSION='"@VERSION@"' -DDATE='"@DATE@"' $(XDEFINES)
193
194INCLUDES	?= -I. $(XINCLUDES)
195
196LDFLAGS		?= @LDFLAGS@ $(XLDFLAGS)
197
198LIBS		= @LIBS@ $(XLIBS)
199
200OPT		= -O $(XOPT)
201
202TGRINDFLAGS	= -i 2 -l awk -fn Bookman $(XTGRINDFLAGS)
203
204###=====================================================================
205### Extra values to be appended to the X-less names at make time:
206
207XCFLAGS		=
208
209XDEFINES	=
210
211XINCLUDES	=
212
213XLDFLAGS	=
214
215XLIBS		=
216
217XOPT		=
218
219XTGRINDFLAGS	=
220
221###=====================================================================
222### Source files:
223
224AWKFILES	= $(PROGNAME).awk
225
226AWKTESTFILES	= awktest.awk awktest.c awktest.dat
227
228CHECKFILES      = test/check001.in1 test/check001.in2 test/check001.opt \
229		  test/check002.in1 test/check002.in2 test/check002.opt \
230		  test/check003.in1 test/check003.in2 test/check003.opt \
231		  test/check004.in1 test/check004.in2 test/check004.opt \
232		  test/check005.in1 test/check005.in2 test/check005.opt \
233		  test/check006.in1 test/check006.in2 test/check006.opt \
234		  test/check007.in1 test/check007.in2 test/check007.opt \
235		  test/check008.in1 test/check008.in2 test/check008.opt \
236		  test/check009.in1 test/check009.in2 test/check009.opt \
237		  test/check010.in1 test/check010.in2 test/check010.opt \
238		  test/check011.in1 test/check011.in2 test/check011.opt \
239		  test/check012.in1 test/check012.in2 test/check012.opt \
240		  test/check013.in1 test/check013.in2 test/check013.opt \
241		  test/check014.in1 test/check014.in2 test/check014.opt \
242		  test/check015.in1 test/check015.in2 test/check015.opt \
243		  test/check016.in1 test/check016.in2 test/check016.opt \
244		  test/check017.in1 test/check017.in2 test/check017.opt \
245		  test/check018.in1 test/check018.in2 test/check018.opt \
246		  test/check019.in1 test/check019.in2 test/check019.opt \
247		  test/check020.in1 test/check020.in2 test/check020.opt \
248		  test/check021.in1 test/check021.in2 test/check021.opt \
249		  test/check022.in1 test/check022.in2 test/check022.opt \
250		  test/check023.in1 test/check023.in2 test/check023.opt \
251		  test/check024.in1 test/check024.in2 test/check024.opt \
252		  test/check025.in1 test/check025.in2 test/check025.opt \
253		  test/check026.in1 test/check026.in2 test/check026.opt \
254		  test/okay-dbl/check001.err test/okay-dbl/check001.out \
255		  test/okay-dbl/check002.err test/okay-dbl/check002.out \
256		  test/okay-dbl/check003.err test/okay-dbl/check003.out \
257		  test/okay-dbl/check004.err test/okay-dbl/check004.out \
258		  test/okay-dbl/check005.err test/okay-dbl/check005.out \
259		  test/okay-dbl/check006.err test/okay-dbl/check006.out \
260		  test/okay-dbl/check007.err test/okay-dbl/check007.out \
261		  test/okay-dbl/check008.err test/okay-dbl/check008.out \
262		  test/okay-dbl/check009.err test/okay-dbl/check009.out \
263		  test/okay-dbl/check010.err test/okay-dbl/check010.out \
264		  test/okay-dbl/check011.err test/okay-dbl/check011.out \
265		  test/okay-dbl/check012.err test/okay-dbl/check012.out \
266		  test/okay-dbl/check013.err test/okay-dbl/check013.out \
267		  test/okay-dbl/check014.err test/okay-dbl/check014.out \
268		  test/okay-dbl/check015.err test/okay-dbl/check015.out \
269		  test/okay-dbl/check016.err test/okay-dbl/check016.out \
270		  test/okay-dbl/check017.err test/okay-dbl/check017.out \
271		  test/okay-dbl/check018.err test/okay-dbl/check018.out \
272		  test/okay-dbl/check019.err test/okay-dbl/check019.out \
273		  test/okay-dbl/check020.err test/okay-dbl/check020.out \
274		  test/okay-dbl/check021.err test/okay-dbl/check021.out \
275		  test/okay-dbl/check022.err test/okay-dbl/check022.out \
276		  test/okay-dbl/check023.err test/okay-dbl/check023.out \
277		  test/okay-dbl/check024.err test/okay-dbl/check024.out \
278		  test/okay-dbl/check025.err test/okay-dbl/check025.out \
279		  test/okay-dbl/check026.err test/okay-dbl/check026.out \
280		  test/okay-gmp/check001.err test/okay-gmp/check001.out \
281		  test/okay-gmp/check002.err test/okay-gmp/check002.out \
282		  test/okay-gmp/check003.err test/okay-gmp/check003.out \
283		  test/okay-gmp/check004.err test/okay-gmp/check004.out \
284		  test/okay-gmp/check005.err test/okay-gmp/check005.out \
285		  test/okay-gmp/check006.err test/okay-gmp/check006.out \
286		  test/okay-gmp/check007.err test/okay-gmp/check007.out \
287		  test/okay-gmp/check008.err test/okay-gmp/check008.out \
288		  test/okay-gmp/check009.err test/okay-gmp/check009.out \
289		  test/okay-gmp/check010.err test/okay-gmp/check010.out \
290		  test/okay-gmp/check011.err test/okay-gmp/check011.out \
291		  test/okay-gmp/check012.err test/okay-gmp/check012.out \
292		  test/okay-gmp/check013.err test/okay-gmp/check013.out \
293		  test/okay-gmp/check014.err test/okay-gmp/check014.out \
294		  test/okay-gmp/check015.err test/okay-gmp/check015.out \
295		  test/okay-gmp/check016.err test/okay-gmp/check016.out \
296		  test/okay-gmp/check017.err test/okay-gmp/check017.out \
297		  test/okay-gmp/check018.err test/okay-gmp/check018.out \
298		  test/okay-gmp/check019.err test/okay-gmp/check019.out \
299		  test/okay-gmp/check020.err test/okay-gmp/check020.out \
300		  test/okay-gmp/check021.err test/okay-gmp/check021.out \
301		  test/okay-gmp/check022.err test/okay-gmp/check022.out \
302		  test/okay-gmp/check023.err test/okay-gmp/check023.out \
303		  test/okay-gmp/check024.err test/okay-gmp/check024.out \
304		  test/okay-gmp/check025.err test/okay-gmp/check025.out \
305		  test/okay-gmp/check026.err test/okay-gmp/check026.out \
306		  test/okay-ldb/check001.err test/okay-ldb/check001.out \
307		  test/okay-ldb/check002.err test/okay-ldb/check002.out \
308		  test/okay-ldb/check003.err test/okay-ldb/check003.out \
309		  test/okay-ldb/check004.err test/okay-ldb/check004.out \
310		  test/okay-ldb/check005.err test/okay-ldb/check005.out \
311		  test/okay-ldb/check006.err test/okay-ldb/check006.out \
312		  test/okay-ldb/check007.err test/okay-ldb/check007.out \
313		  test/okay-ldb/check008.err test/okay-ldb/check008.out \
314		  test/okay-ldb/check009.err test/okay-ldb/check009.out \
315		  test/okay-ldb/check010.err test/okay-ldb/check010.out \
316		  test/okay-ldb/check011.err test/okay-ldb/check011.out \
317		  test/okay-ldb/check012.err test/okay-ldb/check012.out \
318		  test/okay-ldb/check013.err test/okay-ldb/check013.out \
319		  test/okay-ldb/check014.err test/okay-ldb/check014.out \
320		  test/okay-ldb/check015.err test/okay-ldb/check015.out \
321		  test/okay-ldb/check016.err test/okay-ldb/check016.out \
322		  test/okay-ldb/check017.err test/okay-ldb/check017.out \
323		  test/okay-ldb/check018.err test/okay-ldb/check018.out \
324		  test/okay-ldb/check019.err test/okay-ldb/check019.out \
325		  test/okay-ldb/check020.err test/okay-ldb/check020.out \
326		  test/okay-ldb/check021.err test/okay-ldb/check021.out \
327		  test/okay-ldb/check022.err test/okay-ldb/check022.out \
328		  test/okay-ldb/check023.err test/okay-ldb/check023.out \
329		  test/okay-ldb/check024.err test/okay-ldb/check024.out \
330		  test/okay-ldb/check025.err test/okay-ldb/check025.out \
331		  test/okay-ldb/check026.err test/okay-ldb/check026.out
332
333CHECKOPTFILES   = check001.opt check002.opt check003.opt check004.opt \
334		  check005.opt check006.opt check007.opt check008.opt \
335		  check009.opt check010.opt check011.opt check012.opt \
336		  check013.opt check014.opt check015.opt check016.opt \
337		  check017.opt check018.opt check019.opt check020.opt \
338		  check021.opt check022.opt check023.opt check024.opt \
339		  check025.opt check026.opt
340
341CHECKNAMES	= $(CHECKOPTFILES:.opt=)
342
343CONFIGINFILES   = config.hin configure.in $(PROGNAME).sin
344
345DISTFILES       = ChangeLog COPYING INSTALL Makefile.in README README.AWK \
346		  README.QUAD mkdir.sh $(CHECKFILES) $(CONFIGINFILES) \
347		  configure $(SINFILES) $(SHRLIBFILES) $(SOKFILES) \
348		  $(SRCFILES) $(DOCFILES) $(REGEXPFILES) $(SAVEFILES)
349
350DOCFILES	= $(HTMLFILES) $(MANFILES) $(PDFFILES) $(PSFILES) $(TXTFILES)
351
352HTMLFILES	= $(MANFILES:.man=.html)
353
354MANFILES	= $(PROGNAME).man
355
356PDFFILES	= $(MANFILES:.man=.pdf)
357
358PSFILES		= $(MANFILES:.man=.ps)
359
360REGEXPFILES     = regexp/Makefile regexp/README regexp/README.STDC \
361		  regexp/args.h regexp/regerror.c regexp/regexp.3 \
362		  regexp/regexp.c regexp/regexp.h regexp/regmagic.h \
363		  regexp/regsub.c regexp/tests regexp/timer.c regexp/try.c \
364		  regexp/try.errs
365
366SAVEFILES       = save/Makefile save/configure save/config.h
367
368SHFILES		= $(AWKFILES:.awk=.sh)
369
370SHRLIBFILES	= $(AWKFILES)
371
372SINFILES	= $(AWKFILES:.awk=.sin)
373
374SOKFILES	= $(MANFILES:.man=.sok)
375
376SRCFILES        = acconfig.h awklib.c awklib.h confix.h ndiff.c ndiff.h \
377		  store.c
378
379TMPINSTDIR	= $(TMPDIR)/$(PROGNAME)
380
381TMPDIR		= /tmp
382
383TXTFILES	= $(MANFILES:.man=.txt)
384
385###=====================================================================
386### Suffixes and extra rule(s):
387
388.SUFFIXES:	.dw .ser .html .pdf .ps .txt .man .i .c
389
390.c.i:
391	$(CC) $(CFLAGS) -E $< | $(GREP) -v '^[ 	]*$$' > $@
392
393.man.dw:
394	$(DEROFF) $< | $(DW) >$*.dw
395	@if [ -s $*.dw ] ; \
396	then \
397		echo "Doubled words in $*.dw" ; \
398		cat $*.dw ; \
399	fi
400
401.man.html:
402	$(MAN2HTML) $(MAN2HTMLFLAGS) $<
403	$(MV) $@ $*.tmp
404	$(SEDCMD) < $*.tmp >$@
405	-$(RM) $*.tmp
406
407.man.ps:
408	$(SEDCMD) $< | $(DITROFF) -Tps -man - >$@
409
410SPELL-FILTER = $(SED) -e "s/[^a-zA-Z'-]/ /g"
411.man.ser:
412	$(DEROFF) $< | $(SPELL-FILTER) | $(SPELL) +$*.sok >$*.ser
413	$(DEROFF) $< | $(SPELL-FILTER) | $(ISPELL) -l -p $*.sok >>$*.ser
414	@if [ -s $*.ser ] ; \
415	then \
416		echo "Spelling exceptions in $*.ser" ; \
417		$(SORT) -u $*.ser >/tmp/$*.tmp ; \
418		$(MV) /tmp/$*.tmp $*.ser ; \
419		$(CAT) $*.ser ; \
420	fi
421
422.man.txt:
423	$(SEDCMD) $< | $(NROFF) -man - | col -b | expand >$@
424
425.ps.pdf:
426	$(DISTILL) $<
427
428###=====================================================================
429### Targets:
430
431all:	$(PROGNAME)
432
433awktest:	awktest.o store.o awklib.o regexp.o regerror.o
434	$(CC) $(CFLAGS) -o $@ $(LDFLAGS) awktest.o store.o awklib.o regexp.o regerror.o $(LIBS)
435
436$(PROGNAME):	$(PROGNAME).o store.o awklib.o regexp.o regerror.o
437	$(CC) $(CFLAGS) -o $@ $(LDFLAGS) $(PROGNAME).o store.o awklib.o regexp.o regerror.o $(LIBS)
438
439### A Java archive (.jar) file is read and written like a UNIX .tar
440### file, but its format is compatible with InfoZip (zip/unzip), a
441### cross-platform archive format.  As Java becomes widely available,
442### .jar files will become familiar to users, and are therefore a
443### reasonable distribution format.
444###
445### jar creates one additional file, META-INF/MANIFEST.MF, which
446### provides a contents listing, and checksums, e.g.,
447###
448###	% cat META-INF/MANIFEST.MF
449###	Manifest-Version: 1.0
450###
451###	Name: foo.1
452###	Digest-Algorithms: SHA MD5
453###	SHA-Digest: 3o3sk+dlhmdbQB0A7Upx4qRRUzU=
454###	MD5-Digest: N7t5JDQ07HAcNKJSNTAhig==
455
456$(PROGNAME).jar:	$(DISTFILES)
457	-$(RM) $(PROGNAME).jar
458	$(JAR) cf $(PROGNAME).jar $(DISTFILES)
459	-$(MKDIR) $(PROGNAME)-$(VERSION)
460	cd $(PROGNAME)-$(VERSION); $(JAR) xf ../$(PROGNAME).jar
461	$(JAR) cf $(PROGNAME)-$(VERSION).jar $(PROGNAME)-$(VERSION)
462	-$(RM) -r $(PROGNAME)-$(VERSION)
463	-$(RM) $(PROGNAME).jar
464	$(LN) $(PROGNAME)-$(VERSION).jar $(PROGNAME).jar
465
466$(PROGNAME).tar:	$(DISTFILES)
467	-$(RM) $(PROGNAME).tar $(PROGNAME).tar-lst
468	$(TAR) chf $(PROGNAME).tar $(DISTFILES)
469	-$(MKDIR) $(PROGNAME)-$(VERSION)
470	cd $(PROGNAME)-$(VERSION); $(TAR) xf ../$(PROGNAME).tar
471	$(TAR) cf $(PROGNAME)-$(VERSION).tar $(PROGNAME)-$(VERSION)
472	-$(RM) -r $(PROGNAME)-$(VERSION)
473	-$(RM) $(PROGNAME).tar
474	$(LN) $(PROGNAME)-$(VERSION).tar $(PROGNAME).tar
475
476$(PROGNAME).zip:	$(DISTFILES)
477	-$(RM) $(PROGNAME)*.zip $(PROGNAME)*.zip-lst
478	$(ZIP) $(PROGNAME)-$(VERSION).zip $(DISTFILES)
479	$(UNZIP) -v $(PROGNAME)-$(VERSION).zip >$(PROGNAME)-$(VERSION).zip-lst
480	$(LN) $(PROGNAME)-$(VERSION).zip $(PROGNAME).zip
481
482$(PROGNAME).zoo:	$(DISTFILES)
483	-$(RM) $(PROGNAME)*.zoo $(PROGNAME)*.zoo-lst
484	$(ZOO) a $(PROGNAME)-$(VERSION).zoo $(DISTFILES)
485	$(ZOO) v $(PROGNAME)-$(VERSION).zoo >$(PROGNAME)-$(VERSION).zoo-lst
486	$(LN) $(PROGNAME)-$(VERSION).zoo $(PROGNAME).zoo
487
488# Because a good bit of the command-line processing is done in the
489# shell script interface to ndiff.awk, we need to make the checks
490# using a temporarily-installed version of the program.
491check:	check-install-tmp check-runs check-uninstall-tmp
492
493check-install-tmp:
494	@-$(MKDIR) $(TMPINSTDIR) $(TMPINSTDIR)/bin $(TMPINSTDIR)/man \
495		$(TMPINSTDIR)/man/man1 $(TMPINSTDIR)/share \
496		$(TMPINSTDIR)/share/lib $(TMPINSTDIR)/share/lib/$(PROGNAME)
497	@$(MAKE) install prefix=$(TMPINSTDIR) >/dev/null
498
499# Because jar seems to have problems with empty directories, we have a copy
500# of the *.opt files in test/okay/check??? and in test/check???.
501check-runs:
502	@echo ""
503	@echo ========================================================================
504	@echo Test of $(PROGNAME): there should be no output, other than the test and
505	@echo command names.  The tests take about 10 sec on a fast workstation.
506	@case $(CHECKOKAY) in \
507	okay-dbl) PRECISION="native double-precision" ;; \
508	okay-ldb) PRECISION="native long-double-precision" ;; \
509	okay-gmp) PRECISION="GNU gmp multiple-precision" ;; \
510	*)        PRECISION="unknown-precision" ;; \
511	esac ; \
512	echo This version of $(PROGNAME) has been built with $$PRECISION arithmetic.
513	@echo ========================================================================
514	@-cd test ; \
515	for f in $(CHECKNAMES) ; \
516	do \
517		echo ============ $$f: $(PROGNAME) `cat $$f.opt` ; \
518		$(MKDIR) $$f 2>/dev/null; \
519		$(TMPINSTDIR)/bin/$(PROGNAME) --quick --logfile $$f.err \
520			--outfile $$f.out `cat $$f.opt` $$f.in1 $$f.in2 ; \
521		if $(CMP) -s $(CHECKOKAY)/$$f.err $$f.err ; \
522		then \
523			$(RM) $$f.err ; \
524		else \
525			$(DIFF) $(CHECKOKAY)/$$f.err $$f.err ; \
526		fi ; \
527		if $(CMP) -s $(CHECKOKAY)/$$f.out $$f.out ; \
528		then \
529			$(RM) $$f.out ; \
530		else \
531			$(DIFF) $(CHECKOKAY)/$$f.out $$f.out ; \
532		fi ; \
533	done
534	@echo ========================================================================
535	@echo ""
536
537check-uninstall-tmp:
538	@-$(RM) -r $(TMPINSTDIR)
539
540checknr:
541	$(CHECKNR) $(MANFILES)
542
543clean:	clean-test
544	-$(RM) *.dw
545	-$(RM) *.i
546	-$(RM) *.o
547	-$(RM) *.ser
548	-$(RM) *.tmp
549	-$(RM) *~
550	-$(RM) \#*
551	-$(RM) a.out
552	-$(RM) core
553	-$(RM) tg_[0-9][0-9][0-9][0-9][0-9].*
554
555clean-test:
556	-$(RM) -r test/check???
557	-$(RM) test/check???.err test/check???.out
558	-$(RM) test/*~
559	-$(RM) test/\#*
560	-$(RM) test/a.out
561	-$(RM) test/core
562
563cleandist:
564	-$(RM) $(PROGNAME)*.jar $(PROGNAME)*.jar-lst
565	-$(RM) $(PROGNAME)*.tar $(PROGNAME)*.tar-lst
566	-$(RM) $(PROGNAME)*.zip $(PROGNAME)*.zip-lst
567	-$(RM) $(PROGNAME)*.zoo $(PROGNAME)*.zoo-lst
568
569cleandocs:
570	-$(RM) $(HTMLFILES)
571	-$(RM) $(PDFFILES)
572	-$(RM) $(PSFILES)
573	-$(RM) $(TXTFILES)
574
575clobber:	distclean
576
577### While this step requires autoconf and autoheader, it should only
578### ever be used at the developer's site, where it is universally
579### available.
580configure:	configure.in
581	$(AUTOHEADER)
582	$(AUTOCONF)
583
584dist:	docs $(PROGNAME).jar $(PROGNAME).tar $(PROGNAME).zip $(PROGNAME).zoo
585
586distclean:	mostlyclean cleandist
587	-$(RM) config.cache config.h config.log config.status Makefile $(PROGNAME).sh
588	-$(RM) $(PROGNAME)
589	-$(RM) awktest
590
591docs:	$(DOCFILES)
592
593dw:	$(MANFILES:.man=.dw)
594
595FRC:
596
597html:	$(HTMLFILES)
598
599install:	install-exe install-shrlib install-man install-show
600
601install-exe:	uninstall-exe
602	if test -f $(PROGNAME) ; \
603	then \
604		$(CP) $(PROGNAME) $(bindir)/$(PROGNAME) ; \
605	else \
606		for f in $(SHFILES) ; \
607		do \
608			g=`basename $$f .sh` ; \
609			$(SEDCMD) $$f | $(CHECKSUM) > $(bindir)/$$g ; \
610			$(CHMOD) 755 $(bindir)/$$g ; \
611		done ; \
612	fi
613
614install-ftp:	dist
615	$(TAR) tvf $(PROGNAME)-$(VERSION).tar >$(FTPDIR)/$(PROGNAME)-$(VERSION).tar-lst
616	$(GZIP) <$(PROGNAME)-$(VERSION).tar >$(FTPDIR)/$(PROGNAME)-$(VERSION).tar.gz
617	$(CP) $(PROGNAME)-$(VERSION).jar $(FTPDIR)
618	$(JAR) tvf $(PROGNAME)-$(VERSION).jar >$(FTPDIR)/$(PROGNAME)-$(VERSION).jar-lst 2>&1
619	$(CP) $(PROGNAME)-$(VERSION).zip $(FTPDIR)
620	$(CP) $(PROGNAME)-$(VERSION).zip-lst $(FTPDIR)
621	$(CP) $(PROGNAME)-$(VERSION).zoo $(FTPDIR)
622	$(CP) $(PROGNAME)-$(VERSION).zoo-lst $(FTPDIR)
623	$(LS) -l $(FTPDIR)/$(PROGNAME)*
624
625install-man:	uninstall-man
626	for f in $(MANFILES) ; \
627	do \
628		g=`basename $$f .man` ; \
629		$(SEDCMD) $$f | $(CHECKSUM) > $(mandir)/$$g.$(manext) ; \
630		$(CHMOD) 644 $(mandir)/$$g.$(manext) ; \
631	done
632
633install-show:
634	@echo ''
635	@echo Installed files...
636	@$(LS) -l $(bindir)/$(PROGNAME)
637	@$(LS) -l $(mandir)/$(PROGNAME).$(manext)
638	@if test -d $(shrlibdir) ; then $(LS) -lR $(shrlibdir)/* ; fi
639	@echo ''
640
641install-shrlib:	uninstall-shrlib
642
643
644	-$(MKDIR) $(shrlibdir)
645	@if test -d $(shrlibdir) ; then true ; else echo Cannot create $(shrlibdir) ; exit 1 ; fi
646	for f in $(SHRLIBFILES) ; \
647	do \
648		$(SEDCMD) < $$f > $(shrlibdir)/$$f ; \
649	done
650	$(CHMOD) 644 $(shrlibdir)/*
651
652maintainer-clean:	distclean cleandocs
653	@echo "This command is intended for maintainers to use;"
654	@echo "it deletes files that may require special tools to rebuild."
655	-$(RM) configure config.hin
656
657Makefile:	Makefile.in
658	./configure
659
660mostlyclean:	clean
661
662pdf:	$(PDFFILES)
663
664ps:	$(PSFILES)
665
666regerror.o:	regexp/regerror.c
667	(cd regexp; $(CC) $(CFLAGS) -c -I. regerror.c; $(MV) regerror.o ..)
668
669regexp.o:	regexp/regexp.c
670	(cd regexp; $(CC) $(CFLAGS) -c -I. regexp.c; $(MV) regexp.o ..)
671
672spell:	$(MANFILES:.man=.ser)
673
674reconfigure:	FRC
675	$(AUTOHEADER)
676	$(AUTOCONF)
677	CC="$(CC)" ./configure
678
679TAGS:	$(TAGSFILES)
680	$(ETAGS) $(TAGSFILES)
681
682tgrind:	tgrind-awk tgrind-c
683
684tgrind-awk:
685	@echo $(PROGNAME).awk
686	$(TGRIND) $(TGRINDFLAGS) $(PROGNAME).awk 2>&1 | $(GREP) '^-.*[.]ps'
687
688tgrind-c:	vgrindefs.v
689	@for f in *.[ch] ; \
690	do \
691		echo $$f ; \
692		$(TGRIND) $(TGRINDFLAGS) -l C -d vgrindefs.v $$f 2>&1 | $(GREP) '^-.*[.]ps' ; \
693		sleep 1 ; \
694	done
695	-@$(RM) tg_[0-9][0-9][0-9][0-9][0-9].dvi tg_[0-9][0-9][0-9][0-9][0-9].log tg_[0-9][0-9][0-9][0-9][0-9].tex
696
697txt:	$(TXTFILES)
698
699uninstall:	uninstall-exe uninstall-shrlib uninstall-man
700
701uninstall-exe:
702	-for f in $(PROGRAMS) ; \
703	do \
704		$(RM) $(bindir)/$$f 2>/dev/null; \
705	done
706
707uninstall-man:
708	-for f in $(MANFILES) ; \
709	do \
710		g=`basename $$f .man` ; \
711		$(RM) $(mandir)/$$g.$(manext) 2>/dev/null; \
712		$(RM) $(catdir)/$$g.$(manext) 2>/dev/null; \
713	done
714
715uninstall-shrlib:
716	-$(RM) -r $(shrlibdir) 2>/dev/null
717
718$(PROGNAME).o:	$(PROGNAME).c awklib.h ndiff.h
719awklib.o:	awklib.c awklib.h
720store.o:	store.c ndiff.h
721