#
# Makefile for Don Libes' cgi.tcl - routines for writing CGI scripts in Tcl
#

VERSION = \"@CGI_VERSION_FULL@\"
SHORT_VERSION = @CGI_VERSION@

srcdir = @srcdir@
VPATH = @srcdir@
SUBDIRS = @subdirs@

######################################################################
# The following lines are things you may want to change
######################################################################

# By default, "make install" will install the appropriate files in
# /usr/local/bin, /usr/local/lib, /usr/local/man, etc.  By changing this
# variable, you can specify an installation prefix other than /usr/local.
# You may find it preferable to call configure with the --prefix option
# to control this information.  This is especially handy if you are
# installing this several times (perhaps on a number of machines or
# in different places).  Then you don't have to hand-edit this file.
# See the INSTALL file for more information.  (Analogous information
# applies to the next variable as well.)
prefix = @prefix@

# You can specify a separate installation prefix for architecture-specific
# files such as binaries and libraries.
exec_prefix = @exec_prefix@

# Short directory path where binaries can be found to support #! hack.
# This directory path can be the same as the directory in which the binary
# actually sits except when the path is so long that the #! mechanism breaks
# (usually at 32 characters).
# The solution is to create a directory with a very short name, which consists
# only of symbolic links back to the true binaries.  Subtracting two for "#!"
# and a couple more for arguments (typically " -f" or " --") gives you 27
# characters.  Pathnames over this length won't be able to use the #! magic.
# For more info on this, see the execve(2) man page.
SHORT_BINDIR = $(exec_prefix)/bin

# Tcl interpreter for utility work.
CGI_TCL_EXECUTABLE = @CGI_TCL_EXECUTABLE@

# Where to put the examples - a directory in which your web server has
# permission to execute CGI scripts.
exampledir = /tmp/cgi-bin/cgi-tcl-examples

######################################################################
# End of things you may want to change
#
# Do not change anything after this
######################################################################

bindir_arch_indep = $(prefix)/bin
libdir 	= $(exec_prefix)/lib
datadir = $(prefix)/lib

mandir 	= $(prefix)/man
man1dir = $(mandir)/man1
man3dir = $(mandir)/man3
docdir = $(datadir)/doc

# utility script directories - arch-independent and arch-non-
# independent.
SCRIPTDIR	= $(datadir)/cgi$(SHORT_VERSION)
EXECSCRIPTDIR	= $(execdatadir)/cgi$(SHORT_VERSION)

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

# To install the following examples: make examples
EXAMPLES=cookie.cgi creditcard.cgi \
	display.cgi display-in-frame.cgi download.cgi \
	echo.cgi error.cgi evaljs.cgi example.tcl examples.cgi \
	form-tour.cgi form-tour-result.cgi format-tour.cgi frame.cgi \
	image.cgi img.cgi kill.cgi nistguest.cgi oratcl.cgi \
	parray.cgi passwd.tcl passwd-form.cgi passwd.cgi \
	push.cgi rm.cgi stopwatch.cgi \
	unimail.cgi upload.cgi uploadbin.cgi \
	validate.cgi vclock.cgi vclock.pl vclock-src-frame.cgi visitor.cgi \
	vote.cgi

EXAMPLES_DATA=nistguest vote.cnt

all: cgi.tcl pkgIndex.tcl

info:
dvi:

# Delete all the installed files that the `install' target creates
# (but not the noninstalled files such as `make all' creates)
uninstall:
	-rm -f $(SCRIPTDIR)/cgi.tcl
	-rm -f $(man3dir)/cgi.tcl.3
	-rm -f $(SCRIPTDIR)/pkgIndex.tcl

.PHONY: install-info install info
install-info:

install: all
	${srcdir}/mkinstalldirs $(man3dir) $(SCRIPTDIR) $(exampledir) $(exampledir)/data
# install scripts
	$(INSTALL_DATA) cgi.tcl $(SCRIPTDIR)
# install library man page
	$(INSTALL_DATA) cgi.tcl.man $(man3dir)/cgi.tcl.3
	$(INSTALL_DATA) pkgIndex.tcl $(SCRIPTDIR)

examples:
	for i in $(EXAMPLES) ; do \
	  $(CGI_TCL_EXECUTABLE) $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$$i > $$i ; \
	  $(INSTALL_PROGRAM) $$i $(exampledir) ; \
	  rm -f $$i ; \
	done
	for i in $(EXAMPLES_DATA) ; do \
	  $(INSTALL) -m 666 $(srcdir)/example/$$i $(exampledir)/data ; \
	done

cgi.tcl: $(srcdir)/cgi.tcl.in
	@echo "Rebuilding cgi.tcl..."
	$(SHELL) ./config.status

###################################
# Targets for Makefile and configure
###################################

Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) config.status
	@echo "Rebuilding the Makefile..."
	$(SHELL) ./config.status

# Let "make -f Makefile.in" produce a configure file
configure: $(srcdir)/configure.in $(srcdir)/Makefile.in
	@echo "Rebuilding configure..."
	if [ x"${srcdir}" = x"@srcdir@" ] ; then \
	  srcdir=. ; export srcdir ; \
	else true ; fi ; \
	(cd $${srcdir}; autoconf)

config.status: $(srcdir)/configure
	@echo "Rebuilding config.status..."
	$(SHELL) ./config.status --recheck

check:
	@if [ -f testsuite/Makefile ]; then \
	   cd testsuite && $(MAKE) $(FLAGS_TO_PASS) check; \
	else true; fi

