glib/makefile.cygwin.in

234 lines
7.0 KiB
Plaintext
Raw Normal View History

## 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. Should work for both
# gcc running on cygwin, and bare mingw gcc, even if the make is
# running on cygwin (whew).
WIN32APIHEADERS = $(shell echo "\#include <winver.h>" | $(CC) -M -E - | tail -1 | sed -e 's![\\/]winver.h!!' | tr -d '\015')
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.stamp >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.rc >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.stamp >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/gmodule.rc >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.stamp >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/gthread.rc >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 $< >$@