######################################
######################################
#### Manual Configuration section ####
######################################
######################################

LDIR		= /usr/local
MANDIR		= $(LDIR)/man
BIN		= $(LDIR)/bin
LIBDIR		= $(LDIR)/lib
SHRDIR		= $(LDIR)/share
TKGNATSLIB	= $(LIBDIR)/tkgnats

WISHPROG        = wish4.2

##############################################################################
### If everything above is correct, then the following should be automatic ###
##############################################################################

WISHPATH        = `which $(WISHPROG)`

GNATS_BASE	= $(SHRDIR)/gnats
GNATS_ROOT	= $(GNATS_BASE)/gnats-db

GNATS_SITE      = `grep GNATS_SITE $(GNATS_ROOT)/gnats-adm/config | sed -e 's/^GNATS_SITE="\([^"]*\)".*$$/\1/g'`
GNATS_ADDR      = `grep GNATS_ADDR $(GNATS_ROOT)/gnats-adm/config | sed -e 's/^GNATS_ADDR="\([^"]*\)".*$$/\1/g'`
GNATS_USER      = `grep GNATS_USER $(GNATS_ROOT)/gnats-adm/config | sed -e 's/^GNATS_USER="\([^"]*\)".*$$/\1/g'`

############################################################################
### If you have trouble with the grep/sed above, then set these manually ###
############################################################################

#GNATS_SITE	= YourSite
#GNATS_ADDR	= YourBugs
#GNATS_USER	= gnats

##############################################################
##############################################################
### You shouldn't have to change anything below this point ###
##############################################################
##############################################################

MAKEPATH	= mkdir -p
SED		= sed

LIBDIR_REPL	=LIBDIR=$(LIBDIR); \#\#LIBDIR\#\#
LIBDIR_SED	=-e 's,^.*\#\#LIBDIR\#\#,$(LIBDIR_REPL),'

LIBDIR_REPL2	=set LIBDIR $(LIBDIR); \#\#LIBDIR\#\#
LIBDIR_SED2	=-e 's,^.*\#\#LIBDIR\#\#,$(LIBDIR_REPL2),'

GNATS_ROOT_REPL =GNATS_ROOT=$(GNATS_ROOT); \#\#GNATS_ROOT\#\#
GNATS_ROOT_SED  =-e 's,^.*\#\#GNATS_ROOT\#\#,$(GNATS_ROOT_REPL),'

GNATS_ROOT_REPL2=set GNATS_ROOT $(GNATS_ROOT); \#\#GNATS_ROOT\#\#
GNATS_ROOT_SED2 =-e 's,^.*\#\#GNATS_ROOT\#\#,$(GNATS_ROOT_REPL2),'

GNATS_BASE_REPL =GNATS_BASE=$(GNATS_BASE); \#\#GNATS_BASE\#\#
GNATS_BASE_SED  =-e 's,^.*\#\#GNATS_BASE\#\#,$(GNATS_BASE_REPL),'

GNATS_BASE_REPL2=set GNATS_BASE $(GNATS_BASE); \#\#GNATS_BASE\#\#
GNATS_BASE_SED2 =-e 's,^.*\#\#GNATS_BASE\#\#,$(GNATS_BASE_REPL2),'

GNATS_SITE_REPL =set TkGnats(GNATS_SITE) $(GNATS_SITE); \#\#GNATS_SITE\#\#
GNATS_SITE_SED	=-e "s,^.*\#\#GNATS_SITE\#\#,$(GNATS_SITE_REPL),"

GNATS_ADDR_REPL =set TkGnats(GNATS_ADDR) $(GNATS_ADDR); \#\#GNATS_ADDR\#\#
GNATS_ADDR_SED	=-e "s,^.*\#\#GNATS_ADDR\#\#,$(GNATS_ADDR_REPL),"

GNATS_USER_REPL =set TkGnats(GNATS_USER) $(GNATS_USER); \#\#GNATS_USER\#\#
GNATS_USER_SED	=-e "s,^.*\#\#GNATS_USER\#\#,$(GNATS_USER_REPL),"

TKGNATSLIB_REPL =set TkGnats(lib) $(TKGNATSLIB); \#\#TKGNATSLIB\#\#
TKGNATSLIB_SED	=-e 's,^.*\#\#TKGNATSLIB\#\#,$(TKGNATSLIB_REPL),'

