# 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 \
	gdatagrambased.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	\
	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

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) $<
