1# Top-level Unix makefile for the GIFLIB package
2# Should work for all Unix versions
3#
4# If your platform has the OpenBSD reallocarray(3) call, you may
5# add -DHAVE_REALLOCARRAY to CFLAGS to use that, saving a bit
6# of code space in the shared library.
7
8#
9OFLAGS = -O0 -g
10OFLAGS  = -O2
11CFLAGS  = -std=gnu99 -fPIC -Wall $(OFLAGS)
12
13SHELL = /bin/sh
14TAR = tar
15INSTALL = install
16
17PREFIX = /usr/local
18BINDIR = $(PREFIX)/bin
19INCDIR = $(PREFIX)/include
20LIBDIR = $(PREFIX)/lib
21MANDIR = $(PREFIX)/share/man
22
23# No user-serviceable parts below this line
24
25VERSION:=$(shell ./getversion)
26LIBMAJOR=7
27LIBMINOR=2
28LIBPOINT=0
29LIBVER=$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT)
30
31SOURCES = dgif_lib.c egif_lib.c gifalloc.c gif_err.c gif_font.c \
32	gif_hash.c openbsd-reallocarray.c
33HEADERS = gif_hash.h  gif_lib.h  gif_lib_private.h
34OBJECTS = $(SOURCES:.c=.o)
35
36USOURCES = qprintf.c quantize.c getarg.c
37UHEADERS = getarg.h
38UOBJECTS = $(USOURCES:.c=.o)
39
40# Some utilities are installed
41INSTALLABLE = \
42	gif2rgb \
43	gifbuild \
44	giffix \
45	giftext \
46	giftool \
47	gifclrmp
48
49# Some utilities are only used internally for testing.
50# There is a parallel list in doc/Makefile.
51# These are all candidates for removal in future releases.
52UTILS = $(INSTALLABLE) \
53	gifbg \
54	gifcolor \
55	gifecho \
56	giffilter \
57	gifhisto \
58	gifinto \
59	gifsponge \
60	gifwedge
61
62LDLIBS=-Wl,-rpath -Wl,$(LIBDIR) -lm
63
64all: libgif.so libgif.a libutil.so libutil.a $(UTILS)
65	$(MAKE) -C doc
66
67$(UTILS):: libgif.so libutil.a
68
69libgif.so.$(LIBVER): $(OBJECTS) $(HEADERS)
70	$(CC) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o $@ $(OBJECTS)
71
72libgif.so.$(LIBMAJOR): libgif.so.$(LIBVER)
73	ln -s $< $@
74
75libgif.so: libgif.so.$(LIBMAJOR)
76	ln -s $< $@
77
78libgif.a: $(OBJECTS) $(HEADERS)
79	$(AR) rcs libgif.a $(OBJECTS)
80
81libutil.so: $(UOBJECTS) $(UHEADERS)
82	$(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS)
83
84libutil.a: $(UOBJECTS) $(UHEADERS)
85	$(AR) rcs libutil.a $(UOBJECTS)
86
87clean:
88	rm -f $(UTILS) $(TARGET) libgetarg.a libgif.a libgif.so libutil.a libutil.so *.o
89	rm -f libgif.so.$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT)
90	rm -f libgif.so.$(LIBMAJOR)
91	rm -fr doc/*.1 *.html doc/staging
92
93check: all
94	$(MAKE) -C tests
95
96# Installation/uninstallation
97
98install: all install-bin install-include install-lib install-man
99install-bin: $(INSTALLABLE)
100	$(INSTALL) -d "$(DESTDIR)$(BINDIR)"
101	$(INSTALL) $^ "$(DESTDIR)$(BINDIR)"
102install-include:
103	$(INSTALL) -d "$(DESTDIR)$(INCDIR)"
104	$(INSTALL) -m 644 gif_lib.h "$(DESTDIR)$(INCDIR)"
105install-lib:
106	$(INSTALL) -d "$(DESTDIR)$(LIBDIR)"
107	$(INSTALL) -m 644 libgif.a "$(DESTDIR)$(LIBDIR)/libgif.a"
108	$(INSTALL) -m 755 libgif.so.$(LIBVER) "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBVER)"
109	ln -sf libgif.so.$(LIBVER) "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBMAJOR)"
110	ln -sf libgif.so.$(LIBMAJOR) "$(DESTDIR)$(LIBDIR)/libgif.so"
111install-man:
112	$(INSTALL) -d "$(DESTDIR)$(MANDIR)/man1"
113	$(INSTALL) -m 644 doc/*.1 "$(DESTDIR)$(MANDIR)/man1"
114uninstall: uninstall-man uninstall-include uninstall-lib uninstall-bin
115uninstall-bin:
116	cd "$(DESTDIR)$(BINDIR)" && rm -f $(INSTALLABLE)
117uninstall-include:
118	rm -f "$(DESTDIR)$(INCDIR)/gif_lib.h"
119uninstall-lib:
120	cd "$(DESTDIR)$(LIBDIR)" && \
121		rm -f libgif.a libgif.so libgif.so.$(LIBMAJOR) libgif.so.$(LIBVER)
122uninstall-man:
123	cd "$(DESTDIR)$(MANDIR)/man1" && rm -f $(shell cd doc >/dev/null && echo *.1)
124
125# Make distribution tarball
126#
127# We include all of the XML, and also generated manual pages
128# so people working from the distribution tarball won't need xmlto.
129
130EXTRAS =     README \
131	     NEWS \
132	     TODO \
133	     COPYING \
134	     getversion \
135	     ChangeLog \
136	     build.adoc \
137	     history.adoc \
138	     control \
139	     doc/whatsinagif \
140	     doc/gifstandard \
141
142DSOURCES = Makefile *.[ch]
143DOCS = doc/*.xml doc/*.1 doc/*.html doc/index.html.in doc/00README doc/Makefile
144ALL =  $(DSOURCES) $(DOCS) tests pic $(EXTRAS)
145giflib-$(VERSION).tar.gz: $(ALL)
146	$(TAR) --transform='s:^:giflib-$(VERSION)/:' -czf giflib-$(VERSION).tar.gz $(ALL)
147giflib-$(VERSION).tar.bz2: $(ALL)
148	$(TAR) --transform='s:^:giflib-$(VERSION)/:' -cjf giflib-$(VERSION).tar.bz2 $(ALL)
149
150dist: giflib-$(VERSION).tar.gz giflib-$(VERSION).tar.bz2
151
152# Auditing tools.
153
154# Check that getversion hasn't gone pear-shaped.
155version:
156	@echo $(VERSION)
157
158# cppcheck should run clean
159cppcheck:
160	cppcheck --inline-suppr --template gcc --enable=all --suppress=unusedFunction --force *.[ch]
161
162# Verify the build
163distcheck: all
164	$(MAKE) giflib-$(VERSION).tar.gz
165	tar xzvf giflib-$(VERSION).tar.gz
166	$(MAKE) -C giflib-$(VERSION)
167	rm -fr giflib-$(VERSION)
168
169# release using the shipper tool
170release: all distcheck
171	$(MAKE) -C doc website
172	shipper --no-stale version=$(VERSION) | sh -e -x
173	rm -fr doc/staging
174
175# Refresh the website
176refresh: all
177	$(MAKE) -C doc website
178	shipper --no-stale -w version=$(VERSION) | sh -e -x
179	rm -fr doc/staging
180