TKGNATSLIB_REPL2=TKGNATSLIB=$(TKGNATSLIB); \#\#TKGNATSLIB\#\#
TKGNATSLIB_SED2 =-e 's,^.*\#\#TKGNATSLIB\#\#,$(TKGNATSLIB_REPL2),'

TKGNATSLIB_REPL3=$(TKGNATSLIB)
TKGNATSLIB_SED3 =-e 's,\#\#TKGNATSLIB\#\#,$(TKGNATSLIB_REPL3),'

WISH_SED        =-e "1s,^\#!.*/wish[^ ]*,\#! $(WISHPATH),"

T_LIB	= _tlib
T_BIN	= _tbin

tkgnatsbin= \
 $(T_BIN)/tkgnats \
 $(T_BIN)/tksendpr \
 $(T_BIN)/tkquerypr \
 $(T_BIN)/tkeditpr \
 $(T_BIN)/tkviewpr

xbmfiles= \
 $(T_LIB)/tksendpr.xbm \
 $(T_LIB)/tkgnats.xbm \
 $(T_LIB)/tkquerypr.xbm \
 $(T_LIB)/tkeditpr.xbm

tkgnatslib= \
 $(T_LIB)/VERSION \
 $(T_LIB)/tkpr_library.tcl \
 $(T_LIB)/tkprprint.tcl \
 $(T_LIB)/tkprsort.tcl \
 $(T_LIB)/tkgnats.config \
 $(T_LIB)/tkprfolder.tcl \
 $(T_LIB)/tkprhelp.tcl \
 $(T_LIB)/tkgnats.doc \
 $(xbmfiles)

manfiles= tkgnats.1 tksendpr.1 tkquerypr.1 tkviewpr.1 tkeditpr.1

all: check_cfg dirs $(tkgnatslib) $(tkgnatsbin)

# WARNING: the tests below involving GNATS_ADDR and GNATS_SITE
#          are very sensitive to having quotes (or not) with various
#          bourne/bash shells. Don't mess with them unless they
#          fail. They are the way they are to make it work for
#          /bin/sh on Solaris 2.5 and IRIX64 6.2 and bash on Linux.
#          This is all due to the nested backticks and single and double quotes.

check_cfg:
	@rm -f /tmp/tkgnats.errors
	@echo " "
	@echo "Checking some of the Makefile configuration variables..."
	@echo "--------------------------------------------------------"
	@echo " "
	@if [ ! -d $(GNATS_BASE) ]; then \
	  echo "*** Error: GNATS_BASE=$(GNATS_BASE) seems to be incorrect.";\
	  touch /tmp/tkgnats.errors; \
	fi
	@if [ ! -d $(GNATS_ROOT) ]; then \
	  echo "*** Error: GNATS_ROOT=$(GNATS_ROOT) seems to be incorrect.";\
	  touch /tmp/tkgnats.errors; \
	fi
	@if [ ! -f $(GNATS_ROOT)/gnats-adm/config ]; then \
	  echo "*** Error: Cannot find GNATS config file $(GNATS_ROOT)/gnats-adm/config.";\
	  touch /tmp/tkgnats.errors; \
	fi
	@if [ ! -f $(GNATS_BASE)/$(GNATS_SITE) ]; then \
	  echo "*** Error: Cannot find category file" \'$(GNATS_BASE)/$(GNATS_SITE)\'.; \
	  touch /tmp/tkgnats.errors; \
	fi
	@if [ ! -d $(LIBDIR)/gnats ]; then \
	  echo "*** Error: Cannot find '$(LIBDIR)/gnats'."; \
	  touch /tmp/tkgnats.errors; \
	fi
	@if [ ! -f $(WISHPATH) ]; then \
	  echo "*** Error: Cannot find Tcl/Tk shell '$(WISHPROG)'.";\
	  touch /tmp/tkgnats.errors; \
	fi
	@if [ x$(GNATS_SITE) = "x" ]; then \
	  echo "*** Error: GNATS_SITE is not set in $(GNATS_ROOT)/gnats-adm/config.";\
	  echo "    Set GNATS_SITE in this file to the name of your site. ";\
	  echo "    gnats and tkgnats use it to find your category list."; \
	  touch /tmp/tkgnats.errors; \
	else \
	  echo \'$(GNATS_SITE)\' is the configured name for GNATS_SITE.; \
	fi
	@if [ x$(GNATS_ADDR) = "x" ]; then \
	  echo "*** Error: GNATS_ADDR is not set in $(GNATS_ROOT)/gnats-adm/config.";\
	  echo "    Set GNATS_ADDR in this file to the email address that gnats"; \
	  echo "    bugs are supposed to be sent to. It's probably missing due to"; \
	  echo "    an old bug in the GNATS installation Makefile."; \
	  touch /tmp/tkgnats.errors; \
	else \
	  echo \'$(GNATS_ADDR)\' is the configured mail address for GNATS_ADDR.; \
	fi
	@if [ x$(GNATS_USER) = "x" ]; then \
	  echo "*** Error: GNATS_USER is not set in $(GNATS_ROOT)/gnats-adm/config.";\
	  echo "    Set GNATS_USER in this file to the gnats administrator user id."; \
	  touch /tmp/tkgnats.errors; \
	else \
	  echo \'$(GNATS_USER)\' is the configured user id for GNATS_USER.; \
	fi
	@if [ -f /tmp/tkgnats.errors ]; then \
	  echo "*** Errors have been detected. Make aborted."; \
	  rm -f /tmp/tkgnats.errors; \
	  exit 1; \
	fi
	@echo " "
	@echo "Done checking TkGnats configuration."
	@echo " "

