#=============================================================================
# Makefile for palmail 1.0:
#=============================================================================

VERSION      = 1.0

#=============================================================================
# Compiler settings

CC           = gcc
CFLAGS       = -O2
BINDIR       = /usr/local/bin
MANDIR       = /usr/local/man
DOCDIR       = /usr/doc/palmail
MANEXT       = 1

# Defines for Tcl7.5 / Tk4.1 :

#TCL_LIB_INCS = -I/usr/local/lib/tcl7.5 -I/usr/local/lib/tk4.1
#TCL_HDR_INCS = -I/usr/local/include/tcl7.5 -I/usr/local/include/tk4.1
#LIB_DIRS     = -L/usr/X11R6/lib -L/usr/local/lib
#TCL_LIBS     = -ltk4.1 -ltcl7.5
#MISC_LIBS    = -lX11 -lm -ldl
#ETLIB        = et41.c

# Defines for Tcl7.6 / Tk4.2 :

#TCL_LIB_INCS = -I/usr/lib/tcl7.6 -I/usr/X11/lib/tk4.2
##TCL_LIB_INCS = -I/usr/local/lib/tcl7.6 -I/usr/local/lib/tk4.2
#TCL_HDR_INCS = -I/usr/include/tcl -I/usr/X11/include
##TCL_HDR_INCS = -I/usr/local/include/tcl7.6 -I/usr/local/include/tk4.2
#LIB_DIRS     = -L/usr/local/lib -L/usr/X11/lib -L/usr/lib
#TCL_LIBS     = -ltk4.2 -ltcl7.6
#MISC_LIBS    = -lX11 -lm -ldl
#ETLIB        = et42.c

# Defines for Tcl/Tk8.0 :

TCL_LIB_INCS = -I/usr/lib/tcl8.0 -I/usr/lib/tk8.0
#TCL_LIB_INCS = -I/usr/lib/tcl8.0 -I/usr/X11/lib/tk8.0
TCL_HDR_INCS = -I/usr/include -I/usr/X11/include
LIB_DIRS     = -L/usr/local/lib -L/usr/lib -L/usr/X11/lib
TCL_LIBS     = -ltk8.0 -ltcl8.0
MISC_LIBS    = -lX11 -lm -ldl
ETLIB        = et80.c

#=============================================================================
# mgetty/vgetty configuration

# What is the device in /dev where your modem is connected to? Here I
# use a symbolic link modem -> ttyS1.
MODEM_DEVICE = modem

# Where are mgettys & vgettys configuration files?
MGETTY_CONFIGD = /etc/mgetty+sendfax

# Where can we find vgettys process file?
MGETTY_PID   = /var/run/mg-pid.$(MODEM_DEVICE)

# And where does vgetty store its logfile? Maybe at your site, you have
# only .../mgetty.your_modem_device. If so, see vgettys voice.conf!
MGETTY_LOG   = /var/log/vgetty.$(MODEM_DEVICE)

# When vgetty has the modem in use, where does it store the usual lock
# file?
MGETTY_LOCK  = /var/lock/LCK..$(MODEM_DEVICE)

# Directory of voice stuff used by vgetty. See vgettys voice.conf!
VOCD         = /var/spool/voice

# Where are incoming messages stored? See vgettys voice.conf!
VOCIND       = $(VOCD)/incoming

# Where are vgettys outgoing messages (greeting etc.) stored?
VOCOUTD      = $(VOCD)/messages
DTMFD        = $(VOCD)/DTMF

# O.k., same for faxes as for voice messages.
FAXD         = /var/spool/fax
FAXIND       = $(FAXD)/incoming
FAXOUTD      = $(FAXD)/outgoing

# If you don't use the full pathname here, you will get a big security-hole!!!
FAXRUNQ      = /usr/bin/faxrunq
SENDFAX      = /usr/sbin/sendfax

# If you don't use the full pathname here, you will get a big security-hole!!!
KILLALL      = /usr/bin/killall


#=============================================================================
# palmail general options

# Setup where palmail files will be installed:
PALMAILD     = /usr/local/lib/palmail

# Language (only partially supported for some date formats):
LANGUAGE     = german
#LANGUAGE     = english

