1# Makefile for zlib
2# Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler
3# For conditions of distribution and use, see copyright notice in zlib.h
4
5# To compile and test, type:
6#    ./configure; make test
7# Normally configure builds both a static and a shared library.
8# If you want to build just a static library, use: ./configure --static
9
10# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
11#    make install
12# To install in $HOME instead of /usr/local, use:
13#    make install prefix=$HOME
14
15CC=cc
16
17CFLAGS=-O
18#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
19#CFLAGS=-g -DZLIB_DEBUG
20#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
21#           -Wstrict-prototypes -Wmissing-prototypes
22
23SFLAGS=-O
24LDFLAGS=-L.
25LIBNAME1=libz-ng
26LIBNAME2=zlib-ng
27SUFFIX=-ng
28TEST_LIBS=$(LIBNAME1).a
29LDSHARED=$(CC)
30LDSHAREDFLAGS=-shared
31
32VER=2.1.0.devel
33VER1=2
34
35STATICLIB=$(LIBNAME1).a
36SHAREDLIB=$(LIBNAME1).so
37SHAREDLIBV=$(LIBNAME1).so.$(VER)
38SHAREDLIBM=$(LIBNAME1).so.$(VER1)
39IMPORTLIB=
40SHAREDTARGET=$(LIBNAME1).so.$(VER)
41PKGFILE=$(LIBNAME2).pc
42
43LIBS=$(STATICLIB) $(SHAREDTARGET)
44
45AR=ar
46ARFLAGS=rc
47DEFFILE=
48RC=
49RCFLAGS=
50RCOBJS=
51STRIP=
52RANLIB=ranlib
53LDCONFIG=ldconfig
54LDSHAREDLIBC=
55EXE=
56
57SRCDIR=.
58INCLUDES=-I$(SRCDIR)
59
60BUILDDIR=.
61
62ARCHDIR=arch/generic
63ARCH_STATIC_OBJS=
64ARCH_SHARED_OBJS=
65
66prefix = /usr/local
67exec_prefix = ${prefix}
68bindir = ${exec_prefix}/bin
69libdir = ${exec_prefix}/lib
70sharedlibdir = ${libdir}
71includedir = ${prefix}/include
72mandir = ${prefix}/share/man
73man3dir = ${mandir}/man3
74pkgconfigdir = ${libdir}/pkgconfig
75
76OBJZ = \
77	adler32.o \
78	adler32_fold.o \
79	chunkset.o \
80	compare256.o \
81	compress.o \
82	cpu_features.o \
83	crc32_braid.o \
84	crc32_braid_comb.o \
85	crc32_fold.o \
86	deflate.o \
87	deflate_fast.o \
88	deflate_huff.o \
89	deflate_medium.o \
90	deflate_quick.o \
91	deflate_rle.o \
92	deflate_slow.o \
93	deflate_stored.o \
94	functable.o \
95	infback.o \
96	inffast.o \
97	inflate.o \
98	inftrees.o \
99	insert_string.o \
100	insert_string_roll.o \
101	slide_hash.o \
102	trees.o \
103	uncompr.o \
104	zutil.o \
105	$(ARCH_STATIC_OBJS)
106
107OBJG = \
108	gzlib.o \
109	gzread.o \
110	gzwrite.o
111
112OBJC = $(OBJZ) $(OBJG)
113
114PIC_OBJZ = \
115	adler32.lo \
116	adler32_fold.lo \
117	chunkset.lo \
118	compare256.lo \
119	compress.lo \
120	cpu_features.lo \
121	crc32_braid.lo \
122	crc32_braid_comb.lo \
123	crc32_fold.lo \
124	deflate.lo \
125	deflate_fast.lo \
126	deflate_huff.lo \
127	deflate_medium.lo \
128	deflate_quick.lo \
129	deflate_rle.lo \
130	deflate_slow.lo \
131	deflate_stored.lo \
132	functable.lo \
133	infback.lo \
134	inffast.lo \
135	inflate.lo \
136	inftrees.lo \
137	insert_string.lo \
138	insert_string_roll.lo \
139	slide_hash.lo \
140	trees.lo \
141	uncompr.lo \
142	zutil.lo \
143	$(ARCH_SHARED_OBJS)
144
145PIC_OBJG = \
146	gzlib.lo \
147	gzread.lo \
148	gzwrite.lo
149
150PIC_TESTOBJG =
151PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
152
153OBJS = $(OBJC)
154
155PIC_OBJS = $(PIC_OBJC)
156
157all: static shared
158
159static: example$(EXE) minigzip$(EXE) makefixed$(EXE) maketrees$(EXE) makecrct$(EXE)
160
161shared: examplesh$(EXE) minigzipsh$(EXE)
162
163check: test
164
165.SECONDARY:
166
167$(ARCHDIR)/%.o: $(SRCDIR)/$(ARCHDIR)/%.c
168	$(MAKE) -C $(ARCHDIR) $(notdir $@)
169
170$(ARCHDIR)/%.lo: $(SRCDIR)/$(ARCHDIR)/%.c
171	$(MAKE) -C $(ARCHDIR) $(notdir $@)
172
173%.o: $(ARCHDIR)/%.o
174	-cp $< $@
175
176%.lo: $(ARCHDIR)/%.lo
177	-cp $< $@
178
179test: all
180	$(MAKE) -C test
181
182infcover.o: $(SRCDIR)/test/infcover.c zlib$(SUFFIX).h zconf$(SUFFIX).h zlib_name_mangling$(SUFFIX).h
183	$(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/test/infcover.c
184
185infcover$(EXE): infcover.o $(STATICLIB)
186	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ infcover.o $(STATICLIB)
187ifneq ($(STRIP),)
188	$(STRIP) $@
189endif
190
191cover: infcover$(EXE)
192	rm -f *.gcda
193	./infcover
194	gcov inf*.c
195
196$(STATICLIB): $(OBJS)
197	$(AR) $(ARFLAGS) $@ $(OBJS)
198	-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
199
200example.o:
201	$(CC) $(CFLAGS) -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $(SRCDIR)/test/example.c
202
203minigzip.o:
204	$(CC) $(CFLAGS) -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $(SRCDIR)/test/minigzip.c
205
206makefixed.o:
207	$(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/tools/makefixed.c
208
209maketrees.o:
210	$(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/tools/maketrees.c
211
212makecrct.o:
213	$(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $(SRCDIR)/tools/makecrct.c
214
215zlibrc.o: win32/zlib$(SUFFIX)1.rc
216	$(RC) $(RCFLAGS) -o $@ win32/zlib$(SUFFIX)1.rc
217
218.SUFFIXES: .lo
219
220%.o: $(SRCDIR)/%.c
221	$(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
222
223%.lo: $(SRCDIR)/%.c
224	$(CC) $(SFLAGS) -DPIC $(INCLUDES) -c -o $@ $<
225
226gzlib.o: $(SRCDIR)/gzlib.c
227	$(CC) $(CFLAGS) -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $<
228
229gzlib.lo: $(SRCDIR)/gzlib.c
230	$(CC) $(SFLAGS) -DPIC -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $<
231
232gzread.o: gzread.c
233	$(CC) $(CFLAGS) -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $<
234
235gzread.lo: gzread.c
236	$(CC) $(SFLAGS) -DPIC -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $<
237
238gzwrite.o: $(SRCDIR)/gzwrite.c
239	$(CC) $(CFLAGS) -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $<
240
241gzwrite.lo: $(SRCDIR)/gzwrite.c
242	$(CC) $(SFLAGS) -DPIC -DWITH_GZFILEOP $(INCLUDES) -c -o $@ $<
243
244$(SHAREDTARGET): $(PIC_OBJS) $(DEFFILE) $(RCOBJS)
245ifneq ($(SHAREDTARGET),)
246	$(LDSHARED) $(CFLAGS) $(LDSHAREDFLAGS) $(LDFLAGS) -o $@ $(DEFFILE) $(PIC_OBJS) $(RCOBJS) $(LDSHAREDLIBC)
247ifneq ($(STRIP),)
248	$(STRIP) $@
249endif
250ifneq ($(SHAREDLIB),$(SHAREDTARGET))
251	rm -f $(SHAREDLIB) $(SHAREDLIBM)
252	ln -s $@ $(SHAREDLIB)
253	ln -s $@ $(SHAREDLIBM)
254endif
255endif
256
257example$(EXE): example.o $(OBJG) $(STATICLIB)
258	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ example.o $(OBJG) $(TEST_LIBS) $(LDSHAREDLIBC)
259ifneq ($(STRIP),)
260	$(STRIP) $@
261endif
262
263minigzip$(EXE): minigzip.o $(OBJG) $(STATICLIB)
264	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ minigzip.o $(OBJG) $(TEST_LIBS) $(LDSHAREDLIBC)
265ifneq ($(STRIP),)
266	$(STRIP) $@
267endif
268
269minigzipsh$(EXE): minigzip.o $(OBJG) $(SHAREDTARGET)
270	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ minigzip.o $(OBJG) $(SHAREDTARGET) $(LDSHAREDLIBC)
271ifneq ($(STRIP),)
272	$(STRIP) $@
273endif
274
275
276examplesh$(EXE): example.o $(PIC_TESTOBJG) $(SHAREDTARGET)
277	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ example.o $(PIC_TESTOBJG) $(SHAREDTARGET) $(LDSHAREDLIBC)
278ifneq ($(STRIP),)
279	$(STRIP) $@
280endif
281
282makefixed$(EXE): makefixed.o $(OBJG) $(STATICLIB)
283	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ makefixed.o $(OBJG) $(TEST_LIBS) $(LDSHAREDLIBC)
284ifneq ($(STRIP),)
285	$(STRIP) $@
286endif
287
288maketrees$(EXE): maketrees.o $(OBJG) $(STATICLIB)
289	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ maketrees.o $(OBJG) $(TEST_LIBS) $(LDSHAREDLIBC)
290ifneq ($(STRIP),)
291	$(STRIP) $@
292endif
293
294makecrct$(EXE): makecrct.o $(OBJG) $(STATICLIB)
295	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ makecrct.o $(OBJG) $(TEST_LIBS) $(LDSHAREDLIBC)
296ifneq ($(STRIP),)
297	$(STRIP) $@
298endif
299
300install-shared: $(SHAREDTARGET)
301ifneq ($(SHAREDTARGET),)
302	-@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
303	rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDTARGET)
304	cp $(SHAREDTARGET) $(DESTDIR)$(sharedlibdir)
305	chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDTARGET)
306ifneq ($(SHAREDLIB),$(SHAREDTARGET))
307	rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM)
308	ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB)
309	ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM)
310	($(LDCONFIG) || true)  >/dev/null 2>&1
311# ldconfig is for Linux
312endif
313ifneq ($(IMPORTLIB),)
314	cp $(IMPORTLIB) $(DESTDIR)$(sharedlibdir)
315	chmod 644 $(DESTDIR)$(sharedlibdir)/$(IMPORTLIB)
316endif
317endif
318
319install-static: $(STATICLIB)
320	-@if [ ! -d $(DESTDIR)$(libdir)       ]; then mkdir -p $(DESTDIR)$(libdir); fi
321	rm -f $(DESTDIR)$(libdir)/$(STATICLIB)
322	cp $(STATICLIB) $(DESTDIR)$(libdir)
323	chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
324	-@($(RANLIB) $(DESTDIR)$(libdir)/$(STATICLIB) || true) >/dev/null 2>&1
325# The ranlib in install-static is needed on NeXTSTEP which checks file times
326
327install-libs: install-shared install-static
328	-@if [ ! -d $(DESTDIR)$(man3dir)      ]; then mkdir -p $(DESTDIR)$(man3dir); fi
329	-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
330	rm -f $(DESTDIR)$(pkgconfigdir)/$(PKGFILE)
331	cp $(PKGFILE) $(DESTDIR)$(pkgconfigdir)
332	chmod 644 $(DESTDIR)$(pkgconfigdir)/$(PKGFILE)
333
334install: install-libs
335	-@if [ ! -d $(DESTDIR)$(includedir)   ]; then mkdir -p $(DESTDIR)$(includedir); fi
336	rm -f $(DESTDIR)$(includedir)/zlib$(SUFFIX).h $(DESTDIR)$(includedir)/zconf$(SUFFIX).h $(DESTDIR)$(includedir)/zlib_name_mangling$(SUFFIX).h
337	cp zlib$(SUFFIX).h $(DESTDIR)$(includedir)/zlib$(SUFFIX).h
338	cp zconf$(SUFFIX).h $(DESTDIR)$(includedir)/zconf$(SUFFIX).h
339	cp zlib_name_mangling$(SUFFIX).h $(DESTDIR)$(includedir)/zlib_name_mangling$(SUFFIX).h
340	chmod 644 $(DESTDIR)$(includedir)/zlib$(SUFFIX).h $(DESTDIR)$(includedir)/zconf$(SUFFIX).h $(DESTDIR)$(includedir)/zlib_name_mangling$(SUFFIX).h
341
342uninstall-static:
343	cd $(DESTDIR)$(libdir) && rm -f $(STATICLIB)
344
345uninstall-shared:
346ifneq ($(SHAREDLIB),)
347	cd $(DESTDIR)$(sharedlibdir) && rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM)
348endif
349ifneq ($(IMPORTLIB),)
350	cd $(DESTDIR)$(sharedlibdir) && rm -f $(IMPORTLIB)
351endif
352
353uninstall: uninstall-static uninstall-shared
354	cd $(DESTDIR)$(includedir) && rm -f zlib$(SUFFIX).h zconf$(SUFFIX).h zlib_name_mangling$(SUFFIX).h
355	cd $(DESTDIR)$(pkgconfigdir) && rm -f $(PKGFILE)
356
357mostlyclean: clean
358clean:
359	@if [ -f $(ARCHDIR)/Makefile ]; then $(MAKE) -C $(ARCHDIR) clean; fi
360	@if [ -f test/Makefile ]; then $(MAKE) -C test clean; fi
361	rm -f *.o *.lo *~ \
362	   example$(EXE) minigzip$(EXE) minigzipsh$(EXE) \
363	   infcover makefixed$(EXE) maketrees$(EXE) makecrct$(EXE) \
364	   $(STATICLIB) $(IMPORTLIB) $(SHAREDLIB) $(SHAREDLIBV) $(SHAREDLIBM) \
365	   foo.gz so_locations \
366	   _match.s maketree
367	rm -rf objs
368	rm -f *.gcda *.gcno *.gcov
369	rm -f a.out a.exe
370	rm -f *.pc
371	rm -f *._h
372	rm -rf btmp1 btmp2 pkgtmp1 pkgtmp2
373
374maintainer-clean: distclean
375distclean: clean
376	@if [ -f $(ARCHDIR)/Makefile ]; then $(MAKE) -C $(ARCHDIR) distclean; fi
377	@if [ -f test/Makefile ]; then $(MAKE) -C test distclean; fi
378	rm -f $(PKGFILE) configure.log zconf.h zconf.h.cmakein zlib$(SUFFIX).h zlib_name_mangling$(SUFFIX)}.h
379	-@rm -f .DS_Store
380# Reset Makefile if building inside source tree
381	@if [ -f Makefile.in ]; then \
382	printf 'all:\n\t-@echo "Please use ./configure first.  Thank you."\n' > Makefile ; \
383	printf '\ndistclean:\n\t$(MAKE) -f Makefile.in distclean\n' >> Makefile ; \
384	touch -r $(SRCDIR)/Makefile.in Makefile ; fi
385# Reset zconf.h and zconf.h.cmakein if building inside source tree
386	@if [ -f zconf.h.in ]; then \
387	cp -p $(SRCDIR)/zconf.h.in zconf.h ; \
388	grep -v '^#cmakedefine' $(SRCDIR)/zconf.h.in > zconf.h.cmakein &&\
389	touch -r $(SRCDIR)/zconf.h.in zconf.h.cmakein ; fi
390# Cleanup these files if building outside source tree
391	@if [ ! -f README.md ]; then rm -f Makefile; fi
392# Remove arch and test directory if building outside source tree
393	@if [ ! -f $(ARCHDIR)/Makefile.in ]; then rm -rf arch; fi
394	@if [ ! -f test/Makefile.in ]; then rm -rf test; fi
395
396tags:
397	etags $(SRCDIR)/*.[ch]
398