# Copyright (c) 1995-2005 by Wayne C. Gramlich.
# All rights reserved.

ROOT = ..

include $(ROOT)/Makefile_common.mk
include $(ROOT)/Makefile_private.mk

# Some directories:
LIBUTIL_DIRECTORY = $(ROOT)/libutil
STIPPLE_DIRECTORY = $(ROOT)/stipple
STC_DIRECTORY = $(STIPPLE_DIRECTORY)/stc
LIBSTIPPLE_DIRECTORY = $(STIPPLE_DIRECTORY)/libstipple
NSTC_DIRECTORY = $(STIPPLE_DIRECTORY)/nstc

DIRECTORIES =		\
	tests

STC = $(STC_DIRECTORY)/$(PLATFORM)/stc
STL = $(STC_DIRECTORY)/$(PLATFORM)/stl
NSTC = $(NSTC_DIRECTORY)/$(PLATFORM)/nstc
LIBUTIL = $(LIBUTIL_DIRECTORY)/$(PLATFORM)/libutil.a
LIBSTIPPLE = $(LIBSTIPPLE_DIRECTORY)/$(PLATFORM)/libstipple.a

STC_INCLUDES =					\
	-I $(LIBSTIPPLE_DIRECTORY)/$(PLATFORM)	\
	-I $(PLATFORM)
STC_FLAGS = $(STC_OPTIONS) $(STC_INCLUDES)

COMMON_BASES =		\
	differ
COMMON_SOURCES = ${COMMON_BASES:%=%.sts}
COMMON_INTERFACES = ${COMMON_BASES:%=$(PLATFORM)/%.sti}
COMMON_OBJECTS = ${COMMON_BASES:%=$(PLATFORM)/%.o}
COMMON_HTMLS = ${COMMON_BASES:%=%.html}

DIFFER_TEST_BASES =	\
	differ_test
DIFFER_TEST_SOURCES = ${DIFFER_TEST_BASES:%=%.sts}
DIFFER_TEST_INTERFACES = ${DIFFER_TEST_BASES:%=$(PLATFORM)/%.sti}
DIFFER_TEST_OBJECTS = ${DIFFER_TEST_BASES:%=$(PLATFORM)/%.o}
DIFFER_TEST_HTMLS = ${DIFFER_TEST_BASES:%=%.html}
DIFFER_TEST_LIBRARIES =
DIFFER_TEST = $(PLATFORM)/differ_test

SVMS_BASES =		\
	chunk		\
	data_io		\
	delta		\
	history		\
	manage		\
	misc		\
	resources	\
	slice		\
	svms		\
	project		\
	version
SVMS_SOURCES = ${SVMS_BASES:%=%.sts}
SVMS_INTERFACES = ${SVMS_BASES:%=$(PLATFORM)/%.sti}
SVMS_OBJECTS = ${SVMS_BASES:%=$(PLATFORM)/%.o}
SVMS_HTMLS = ${SVMS_BASES:%=%.html}
SVMS_LIBRARIES =
SVMS = $(PLATFORM)/svms

ALL_STS_BASES =			\
	${COMMON_BASES}		\
	${DIFFER_TEST_BASES}	\
	${SVMS_BASES}

SHELL_BASES =		\
	sccs2svms	\
	uncvt		\
	uncvtall
SHELL_SOURCES = ${SHELL_BASES:%=%.sh}
SHELL_PROGRAMS = ${SHELL_BASES:%=$(PLATFORM)/%}

DOC_BASES = 		\
	2do		\
	design		\
	documentation	\
	goals		\
	index		\
	source		\
	why
HTML_SOURCES = ${DOC_BASES:%=%.html}
SPELL_FILES = ${DOC_BASES:%=%.spell}

GENERATED_HTMLS =		\
	${COMMON_HTMLS}		\
	${DIFFER_TEST_HTMLS}	\
	${SVMS_HTMLS}

OTHER_SOURCES =			\
	Makefile
SOURCES =			\
	${COMMON_SOURCES}	\
	${DIFFER_SOURCES}	\
	${SVMS_SOURCES}		\
	${SPELL_FILES}		\
	${HTML_SOURCES}		\
	${SHELL_SOURCES}

PROGRAMS =			\
	$(DIFFER_TEST)		\
	$(SVMS)			\
	${SHELL_PROGRAMS}

COPY_LIST =			\
	${SOURCES}		\
	source.html
SOURCE_LIST =			\
	${SHELL_SOURCES}	\
	${COMMON_SOURCES}	\
	${DIFFER_TEST_SOURCES}	\
	${SVMS_SOURCES}		\
	${OTHER_SOURCES}

# Some rules:

$(PLATFORM)/%: %.sh
	rm -f $@
	cp $< $@
	chmod +xw $@

.PHONY: all clean copy deep deep2 spell

