cleaner1=tr '\n' ' ' | tr -s ' ' | sed -e 's/ $$//' -e 's/ / '
cleaner2=' /g'

gtkCFLAGS=$(shell pkg-config --cflags gtk+-2.0 libglade-2.0 | $(cleaner1)-C$(cleaner2))
gtkLDADD=$(shell pkg-config --libs gtk+-2.0 libglade-2.0 | $(cleaner1)-L$(cleaner2))

CSC=csc
CSCCC=$(CSC) $(gtkCFLAGS)
CSCLD=$(CSC) $(gtkCFLAGS) $(gtkLDADD)
WRAP=./wrap

TARGETS=\
	gobject.so \
	\
	gtk/gdkevent.so \
	gtk/wrap-classes.so \
	gtk/wrap-boxed.so \
	gtk/wrap-enum.so \
	gtk/wrap-flags.so \
	gtk/wrap-functions.so \
	gtk.so \
	\
	g+.so \
	\
	libglade.so

all: $(TARGETS)

install: all
	csi -quiet setup.scm install

uninstall:
	csi -quiet setup.scm uninstall

%.so: %.scm
	$(CSCLD) -s -o $@ $<
	strip $@

gtk/wrap-%.scm: wrap.log
	@echo target $@		# required to force the dependency to take hold?

%.o: %.scm
	$(CSCCC) -s -c -o $@ $<

wrap.log: override.defs defs/*.defs gtk-header.scm $(WRAP)
	$(WRAP) -I defs -i override.defs -H gtk-header.scm defs/*.defs -o gtk 2> $@

gtk/wrap-classes.so: gtk/wrap-classes.o
	for d in `find gtk -name 'wrap-class-*.scm' -print`; do \
		$(MAKE) --no-print-directory gtk/`basename $$d .scm`.o; \
	done
	for d in `find gtk -name 'wrap-interface-*.scm' -print`; do \
		$(MAKE) --no-print-directory gtk/`basename $$d .scm`.o; \
	done
	gcc -shared -o $@ \
		gtk/wrap-classes.o \
		`find gtk -name "wrap-class-*.o" -print` \
		`find gtk -name "wrap-interface-*.o" -print` \
		`pkg-config --libs gtk+-2.0 libglade-2.0`
	strip $@

#	$(CSCLD) -s -o $@ gtk/wrap-classes.scm gtk/wrap-class-*.o gtk/wrap-interface-*.o

clean:
	rm -f $(TARGETS)
	rm -f STACKTRACE
	rm -f gtk/wrap-*.scm gtk/wrap-*.c
	rm -f wrap wrap.log
	rm -f glib-types gdk-types gtk-types
	$(MAKE) -C doc clean

gobject.so: gobject.scm gobject-c.c glib-types
gtk.so: gtk.scm gdk-types gtk-types gobject.so

glib-types: extract-all-types
	SEARCH_REGEX='g_.*_get_type' \
		./extract-all-types `pkg-config --cflags gtk+-2.0` > $@

gdk-types: extract-all-types
	SEARCH_REGEX='gdk_.*_get_type' \
		./extract-all-types `pkg-config --cflags gtk+-2.0` > $@

gtk-types: extract-all-types
	SEARCH_REGEX='gtk_.*_get_type' \
		./extract-all-types `pkg-config --cflags gtk+-2.0` > $@

wrap: wrap.scm gobject.so gdk-types gtk-types
	$(CSCLD) -a -o $@ wrap.scm
	strip $@

.SECONDARY: \
	gtk/wrap-classes.scm \
	gtk/wrap-boxed.scm \
	gtk/wrap-enum.scm \
	gtk/wrap-flags.scm \
	gtk/wrap-functions.scm
