1# Simple makefile for building and testing libgd under MSYS/MinGW on
2# Windows
3
4
5# The version
6LIBVER=3.0.1
7
8# Misc. config flags.
9CDEFS=-DHAVE_ICONV -DHAVE_ICONV_H		\
10-DHAVE_ICONV_T_DEF -DHAVE_INTTYPES_H	\
11-DHAVE_STDINT_H -DHAVE_VISIBILITY -DICONV_CONST \
12-DENABLE_GD_FORMATS=1
13
14# GnuWin32 libs should all be installed in one place.
15GNUDIR=/c/tools/GnuWin32
16GNUINC=-I$(GNUDIR)/include
17GNULIB=-L$(GNUDIR)/lib
18GNUDLL=$(GNUDIR)/bin/
19
20# Various optional components.  Comment-out the ones you don't have
21# and edit the paths and options as needed if you do.  The default
22# assumes GnuWin32 packages installed in /c/Program Files/GnuWin32.
23JPEG_D=-DHAVE_LIBJPEG
24JPEG_L=-ljpeg
25JPEG_I=$(GNUINC)
26JPEG_LIBDIR=$(GNULIB)
27JPEG_DLLDIR=$(GNUDLL)
28
29PNG_D=-DHAVE_LIBPNG
30PNG_L=-lpng
31PNG_I=				#$(GNUINC)
32PNG_LIBDIR=			#$(GNULIB)
33PNG_DLLDIR=			#$(GNUDLL)
34
35TIFF_D=-DHAVE_LIBTIFF
36TIFF_L=-ltiff
37TIFF_I=				#$(GNUINC)
38TIFF_LIBDIR=		#$(GNULIB)
39TIFF_DLLDIR=		#$(GNUDLL)
40
41LIBZ_D=-DHAVE_LIBZ
42LIBZ_L=-lz
43LIBZ_I=				#$(GNUINC)
44LIBZ_LIBDIR=		#$(GNULIB)
45LIBZ_DLLDIR=		#$(GNUDLL)
46
47# LIBXPM_D=-DHAVE_LIBXPM
48# LIBXPM_L=-lxpm
49# LIBXPM_I=			#$(GNUINC)
50# LIBXPM_LIBDIR=		#$(GNULIB)
51
52FREETYPE_D=-DHAVE_LIBFREETYPE -DHAVE_FT2BUILD_H
53FREETYPE_L=-lfreetype
54FREETYPE_I=$(GNUINC)/freetype2/
55FREETYPE_LIBDIR=	#$(GNULIB)
56FREETYPE_DLLDIR=	#$(GNUDLL)
57
58# FONTCONFIG_D=-DHAVE_LIBFONTCONFIG
59# FONTCONFIG_L=
60# FONTCONFIG_I=
61# FONTCONFIG_LIBDIR=
62
63ALL_D=$(FREETYPE_D) $(JPEG_D) $(PNG_D) $(TIFF_D) $(LIBZ_D) $(LIBXPM_D)
64ALL_L=$(FREETYPE_L) $(JPEG_L) $(PNG_L) $(TIFF_L) $(LIBZ_L) $(LIBXPM_L)
65ALL_I=$(FREETYPE_I) $(JPEG_I) $(PNG_I) $(TIFF_I) $(LIBZ_I) $(LIBXPM_I)
66ALL_LIBDIR=$(FREETYPE_LIBDIR) $(JPEG_LIBDIR) $(PNG_LIBDIR) $(TIFF_LIBDIR) \
67	$(LIBZ_LIBDIR) $(LIBXPM_LIBDIR)
68ALL_DLLDIR=$(FREETYPE_DLLDIR) $(JPEG_DLLDIR) $(PNG_DLLDIR) $(TIFF_DLLDIR) \
69	$(LIBZ_DLLDIR) $(LIBXPM_DLLDIR)
70
71# We need libiconv for internationalization.  We default to static
72# linking because that reduces the number of dependencies.  However,
73# libiconv is released under the GNU GPL which may impose extra
74# restrictions on redistribution.
75LIBICONV=/c/MinGW/lib/libiconv.a
76#LIBICONV=-liconv
77
78
79DEFS=$(CDEFS) $(ALL_D)
80INCLUDES=$(ALL_I)
81
82CC=gcc
83CFLAGS=-g -O2 -I. -std=gnu99 -fvisibility=hidden -static-libgcc \
84	-D_WIN32 -DBGDWIN32 $(DEFS) $(INCLUDES)
85
86LD=gcc
87LDFLAGS=-g -O2 -fvisibility=hidden -static-libgcc $(ALL_LIBDIR)
88LIBS=$(ALL_L) $(LIBICONV)
89
90ZIP=zip -j9
91DIST=libgd-win.zip
92
93# Get this list from c files in libgd_la_SOURCES in Makefile.mk
94SRC=gd.c gd_color.c gd_color_map.c gd_transform.c gdfx.c			\
95gd_security.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_gif_in.c		\
96gd_gif_out.c gd_io_file.c gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c		\
97gd_topal.c gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c		\
98gdfonts.c gdfontt.c gdft.c gdhelpers.c gdkanji.c gdtables.c gdxpm.c	\
99wbmp.c gd_filter.c gd_nnquant.c gd_rotate.c gd_matrix.c				\
100gd_interpolation.c gd_crop.c gd_webp.c gd_tiff.c gd_tga.c			\
101gd_bmp.c gd_xbm.c gd_color_match.c gd_version.c gd_filename.c
102
103OBJ=$(SRC:.c=.o)
104
105TARGETBASE=libgd
106TARGET=$(TARGETBASE).dll
107TARGET_A=$(TARGETBASE).a
108
109all:
110	(cd ../../src; make -f ../windows/msys/Makefile $(TARGET))
111
112# BUG: this sucks in all the DLLs in the lib installation directory,
113# including those you may not need.
114dist: all
115	(cd ../..; $(ZIP) $(DIST) src/*.dll src/*.a $$(for d in $(ALL_DLLDIR); do echo $$d/*.dll; done | sort -u) )
116
117
118clean:
119	-rm ../../$(DIST)
120	(cd ../../src; rm -f *.dll *.a $(OBJ) deps.mk; true)
121
122check: all
123	bash run_tests.sh "$(GNUDIR)/bin" "$(INCLUDES)"
124
125deps.mk:
126	[ -f gd.h ] # Sanity check: we're in src/, right?
127	gcc -MM $(DEFS) $(INCLUDES) $(SRC) > deps.mk
128
129$(TARGET): $(OBJ)
130	gcc -shared -o $(TARGET) $(LDFLAGS) -Wl,--out-implib,$(TARGET_A) \
131		$(OBJ) $(LIBS)
132
133include deps.mk
134