# Use 0750 if you don't want SUID-binaries. Some commands will then
# work only if you invoke palmail as root.
PICKUP_MODE  = 4750
FAXRUNQ_MODE = 4750
STOPVM_MODE  = 4750

# All files will be created with this group. Add your account to this
# group (same as with ppp being run by "normal" users).
GROUP        = phone

# Which users should have access to the files, e.g. faxes, voice-calls
# etc.
MODE         = 660
EXEC_MODE    = 770

# Where to store the needed ringlog file?
RINGLOGD     = /var/log/palmail

# Name of the needed ringlog file?
RINGLOGN     = ringlog

# What is your favourite temporary directory? Users should have r/w
# access!
TMPD         = /tmp


#=============================================================================
# Voice configuration

# Setup your soundcard device for playing voice files.
SOUNDCARD_DEVICE = /dev/audio

# Choose your modem out of the list, "pvftormd -L" prints out:
PVF_MODEM_TYPE	= Rockwell
#PVF_MODEM_TYPE	= US_Robotics
# Choose the compression type your modem supports:
PVF_MODEM_COMPRESSION	= 4
#PVF_MODEM_COMPRESSION	= 1

# Choose the best frequency for soundfiles converted to your modems
# format.
MODEM_FREQUENCY   = 7200
#MODEM_FREQUENCY  = 8000

# Choose the best frequency for soundfiles converted from your modems
# format.
MODEM_FREQUENCY_PLAY  = 8000

# Where are your pvf tools installed (e.g. pvftowav)?
PVF_TOOLS_PATH  = /usr/bin

# Which program do you prefer for recording greeting messages via your
# soundcard? It should be setup for generating a .wav-type file. Maybe
# you want to record in good quality, then use a higher samplerate than
# your MODEM_FREQUENCY (see above).
REC	= /usr/bin/arecord
#REC	= /usr/local/bin/arecord
RECORD	= $(REC) -w -s 32000
#REC	= /usr/bin/vrec
#RECORD	= $(REC) -w -b 16 -s 8000

# Where is the vgetty vm program? It can play messages through your
# modems speaker, and viceversa record through your modems internal
# microphone. I bet, you wont choose it ever when running palmail. The
# soundcard option IS better.
VM	= /usr/bin/vm
VMPLAY	= $(VM) play -s
VMREC	= $(VM)	record -m

# Which alert sound should be played, when a specific user logs in
# via dtmf?
ALERT_SOUND=$(PALMAILD)/alert.au


#=============================================================================
# Fax configuration

# And where shall palmails coverpages be installed?
COVERPGD     = $(PALMAILD)/coverpgs

# choose your favorite coverpage programs
COVERPGS     = fancy.eng fancy.ger fancy.ita simple.eng simple.ger xfig.sample

# Path to the pbm toolkit (e.g. pbmtolps):
PBM_TOOLS_PATH  = /usr/X11/bin

# O.k., lets try to find out where your g3 fax tools (e.g. g32pbm) are:
G3_TOOLS_PATH   = /usr/bin

# Im sure, you will sometimes have a closer look at your received
# faxes. O.k., then setup your fax viewer here:
GV = /usr/X11/bin/gv
#VIEWFAX_NORMAL	= $(G3_TOOLS_PATH)/g32pbm -s -d 300 \$$f | $(PBM_TOOLS_PATH)/pbmtolps -dpi 300 | $(GV) -
#VIEWFAX_FINE	= $(G3_TOOLS_PATH)/g32pbm -d 300 \$$f | $(PBM_TOOLS_PATH)/pbmtolps -dpi 300 | $(GV) -
VIEWFAX_NORMAL	= viewfax -n \$$f
VIEWFAX_FINE	= viewfax -f \$$f

# Well, sometimes you want to print out received faxes, do you? So,
# choose your favourite printer command.

# postscript printers:
#LPR	= /usr/bin/lpr -Pljet3-a4-auto-mono-300
#LPR	= /usr/bin/lpr -Pbjc600-mono
#PRINTFAX_NORMAL	= $(G3_TOOLS_PATH)/g32pbm -s -d 300 \$$f | $(PBM_TOOLS_PATH)/pbmtolps -dpi 300 | $(LPR)
#PRINTFAX_FINE	= $(G3_TOOLS_PATH)/g32pbm -d 300 \$$f | $(PBM_TOOLS_PATH)/pbmtolps -dpi 300 | $(LPR)

