# Copyright (c) 1994, 1995, 1997, 2002, 2004 by Wayne C. Gramlich.
# All rights reserved.

all: everything

ROOT := ../..

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

# Macros:

C_INCLUDES := 				\
	-I$(OPENWINHOME)/include	\
	-I../../libutil
CFLAGS := ${COPTS} ${C_INCLUDES}
STC_INCLUDES :=				\
	-I ../libstipple/$(PLATFORM)	\
	-I $(PLATFORM)
STC_FLAGS := ${STC_OPTIONS} ${STC_INCLUDES}
STC := ../stc/$(PLATFORM)/stc
STL := ../stc/$(PLATFORM)/stl

NSTC := ../nstc/$(PLATFORM)/nstc

C_BASES :=			\
	xlib_color		\
	xlib_color_map		\
	xlib_display		\
	xlib_drawable		\
	xlib_errors		\
	xlib_event		\
	xlib_gc			\
	xlib_gc_values		\
	xlib_image		\
	xlib_input_mask		\
	xlib_pixel		\
	xlib_pixmap		\
	xlib_points		\
	xlib_screen		\
	xlib_size_hints		\
	xlib_visual		\
	xlib_window		\
	xlib_window_attributes	\
	xlib_wm_hints
STS_BASES :=			\
	x_key_symbol_extra	\
	xlib_icon_size
C_SOURCES := ${C_BASES:%=%_c.c}
C_OBJECTS := ${C_BASES:%=$(PLATFORM)/%_c.o}
STS_SOURCES := 					\
	${C_BASES:%=%.sts}			\
	${STS_BASES:%=%.sts}
STS_INTERFACES :=				\
	${C_BASES:%=$(PLATFORM)/%.sti}		\
	${STS_BASES:%=$(PLATFORM)/%.sti}
STS_OBJECTS :=					\
	${C_BASES:%=$(PLATFORM)/%.o}		\
	${STS_BASES:%=$(PLATFORM)/%.o}

# A generator is a program that produces STIPPLE code to interface to
# C code.
GENERATOR_BASES :=		\
	x_char			\
	x_display		\
	x_key_event		\
	x_key_symbol		\
	x_visual		\
	x_visual_info
GENERATOR_PROGRAMS := ${GENERATOR_BASES:%=$(PLATFORM)/%_generate}
GENERATOR_SOURCES := ${GENERATOR_BASES:%=%_generate.sts}
GENERATOR_INTERFACES := ${GENERATOR_BASES:%=$(PLATFORM)/%_generate.sti}
GENERATOR_OBJECTS := ${GENERATOR_BASES:%=$(PLATFORM)/%_generate.o}
GENERATED_C_SOURCES := ${GENERATOR_BASES:%=%_c.c}
GENERATED_C_OBJECTS := ${GENERATOR_BASES:%=$(PLATFORM)/%_c.o}
GENERATED_STS_SOURCES := ${GENERATOR_BASES:%=%.sts}
GENERATED_STS_INTERFACES := ${GENERATOR_BASES:%=$(PLATFORM)/%.sti}
GENERATED_STS_OBJECTS := ${GENERATOR_BASES:%=$(PLATFORM)/%.o}

# Some final macros:
SOURCES :=				\
	${GENERATOR_SOURCES}		\
	${STS_SOURCES}
ALL_SOURCES :=				\
	${SOURCES}			\
	${C_SOURCES}
LIB_INTERFACES :=			\
	${STS_INTERFACES}		\
	${GENERATED_STS_INTERFACES}
INTERFACES :=				\
	${GENERATOR_INTERFACES}		\
	${LIB_INTERFACES}
LIB_OBJECTS :=				\
	${GENERATED_C_OBJECTS}		\
	${GENERATED_STS_OBJECTS}	\
	${STS_OBJECTS}			\
	${C_OBJECTS}
OBJECTS :=				\
	${LIB_OBJECTS}
HTMLS := ${SOURCES:%.sts=%.html}


.PHONY: all clean copy deep everything everything_else site

# Targets:

everything: $(PLATFORM) index.html ${ALL_SOURCES} $(WAIT)		\
    ${GENERATOR_PROGRAMS} $(WAIT)					\
    $(PLATFORM)/libxlib.stlib $(WAIT) ${HTMLS} $(WAIT) source.html

deep: everything_else $(WAIT) everything

everything_else:
	cd ../../libutil; $(MAKE)
	cd ../stc; $(MAKE)
	cd ../libstipple; $(MAKE)

$(PLATFORM)/libxlib.stlib: ${LIB_INTERFACES} $(WAIT) ${LIB_OBJECTS}
	ls ${LIB_INTERFACES} ${LIB_OBJECTS} | sed "s,^,`pwd`/,g" > $@

# Generator targets:

x_char_c.c: $(PLATFORM)/x_char_generate
	$(PLATFORM)/x_char_generate -c -o $@
