5 kx # Top-level Unix makefile for the GIFLIB package
5 kx # Should work for all Unix versions
5 kx #
5 kx # If your platform has the OpenBSD reallocarray(3) call, you may
5 kx # add -DHAVE_REALLOCARRAY to CFLAGS to use that, saving a bit
5 kx # of code space in the shared library.
5 kx
5 kx #
5 kx OFLAGS = -O0 -g
5 kx OFLAGS = -O2
5 kx CFLAGS = -std=gnu99 -fPIC -Wall -Wno-format-truncation $(OFLAGS)
5 kx
5 kx SHELL = /bin/sh
5 kx TAR = tar
5 kx INSTALL = install
5 kx
5 kx PREFIX = /usr/local
5 kx BINDIR = $(PREFIX)/bin
5 kx INCDIR = $(PREFIX)/include
5 kx LIBDIR = $(PREFIX)/lib
5 kx MANDIR = $(PREFIX)/share/man
5 kx
5 kx # No user-serviceable parts below this line
5 kx
5 kx VERSION:=$(shell ./getversion)
5 kx LIBMAJOR=7
5 kx LIBMINOR=2
5 kx LIBPOINT=0
5 kx LIBVER=$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT)
5 kx
5 kx SOURCES = dgif_lib.c egif_lib.c gifalloc.c gif_err.c gif_font.c \
5 kx gif_hash.c openbsd-reallocarray.c
5 kx HEADERS = gif_hash.h gif_lib.h gif_lib_private.h
5 kx OBJECTS = $(SOURCES:.c=.o)
5 kx
5 kx USOURCES = qprintf.c quantize.c getarg.c
5 kx UHEADERS = getarg.h
5 kx UOBJECTS = $(USOURCES:.c=.o)
5 kx
5 kx # Some utilities are installed
5 kx INSTALLABLE = \
5 kx gif2rgb \
5 kx gifbuild \
5 kx giffix \
5 kx giftext \
5 kx giftool \
5 kx gifclrmp
5 kx
5 kx # Some utilities are only used internally for testing.
5 kx # There is a parallel list in doc/Makefile.
5 kx # These are all candidates for removal in future releases.
5 kx UTILS = $(INSTALLABLE) \
5 kx gifbg \
5 kx gifcolor \
5 kx gifecho \
5 kx giffilter \
5 kx gifhisto \
5 kx gifinto \
5 kx gifsponge \
5 kx gifwedge
5 kx
5 kx LDLIBS=libgif.a -lm
5 kx
5 kx all: libgif.so libgif.a libutil.so libutil.a $(UTILS)
5 kx $(MAKE) -C doc
5 kx
5 kx $(UTILS):: libgif.a libutil.a
5 kx
5 kx libgif.so: $(OBJECTS) $(HEADERS) $(UOBJECTS)
5 kx $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libgif.so.$(LIBMAJOR) -o libgif.so $(OBJECTS) $(UOBJECTS)
5 kx
5 kx libgif.a: $(OBJECTS) $(HEADERS)
5 kx $(AR) rcs libgif.a $(OBJECTS)
5 kx
5 kx libutil.so: $(UOBJECTS) $(UHEADERS)
5 kx $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname -Wl,libutil.so.$(LIBMAJOR) -o libutil.so $(UOBJECTS)
5 kx
5 kx libutil.a: $(UOBJECTS) $(UHEADERS)
5 kx $(AR) rcs libutil.a $(UOBJECTS)
5 kx
5 kx clean:
5 kx rm -f $(UTILS) $(TARGET) libgetarg.a libgif.a libgif.so libutil.a libutil.so *.o
5 kx rm -f libgif.so.$(LIBMAJOR).$(LIBMINOR).$(LIBPOINT)
5 kx rm -f libgif.so.$(LIBMAJOR)
5 kx rm -fr doc/*.1 *.html doc/staging
5 kx
5 kx check: all
5 kx $(MAKE) -C tests
5 kx
5 kx # Installation/uninstallation
5 kx
5 kx install: all install-bin install-include install-lib install-man
5 kx install-bin: $(INSTALLABLE)
5 kx $(INSTALL) -d "$(DESTDIR)$(BINDIR)"
5 kx $(INSTALL) $^ "$(DESTDIR)$(BINDIR)"
5 kx install-include:
5 kx $(INSTALL) -d "$(DESTDIR)$(INCDIR)"
5 kx $(INSTALL) -m 644 gif_lib.h "$(DESTDIR)$(INCDIR)"
5 kx install-lib:
5 kx $(INSTALL) -d "$(DESTDIR)$(LIBDIR)"
5 kx $(INSTALL) -m 644 libgif.a "$(DESTDIR)$(LIBDIR)/libgif.a"
5 kx $(INSTALL) -m 755 libgif.so "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBVER)"
5 kx ln -sf libgif.so.$(LIBVER) "$(DESTDIR)$(LIBDIR)/libgif.so.$(LIBMAJOR)"
5 kx ln -sf libgif.so.$(LIBMAJOR) "$(DESTDIR)$(LIBDIR)/libgif.so"
5 kx install-man:
5 kx $(INSTALL) -d "$(DESTDIR)$(MANDIR)/man1"
5 kx $(INSTALL) -m 644 doc/*.1 "$(DESTDIR)$(MANDIR)/man1"
5 kx uninstall: uninstall-man uninstall-include uninstall-lib uninstall-bin
5 kx uninstall-bin:
5 kx cd "$(DESTDIR)$(BINDIR)" && rm -f $(INSTALLABLE)
5 kx uninstall-include:
5 kx rm -f "$(DESTDIR)$(INCDIR)/gif_lib.h"
5 kx uninstall-lib:
5 kx cd "$(DESTDIR)$(LIBDIR)" && \
5 kx rm -f libgif.a libgif.so libgif.so.$(LIBMAJOR) libgif.so.$(LIBVER)
5 kx uninstall-man:
5 kx cd "$(DESTDIR)$(MANDIR)/man1" && rm -f $(shell cd doc >/dev/null && echo *.1)
5 kx
5 kx # Make distribution tarball
5 kx #
5 kx # We include all of the XML, and also generated manual pages
5 kx # so people working from the distribution tarball won't need xmlto.
5 kx
5 kx EXTRAS = README \
5 kx NEWS \
5 kx TODO \
5 kx COPYING \
5 kx getversion \
5 kx ChangeLog \
5 kx build.adoc \
5 kx history.adoc \
5 kx control \
5 kx doc/whatsinagif \
5 kx doc/gifstandard \
5 kx
5 kx DSOURCES = Makefile *.[ch]
5 kx DOCS = doc/*.xml doc/*.1 doc/*.html doc/index.html.in doc/00README doc/Makefile
5 kx ALL = $(DSOURCES) $(DOCS) tests pic $(EXTRAS)
5 kx giflib-$(VERSION).tar.gz: $(ALL)
5 kx $(TAR) --transform='s:^:giflib-$(VERSION)/:' -czf giflib-$(VERSION).tar.gz $(ALL)
5 kx giflib-$(VERSION).tar.bz2: $(ALL)
5 kx $(TAR) --transform='s:^:giflib-$(VERSION)/:' -cjf giflib-$(VERSION).tar.bz2 $(ALL)
5 kx
5 kx dist: giflib-$(VERSION).tar.gz giflib-$(VERSION).tar.bz2
5 kx
5 kx # Auditing tools.
5 kx
5 kx # Check that getversion hasn't gone pear-shaped.
5 kx version:
5 kx @echo $(VERSION)
5 kx
5 kx # cppcheck should run clean
5 kx cppcheck:
5 kx cppcheck --inline-suppr --template gcc --enable=all --suppress=unusedFunction --force *.[ch]
5 kx
5 kx # Verify the build
5 kx distcheck: all
5 kx $(MAKE) giflib-$(VERSION).tar.gz
5 kx tar xzvf giflib-$(VERSION).tar.gz
5 kx $(MAKE) -C giflib-$(VERSION)
5 kx rm -fr giflib-$(VERSION)
5 kx
5 kx # release using the shipper tool
5 kx release: all distcheck
5 kx $(MAKE) -C doc website
5 kx shipper --no-stale version=$(VERSION) | sh -e -x
5 kx rm -fr doc/staging
5 kx
5 kx # Refresh the website
5 kx refresh: all
5 kx $(MAKE) -C doc website
5 kx shipper --no-stale -w version=$(VERSION) | sh -e -x
5 kx rm -fr doc/staging