# HP-PCL printers (laserjet/deskjet):
# (g3tolj is included in the mgetty source distribution)
LPR		= /usr/bin/lpr -Praw
PRINTFAX_NORMAL	= g3tolj -aspect 2.0 \$$f | $(LPR)
PRINTFAX_FINE	= g3tolj \$$f | $(LPR)

# Which program should palmail use, to correct malformed lines in
# received faxes? This program should be able to remove superfluous
# lines in outgoing faxes.
G3HACK = $(PALMAILD)/g3hack
#G3HACK = $(G3_TOOLS_PATH)/g3cat -


#=============================================================================
# PPP configuration

# Now for a completely different: Which program should palmail call,
# when the user wants to go online?
# \$$f is the configured entry in the listbox.
#PPP_START	= /usr/local/bin/\$$f
PPP_START	= /usr/local/bin/ppp \$$f

# And how should palmail stop the ppp-process? I have an extra small
# program for closing my ppp status window which was opened by my ppp
# start program.
PPP_STOP	= /usr/local/bin/ppp-off

# Where does palmail install its ppp configuration file?
IN-HOSTD     = $(PALMAILD)
IN-HOSTN     = in-hosts


#=============================================================================
# End of configuration options
#=============================================================================

TCL_FILES    = palfax.tcl palmail.tcl load_config.tcl exec_cmd.tcl     \
               create_topwin.tcl main_window.tcl filesel_window.tcl    \
               fax_cmds.tcl voice_cmds.tcl dtmf_cmds.tcl ring_cmds.tcl \
               connect_cmds.tcl file_cmds.tcl update_cmds.tcl misc.tcl

all: palmail do_pickup do_faxrunq do_stopfaxrunq do_stopvm do_play \
    palmail.tcl palmail.cfg palmail.man vg_dtmf g3hack \
    cover.fig coverpgs/xfig.sample permissions.local

