# autogenerated from automake.am with automake.py
TOP = ..\..
PRJ_TOP = ..
PACKAGE = gio
PKG_VER = 2.0
!INCLUDE $(TOP)\glib\build\win32\make.msc

SUBDIRS = win32

sub-all: 
	for %d in ($(SUBDIRS)) do nmake -nologo -f makefile.msc sub-one THIS=%d

sub-one:
	cd $(THIS)
	nmake -nologo -f makefile.msc
	cd ..

INCLUDES = \
	-FImsvc_recommended_pragmas.h \
	-I .. -I ..\glib -I ..\gmodule -I . \
	$(INTL_CFLAGS)

DEFINES = \
	-DG_LOG_DOMAIN=\"GLib-GIO\" \
	-DGIO_MODULE_DIR=\"$(libdir)/gio/modules\" \
	-DGIO_COMPILATION

appinfo_sources = \
	gwin32appinfo.c gwin32appinfo.h

gio_headers =			\
	gappinfo.h 		\
	gasyncresult.h 		\
	gbufferedinputstream.h 	\
	gbufferedoutputstream.h \
	gcancellable.h 		\
	gcontenttype.h 		\
	gdatainputstream.h 	\
	gdataoutputstream.h 	\
	gdrive.h 		\
	gemblem.h		\
	gemblemedicon.h		\
	gfile.h 		\
	gfileattribute.h 	\
	gfileenumerator.h 	\
	gfileicon.h 		\
	gfileinfo.h 		\
	gfileinputstream.h 	\
	gfilemonitor.h 		\
	gfilenamecompleter.h 	\
	gfileoutputstream.h 	\
	gfilterinputstream.h 	\
	gfilteroutputstream.h 	\
	gicon.h 		\
	ginputstream.h 		\
	gio.h			\
	giotypes.h		\
	gioenums.h		\
	gioerror.h 		\
	giomodule.h 		\
	gioscheduler.h 		\
	gloadableicon.h 	\
	gmount.h 		\
	gmemoryinputstream.h 	\
	gmemoryoutputstream.h 	\
	gmountoperation.h 	\
	gnativevolumemonitor.h 	\
	goutputstream.h 	\
	gseekable.h 		\
	gsimpleasyncresult.h 	\
	gthemedicon.h 		\
	gvfs.h 			\
	gvolume.h 		\
	gvolumemonitor.h 	\
	$(NULL)

OBJECTS = \
	gappinfo.obj \
	gasynchelper.obj \
	gasyncinitable.obj \
	gasyncresult.obj \
	gbufferedinputstream.obj \
	gbufferedoutputstream.obj \
	gcancellable.obj \
	gcontenttype.obj \
	gdatainputstream.obj \
	gdataoutputstream.obj \
#	gdesktopappinfo.obj \
	gdrive.obj \
	gdummyfile.obj \
	gemblem.obj \
	gemblemedicon.obj \
	gfile.obj \
	gfileattribute.obj \
	gfileenumerator.obj \
	gfileicon.obj \
	gfileinfo.obj \
	gfileinputstream.obj \
	gfileiostream.obj \
	gfilemonitor.obj \
	gfilenamecompleter.obj \
	gfileoutputstream.obj \
	gfilterinputstream.obj \
	gfilteroutputstream.obj \
	gicon.obj \
	ginetaddress.obj \
	ginetsocketaddress.obj \
	ginitable.obj \
	ginputstream.obj \
	gioenumtypes.obj \
	gioerror.obj \
	giomodule.obj \
	gioscheduler.obj \
	giostream.obj \
	gloadableicon.obj \
	glocalfileiostream.obj \
	gmemoryinputstream.obj \
	gmemoryoutputstream.obj \
	gmount.obj \
	gmountoperation.obj \
	gnativevolumemonitor.obj \
	gnetworkaddress.obj \
	gnetworkservice.obj \
	goutputstream.obj \
	gpollfilemonitor.obj \
	gresolver.obj \
	gseekable.obj \
	gsimpleasyncresult.obj \
	gsocket.obj \
	gsocketaddress.obj \
	gsocketaddressenumerator.obj \
	gsocketclient.obj \
	gsocketconnectable.obj \
	gsocketconnection.obj \
	gsocketcontrolmessage.obj \
	gsocketlistener.obj \
	gsocketservice.obj \
	gsocketinputstream.obj \
	gsocketoutputstream.obj \
	gsrvtarget.obj \
	gtcpconnection.obj \
	gthreadedresolver.obj \
	gthreadedsocketservice.obj \
	gthemedicon.obj \
	gunionvolumemonitor.obj \
	gvfs.obj \
	gvolume.obj \
	gvolumemonitor.obj \
	\
	glocalvfs.obj \
	glocalfile.obj \
	glocalfileenumerator.obj \
	glocalfileinfo.obj \
	glocalfileinputstream.obj \
	glocalfileoutputstream.obj \
	glocalfilemonitor.obj \
	glocaldirectorymonitor.obj \
	gwin32appinfo.obj \
	\
	gio-marshal.obj \
	gwin32mount.obj \
	gwin32volumemonitor.obj \
	gwin32resolver.obj 

