### ====================================================================
### Makefile for dired.
###
### Command-line macros to override Makefile settings:
###	prefix		= parent of BINDIR
###	BINDIR		= directory to install executable in
###	DIREDFILE	= absolute path to dired executable
###	EXTRADEFINES	= -Dxyz -Dxxx ... compiler definitions
###	HELPFILE	= absolute path to dired help file
###	HTMLDIR		= directory for optionally installed html files
###	MANDIR		= directory to install man pages in
###	MANEXT		= file extension of installed man pages
###	MAXFILES	= maximum number of files per directory
###	MOREPGM		= name of default screen pager (less, more, pg, ...)
###	OPT		= compiler optimization flags
###	PROGRAM		= name of installed program (because some sites
###			  call this program ded instead of dired)
###
### Major Targets:
###	all		build program
###	check		run validation suite (dummy target)
###	clean		remove temp and object files
###	cleandist	remove distribution archive files
###	clobber		same as distclean
###	cshsystem.i	C preprocessor output from cshsystem.c
###	cshsystem.o	object file of cshsystem.c
###	distclean	remove almost everything that "make all" can
###			rebuild
###	dired		build program
###	dired.html	HTML version of UNIX manual pages
###	dired.i		C preprocessor output from dired.c
###	dired.o		object file of dired.c
###	dired.ps	PostScript version of formatted UNIX manual pages
###	dired.txt	ASCII version of formatted UNIX manual pages
###	dist		make distribution archive files
###	distclean	remove almost everything make can rebuild, leaving the
###			directory in the state it was distributed in
###	docs		ASCII, HTML, PDF, and PostScript versions of man pages
###	dw		doubled-word checks on documentation
###	install		install executable and man pages
###	install-bin	install executable
###	install-ftp	install distribution in maintainer's ftp tree
###	install-man	install man pages
###	install-show	directory-list installed files
###	maintainer-clean remove absolutely everything that "make" can
###			rebuild at the maintainer's site (do NOT use this
###			target!)
###	mostlyclean	same as clean
###	README		ASCII version of README.html
###	README.curses	Notes on problems with -lcurses.
###	README.pdf	PDF version of README.html
###	README.ps	PostScript version of README.html
###	reconfigure	regenerate configure script and config.hin (maintainer
###			only: do NOT use this target!)
###	regexpr.i	C preprocessor output from regexpr.c
###	regexpr.o	object file of regexpr.c
###	spell		spelling checks on documentation
###	uninstall	uninstall executable and man pages
###	uninstall-bin	uninstall executable
###	uninstall-ftp	uninstall distribution from maintainer's ftp tree
###	uninstall-man	uninstall man pages
###	$(PROGRAM)	program to be installed
###	$(PROGRAM).shar shar bundle for e-mail distribution (lacks binary files)
###	$(PROGRAM).tar	UNIX tar archive for distribution
###	$(PROGRAM).zip	UNIX InfoZIP archive for distribution
###	$(PROGRAM).zoo	UNIX zoo archive for distribution
###
### [27-Jun-1998] -- update for use with GNU autoconfigure
### ====================================================================

### These lines may need local customization:

prefix		= /usr/local

BINDIR          = $(prefix)/bin

CATDIR          = $(prefix)/man/cat1

FTPDIR		= /u/ftp/pub/dired

HTMLDIR		= $(prefix)/share/html

MANDIR          = $(prefix)/man/man1

MANEXT          = 1

### ====================================================================
### You should NOT have to change anything below this line: configure
### should have done the job for you

AUTOHEADER	= autoheader

AUTOCONF	= autoconf

CC              = cc

CFLAGS          = -g $(SYSDEFS) $(OPT) $(DEFINES) $(EXTRADEFINES) $(INCLUDES)

CHMOD		= chmod

COMMONHEADERS	= config.h confix.h stdc.h

COL		= col -x -b

COMPRESS	= gzip

CP              = scp -p

DEFINES		= -DV4P2 -DHAVE_CONFIG_H

DEROFF		= deroff