install: all
	@if [ ! -d $(PALMAILD) ] ; then \
	   echo "mkdir $(PALMAILD)"; \
	   mkdir $(PALMAILD); \
	 fi
	@if [ ! -d $(IN-HOSTD) ] ; then \
	   echo "mkdir $(IN-HOSTD)"; \
	   mkdir $(IN-HOSTD); \
	 fi
	@if [ ! -d $(RINGLOGD) ] ; then \
	   echo "mkdir $(RINGLOGD)"; \
	   mkdir $(RINGLOGD); \
	   chown root:$(GROUP) $(RINGLOGD); \
	   chmod 770 $(RINGLOGD); \
	 fi
	@if [ ! -d $(COVERPGD) ] ; then \
	   echo "mkdir $(COVERPGD)"; \
	   mkdir $(COVERPGD); \
	 fi
	chown root:$(GROUP) $(PALMAILD)
	chmod $(EXEC_MODE) $(PALMAILD)
	install -c -o root -g $(GROUP) -m $(EXEC_MODE) -s palmail $(BINDIR)
	rm -f $(BINDIR)/palfax
	( cd $(BINDIR) ; ln -s palmail palfax )
	install -c -o root -g $(GROUP) -m $(MODE) palmail.cfg $(PALMAILD)
	rm -f $(PALMAILD)/do_pickup
	install -c -o root -g $(GROUP) -m $(PICKUP_MODE) -s do_pickup $(PALMAILD)
	rm -f $(PALMAILD)/do_faxrunq
	install -c -o root -g $(GROUP) -m $(FAXRUNQ_MODE) -s do_faxrunq $(PALMAILD)
	rm -f $(PALMAILD)/do_stopfaxrunq
	install -c -o root -g $(GROUP) -m $(FAXRUNQ_MODE) -s do_stopfaxrunq $(PALMAILD)
	rm -f $(PALMAILD)/do_stopvm
	install -c -o root -g $(GROUP) -m $(STOPVM_MODE) -s do_stopvm $(PALMAILD)
	install -c -o root -g $(GROUP) -m $(EXEC_MODE) -s g3hack $(PALMAILD)
	rm -f $(PALMAILD)/do_play
	install -c -o root -g $(GROUP) -m $(EXEC_MODE) do_play $(PALMAILD)
	@if [ ! -f $(IN-HOSTD)/$(IN-HOSTN) ] ; then \
	  echo "touch $(IN-HOSTD)/$(IN-HOSTN)"; \
	  touch $(IN-HOSTD)/$(IN-HOSTN); \
	 fi
	@sh -c 'echo "chown root:$(GROUP) $(IN-HOSTD)/$(IN-HOSTN)"; \
	        chown root:$(GROUP) $(IN-HOSTD)/$(IN-HOSTN); \
	        echo "chmod $(MODE) $(IN-HOSTD)/$(IN-HOSTN)"; \
	        chmod $(MODE) $(IN-HOSTD)/$(IN-HOSTN)'
	@if [ ! -f $(RINGLOGD)/$(RINGLOGN) ] ; then \
	  echo "touch -t 01010000 $(RINGLOGD)/$(RINGLOGN)"; \
	  touch -t 01010000 $(RINGLOGD)/$(RINGLOGN); \
	 fi
	@sh -c 'echo "chown root:$(GROUP) $(RINGLOGD)/$(RINGLOGN)"; \
	        chown root:$(GROUP) $(RINGLOGD)/$(RINGLOGN); \
	        echo "chmod $(MODE) $(RINGLOGD)/$(RINGLOGN)"; \
	        chmod $(MODE) $(RINGLOGD)/$(RINGLOGN)'
	install -c -m 0444 palmail.man $(MANDIR)/man$(MANEXT)/palmail.$(MANEXT)
	install -c -m 0444 alert.au $(PALMAILD)
	install -c -m 0444 cover.fig $(PALMAILD)
	install -c -m 0444 fcp2fig/babygnu.ps $(PALMAILD)
	install -c -m 0755 fcp2fig/fcp2fig $(PALMAILD)
	cd coverpgs ; install -c -g $(GROUP) -m $(EXEC_MODE) $(COVERPGS) $(COVERPGD)
	@if [ ! -d $(DTMFD) ] ; then \
	   echo "mkdir $(DTMFD)"; \
	   mkdir $(DTMFD); \
	 fi
	@if [ ! -f $(DTMFD)/Index ] ; then \
	  echo "touch $(DTMFD)/Index"; \
	  touch $(DTMFD)/Index; \
	 fi
	@if [ -f $(VOCD)/vg_dtmf ] ; then \
	  echo "mv i$(VOCD)/vg_dtmf $(VOCD)/vg_dtmf.bak"; \
	  mv $(VOCD)/vg_dtmf $(VOCD)/vg_dtmf.bak; \
	 fi
	install -c -o root -g $(GROUP) -m $(EXEC_MODE) vg_dtmf $(VOCD)
	@if [ ! -d $(DOCDIR) ] ; then \
	   echo "mkdir $(DOCDIR)"; \
	   mkdir $(DOCDIR); \
	 fi
	install -c -m 0444 README $(DOCDIR)
	install -c -m 0444 ChangeLog $(DOCDIR)
	install -c -m 0444 TODO $(DOCDIR)
	install -c -m 0444 ET.html $(DOCDIR)
	install -c -m 0444 fcp2fig/README.fcp2fig $(DOCDIR)
	install -c -m 0755 speakdate_english.sh $(DOCDIR)
	install -c -m 0755 speakdate_german.sh $(DOCDIR)
	install -c -m 0755 tail_log.sh $(DOCDIR)
	install -c -m 0644 permissions.local $(DOCDIR)

palmail: palmail_.c et.o
	$(CC) -o palmail palmail_.c et.o $(CFLAGS) $(TCL_HDR_INCS) \
	         $(LIB_DIRS) $(TCL_LIBS) $(MISC_LIBS)

palmail.static: palmail_.c et.o
	$(CC) -o palmail.static palmail_.c et.o $(CFLAGS) $(TCL_HDR_INCS) \
	         $(LIB_DIRS) -Wl,-Bstatic $(TCL_LIBS) -Wl,-Bdynamic $(MISC_LIBS)
	strip palmail.static

palmail_.c: et2c palmail.et $(TCL_FILES)
	./et2c palmail.et > palmail_.c

