#
# Makefile
#
# Copyright 2001, 2002 by Anthony Howe.  All rights reserved.
#

.POSIX:

########################################################################
### Pick one that best suits your system.
########################################################################

#
# The location of apxs utility.
#
APXS=apxs

#
# Apache source tree directory.
#
APACHEDIR=/usr/local/src/apache_1.3.26

#
# Where the scripts should live
#
SCRIPTDIR=/usr/local/sbin

#
# Where to store the weenie files.
#
SPOOLDIR=/var/spool/mod_watch

#
# Solaris 5.6 POSIX Support Library
#
#DEF=-DSHARED_MEMORY_API=POSIX_API -DSERIALIZATION_API=POSIX_API
#INC=-I`$(APXS) -q INCLUDEDIR`
#LIB=-lposix4
#RANLIB=echo

#
# Solaris 5.7 POSIX Support Library
#
#DEF=-DSHARED_MEMORY_API=POSIX_API -DSERIALIZATION_API=POSIX_API
#INC=-I`$(APXS) -q INCLUDEDIR`
#LIB=-lrt
#RANLIB=echo

#
# SYSTEMV (hard coded default)
# Tested on Linux, FreeBSD 4.2, FreeBSD 4.4, HP-UX
#
DEF=-DSHARED_MEMORY_API=SYSTEMV_API -DSERIALIZATION_API=SYSTEMV_API
INC=-I`$(APXS) -q INCLUDEDIR`
LIB=
RANLIB=echo

#
# POSIX (Generic)
#
#DEF=-DSHARED_MEMORY_API=POSIX_API -DSERIALIZATION_API=POSIX_API
#INC=-I`$(APXS) -q INCLUDEDIR`
#LIB=
#RANLIB=echo

#
# Mac OS X
#
#DEF=-DSHARED_MEMORY_API=MMAP_ANON -DSERIALIZATION_API=FCNTL_API
#INC=-I`$(APXS) -q INCLUDEDIR`
#LIB=
#RANLIB=ranlib

########################################################################
### No further configuration beyond this point.
########################################################################

APACHECTL=apachectl
CC=`$(APXS) -q CC`
CFLAGS=`$(APXS) -q CFLAGS`
CFLAGS_SHLIB=`$(APXS) -q CFLAGS_SHLIB`

.SUFFIXES:

O = .o
R = .lo
A = .a

.SUFFIXES: .c $O $R $A

MODULE = watch
STATIC = lib$(MODULE)$A
DYNAMIC = lib$(MODULE)$R$A

MODULEDIR = $(APACHEDIR)/src/modules/$(MODULE)

OBJ = Memory$O Mutex$O Shared$O SharedHash$O NetworkTable$O mod_$(MODULE)$O
SRC = Memory.c Mutex.c Shared.c SharedHash.c NetworkTable.c mod_$(MODULE).c

# Static .c to .o
.c$O:
	$(CC) $(CFLAGS) $(DEF) $(INC) -c $<
	$(AR) $(ARFLAGS) $(STATIC) $@

# Dynamic .c to relocatable .o
.c$R:
	$(CC) $(CFLAGS) $(CFLAGS_SHLIB) $(DEF) $(INC) -o $@ -c $<
	$(AR) $(ARFLAGS) $(DYNAMIC) $@
	
all:
	@echo
	@echo '***************************************************************'
	@echo 'Please verify the configuration at the top of the Makefile then'
	@echo 'type either:'
	@echo
	@echo '  make build-static'
	@echo
	@echo 'or'
	@echo
	@echo '  make build-dynamic'
	@echo
	@echo '***************************************************************'
	@echo

settings:
	@uname -a
	@echo "CC=`$(APXS) -q CC`"
	@echo "CFLAGS=`$(APXS) -q CFLAGS`"
	@echo "CFLAGS_SHLIB=`$(APXS) -q CFLAGS_SHLIB`"
	@echo "DEF=$(DEF)"
	@echo "INC=`$(APXS) -q INCLUDEDIR`"
	@echo "LIB=$(LIB)"
	
