## Makefile for building the gobject dll with Microsoft C
## Use: nmake -f makefile.msc install

TOP = ..\..

!INCLUDE ..\build\win32\make.msc

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

INCLUDES = -FImsvc_recommended_pragmas.h -I .. -I . -I ..\glib
DEFINES = -DHAVE_CONFIG_H -DGOBJECT_COMPILATION -DG_LOG_DOMAIN=\"GLib-GObject\" \
		-DG_ENABLE_DEBUG
#		-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS
#		-DG_DISABLE_CAST_CHECKS

all :				\
	glib-genmarshal.exe     \
	gmarshal.h              \
	gmarshal.c              \
	gobjectalias.h	\
	gobjectaliasdef.c \
	gmarshal.strings \
	gobject-query.exe \
	libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll	\
	gobject-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@s.lib \
	testgobject.exe

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

gobjectalias.h: gobject.symbols
	perl makegobjectalias.pl < gobject.symbols > gobjectalias.h

gobjectaliasdef.c: gobject.symbols
	perl makegobjectalias.pl -def < gobject.symbols > gobjectaliasdef.c

gobject.def: gobject.symbols
	echo EXPORTS > gobject.def
	cl /EP -DINCLUDE_VARIABLES -DG_OS_WIN32 -DALL_FILES \
		-DG_GNUC_MALLOC= -DG_GNUC_CONST= -DG_GNUC_NULL_TERMINATED= -DG_GNUC_NORETURN= \
		-DG_GNUC_PRINTF=;G_GNUC_PRINTF gobject.symbols >> gobject.def

gobject.res : gobject.rc
	rc -DBUILDNUMBER=0 -r -fo gobject.res gobject.rc

gmarshal.h : gmarshal.list glib-genmarshal.exe
	echo #ifndef __G_MARSHAL_H__ > xgen-gmh
	echo #define __G_MARSHAL_H__ >> xgen-gmh
	glib-genmarshal --nostdinc --prefix=g_cclosure_marshal gmarshal.list --header >> xgen-gmh
	echo #endif /* __G_MARSHAL_H__ */ >> xgen-gmh
	copy xgen-gmh gmarshal.h

gmarshal.c: gmarshal.list gmarshal.h glib-genmarshal.exe
	glib-genmarshal --nostdinc --prefix=g_cclosure_marshal gmarshal.list --body > gmarshal.c

libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll : $(gobject_OBJECTS) gobject.def gobject.res
	$(CC) $(CFLAGS) -Fm -LD -Fe$@ $(gobject_OBJECTS) gobject.res \
	..\glib\glib-2.0.lib $(LDFLAGS) /implib:gobject-2.0.lib /def:gobject.def || del $@

gobject-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@s.lib : $(gobject_OBJECTS) 
	lib /out:$@ $(gobject_OBJECTS)

# link glib's static version to avoid installing 
glib-genmarshal.exe : glib-genmarshal.c gmarshal.strings
	$(CC) -Fe$@ $(CFLAGS) -UGOBJECT_COMPILATION glib-genmarshal.c \
	..\glib\glib-@GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@s.lib user32.lib advapi32.lib ole32.lib shell32.lib $(INTL_LIBS) 

gobject-query.exe : gobject-query.c libgobject-2.0-@LT_CURRENT_MINUS_AGE@.dll
	$(CC) -Fe$@ $(CFLAGS) -UGOBJECT_COMPILATION gobject-query.c \
	..\glib\glib-2.0.lib gobject-2.0.lib user32.lib advapi32.lib $(INTL_LIBS)

gmarshal.strings : gmarshal.list
	perl marshal-genstrings.pl > gmarshal.strings

.c.exe :
	$(CC) $(CFLAGS) -c $<
	$(CC) $(CFLAGS) -Fe$@ $< gobject-2.0.lib ..\glib\glib-2.0.lib ..\gmodule\gmodule-2.0.lib $(LDFLAGS) user32.lib /subsystem:console