x_char.sts: $(PLATFORM)/x_char_generate
	$(PLATFORM)/x_char_generate -s -o $@
$(PLATFORM)/x_char_generate: $(PLATFORM)/x_char_generate.sti $(WAIT) \
    $(PLATFORM)/x_char_generate.o
	$(STL) -o $@ $(PLATFORM)/x_char_generate.sti \
	    $(PLATFORM)/x_char_generate.o

x_display_c.c: $(PLATFORM)/x_display_generate
	$(PLATFORM)/x_display_generate -c -o $@
x_display.sts: $(PLATFORM)/x_display_generate
	$(PLATFORM)/x_display_generate -s -o $@
$(PLATFORM)/x_display_generate: $(PLATFORM)/x_display_generate.sti $(WAIT) \
    $(PLATFORM)/x_display_generate.o
	$(STL) -o $@ $(PLATFORM)/x_display_generate.sti \
	    $(PLATFORM)/x_display_generate.o

x_key_event_c.c: $(PLATFORM)/x_key_event_generate
	$(PLATFORM)/x_key_event_generate -c -o $@
x_key_event.sts: $(PLATFORM)/x_key_event_generate
	$(PLATFORM)/x_key_event_generate -s -o $@
$(PLATFORM)/x_key_event_generate: $(PLATFORM)/x_key_event_generate.sti \
    $(WAIT) $(PLATFORM)/x_key_event_generate.o
	$(STL) -o $@ $(PLATFORM)/x_key_event_generate.sti \
	    $(PLATFORM)/x_key_event_generate.o

x_key_symbol_c.c: $(PLATFORM)/x_key_symbol_generate
	$(PLATFORM)/x_key_symbol_generate -c -o $@
x_key_symbol.sts: $(PLATFORM)/x_key_symbol_generate
	$(PLATFORM)/x_key_symbol_generate -s -o $@
$(PLATFORM)/x_key_symbol_generate: $(PLATFORM)/x_key_symbol_generate.sti \
    $(WAIT) $(PLATFORM)/x_key_symbol_generate.o
	$(STL) -o $@ $(PLATFORM)/x_key_symbol_generate.sti \
	    $(PLATFORM)/x_key_symbol_generate.o

x_visual_c.c: $(PLATFORM)/x_visual_generate
	$(PLATFORM)/x_visual_generate -c -o $@
x_visual.sts: $(PLATFORM)/x_visual_generate
	$(PLATFORM)/x_visual_generate -s -o $@
$(PLATFORM)/x_visual_generate: $(PLATFORM)/x_visual_generate.sti \
    $(WAIT) $(PLATFORM)/x_visual_generate.o
	$(STL) -o $@ $(PLATFORM)/x_visual_generate.sti \
	    $(PLATFORM)/x_visual_generate.o

x_visual_info_c.c: $(PLATFORM)/x_visual_info_generate
	$(PLATFORM)/x_visual_info_generate -c -o $@
x_visual_info.sts: $(PLATFORM)/x_visual_info_generate
	$(PLATFORM)/x_visual_info_generate -s -o $@
$(PLATFORM)/x_visual_info_generate: $(PLATFORM)/x_visual_info_generate.sti \
    $(WAIT) $(PLATFORM)/x_visual_info_generate.o
	$(STL) -o $@ $(PLATFORM)/x_visual_info_generate.sti \
	    $(PLATFORM)/x_visual_info_generate.o

clean:
	rm -f ${GENERATED_C_SOURCES} ${GENERATED_STS_SOURCES}
	rm -f source.html ${HTMLS}
	rm -f `ls | grep "~$$"`
	rm -rf $(PLATFORM)

source.html: Makefile $(NSTC) $(WAIT) ${STS_HTMLS}
	@echo -n "Generating $@..."
	@rm -f $@
	@echo '<HTML>' > $@
	@echo '<Head>' >> $@
	@echo '<Title>STIPPLE XLib Source and Documenation Files</Title>' >> $@
	@echo '</Head>' >> $@
	@echo '<Body>' >> $@
	@echo '<P>These are the source and documenation files for the' >> $@
	@echo '<A HRef="index.html">STIPPLE XLib project</A>.</P>' >> $@
	@echo '<H1>' >> $@
	@echo 'STIPPLE Source and Documentation Files' >> $@
	@echo '</H1>' >> $@
	@echo '<P>The following extracted documentation is available:</P>'>> $@
	@echo '<UL>' >> $@
	@for i in ${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 Makefile ${ALL_SOURCES} | 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) 1997 by' >> $@
	@echo '<A HRef="../../../gramlich.html">' >> $@
	@echo 'Wayne Gramlich</A> All rights reserved.' >> $@
	@echo '</Address>' >> $@
	@echo '</Body>' >> $@
	@echo '</HTML>' >> $@
	@echo "Done"