all: $(PLATFORM) ${SOURCES} $(WAIT) ${PROGRAMS} $(WAIT) source.html
	set -e ;					\
	for i in ${DIRECTORIES} ;			\
	  do						\
	    $(MAKE) -C $$i ;				\
	  done

deep: deep2 $(WAIT) all

deep2:
	$(MAKE) -C $(LIBUTIL_DIRECTORY)
	$(MAKE) -C $(STC_DIRECTORY)
	$(MAKE) -C $(LIBSTIPPLE_DIRECTORY)

$(DIFFER_TEST): ${DIFFER_TEST_INTERFACES} ${COMMON_INTERFACES} $(WAIT)	\
    ${DIFFER_TEST_OBJECTS} ${COMMON_OBJECTS}
	$(STL) -o $@ -E $(PLATFORM) ${DIFFER_TEST_INTERFACES}		\
	    ${COMMON_INTERFACES} ${DIFFER_TEST_OBJECTS}			\
	    ${COMMON_OBJECTS} ${DIFFER_TEST_LIBRARIES}

$(SVMS): ${SVMS_INTERFACES} ${COMMON_INTERFACES} $(WAIT)		\
    ${SVMS_OBJECTS} ${COMMON_OBJECTS}
	$(STL) -o $@ -E $(PLATFORM) ${SVMS_INTERFACES}			\
	    ${COMMON_INTERFACES} ${SVMS_OBJECTS} ${COMMON_OBJECTS}	\
	    ${SVMS_LIBRARIES}

clean:
	rm -rf $(PLATFORM) STDB ${GENERATED_HTMLS} source.html
	set -e ;					\
	for i in ${DIRECTORIES} ;			\
	  do						\
	    $(MAKE) -C $$i clean ;			\
	  done
	$(CLEAN)

copy: ${COPY_LIST}
	set -e ;							\
	if [ "$(COPY_DIRECTORY)" = "" ] ;				\
	  then								\
	    echo "Please set COPY_DIRECTORY in `pwd`" ;			\
	    false ;							\
	  fi
	rm -rf $(COPY_DIRECTORY)
	mkdir -p $(COPY_DIRECTORY)
	cp ${COPY_LIST} $(COPY_DIRECTORY)
	set -e ;							\
	for i in ${DIRECTORIES} ;					\
	  do								\
	    $(MAKE) -C $$i COPY_DIRECTORY=$(COPY_DIRECTORY)/$$i copy ;	\
	  done

spell: ${HTML_SOURCES} ${SPELL_FILES}
	for i in ${DOC_BASES} ;						\
	  do								\
	    cat $$i.html | sed -e "s,<[^>]*>,,g" -e "s,^, ,g" |		\
	       grep -v html | spell -l | sort | uniq > /tmp/$$i.spell ;	\
	    diff /tmp/$$i.spell $$i.spell > /tmp/$$i.diff 2>&1 ;	\
	    if [ -s /tmp/$$i.diff ] ;					\
	      then							\
		echo ========== $$i.html ============== ;		\
		cat /tmp/$$i.diff ;					\
	      fi ;							\
	    rm -f /tmp/$$i.spell /tmp/$$i.diff ;			\
	  done

test:
	$(MAKE) -C tests test

source.html: Makefile $(NSTC) $(WAIT) ${GENERATED_HTMLS}
	@echo -n "Generating $@..."
	@rm -f $@
	@echo '<HTML>' > $@
	@echo '<Head>' >> $@
	@echo '<Title>SVMS Source Files</Title>' >> $@
	@echo '</Head>' >> $@
	@echo '<Body>' >> $@
	@echo '<P>These are the source files for' >> $@
	@echo '<A HRef="index.html">SVMS</A>.</P>' >> $@
	@echo '<H1>' >> $@
	@echo 'SVMS Source Files' >> $@
	@echo '</H1>' >> $@
	@echo '<P>The following extracted documentation is available:</P>'>> $@
	@echo '<UL>' >> $@
	@for i in ${ALL_STS_BASES} ; do					\
		echo "  <LI><A HRef='$$i.html'>$$i</A></LI>" >> $@ ;	\
		done
	@echo '</UL>' >> $@
	@echo '<P>The following source files are available:</P>' >> $@
	@echo '<UL>' >> $@
	@for i in `ls ${SOURCE_LIST} | sort`; do \
		echo "  <LI><A HRef='$$i'>$$i</A></LI>" >> $@ ;		\
		done
	@echo '</UL>' >> $@
	@echo '<HR>' >> $@
	@echo '<Address>' >> $@
	@echo '<A HRef="../../../copyright.html">' >> $@
	@echo 'Copyright</A> (c) 1998 by' >> $@
	@echo '<A HRef="../../../gramlich.html">' >> $@
	@echo 'Wayne Gramlich</A> All rights reserved.' >> $@
	@echo '</Address>' >> $@
	@echo '</Body>' >> $@
	@echo '</HTML>' >> $@
	@echo "Done"


