## Makefile for building the GLib, gmodule and gthread DLLs with ## gcc on cygwin or mingw32. ## Use: make -f makefile.cygwin install # Change this to wherever you want to install the DLLs. This directory # should be in your PATH. BIN = /bin # This is the location of pthreads for Win32, # see http://sourceware.cygnus.com/pthreads-win32/ # We want the 1999-05-30 snapshot. PTHREADS = ../pthreads-snap-1999-05-30 PTHREAD_LIB = -L$(PTHREADS) -lpthread32 PTHREAD_INC = -I $(PTHREADS) OPTIMIZE = -g -O ################################################################ # Nothing much configurable below CC = gcc -mno-cygwin -mpentium -fnative-struct DLLTOOL = dlltool INSTALL = install GLIB_VER = @GLIB_MAJOR_VERSION@.@GLIB_MINOR_VERSION@ CFLAGS = $(OPTIMIZE) -I. -DHAVE_CONFIG_H # Kludge to get the path to the win32 headers WIN32APIHEADERS = $(shell echo "\#include " | $(CC) -M -E - | tail -1 | sed -e 's!/winver.h!!') all : \ config.h \ glibconfig.h \ glib-$(GLIB_VER).dll \ gmodule/gmoduleconf.h \ gmodule-$(GLIB_VER).dll \ gthread-$(GLIB_VER).dll \ testglib.exe \ testgmodule.exe \ testgdate.exe \ testgdateparser.exe install : all $(INSTALL) glib-$(GLIB_VER).dll $(BIN) $(INSTALL) gmodule-$(GLIB_VER).dll $(BIN) $(INSTALL) gthread-$(GLIB_VER).dll $(BIN) glib_OBJECTS = \ garray.o \ gcache.o \ gcompletion.o \ gdataset.o \ gdate.o \ gerror.o \ ghook.o \ ghash.o \ giochannel.o \ giowin32.o \ glist.o \ gmain.o \ gmem.o \ gmessages.o \ gnode.o \ gprimes.o \ gqueue.o \ grand.o \ gslist.o \ gthread.o \ gtimer.o \ gtree.o \ grel.o \ gstring.o \ gstrfuncs.o \ gscanner.o \ gutils.o \ gwin32.o \ glib-win32res.o glibconfig.h: glibconfig.h.win32 cp glibconfig.h.win32 glibconfig.h config.h: config.h.win32 cp config.h.win32 config.h ################ glib # The *.stamp files aren't distributed. Thus, this takes care of only # tml building libraries with nonzero build number. ifeq ($(wildcard glib-build.stamp),glib-build.stamp) # Bump the build number glib-build.tmp : bash -c "read number && echo $$[number+1]" glib-build.tmp cp glib-build.tmp glib-build.stamp else # Use zero as build number. glib-build.tmp : echo 0 >glib-build.tmp endif glib-win32res.o : glib.rc glib-build.tmp m4 -DBUILDNUMBER=`cat glib-build.tmp` glib-win32res.rc windres --include-dir $(WIN32APIHEADERS) glib-win32res.rc glib-win32res.o rm glib-build.tmp glib-win32res.rc glib-$(GLIB_VER).dll : $(glib_OBJECTS) glib.def ./build-dll glib $(GLIB_VER) glib.def $(glib_OBJECTS) -luser32 -lwsock32 ################ gmodule gmodule_OBJECTS = \ gmodule.o \ gmodule-win32res.o # Unfortunately I couldn't use a pattern rule for this, so copy-paste # from above. ifeq ($(wildcard glib-build.stamp),glib-build.stamp) gmodule-build.tmp : bash -c "read number && echo $$[number+1]" gmodule-build.tmp cp gmodule-build.tmp gmodule-build.stamp else gmodule-build.tmp : echo 0 >gmodule-build.tmp endif gmodule-win32res.o : gmodule/gmodule.rc gmodule-build.tmp m4 -DBUILDNUMBER=`cat gmodule-build.tmp` gmodule-win32res.rc windres --include-dir $(WIN32APIHEADERS) gmodule-win32res.rc gmodule-win32res.o rm gmodule-build.tmp gmodule-win32res.rc gmodule-$(GLIB_VER).dll : $(gmodule_OBJECTS) gmodule/gmodule.def ./build-dll gmodule $(GLIB_VER) gmodule/gmodule.def $(gmodule_OBJECTS) -L. -lglib-$(GLIB_VER) -lwsock32 gmodule.o : gmodule/gmodule.c gmodule/gmodule-win32.c $(CC) $(CFLAGS) -Igmodule -c -DG_LOG_DOMAIN=g_log_domain_gmodule gmodule/gmodule.c gmodule/gmoduleconf.h: gmodule/gmoduleconf.h.win32 cp gmodule/gmoduleconf.h.win32 gmodule/gmoduleconf.h ################ gthread gthread_OBJECTS = \ gthread-impl.o \ gthread-win32res.o # Ditto copy-pasting ifeq ($(wildcard glib-build.stamp),glib-build.stamp) gthread-build.tmp : bash -c "read number && echo $$[number+1]" gthread-build.tmp cp gthread-build.tmp gthread-build.stamp else gthread-build.tmp : echo 0 >gthread-build.tmp endif gthread-win32res.o : gthread/gthread.rc gthread-build.tmp m4 -DBUILDNUMBER=`cat gthread-build.tmp` gthread-win32res.rc windres --include-dir $(WIN32APIHEADERS) gthread-win32res.rc gthread-win32res.o rm gthread-build.tmp gthread-win32res.rc gthread-$(GLIB_VER).dll : $(gthread_OBJECTS) glib-$(GLIB_VER).dll gthread/gthread.def ./build-dll gthread $(GLIB_VER) gthread/gthread.def $(gthread_OBJECTS) -L. -lglib-$(GLIB_VER) $(PTHREAD_LIB) gthread-impl.o : gthread/gthread-impl.c gthread/gthread-posix.c $(CC) $(CFLAGS) $(PTHREAD_INC) -DG_LOG_DOMAIN=\"GThread\" -c gthread/gthread-impl.c ################ test progs testglib.exe : glib-$(GLIB_VER).dll testglib.o $(CC) $(CFLAGS) -o testglib testglib.o -L. -lglib-$(GLIB_VER) $(LDFLAGS) testglib.o : testglib.c $(CC) -c $(CFLAGS) testglib.c testgdate.exe : glib-$(GLIB_VER).dll testgdate.o $(CC) $(CFLAGS) -o testgdate.exe testgdate.o -L. -lglib-$(GLIB_VER) $(LDFLAGS) testgdate.o : testgdate.c $(CC) -c $(CFLAGS) testgdate.c testgdateparser.exe : glib-$(GLIB_VER).dll testgdateparser.o $(CC) $(CFLAGS) -o testgdateparser.exe testgdateparser.o -L. -lglib-$(GLIB_VER) $(LDFLAGS) testgdateparser.o : testgdateparser.c $(CC) -c $(CFLAGS) testgdateparser.c testgmodule.exe : glib-$(GLIB_VER).dll gmodule-$(GLIB_VER).dll testgmodule.o libgplugin_a.dll libgplugin_b.dll # Wow, do we really have to do it like this to get some symbols # exported from a .exe? Apparently yes. Does the __declspec(dllexport) # actually do anything in egcs-1.1.2? $(CC) $(CFLAGS) -Wl,--base-file,testgmodule.base -o testgmodule.exe testgmodule.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) $(LDFLAGS) $(DLLTOOL) --base-file testgmodule.base --output-exp testgmodule.exp testgmodule.o $(CC) $(CFLAGS) -Wl,--base-file,testgmodule.base,testgmodule.exp -o testgmodule.exe testgmodule.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) $(LDFLAGS) $(DLLTOOL) --base-file testgmodule.base --output-exp testgmodule.exp testgmodule.o $(CC) $(CFLAGS) -Wl,testgmodule.exp -o testgmodule.exe testgmodule.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) $(LDFLAGS) testgmodule.o : gmodule/testgmodule.c $(CC) $(CFLAGS) -Igmodule -c gmodule/testgmodule.c libgplugin_a.dll : libgplugin_a.o ./build-dll libgplugin_a - - libgplugin_a.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) libgplugin_a.o : gmodule/libgplugin_a.c $(CC) $(CFLAGS) -Igmodule -c gmodule/libgplugin_a.c libgplugin_b.dll : libgplugin_b.o ./build-dll libgplugin_b - - libgplugin_b.o -L. -lglib-$(GLIB_VER) -lgmodule-$(GLIB_VER) libgplugin_b.o : gmodule/libgplugin_b.c $(CC) $(CFLAGS) -Igmodule -c gmodule/libgplugin_b.c ################ other stuff clean: -rm config.h glibconfig.h gmodule/gmoduleconf.h -rm *.exe *.o *.dll *.a *.base *.exp .SUFFIXES: .c .o .i .c.o : $(CC) $(CFLAGS) -c -DGLIB_COMPILATION -DG_LOG_DOMAIN=g_log_domain_glib $< .c.i : $(CC) $(CFLAGS) -E -DGLIB_COMPILATION -DG_LOG_DOMAIN=g_log_domain_glib $< >$@