# updating of pkgIndex.tcl has not yet been totally automated
# Instructions:
# 1) Replace version # in cgi.tcl with updated version.
#    (Gad, I'd have to turn the whole source into .in file to automate this
#     and it'd be a major nuisance when developing!)
pkgIndex.tcl: cgi.tcl
	$(CGI_TCL_EXECUTABLE) pkgcreate

################################################
# Various "clean" targets follow GNU conventions
################################################

# delete all files from current directory that are created by "make"
clean:
	-rm -f *~ *.o core

# like "clean", but also delete files created by "configure"
distclean: clean
	-rm -f Makefile config.status config.cache config.log
	-rm -f Dbg_cf.h

# like "clean", but doesn't delete test utilities or massaged scripts
# because most people don't have to worry about them
mostlyclean:
	-rm -f *~ *.o core

# delete everything from current directory that can be reconstructed
# except for configure
realclean:	distclean

######################################
# Targets for pushing out releases
######################################

FTPDIR = /itl/www/div826/subject/expect/cgi.tcl

# make a private tar file for myself
tar:	cgi.tcl-$(SHORT_VERSION).tar
	mv cgi.tcl-$(SHORT_VERSION).tar cgi.tcl.tar

# Make a release and install it on ftp server
# Note that we run configure on our end to make sure that cgi.tcl is usable
# for people who don't have configure at the destination end (non-UNIX folks).
ftp:	cgi.tcl cgi.tcl-$(SHORT_VERSION).tar.Z cgi.tcl-$(SHORT_VERSION).tar.gz install-html
	cp cgi.tcl-$(SHORT_VERSION).tar.Z $(FTPDIR)/cgi.tcl.tar.Z
	cp cgi.tcl-$(SHORT_VERSION).tar.gz $(FTPDIR)/cgi.tcl.tar.gz
	cp HISTORY $(FTPDIR)
	cp README $(FTPDIR)/README.distribution
	cp doc/ref.txt $(FTPDIR)
	cp doc/ref.html $(FTPDIR)
	cp example/README $(FTPDIR)/example
	cp `pubfile example` $(FTPDIR)/example
	ls -l $(FTPDIR)/cgi.tcl.tar*
#	delete temp files
	rm cgi.tcl-$(SHORT_VERSION).tar*

cgi.tcl-$(SHORT_VERSION).tar: configure
	rm -f ../cgi.tcl-$(SHORT_VERSION)
	ln -s `pwd` ../cgi.tcl-$(SHORT_VERSION)
	cd ..;tar cvfh $@ `pubfile cgi.tcl-$(SHORT_VERSION)`
	mv ../$@ .

cgi.tcl-$(SHORT_VERSION).tar.Z:	cgi.tcl-$(SHORT_VERSION).tar
	compress -fc cgi.tcl-$(SHORT_VERSION).tar > $@

cgi.tcl-$(SHORT_VERSION).tar.gz:	cgi.tcl-$(SHORT_VERSION).tar
	gzip -fc cgi.tcl-$(SHORT_VERSION).tar > $@

###########################
# Targets for producing FAQ and homepage
###########################

NISTCGI_PREFIX = /local
NISTCGI_HOST = ats.nist.gov
NISTCGI_INTERPDIR = $(NISTCGI_PREFIX)/bin
NISTCGI_LIBDIR = $(NISTCGI_PREFIX)/lib/cgi$(SHORT_VERSION)
NISTCGI_EXAMPLEDIR = $(NISTCGI_HOST):/private/home/http/cgi-bin/cgi.tcl
NISTCGI_HTMLDIR = /itl/www/div826/subject/expect/cgi.tcl

# create the FAQ in html form
FAQ.html:	FAQ.src FAQ.tcl
	FAQ.src > FAQ.html

# create the FAQ in text form
#FAQ:	FAQ.src FAQ.tcl
#	FAQ.src text > FAQ

# generate home page
homepage.html:	homepage.src common.tcl configure
	homepage.src > homepage.html

realapps.html:	realapps.src common.tcl
	realapps.src > realapps.html

RSH = ssh
RCP = scp

# install various html docs on our web server
install-html:	FAQ.html homepage.html realapps.html pkgIndex.tcl cgi.tcl
	cp FAQ.html $(NISTCGI_HTMLDIR)/
	cp homepage.html $(NISTCGI_HTMLDIR)/index.html
	cp realapps.html $(NISTCGI_HTMLDIR)/
	-$(RSH) $(NISTCGI_HOST) mkdir $(NISTCGI_LIBDIR)/
	$(RCP) cgi.tcl pkgIndex.tcl $(NISTCGI_HOST):$(NISTCGI_LIBDIR)/
	for i in $(EXAMPLES) ; do \
	  $(CGI_TCL_EXECUTABLE) $(srcdir)/fixline1 $(NISTCGI_INTERPDIR) < $(srcdir)/example/$$i > $$i ; \
	  $(RCP) $$i $(NISTCGI_EXAMPLEDIR)/ ; \
	  rm -f $$i ; \
	done

# add recursive support to the build process.
subdir_do: force
	@for i in $(SUBDIRS); do \
	   echo "Making $(DO) in $${i}..." ; \
	   if [ -d ./$$i ] ; then \
	     if (rootme=`pwd`/ ; export rootme ; \
	       rootsrc=`cd $(srcdir); pwd`/ ; export rootsrc ; \
	       cd ./$$i; \
	       $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
	     else exit 1 ; fi ; \
	   else true ; fi ; \
	done
force:

## dependencies will be put after this line... ##
