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