libgio_2_0_la_LIBADD = \
	$(top_builddir)/glib/libglib-2.0.la \
	$(top_builddir)/gobject/libgobject-2.0.la \
	$(top_builddir)/gmodule/libgmodule-2.0.la \
	$(platform_libadd) \
	$(SELINUX_LIBS) \
	$(GLIB_LIBS) \
	$(XATTR_LIBS) \
	$(NULL)

unix_sources = \
	gunixdrive.c \
	gunixdrive.h \
	gunixmounts.c \
	gunixmounts.h \
	gunixvolume.c \
	gunixvolume.h \
	gunixvolumemonitor.c \
	gunixvolumemonitor.h \
	$(NULL)

marshal_sources = \
	gio-marshal.h gio-marshal.c $(NULL)

GLIB_GEN_MARSHAL = ..\gobject\glib-genmarshal.exe 

gio-marshal.h: gio-marshal.list
	$(GLIB_GEN_MARSHAL) --prefix=_gio_marshal gio-marshal.list --header >> xgen-gwmh \
	&& copy /y xgen-gwmh gio-marshal.h \
	&& del xgen-gwmh xgen-gwmh~

gio-marshal.c: gio-marshal.h
	echo #include "gio-marshal.h" >> xgen-gwmc \
	&& $(GLIB_GEN_MARSHAL) --prefix=_gio_marshal gio-marshal.list --body >> xgen-gwmc \
	&& copy xgen-gwmc gio-marshal.c \
	&& del xgen-gwmc xgen-gwmc~

local_sources = \
	glocaldirectorymonitor.c \
	glocaldirectorymonitor.h \
	glocalfile.c \
	glocalfile.h \
	glocalfileenumerator.c \
	glocalfileenumerator.h \
	glocalfileinfo.c \
	glocalfileinfo.h \
	glocalfileinputstream.c \
	glocalfileinputstream.h \
	glocalfilemonitor.c \
	glocalfilemonitor.h \
	glocalfileoutputstream.c \
	glocalfileoutputstream.h \
	glocalvfs.c \
	glocalvfs.h \
	$(NULL)

all : \
	$(PRJ_TOP)\config.h \
	sub-all	\
	gioalias.h		\
	gioaliasdef.c		\
	gio-marshal.c \
	gioenumtypes.h		\
	gioenumtypes.c		\
	libgio-$(PKG_VER)-0.dll


$(PRJ_TOP)\config.h: $(PRJ_TOP)\config.h.win32
	copy $(PRJ_TOP)\config.h.win32 $(PRJ_TOP)\config.h

gioalias.h: gio.symbols
	perl ..\glib\makegalias.pl < gio.symbols > gioalias.h

gioaliasdef.c: gio.symbols
	  perl ..\glib\makegalias.pl -def < gio.symbols > gioaliasdef.c

gioenumtypes.h: $(gio_headers) gioenumtypes.h.template
	$(PERL) ..\gobject\glib-mkenums --template gioenumtypes.h.template $(gio_headers) > gioenumtypes.h
	
gioenumtypes.c: $(gio_headers) gioenumtypes.c.template
	$(PERL) ..\gobject\glib-mkenums --template gioenumtypes.c.template $(gio_headers) > gioenumtypes.c

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

RESOURCE = $(PACKAGE).res

$(PACKAGE).res : $(PACKAGE).rc
	rc -DBUILDNUMBER=0 -r -fo $(PACKAGE).res $(PACKAGE).rc

libgio-$(PKG_VER)-0.dll : $(OBJECTS) win32\giowin32.lib $(PACKAGE).def $(RESOURCE)
	$(CC) $(CFLAGS) -LD -Felibgio-$(PKG_VER)-0.dll $(OBJECTS) $(RESOURCE) \
	..\glib\glib-2.0.lib ..\gobject\gobject-2.0.lib ..\gmodule\gmodule-2.0.lib \
	win32\giowin32.lib \
	$(INTL_LIBS) \
	kernel32.lib user32.lib advapi32.lib shell32.lib wsock32.lib ws2_32.lib dnsapi.lib mpr.lib $(LDFLAGS) \
	/implib:gio-2.0.lib /def:$(PACKAGE).def

.c.obj :
	$(CC) $(CFLAGS) -c $(PKG_CFLAGS) $<
