## Makefile for building the GLib 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 .. 
DEFINES = -DHAVE_CONFIG_H -DGLIB_COMPILATION -DG_LOG_DOMAIN=\"GLib\" -DG_ENABLE_DEBUG -DDLL_EXPORT
DEPCFLAGS = $(INTL_CFLAGS) $(LIBICONV_CFLAGS)

all :				\
	../config.h		\
	../glibconfig.h		\
	libglib-2.0.a \
	gspawn-win32-helper.exe

glib_OBJECTS =			\
	garray.o		\
	gasyncqueue.o		\
	gbacktrace.o		\
	gbsearcharray.o		\
	gcache.o		\
	gcompletion.o		\
	gconvert.o		\
	gdataset.o		\
	gdate.o			\
	gdir.o			\
	gerror.o		\
	gfileutils.o		\
	ghash.o			\
	ghook.o			\
	giochannel.o		\
	giowin32.o		\
	glist.o			\
	gmain.o			\
	gmarkup.o		\
	gmem.o			\
	gmessages.o		\
	gnode.o			\
	gpattern.o		\
	gprimes.o		\
	gqsort.o		\
	gqueue.o		\
	grand.o			\
	grel.o			\
	gscanner.o		\
	gshell.o		\
	gslist.o		\
	gspawn-win32.o		\
	gstrfuncs.o		\
	gstring.o		\
	gthread.o		\
	gthreadpool.o		\
	gtimer.o		\
	gtree.o			\
	gunibreak.o		\
	gunicollate.o		\
	gunidecomp.o		\
	guniprop.o		\
	gutf8.o			\
	gutils.o		\
	gwin32.o		\
	localcharset.o

../glibconfig.h: ../glibconfig.h.win32
	cp $< $@

../config.h: ../config.h.win32
	cp $< $@

localcharset.c : libcharset/localcharset.c
	cp $< $@

################ The glib DLL

libglib-2.0.a : $(glib_OBJECTS) glib.def glib-2.0.rc
	$(BUILD_DLL) glib-2.0 @LT_CURRENT@:@LT_REVISION@:@LT_AGE@ glib.def $(glib_OBJECTS) $(INTL_LIBS) $(LIBICONV_LIBS) -luser32 -lwsock32

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

gspawn-win32-helper.exe : gspawn-win32-helper.c
	$(CC) $(CFLAGS) -mwindows -DG_LOG_DOMAIN=\"gspawn-win32-helper\" -o $@ $< -L . -lglib-2.0