et2c: et2c.c Makefile
	$(CC) -o et2c et2c.c $(CFLAGS) $(TCL_HDR_INCS)

et.o: et_.c Makefile
	$(CC) -c -o et.o et_.c $(CFLAGS) $(TCL_HDR_INCS)

et_.c: et2c $(ETLIB) Makefile
	./et2c $(TCL_LIB_INCS) $(ETLIB) > et_.c


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

do_faxrunq: Makefile
	echo "int main() {setreuid(0,0);return system(\"$(FAXRUNQ)\");}" > do_faxrunq.c
	$(CC) $(CFLAGS) -o do_faxrunq do_faxrunq.c

do_stopfaxrunq: Makefile
	echo "int main() {setreuid(0,0);return system(\"$(KILLALL) -q $(FAXRUNQ) $(SENDFAX)\");}" > do_stopfaxrunq.c
	$(CC) $(CFLAGS) -o do_stopfaxrunq do_stopfaxrunq.c

do_stopvm: Makefile
	echo "int main() {setreuid(0,0);return system(\"$(KILLALL) -q -2 $(VM)\");}" > do_stopvm.c
	$(CC) $(CFLAGS) -o do_stopvm do_stopvm.c

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

sedfile: Makefile
	rm -f sedfile
	echo "s?@VERSION@?$(VERSION)?g" >>sedfile
	echo "s?@PALMAILD@?$(PALMAILD)?g" >>sedfile
	echo "s?@MODE@?$(MODE)?g" >>sedfile
	echo "s?@EXEC_MODE@?$(EXEC_MODE)?g" >>sedfile
	echo "s?@GROUP@?$(GROUP)?g" >>sedfile
	echo "s?@TMPD@?$(TMPD)?g" >>sedfile
	echo "s?@VOCD@?$(VOCD)?g" >>sedfile
	echo "s?@VOCIND@?$(VOCIND)?g" >>sedfile
	echo "s?@VOCOUTD@?$(VOCOUTD)?g" >>sedfile
	echo "s?@DTMFD@?$(DTMFD)?g" >>sedfile
	echo "s?@FAXD@?$(FAXD)?g" >>sedfile
	echo "s?@FAXIND@?$(FAXIND)?g" >>sedfile
	echo "s?@FAXOUTD@?$(FAXOUTD)?g" >>sedfile
	echo "s?@MGETTY_CONFIGD@?$(MGETTY_CONFIGD)?g" >>sedfile
	echo "s?@MODEM_DEVICE@?$(MODEM_DEVICE)?g" >>sedfile
	echo "s?@MGETTY_PID@?$(MGETTY_PID)?g" >>sedfile
	echo "s?@MGETTY_LOG@?$(MGETTY_LOG)?g" >>sedfile
	echo "s?@MGETTY_LOCK@?$(MGETTY_LOCK)?g" >>sedfile
	echo "s?@RINGLOGD@?$(RINGLOGD)?g" >>sedfile
	echo "s?@RINGLOGN@?$(RINGLOGN)?g" >>sedfile
	echo "s?@IN-HOSTD@?$(IN-HOSTD)?g" >>sedfile
	echo "s?@IN-HOSTN@?$(IN-HOSTN)?g" >>sedfile
	echo "s?@COVERPGD@?$(COVERPGD)?g" >>sedfile
	echo "s?@PVF_MODEM_TYPE@?$(PVF_MODEM_TYPE)?g" >>sedfile
	echo "s?@MODEM_FREQUENCY@?$(MODEM_FREQUENCY)?g" >>sedfile
	echo "s?@MODEM_FREQUENCY_PLAY@?$(MODEM_FREQUENCY_PLAY)?g" >>sedfile
	echo "s?@PVF_MODEM_COMPRESSION@?$(PVF_MODEM_COMPRESSION)?g" >>sedfile
	echo "s?@LPR@?$(LPR)?g" >>sedfile
	echo "s?@REC@?$(REC)?g" >>sedfile
	echo "s?@RECORD@?$(RECORD)?g" >>sedfile
	echo "s?@VM@?$(VM)?g" >>sedfile
	echo "s?@VMPLAY@?$(VMPLAY)?g" >>sedfile
	echo "s?@VMREC@?$(VMREC)?g" >>sedfile
	echo "s?@GV@?$(GV)?g" >>sedfile
	echo "s?@VIEWFAX_NORMAL@?$(VIEWFAX_NORMAL)?g" >>sedfile
	echo "s?@VIEWFAX_FINE@?$(VIEWFAX_FINE)?g" >>sedfile
	echo "s?@PRINTFAX_NORMAL@?$(PRINTFAX_NORMAL)?g" >>sedfile
	echo "s?@PRINTFAX_FINE@?$(PRINTFAX_FINE)?g" >>sedfile
	echo "s?@PVF_TOOLS_PATH@?$(PVF_TOOLS_PATH)?g" >>sedfile
	echo "s?@G3_TOOLS_PATH@?$(G3_TOOLS_PATH)?g" >>sedfile
	echo "s?@G3HACK@?$(G3HACK)?g" >>sedfile
	echo "s?@PBM_TOOLS_PATH@?$(PBM_TOOLS_PATH)?g" >>sedfile
	echo "s?@PPP_START@?$(PPP_START)?g" >>sedfile
	echo "s?@PPP_STOP@?$(PPP_STOP)?g" >>sedfile
	echo "s?@SOUNDCARD_DEVICE@?$(SOUNDCARD_DEVICE)?g" >>sedfile
	echo "s?@ALERT_SOUND@?$(ALERT_SOUND)?g" >>sedfile
	echo "s?@LANGUAGE@?$(LANGUAGE)?g" >>sedfile