build-static: $(STATIC)

$(STATIC): mod_$(MODULE)$O

mod_$(MODULE)$O: SharedHash$O NetworkTable$O mod_$(MODULE).c
	$(CC) $(CFLAGS) -DSPOOLDIR='"$(SPOOLDIR)"' $(DEF) $(INC) -c $*.c
	$(AR) $(ARFLAGS) $(STATIC) $@
	$(RANLIB) $(STATIC)

SharedHash$O: Memory$O Mutex$O Shared$O SharedHash.c
	$(CC) $(CFLAGS) $(DEF) $(INC) -c $*.c
	$(AR) $(ARFLAGS) $(STATIC) $@

build-dynamic: mod_$(MODULE).so

mod_$(MODULE).so: $(DYNAMIC) mod_$(MODULE).c
	$(RANLIB) $(DYNAMIC)
	$(APXS) $(DEF) $(INC) $(LIB) -DSPOOLDIR='\"$(SPOOLDIR)\"' -c -o $@ mod_$(MODULE).c $(DYNAMIC)

$(DYNAMIC): SharedHash$R NetworkTable$R 

SharedHash$R: Memory$R Mutex$R Shared$R SharedHash.c
	$(CC) $(CFLAGS) $(CFLAGS_SHLIB) $(DEF) $(INC) -o $@ -c $*.c
	$(AR) $(ARFLAGS) $(DYNAMIC) $@

install:
	@echo
	@echo '***************************************************************'
	@echo 'Please verify the configuration at the top of the Makefile then'
	@echo 'type either:'
	@echo
	@echo '  make install-static'
	@echo
	@echo 'or'
	@echo
	@echo '  make install-dynamic'
	@echo
	@echo '***************************************************************'
	@echo

$(MODULEDIR):
	mkdir $(MODULEDIR)

$(SCRIPTDIR):
	mkdir $(SCRIPTDIR)

$(SCRIPTDIR)/mod_watch.pl: $(SCRIPTDIR) mod_watch.pl
	chmod u+x mod_watch.pl
	cp -f mod_watch.pl $(SCRIPTDIR)

$(SCRIPTDIR)/apache2mrtg.pl: $(SCRIPTDIR) apache2mrtg.pl
	chmod u+x apache2mrtg.pl
	cp -f apache2mrtg.pl $(SCRIPTDIR)

$(MODULEDIR)/Makefile: $(MODULEDIR) $(MODULE).mk
	cp -f $(MODULE).mk $@
	
$(MODULEDIR)/$(STATIC): $(MODULEDIR) $(STATIC)
	cp -f $(STATIC) $(MODULEDIR)

install-common: $(SCRIPTDIR)/mod_watch.pl $(SCRIPTDIR)/apache2mrtg.pl

install-static: $(MODULEDIR)/$(STATIC) $(MODULEDIR)/Makefile install-common
	@echo
	@echo '***************************************************************'
	@cat notes-static.txt
	@cat notes-conf.txt
	@echo '***************************************************************'
	@cat notes-support.txt
	@echo
	
install-dynamic: build-dynamic install-common
	$(APXS) -i -a -n '$(MODULE)' mod_$(MODULE).so
	@echo
	@echo '***************************************************************'
	@cat notes-dynamic.txt
	@cat notes-conf.txt
	@echo '***************************************************************'
	@cat notes-support.txt
	@echo

uninstall: clean
	-rm -f $(SCRIPTDIR)/mod_watch.pl $(SCRIPTDIR)/apache2mrtg.pl
	-rm -f `$(APXS) -q LIBEXECDIR`/mod_$(MODULE).so
	-rm -rf $(MODULEDIR)
	
clean:
	-rm -f ./*$O ./*$R $(STATIC) $(DYNAMIC) mod_$(MODULE).so
	
distclean: clean

test: reload
	lynx http://127.0.0.1/watch-info

reload: stop start

start:
	$(APACHECTL) start
stop:
	$(APACHECTL) stop



