xref: /aosp_15_r20/external/giflib/Makefile (revision 324bb76b8d05e2a05aa88511fff61cf3f9ca5892)
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