DIREDDEFS	= -DDIREDFILE=\"$(DIREDFILE)\" \
		  -DHELPFILE=\"$(HELPFILE)\" \
		  -DMAXFILES=$(MAXFILES) \
		  -DMOREPGM=\"$(MOREPGM)\"

DIREDFILE	= $(BINDIR)/$(PROGRAM)

DISTFILES       = $(SHARFILES) README.pdf dired.pdf

DISTILL		= distill

DW		= dw

EQN		= geqn

ETAGS		= etags

EXTRADEFINES	=

GCCFLAGS	= -Wall -Wshadow -Wcast-qual -Wpointer-arith \
		  -Wwrite-strings -W -Wtraditional -Wid-clash-8 \
		  -Wbad-function-cast -Wconversion -Waggregate-return \
		  -Wstrict-prototypes -Wmissing-prototypes \
		  -Wmissing-declarations -Wredundant-decls \
		  -Wnested-externs -Winline

HELPDIR		= $(HELPTOP)/$(PROGRAM)-$(VERSION)

HELPFILE	= $(HELPDIR)/$(PROGRAM).hlp

HELPTOP		= $(prefix)/share/lib/$(PROGRAM)

INCLUDES	= -I.

### Discard warnings from ispell, because recent versions complain
### about words with digits and punctuation, sigh...
ISPELL		= ispell 2>/dev/null

LDFLAGS		= 

### Possibly -lcurses -ltermlib, but sometimes -ltermlib is not available.
LIBS            =  -lcurses

LN		= ln

LS		= ls

MAXFILES        = 10240

### man2html is available at ftp://ftp.math.utah.edu/pub/sgml/man2html-x.yy.*
MAN2HTML	= man2html

MOREPGM         = /usr/local/bin/less

MKDIR		= mkdir

MV		= mv

NROFF		= groff

### You can change this name at make time to alter the base name of all
### installed files
PROGRAM		= dired

OPT             =

### Private file with implementation of re_comp() and re_exec()
REGEXPR		= 

RM              = rm $(RMFLAGS)

RMDIR		= rmdir

RMFLAGS		= -f

SED		= sed

### This filter replaces dired by PROGRAM, and does other minor customizations,
### in the installed documentation,
SEDFILTER	= $(SED) -e "s@dired@$(PROGRAM)@g" \
			-e "s@DIRED@`echo $(PROGRAM) | $(TR) a-z A-Z`@g" \
			-e "s@$(PROGRAM)-x@dired-x@g" \
			-e "s@<STRONG>more</STRONG>[(]1[)]@<STRONG>$(MOREPGM)</STRONG>@" \
			-e "s@[.]BR more [(]1[)]@.B $(MOREPGM)@"

SHAR		= shar

SHARFILES       = ChangeLog Makefile.in BUGS README README.curses README.html \
		  README.ps $(CFILES) $(HFILES) config.hin configure \
		  configure.in dired.hlp dired.html dired.man dired.ps \
		  dired.sok dired.txt install-sh save/Makefile save/config.h \
		  save/configure termcap

SHELL           = /bin/sh

SORT		= sort

SPELL		= spell

STRIP		= strip

SYSDEFS		= 

TAR		= gnutar

TBL		= gtbl

TOUCH		= touch

TR		= tr

UNZIP		= unzip

VERSION		= 4.05

ZIP		= zip

ZOO		= zoo

### ====================================================================

CFILES		= color.c cshsystem.c dired.c regexpr.c

HFILES		= confix.h config.h dregexpr.h lbuf.h stdc.h xsignal.h \
		  xstring.h xterm.h xwait.h

### ====================================================================

.SUFFIXES:
.SUFFIXES:	.o .i .c .pdf .ps .html .man

.c.i:
	$(CC) $(CFLAGS) -E $*.c >$*.i

.c.o:
	$(CC) $(CFLAGS) -c $*.c

.ps.pdf:
	$(DISTILL) $<

.man.html:
	$(MAN2HTML) $<

### ====================================================================

all:	$(PROGRAM)

check:
	@echo There is no validation suite for $(PROGRAM)...you must run it manually