palmail.tcl: palmail.tcl.in sedfile
	sed -f sedfile palmail.tcl.in > palmail.tcl

palmail.cfg: palmail.cfg.in sedfile
	sed -f sedfile palmail.cfg.in > palmail.cfg

palmail.man: palmail.man.in palmail.tcl sedfile
	sed -f sedfile palmail.man.in > palmail.man

do_play: do_play.in sedfile
	sed -f sedfile do_play.in > do_play

vg_dtmf: vg_dtmf.in sedfile
	sed -f sedfile vg_dtmf.in > vg_dtmf

coverpgs/xfig.sample: xfig.sample.in sedfile
	sed -f sedfile xfig.sample.in > coverpgs/xfig.sample

cover.fig: cover.fig.in sedfile
	sed -f sedfile cover.fig.in > cover.fig

fcp2fig/cover.fig: fcp2fig/cover.fig.in sedfile
	sed -f sedfile fcp2fig/cover.fig.in > fcp2fig/cover.fig

permissions.local: permissions.local.in sedfile
	sed -f sedfile permissions.local.in > permissions.local

.PHONY: clean
clean:
	rm -f palmail *.o do_faxrunq* do_stopfaxrunq* do_stopvm* \
	      vg_dtmf do_play do_pickup \
	      et2c et_.c palmail_.c palmail.cfg palmail.man \
	      palmail.static *.bak *~ fcp2fig/*~ fcp2fig/*.bak \
	      cover.fig coverpgs/xfig.sample coverpgs/*.bak coverpgs/*~ \
	      core permissions.local palmail.tcl sedfile g3hack
	rm -rf palmail-$(VERSION)

distrib: clean
	tar -C.. -cvzf ../`basename $(shell pwd)`.tar.gz `basename $(shell pwd)`

bin-dist: palmail.static
	rm -rf palmail-$(VERSION)
	mkdir palmail-$(VERSION)
	cp palmail.static palmail-$(VERSION)/palmail
	cp Make.bin-dist palmail-$(VERSION)/Makefile
	cp palmail.cfg.in palmail.man.in do_play.in vg_dtmf.in cover.fig.in \
	   xfig.sample.in do_pickup.c tail_log.sh permissions.local.in \
	   alert.au speakdate_english.sh speakdate_german.sh g3hack.c \
	   README TODO COPYING ChangeLog ET.html\
	   palmail-$(VERSION)/.
	cp -R fcp2fig palmail-$(VERSION)/.
	cp -R coverpgs palmail-$(VERSION)/.
	tar cvfz ../palmail-$(VERSION)-linux-static.tar.gz palmail-$(VERSION)

uu: distrib
	uuencode ../`basename $(shell pwd)`.tgz `basename $(shell pwd)`.tgz \
	       > ../`basename $(shell pwd)`.tgz.uu	        
