# $Header: /home/amb/wwwoffle/RCS/Makefile 2.37 1998/08/16 15:31:58 amb Exp $
#
# WWWOFFLE - World Wide Web Offline Explorer - Version 2.3.
#
# Program Makefile.
#
# Written by Andrew M. Bishop
#
# This file Copyright 1996,97,98 Andrew M. Bishop
# It may be distributed under the GNU Public License, version 2, or
# any higher version.  See section COPYING of the GNU Public license
# for conditions under which this file may be redistributed.
#

########

INSTDIR=/usr/local
SPOOLDIR=/var/spool/wwwoffle
CONFDIR=/var/spool/wwwoffle

########

CC=gcc
CFLAGS=-O2 -Wall -g

LD=gcc
LDFLAGS=-g
# For HP/UX this is a good idea.
#LDFLAGS=

LEX=flex -i -L

########

INCLUDE=
LIBRARY=
# For Solaris you need the following instead.
#LIBRARY=-lnsl -lsocket

COMPILE=$(CC) -c $(CFLAGS)

LINK=$(LD) $(LDFLAGS)

INSTALL=install
# For Solaris you need the following instead.
#INSTALL=/usr/ucb/install

########

all : programs html

########

install : install_binary install_man install_spool install_config

########

clean :
	-rm -f wwwoffle.conf.install wwwoffle.conf.man.install
	-rm -f wwwoffle wwwoffled wwwoffle-tools upgrade-cache endian-cache
	-rm -f core *.o *~
	cd testprogs && $(MAKE) clean

########

programs : wwwoffle wwwoffled wwwoffle-tools upgrade-cache endian-cache

########

test-programs : programs
	cd testprogs && $(MAKE)

########

WWWOFFLE_OBJ=wwwoffle.o \
	     refresh-path.o html.o \
	     config.o errors.o io.o misc-urlonly.o proto-none.o sockets.o

wwwoffle : $(WWWOFFLE_OBJ)
	$(LINK) $(WWWOFFLE_OBJ) -o $@ $(LIBRARY)

####

WWWOFFLED_OBJ=wwwoffled.o wwwoffles.o \
	      http.o ftp.o finger.o \
	      connect.o control.o configedit.o html.o index.o messages.o monitor.o parse.o purge.o refresh.o spool.o \
	      config.o errors.o io.o misc.o proto.o sockets.o md5.o

wwwoffled : $(WWWOFFLED_OBJ)
	$(LINK) $(WWWOFFLED_OBJ) -o $@ $(LIBRARY)

####

WWWOFFLE_TOOLS_OBJ=wwwoffle-tools.o \
	      spool.o \
	      errors-noconf.o io-noconf.o misc-noconf.o proto-none.o md5.o

wwwoffle-tools : $(WWWOFFLE_TOOLS_OBJ)
	$(LINK) $(WWWOFFLE_TOOLS_OBJ) -o $@ $(LIBRARY)

####

UPGRADE_OBJ=upgrade-cache.o \
	    errors-noconf.o io-noconf.o misc-noconf.o proto-none.o md5.o

upgrade-cache : $(UPGRADE_OBJ)
	$(LINK) $(UPGRADE_OBJ) -o $@ $(LIBRARY)

ENDIAN_OBJ=endian-cache.o \
	    errors-noconf.o io-noconf.o misc-noconf.o proto-none.o spool.o md5.o

endian-cache : $(ENDIAN_OBJ)
	$(LINK) $(ENDIAN_OBJ) -o $@ $(LIBRARY)

####

%.o:%.c
	$(COMPILE) $< -o $@ $(INCLUDE)

wwwoffle.o   : wwwoffle.c   wwwoffle.h misc.h config.h errors.h sockets.h         version.h
wwwoffled.o  : wwwoffled.c  wwwoffle.h misc.h config.h errors.h sockets.h         version.h
wwwoffles.o  : wwwoffles.c  wwwoffle.h misc.h config.h errors.h sockets.h proto.h

wwwoffle-tools.o : wwwoffle-tools.c wwwoffle.h misc.h errors.h

upgrade-cache.o  : upgrade-cache.c  wwwoffle.h misc.h errors.h

endian-cache.o   : endian-cache.c   wwwoffle.h misc.h errors.h

http.o       : http.c       wwwoffle.h misc.h config.h errors.h sockets.h proto.h
ftp.o        : ftp.c        wwwoffle.h misc.h config.h errors.h sockets.h proto.h
finger.o     : finger.c     wwwoffle.h misc.h config.h errors.h sockets.h proto.h