clean:
	-$(RM) *.d
	-$(RM) *.i
	-$(RM) *.ln
	-$(RM) *.o
	-$(RM) *.s
	-$(RM) *~
	-$(RM) \#*
	-$(RM) core

cleandist:
	-$(RM) $(PROGRAM).tar-lst
	-$(RM) $(PROGRAM).tar
	-$(RM) $(PROGRAM).tar.gz
	-$(RM) $(PROGRAM).zip
	-$(RM) $(PROGRAM).zip-lst
	-$(RM) $(PROGRAM).zoo
	-$(RM) $(PROGRAM).zoo-lst
	-$(RM) $(PROGRAM)-$(VERSION).tar-lst
	-$(RM) $(PROGRAM)-$(VERSION).tar
	-$(RM) $(PROGRAM)-$(VERSION).tar.gz
	-$(RM) $(PROGRAM)-$(VERSION).zip
	-$(RM) $(PROGRAM)-$(VERSION).zip-lst
	-$(RM) $(PROGRAM)-$(VERSION).zoo
	-$(RM) $(PROGRAM)-$(VERSION).zoo-lst

clobber:	distclean

### Work around a serious flaw in GNU configure: it always inserts -g
### -O2 in CFLAGS and CXXFLAGS.  -g cannot be used with $(OPT) on many
### systems, and -O2 is not supported on many systems.
color.i:       color.c $(COMMONHEADERS) lbuf.h xstring.h Makefile

color.o:       color.c $(COMMONHEADERS) lbuf.h xstring.h

configure:	configure.in
	$(AUTOHEADER)
	$(AUTOCONF)
	$(MV) configure configure.tmp
	$(SED)  \
		-e 's/CFLAGS="-g */CFLAGS="/' \
		-e 's/CXXFLAGS="-g */CXXFLAGS="/' \
		-e 's/CFLAGS=" *-O2/CFLAGS="/' \
		-e 's/CXXFLAGS=" *-O2/CXXFLAGS="/' \
		< configure.tmp > configure
	$(CHMOD) 775 configure
	-$(RM) configure.tmp

cshsystem.i:	cshsystem.c $(COMMONHEADERS) xsignal.h xstring.h \
		xwait.h Makefile

cshsystem.o:	cshsystem.c $(COMMONHEADERS) xsignal.h xstring.h xwait.h

dist:	docs $(PROGRAM).tar $(PROGRAM).zip $(PROGRAM).zoo

$(PROGRAM):	dired.o color.o cshsystem.o $(REGEXPR:.c=.o)
	$(CC) $(CFLAGS) -o $(PROGRAM) dired.o color.o cshsystem.o $(REGEXPR:.c=.o) $(LIBS) $(LDFLAGS)

dired.i:       dired.c $(COMMONHEADERS) dregexpr.h lbuf.h xsignal.h \
		  xstring.h xterm.h xwait.h Makefile
	$(CC) $(CFLAGS) $(DIREDDEFS) -E dired.c >dired.i

dired.o:       dired.c $(COMMONHEADERS) dregexpr.h lbuf.h xsignal.h \
		  xstring.h xterm.h xwait.h
	$(CC) $(CFLAGS) $(DIREDDEFS) -c dired.c

dired.ps:	dired.man
	$(TBL) dired.man | $(EQN) | $(NROFF) -man -Tps >$@

dired.txt:	dired.man
	$(TBL) dired.man | $(EQN) -Tascii | $(NROFF) -man -Tascii | $(COL) >$@

distclean:	cleandist mostlyclean
	-$(RM) $(PROGRAM)
	-$(RM) Makefile config.h config.cache config.log config.status
	-$(RM) -r autom4te.cache/

docs:	dired.html dired.ps dired.pdf dired.txt README README.ps README.pdf

dw:
	@echo Doubled word check in dired.man ...
	@$(DEROFF) dired.man | $(DW)
	@echo ""
	@echo Doubled word check in ChangeLog ...
	$(DW) < ChangeLog
	@echo ""
	@echo Doubled word check in README ...
	$(DW) < README

