## Makefile for building the gobject DLL with gcc for mingw. The build
## uses tools running on cygwin, however.

## Use: make -f makefile.mingw

TOP = ../..

include ../build/win32/make.mingw

################################################################

# Nothing much configurable below

INCLUDES = -I .. -I ../glib -I .
DEFINES = -DHAVE_CONFIG_H -DGOBJECT_COMPILATION -DG_LOG_DOMAIN=\"GLib-GObject\" -DG_ENABLE_DEBUG

srcdir=.

all : \
	libgobject-2.0.a \
	testgobject.exe \
	glib-genmarshal.exe

gobject_OBJECTS =		\
	gboxed.o		\
	gclosure.o		\
	genums.o		\
	gobject.o		\
	gparam.o		\
	gparamspecs.o		\
	gsignal.o		\
	gsourceclosure.o	\
	gtype.o			\
	gtypemodule.o		\
	gtypeplugin.o		\
	gvalue.o		\
	gvaluearray.o		\
	gvaluetransform.o	\
	gvaluetypes.o

libgobject-2.0.a : $(srcdir)/stamp-gmarshal.h gmarshal.c $(gobject_OBJECTS) gobject.def gobject-2.0.rc
	$(BUILD_DLL) gobject-2.0 @LT_CURRENT@:@LT_REVISION@:@LT_AGE@ gobject.def $(gobject_OBJECTS) -L ../glib -lglib-2.0

glib-genmarshal.exe : glib-genmarshal.c
	$(CC) -o $@ $(CFLAGS) -UGOBJECT_COMPILATION $< -L ../glib -lglib-2.0

testgobject.exe: libgobject-2.0.a testgobject.o
	$(CC) $(CFLAGS) -o testgobject.exe testgobject.o -L ../glib -lglib-2.0 -L . -lgobject-2.0 $(LFLAGS)

gobject-2.0.rc : gobject.rc
	cp $< $@

# Copied from Makefile.am:
# initial creation of the real stamp-* files
gmarshal.h:	# never add deps here
	test -f "$(srcdir)/$@" || touch $(srcdir)/$@
# normal autogeneration rules
# all autogenerated files need to be generated in the srcdir,
# so old versions get remade and are not confused with newer
# versions in the build dir. thus a development setup requires
# srcdir to be writable, passing --disable-rebuilds to
# ../configure will supress all autogeneration rules.
$(srcdir)/stamp-gmarshal.h: @REBUILD@ gmarshal.list gmarshal.h glib-genmarshal.exe
	echo "#ifndef __G_MARSHAL_H__" > xgen-gmh \
	&& echo "#define __G_MARSHAL_H__" >> xgen-gmh \
	&& PATH=../glib:$$PATH ./glib-genmarshal --nostdinc --prefix=g_cclosure_marshal $(srcdir)/gmarshal.list --header >> xgen-gmh \
	&& echo "#endif /* __G_MARSHAL_H__ */" >> xgen-gmh \
	&& (cmp -s xgen-gmh $(srcdir)/gmarshal.h || cp xgen-gmh $(srcdir)/gmarshal.h) \
	&& rm -f xgen-gmh xgen-gmh~ \
	&& echo timestamp > $@
$(srcdir)/gmarshal.c: @REBUILD@ $(srcdir)/stamp-gmarshal.h
	PATH=../glib:$$PATH ./glib-genmarshal --nostdinc --prefix=g_cclosure_marshal $(srcdir)/gmarshal.list --body >> xgen-gmc \
	&& cp xgen-gmc $(srcdir)/gmarshal.c \
	&& rm -f xgen-gmc xgen-gmc~
$(srcdir)/gmarshal.strings: @REBUILD@ $(srcdir)/gmarshal.list
	grep '^[A-Z]' $(srcdir)/gmarshal.list \
	| sed -e 's/^/"g_cclosure_marshal_/' -e 's/:/__/' -e 's/,/_/g' -e 's/$$/",/' > xgen-gms \
	&& cp xgen-gms $(srcdir)/gmarshal.strings \
	&& rm -f xgen-gms xgen-gms~
glib-genmarshal.o: gmarshal.strings

clean::
	-rm gmarshal.h gmarshal.c stamp-gmarshal.h