configedit.o : configedit.c wwwoffle.h misc.h config.h errors.h
connect.o    : connect.c    wwwoffle.h misc.h config.h errors.h
control.o    : control.c    wwwoffle.h misc.h config.h errors.h sockets.h
html.o	     : html.c	    wwwoffle.h misc.h
index.o      : index.c      wwwoffle.h misc.h config.h errors.h
messages.o   : messages.c   wwwoffle.h misc.h config.h errors.h                   version.h
monitor.o    : monitor.c    wwwoffle.h misc.h config.h
parse.o      : parse.c      wwwoffle.h misc.h config.h errors.h           proto.h
purge.o      : purge.c      wwwoffle.h misc.h config.h errors.h           proto.h
refresh.o    : refresh.c    wwwoffle.h misc.h config.h errors.h sockets.h
spool.o      : spool.c      wwwoffle.h misc.h config.h errors.h

config.o     : config.c     wwwoffle.h misc.h config.h errors.h sockets.h proto.h
	$(COMPILE) config.c -o $@ $(INCLUDE) -DSPOOL_DIR=\"$(SPOOLDIR)\" -DCONF_DIR=\"$(CONFDIR)\"
errors.o     : errors.c                       config.h errors.h
io.o         : io.c         wwwoffle.h misc.h config.h errors.h
misc.o       : misc.c                  misc.h config.h                    proto.h
proto.o      : proto.c                 misc.h                             proto.h
sockets.o    : sockets.c                               errors.h sockets.h

md5.o        : md5.c md5.h


refresh-path.o : refresh.c   wwwoffle.h misc.h          errors.h sockets.h
	$(COMPILE) refresh.c -o $@ $(INCLUDE) -DREFRESH_PATH_ONLY

errors-noconf.o: errors.c                      config.h errors.h
	$(COMPILE) errors.c -o $@ $(INCLUDE) -DNO_CONFIG
io-noconf.o    : io.c        wwwoffle.h misc.h          errors.h
	$(COMPILE) io.c -o $@ $(INCLUDE) -DNO_CONFIG
misc-urlonly.o : misc.c                 misc.h config.h                    proto.h
	$(COMPILE) misc.c -o $@ $(INCLUDE) -DURL_ONLY
misc-noconf.o  : misc.c                 misc.h                             proto.h
	$(COMPILE) misc.c -o $@ $(INCLUDE) -DNO_CONFIG
proto-none.o   : proto.c                misc.h                             proto.h
	$(COMPILE) proto.c -o $@ $(INCLUDE) -DNO_PROTOCOLS

####

html.c : html.l
	$(LEX) -Phtml_yy html.l
	@mv lex.html_yy.c html.c

messages.c : messages.l
	$(LEX) -Pmsg_yy messages.l
	@mv lex.msg_yy.c messages.c

########

html : html/FAQ.html
	@true

html/FAQ.html : FAQ FAQ-html.pl
	-perl FAQ-html.pl < FAQ > FAQ.html
	-[ -f FAQ.html -a -s FAQ.html ] && mv FAQ.html html/FAQ.html
	[ ! -f FAQ.html ] || rm FAQ.html

########

install_binary : programs
	[ -x $(INSTDIR)/bin ] || $(INSTALL) -d $(INSTDIR)/bin
	$(INSTALL) -c -m 755 wwwoffle  $(INSTDIR)/bin
	$(INSTALL) -c -m 755 wwwoffle-tools  $(INSTDIR)/bin
	ln -sf wwwoffle-tools $(INSTDIR)/bin/wwwoffle-ls
	ln -sf wwwoffle-tools $(INSTDIR)/bin/wwwoffle-mv
	ln -sf wwwoffle-tools $(INSTDIR)/bin/wwwoffle-rm
	ln -sf wwwoffle-tools $(INSTDIR)/bin/wwwoffle-read
	ln -sf wwwoffle-tools $(INSTDIR)/bin/wwwoffle-write
	[ -x  $(INSTDIR)/sbin ] || $(INSTALL) -d $(INSTDIR)/sbin
	$(INSTALL) -c -m 755 wwwoffled $(INSTDIR)/sbin

install_man :
	[ -x $(INSTDIR)/man ] || $(INSTALL) -d $(INSTDIR)/man
	[ -x  $(INSTDIR)/man/man1 ] || $(INSTALL) -d $(INSTDIR)/man/man1
	$(INSTALL) -c -m 644 wwwoffle.man $(INSTDIR)/man/man1/wwwoffle.1
	[ -x  $(INSTDIR)/man/man5 ] || $(INSTALL) -d $(INSTDIR)/man/man5
	sed -e 's%SPOOLDIR%$(SPOOLDIR)%' -e 's%CONFDIR%$(CONFDIR)%' < wwwoffle.conf.man > wwwoffle.conf.man.install
	$(INSTALL) -c -m 644 wwwoffle.conf.man.install $(INSTDIR)/man/man5/wwwoffle.conf.5
	[ -x  $(INSTDIR)/man/man8 ] || $(INSTALL) -d $(INSTDIR)/man/man8
	$(INSTALL) -c -m 644 wwwoffled.man $(INSTDIR)/man/man8/wwwoffled.8