install:	$(PROGRAM) install-bin install-hlp install-man install-show
	@echo '========================================================================'
	@echo '========================================================================'
	@echo '== Finally, you may wish to install the HTML form of the dired        =='
	@echo '== documentation.  Try "make -n install-html" to see if that is       =='
	@echo '== appropriate for your system.                                       =='
	@echo '========================================================================'
	@echo '========================================================================'

install-bin:	uninstall-bin
	$(CP) $(PROGRAM) $(DIREDFILE)
	$(LN) $(DIREDFILE) $(DIREDFILE)-$(VERSION)
	$(STRIP) $(DIREDFILE)
	$(CHMOD) 775 $(DIREDFILE)

install-ftp:	$(PROGRAM).tar $(PROGRAM).zip $(PROGRAM).zoo
	$(TAR) tvf $(PROGRAM)-$(VERSION).tar >$(FTPDIR)/$(PROGRAM)-$(VERSION).tar-lst
	$(COMPRESS) <$(PROGRAM)-$(VERSION).tar >$(FTPDIR)/$(PROGRAM)-$(VERSION).tar.gz
	$(CP) $(PROGRAM)-$(VERSION).zip $(FTPDIR)
	$(CP) $(PROGRAM)-$(VERSION).zip-lst $(FTPDIR)
	$(CP) $(PROGRAM)-$(VERSION).zoo $(FTPDIR)
	$(CP) $(PROGRAM)-$(VERSION).zoo-lst $(FTPDIR)
	@echo ""
	@echo Installed FTP files...
	@$(LS) -l $(FTPDIR)/$(PROGRAM)-$(VERSION)*

install-hlp:
	$(MKDIR) -p $(HELPTOP)
	$(CHMOD) 775 $(HELPTOP)
	$(MKDIR) -p $(HELPDIR)
	$(CHMOD) 775 $(HELPDIR)
	$(CP) dired.hlp $(HELPFILE)
	$(CHMOD) 664 $(HELPFILE)

install-html:	uninstall-html
	if test -d $(HTMLDIR) ; \
	then \
		true ; \
	else \
		$(MKDIR) -p $(HTMLDIR) || $(MKDIR) $(HTMLDIR) ; \
	fi
	$(SEDFILTER) dired.html > $(HTMLDIR)/$(PROGRAM).html
	$(CHMOD) 664 $(HTMLDIR)/$(PROGRAM).html
	@echo ""
	@echo Installed HTML files...
	@$(LS) -l $(HTMLDIR)/$(PROGRAM).html

install-man:	uninstall-man
	-$(RM) $(MANDIR)/../cat$(MANEXT)/$(PROGRAM).$(MANEXT)
	$(SEDFILTER) dired.man > $(MANDIR)/$(PROGRAM).$(MANEXT)
	$(CHMOD) 664 $(MANDIR)/$(PROGRAM).$(MANEXT)

install-show:
	@echo ""
	@echo Installed files...
	@$(LS) -l $(BINDIR)/$(PROGRAM) $(BINDIR)/$(PROGRAM)-$(VERSION) \
		  $(MANDIR)/$(PROGRAM).$(MANEXT) $(HELPFILE)

maintainer-clean:	distclean
	@echo "This command is intended for maintainers to use;"
	@echo "it deletes files that may require special tools to rebuild."
	-$(RM) configure
	-$(RM) dired.txt
	-$(RM) dired.html
	-$(RM) dired.pdf
	-$(RM) dired.ps
	-$(RM) README
	-$(RM) README.ps
	-$(RM) README.pdf

mostlyclean:	clean
	-$(RM) TAGS

README README.ps:	README.html
	@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	@echo !! ERROR: $@ is out-of-date: regenerate from README.html !!
	@echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

README.pdf:	README.ps
	$(DISTILL) $?

reconfigure:	configure
	CC='$(CC)' ./configure

regexpr.i:	regexpr.c $(COMMONHEADERS) dregexpr.h xstring.h Makefile