uninstall: uninstall_tkgnatsbin uninstall_tkgnatslib uninstall_man

uninstall_tkgnatsbin:
	for f in $(tkgnatsbin); do \
	    rm -if "$(BIN)/`basename $$f`"; \
	done

uninstall_tkgnatslib:
	for f in $(tkgnatslib); do \
	    rm -if "$(TKGNATSLIB)/`basename $$f`"; \
	done

uninstall_man:
	for f in $(manfiles); do \
	    rm -if $(MANDIR)/man1/$$f; \
	done

clean:
	rm -rf $(T_LIB) $(T_BIN) *~

dirs:
	@-$(MAKEPATH) $(T_LIB)
	@-$(MAKEPATH) $(T_BIN)

install: all install_tkgnatsbin install_tkgnatslib

install_tkgnatsbin:
	-$(MAKEPATH) $(BIN)
	cp -p $(T_BIN)/* $(BIN)/

install_tkgnatslib:
	-$(MAKEPATH) $(TKGNATSLIB)
	cp -p $(T_LIB)/* $(TKGNATSLIB)/
	-$(MAKEPATH) $(TKGNATSLIB)/print
	-$(MAKEPATH) $(TKGNATSLIB)/query
	-$(MAKEPATH) $(TKGNATSLIB)/sort
	cp -p print/* $(TKGNATSLIB)/print/
	cp -p query/* $(TKGNATSLIB)/query/
	cp -p sort/*  $(TKGNATSLIB)/sort/

install_man:
	-$(MAKEPATH) $(MANDIR)
	@chmod 664 $(manfiles)
	for f in $(manfiles); do \
	    cp -p $$f $(MANDIR)/man1/$$f; \
	done

$(T_LIB)/VERSION: VERSION
	cp VERSION $@
	@chmod 664 $@

$(T_LIB)/tkprfolder.tcl: tkprfolder.tcl Makefile
	cp tkprfolder.tcl $@
	@chmod 664 $@

$(T_LIB)/tkpr_library.tcl: tkpr_library.tcl Makefile
	$(SED) $(TKGNATSLIB_SED) <tkpr_library.tcl >$@
	@chmod 664 $@

$(T_LIB)/tkprprint.tcl: tkprprint.tcl Makefile
	cp tkprprint.tcl $@
	@chmod 664 $@

$(T_LIB)/tkprsort.tcl: tkprsort.tcl Makefile
	cp tkprsort.tcl $@
	@chmod 664 $@

$(T_LIB)/tkprhelp.tcl: tkprhelp.tcl Makefile
	cp tkprhelp.tcl $@
	@chmod 664 $@

$(T_LIB)/tkgnats.doc: tkgnats.doc Makefile
	cp tkgnats.doc $@
	@chmod 664 $@

# Again, the following ugliness is intentional and works on Linux, Solaris 2.5 and IRIX64 6.2.

$(T_LIB)/tkgnats.config: tkgnats.config Makefile
	tempsite=$(GNATS_SITE); \
	tempsiterepl="set TkGnats(GNATS_SITE) $$tempsite; \#\#GNATS_SITE\#\#"; \
	tempsitesed='s,^.*\#\#GNATS_SITE\#\#,'$$tempsiterepl,; \
	tempaddr=$(GNATS_ADDR); \
	tempaddrrepl="set TkGnats(GNATS_ADDR) $$tempaddr; \#\#GNATS_ADDR\#\#"; \
	tempaddrsed='s,^.*\#\#GNATS_ADDR\#\#,'$$tempaddrrepl,; \
	tempuser=$(GNATS_USER); \
	tempuserrepl="set TkGnats(GNATS_USER) $$tempuser; \#\#GNATS_USER\#\#"; \
	tempusersed='s,^.*\#\#GNATS_USER\#\#,'$$tempuserrepl,; \
	$(SED) $(TKGNATSLIB_SED) \
	    $(LIBDIR_SED2) \
	    $(GNATS_BASE_SED2) \
	    $(GNATS_ROOT_SED2) \
	    -e "$$tempsitesed" \
	    -e "$$tempaddrsed" \
	    -e "$$tempusersed" \
	   <tkgnats.config >$@
	@chmod 664 $@

# The following was OK on my Linux system but failed on Solaris and IRIX64.

#$(T_LIB)/tkgnats.config: tkgnats.config Makefile
#	$(SED) $(TKGNATSLIB_SED) \
#	    $(LIBDIR_SED2) \
#	    $(GNATS_BASE_SED2) \
#	    $(GNATS_ROOT_SED2) \
#	    $(GNATS_SITE_SED) \
#	    $(GNATS_ADDR_SED) \
#	   <tkgnats.config >$@

$(T_LIB)/tkgnats.xbm: tkgnats.xbm Makefile
	cp tkgnats.xbm $@
	@chmod 664 $@

$(T_LIB)/tkquerypr.xbm: tkquerypr.xbm Makefile
	cp tkquerypr.xbm $@
	@chmod 664 $@

$(T_LIB)/tksendpr.xbm: tksendpr.xbm Makefile
	cp tksendpr.xbm $@
	@chmod 664 $@

$(T_LIB)/tkeditpr.xbm: tkeditpr.xbm Makefile
	cp tkeditpr.xbm $@
	@chmod 664 $@

$(T_BIN)/tkeditpr: tkeditpr Makefile
	$(SED) $(WISH_SED) $(TKGNATSLIB_SED) <tkeditpr >$@
	@chmod 775 $@

$(T_BIN)/tkviewpr: tkviewpr Makefile
	$(SED) $(WISH_SED) $(TKGNATSLIB_SED) <tkviewpr >$@
	@chmod 775 $@

$(T_BIN)/tkgnats: tkgnats Makefile
	$(SED) $(WISH_SED) $(TKGNATSLIB_SED) <tkgnats >$@
	@chmod 775 $@

$(T_BIN)/tksendpr: tksendpr Makefile
	$(SED) $(WISH_SED) $(TKGNATSLIB_SED) <tksendpr >$@
	@chmod 775 $@

$(T_BIN)/tkquerypr: tkquerypr Makefile
	$(SED) $(WISH_SED) $(TKGNATSLIB_SED) <tkquerypr >$@
	@chmod 775 $@

package: clean
	rm -f VERSION
	echo "This package is version `pwd | sed -e "s:.*/::g"` and was made by $$LOGNAME@`hostname` on" > VERSION
	date >> VERSION
	echo tarit    > /tmp/tkgnpkg.exclude
	echo untarit >> /tmp/tkgnpkg.exclude
	dir=`pwd | sed -e "s:.*/::g"`; \
	fil=$$dir.tar.gz; \
	rm -f $$fil; \
	rm -rf _tbin _tlib; \
	cd ..; \
	tar -cvf - -X /tmp/tkgnpkg.exclude $$dir | gzip -9c > $$fil; \
	rm -rf /tmp/tkgnpkg.exclude; \
	mv $$fil $$dir; \
	cd $$dir; \
	ls -l $$fil

sed_check:
	(cd $(T_BIN); fgrep usr *) >/tmp/cfg_check.bin
	(cd $(T_LIB); fgrep usr *) >/tmp/cfg_check.lib
	more /tmp/cfg_check.bin /tmp/cfg_check.lib

#
# do not use these rules !!! these are for tkgnats development only !!
#
__all:
	make 'GNATS_SITE=calgary' 'GNATS_ADDR=bugs' all
__check:
	make 'GNATS_SITE=calgary' 'GNATS_ADDR=bugs' check_cfg
__install:
	make 'GNATS_SITE=calgary' 'GNATS_ADDR=bugs' install