install_spool : html endian-cache
	@[ ! -d $(SPOOLDIR) -o -d $(SPOOLDIR)/http ] || \
	 (echo "WWWOFFLE: " ;\
	  echo "WWWOFFLE: You MUST upgrade the existing cache before you can use this version." ;\
	  echo "WWWOFFLE: Read the file UPGRADE for details." ;\
	  echo "WWWOFFLE: " ;\
	  exit 1 )
	[ -x  $(SPOOLDIR) ] || $(INSTALL) -d $(SPOOLDIR)
	[ -x  $(SPOOLDIR)/outgoing ] || $(INSTALL) -d $(SPOOLDIR)/outgoing
	[ -x  $(SPOOLDIR)/monitor ] || $(INSTALL) -d $(SPOOLDIR)/monitor
	[ -x  $(SPOOLDIR)/lasttime ] || $(INSTALL) -d $(SPOOLDIR)/lasttime
	[ -x  $(SPOOLDIR)/http ] || $(INSTALL) -d $(SPOOLDIR)/http
	@echo 'GET http://www.gedanken.demon.co.uk/wwwoffle/version-2.3/user.html HTTP/1.0'        > $(SPOOLDIR)/outgoing/Owwwoffle-user ;\
	 echo 'Host: www.gedanken.demon.co.uk'                                                    >> $(SPOOLDIR)/outgoing/Owwwoffle-user ;\
	 echo 'Accept: */*'                                                                       >> $(SPOOLDIR)/outgoing/Owwwoffle-user ;\
	 echo ''                                                                                  >> $(SPOOLDIR)/outgoing/Owwwoffle-user ;\
	 awk 'BEGIN{printf("http://www.gedanken.demon.co.uk/wwwoffle/version-2.3/user.html");}'    > $(SPOOLDIR)/outgoing/Uwwwoffle-user < /dev/null
	@echo 'GET http://www.gedanken.demon.co.uk/wwwoffle/version-2.3/browser.html HTTP/1.0'     > $(SPOOLDIR)/outgoing/Owwwoffle-browser ;\
	 echo 'Host: www.gedanken.demon.co.uk'                                                    >> $(SPOOLDIR)/outgoing/Owwwoffle-browser ;\
	 echo 'Accept: */*'                                                                       >> $(SPOOLDIR)/outgoing/Owwwoffle-browser ;\
	 echo ''                                                                                  >> $(SPOOLDIR)/outgoing/Owwwoffle-browser ;\
	 awk 'BEGIN{printf("http://www.gedanken.demon.co.uk/wwwoffle/version-2.3/browser.html");}' > $(SPOOLDIR)/outgoing/Uwwwoffle-browser < /dev/null
	@[ -d $(SPOOLDIR)/html.old ] && \
	 (echo "WWWOFFLE: " ;\
	  echo "WWWOFFLE: There is already a directory $(SPOOLDIR)/html.old - remove it and re-run make" ;\
	  echo "WWWOFFLE: " ;\
	  exit 1 ) ;\
	[ -e $(SPOOLDIR)/html -a ! -e $(SPOOLDIR)/html.old ] && mv $(SPOOLDIR)/html $(SPOOLDIR)/html.old ;\
	[ ! -e $(SPOOLDIR)/html ] && mkdir $(SPOOLDIR)/html
	(tar cf - html) | (cd $(SPOOLDIR) ; tar xf -)
	@([ -d $(SPOOLDIR) -a ! -d $(SPOOLDIR)/prevtime1 ] && ./endian-cache > /dev/null 2>&1 ) || \
	 (echo "WWWOFFLE: " ;\
	  echo "WWWOFFLE: You MUST convert the existing cache to the correct endian format." ;\
	  echo "WWWOFFLE: Read the file CONVERT for details." ;\
	  echo "WWWOFFLE: " ;\
	  exit 0 )

install_config :
	sed -e 's%SPOOLDIR%$(SPOOLDIR)%' -e 's%CONFDIR%$(CONFDIR)%' < wwwoffle.conf > wwwoffle.conf.install
	@[ ! -f $(CONFDIR)/wwwoffle.conf ] || \
	 (echo "WWWOFFLE: " ;\
	  echo "WWWOFFLE: There is already a configuration file $(CONFDIR)/wwwoffle.conf." ;\
	  echo "WWWOFFLE: Run 'perl upgrade-config.pl $(CONFDIR)/wwwoffle.conf' to upgrade it." ;\
	  echo "WWWOFFLE: " )
	[  ! -f $(CONFDIR)/wwwoffle.conf ] || $(INSTALL) -c -m 644 wwwoffle.conf.install $(CONFDIR)/wwwoffle.conf.install
	[    -f $(CONFDIR)/wwwoffle.conf ] || $(INSTALL) -c -m 644 wwwoffle.conf.install $(CONFDIR)/wwwoffle.conf

########