regexpr.o:	regexpr.c $(COMMONHEADERS) dregexpr.h xstring.h

spell:	dired.man README ChangeLog
	@echo Spelling check in dired.man ...
	@$(DEROFF) dired.man | $(SPELL) +dired.sok 2>/dev/null | \
		$(SORT) -u
	@$(DEROFF) dired.man | $(ISPELL) -l -pdired.sok | $(SORT) -u
	@echo ""
	@echo Spelling check in ChangeLog ...
	@$(SPELL) +dired.sok 2>/dev/null < ChangeLog | $(SORT) -u
	@$(ISPELL) -l -pdired.sok < ChangeLog | $(SORT) -u
	@echo ""
	@echo Spelling check in README.html ...
	@$(SPELL) +dired.sok 2>/dev/null < README | $(SORT) -u
	@$(ISPELL) -l -pdired.sok < README | $(SORT) -u

TAGS:	$(CFILES) $(HFILES)
	$(ETAGS) $(CFILES) $(HFILES)

uninstall:	uninstall-bin uninstall-hlp uninstall-man

uninstall-bin:
	-$(RM) $(DIREDFILE) $(DIREDFILE)-$(VERSION)

uninstall-ftp:
	-$(RM) $(FTPDIR)/$(PROGRAM)-$(VERSION).tar-lst
	-$(RM) $(FTPDIR)/$(PROGRAM)-$(VERSION).tar.gz
	-$(RM) $(FTPDIR)/$(PROGRAM)-$(VERSION).zip
	-$(RM) $(FTPDIR)/$(PROGRAM)-$(VERSION).zip-lst
	-$(RM) $(FTPDIR)/$(PROGRAM)-$(VERSION).zoo
	-$(RM) $(FTPDIR)/$(PROGRAM)-$(VERSION).zoo-lst

uninstall-hlp:
	-$(RM) $(HELPFILE)
	-$(RMDIR) $(HELPDIR)

uninstall-html:
	-$(RM) $(HTMLDIR)/$(PROGRAM).html

uninstall-man:
	-$(RM) $(MANDIR)/../cat$(MANEXT)/$(PROGRAM).$(MANEXT)
	-$(RM) $(MANDIR)/$(PROGRAM).$(MANEXT)

$(PROGRAM).shar:	$(SHARFILES)
	$(SHAR) $(SHARFILES) >dired.shar

$(PROGRAM).tar:	$(DISTFILES)
	-$(RM) $(PROGRAM).tar $(PROGRAM).tar-lst
	$(TAR) chf $(PROGRAM).tar $(DISTFILES)
	-$(MKDIR) $(PROGRAM)-$(VERSION)
	cd $(PROGRAM)-$(VERSION); $(TAR) xf ../$(PROGRAM).tar
	$(TAR) cf $(PROGRAM)-$(VERSION).tar $(PROGRAM)-$(VERSION)
	-$(RM) -rf $(PROGRAM)-$(VERSION)
	-$(RM) $(PROGRAM).tar
	$(LN) $(PROGRAM)-$(VERSION).tar $(PROGRAM).tar

$(PROGRAM).zip:	$(DISTFILES)
	-$(RM) $(PROGRAM)*.zip
	-$(RM) $(PROGRAM)*.zip-lst
	$(ZIP) $(PROGRAM)-$(VERSION).zip $(DISTFILES)
	$(UNZIP) -v $(PROGRAM)-$(VERSION).zip >$(PROGRAM)-$(VERSION).zip-lst
	$(LN) $(PROGRAM)-$(VERSION).zip $(PROGRAM).zip

$(PROGRAM).zoo:	$(DISTFILES)
	-$(RM) $(PROGRAM)*.zoo
	-$(RM) $(PROGRAM)*.zoo-lst
	$(ZOO) a $(PROGRAM)-$(VERSION).zoo $(DISTFILES)
	$(ZOO) v $(PROGRAM)-$(VERSION).zoo >$(PROGRAM)-$(VERSION).zoo-lst
	$(LN) $(PROGRAM)-$(VERSION).zoo $(PROGRAM).zoo
