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 -Wno-format-truncation $(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 40UNAME:=$(shell uname) 41 42# Some utilities are installed 43INSTALLABLE = \ 44 gif2rgb \ 45 gifbuild \ 46 giffix \ 47 giftext \ 48 giftool \ 49 gifclrmp 50 51# Some utilities are only used internally for testing. 52# There is a parallel list in doc/Makefile. 53# These are all candidates for removal in future releases. 54UTILS = $(INSTALLABLE) \ 55 gifbg \ 56 gifcolor \ 57 gifecho \ 58 giffilter \ 59 gifhisto \ 60 gifinto \ 61 gifsponge \ 62 gifwedge 63 64LDLIBS=libgif.a -lm 65 66MANUAL_PAGES = \ 67 doc/gif2rgb.xml \ 68 doc/gifbuild.xml \ 69 doc/gifclrmp.xml \ 70 doc/giffix.xml \ 71 doc/giflib.xml \ 72 doc/giftext.xml \ 73 doc/giftool.xml 74 75SOEXTENSION = so 76LIBGIFSO = libgif.$(SOEXTENSION) 77LIBGIFSOMAJOR = libgif.$(SOEXTENSION).$(LIBMAJOR) 78LIBGIFSOVER = libgif.$(SOEXTENSION).$(LIBVER) 79LIBUTILSO = libutil.$(SOEXTENSION) 80LIBUTILSOMAJOR = libutil.$(SOEXTENSION).$(LIBMAJOR) 81ifeq ($(UNAME), Darwin) 82SOEXTENSION = dylib 83LIBGIFSO = libgif.$(SOEXTENSION) 84LIBGIFSOMAJOR = libgif.$(LIBMAJOR).$(SOEXTENSION) 85LIBGIFSOVER = libgif.$(LIBVER).$(SOEXTENSION) 86LIBUTILSO = libutil.$(SOEXTENSION) 87LIBUTILSOMAJOR = libutil.$(LIBMAJOR).$(SOEXTENSION) 88endif 89 90all: $(LIBGIFSO) libgif.a $(LIBUTILSO) libutil.a $(UTILS) 91ifeq ($(UNAME), Darwin) 92else 93 $(MAKE) -C doc 94endif 95 96$(UTILS):: libgif.a libutil.a 97 98$(LIBGIFSO): $(OBJECTS) $(HEADERS) 99ifeq ($(UNAME), Darwin) 100 $(CC) $(CFLAGS) -dynamiclib -current_version $(LIBVER) $(OBJECTS) -o $(LIBGIFSO) 101else 102 $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,$(LIBGIFSOMAJOR) -o $(LIBGIFSO) $(OBJECTS) 103endif 104 105libgif.a: $(OBJECTS) $(HEADERS) 106 $(AR) rcs libgif.a $(OBJECTS) 107 108$(LIBUTILSO): $(UOBJECTS) $(UHEADERS) 109ifeq ($(UNAME), Darwin) 110 $(CC) $(CFLAGS) -dynamiclib -current_version $(LIBVER) $(OBJECTS) -o $(LIBUTILSO) 111else 112 $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,$(LIBUTILMAJOR) -o $(LIBUTILSO) $(UOBJECTS) 113endif 114 115libutil.a: $(UOBJECTS) $(UHEADERS) 116 $(AR) rcs libutil.a $(UOBJECTS) 117 118clean: 119 rm -f $(UTILS) $(TARGET) libgetarg.a libgif.a $(LIBGIFSO) libutil.a $(LIBUTILSO) *.o 120 rm -f $(LIBGIFSOVER) 121 rm -f $(LIBGIFSOMAJOR) 122 rm -fr doc/*.1 *.html doc/staging 123 124check: all 125 $(MAKE) -C tests 126 127reflow: 128 @clang-format --style="{IndentWidth: 8, UseTab: ForIndentation}" -i $$(find . -name "*.[ch]") 129 130# Installation/uninstallation 131 132ifeq ($(UNAME), Darwin) 133install: all install-bin install-include install-lib 134else 135install: all install-bin install-include install-lib install-man 136endif 137 138install-bin: $(INSTALLABLE) 139 $(INSTALL) -d "$(DESTDIR)$(BINDIR)" 140 $(INSTALL) $^ "$(DESTDIR)$(BINDIR)" 141install-include: 142 $(INSTALL) -d "$(DESTDIR)$(INCDIR)" 143 $(INSTALL) -m 644 gif_lib.h "$(DESTDIR)$(INCDIR)" 144install-lib: 145 $(INSTALL) -d "$(DESTDIR)$(LIBDIR)" 146 $(INSTALL) -m 644 libgif.a "$(DESTDIR)$(LIBDIR)/libgif.a" 147 $(INSTALL) -m 755 $(LIBGIFSO) "$(DESTDIR)$(LIBDIR)/$(LIBGIFSOVER)" 148 ln -sf $(LIBGIFSOVER) "$(DESTDIR)$(LIBDIR)/$(LIBGIFSOMAJOR)" 149 ln -sf $(LIBGIFSOMAJOR) "$(DESTDIR)$(LIBDIR)/$(LIBGIFSO)" 150install-man: 151 $(INSTALL) -d "$(DESTDIR)$(MANDIR)/man1" 152 $(INSTALL) -m 644 $(MANUAL_PAGES) "$(DESTDIR)$(MANDIR)/man1" 153uninstall: uninstall-man uninstall-include uninstall-lib uninstall-bin 154uninstall-bin: 155 cd "$(DESTDIR)$(BINDIR)" && rm -f $(INSTALLABLE) 156uninstall-include: 157 rm -f "$(DESTDIR)$(INCDIR)/gif_lib.h" 158uninstall-lib: 159 cd "$(DESTDIR)$(LIBDIR)" && \ 160 rm -f libgif.a $(LIBGIFSO) $(LIBGIFSOMAJOR) $(LIBGIFSOVER) 161uninstall-man: 162 cd "$(DESTDIR)$(MANDIR)/man1" && rm -f $(shell cd doc >/dev/null && echo *.1) 163 cd "$(DESTDIR)$(MANDIR)/man7" && rm -f $(shell cd doc >/dev/null && echo *.7) 164 165# Make distribution tarball 166# 167# We include all of the XML, and also generated manual pages 168# so people working from the distribution tarball won't need xmlto. 169 170EXTRAS = README \ 171 NEWS \ 172 TODO \ 173 COPYING \ 174 getversion \ 175 ChangeLog \ 176 build.adoc \ 177 history.adoc \ 178 control \ 179 doc/whatsinagif \ 180 doc/gifstandard \ 181 182DSOURCES = Makefile *.[ch] 183DOCS = doc/*.xml doc/*.1 doc/*.7 doc/*.html doc/index.html.in doc/00README doc/Makefile 184ALL = $(DSOURCES) $(DOCS) tests pic $(EXTRAS) 185giflib-$(VERSION).tar.gz: $(ALL) 186 $(TAR) --transform='s:^:giflib-$(VERSION)/:' -czf giflib-$(VERSION).tar.gz $(ALL) 187giflib-$(VERSION).tar.bz2: $(ALL) 188 $(TAR) --transform='s:^:giflib-$(VERSION)/:' -cjf giflib-$(VERSION).tar.bz2 $(ALL) 189 190dist: giflib-$(VERSION).tar.gz giflib-$(VERSION).tar.bz2 191 192# Auditing tools. 193 194# Check that getversion hasn't gone pear-shaped. 195version: 196 @echo $(VERSION) 197 198# cppcheck should run clean 199cppcheck: 200 cppcheck --quiet --inline-suppr --template gcc --enable=all --suppress=unusedFunction --suppress=missingInclude --force *.[ch] 201 202# Verify the build 203distcheck: all 204 $(MAKE) giflib-$(VERSION).tar.gz 205 tar xzvf giflib-$(VERSION).tar.gz 206 $(MAKE) -C giflib-$(VERSION) 207 rm -fr giflib-$(VERSION) 208 209# release using the shipper tool 210release: all distcheck 211 $(MAKE) -C doc website 212 shipper --no-stale version=$(VERSION) | sh -e -x 213 rm -fr doc/staging 214 215# Refresh the website 216refresh: all 217 $(MAKE) -C doc website 218 shipper --no-stale -w version=$(VERSION) | sh -e -x 219 rm -fr doc/staging 220