1# Copyright (C) 2001-2019 Artifex Software, Inc.
2# All Rights Reserved.
3#
4# This software is provided AS-IS with no warranty, either express or
5# implied.
6#
7# This software is distributed under license and may not be copied,
8# modified or distributed except as expressly authorized under the terms
9# of the license contained in the file LICENSE in this distribution.
10#
11# Refer to licensing information at http://www.artifex.com or contact
12# Artifex Software, Inc.,  1305 Grant Avenue - Suite 200, Novato,
13# CA 94945, U.S.A., +1(415)492-9861, for further information.
14#
15# makefile for zlib library code.
16# Users of this makefile must define the following:
17#	GSSRCDIR - the GS library source directory
18#	ZSRCDIR - the source directory
19#	ZGENDIR - the generated intermediate file directory
20#	ZOBJDIR - the object directory
21#	SHARE_ZLIB - 0 to compile zlib, 1 to share
22#	ZLIB_NAME - if SHARE_ZLIB=1, the name of the shared library
23#	ZAUXDIR - the directory for auxiliary objects
24
25# This partial makefile compiles the zlib library for use in Ghostscript.
26# You can get the source code for this library from:
27#   http://www.gzip.org/zlib/
28#   http://www.libpng.org/pub/png/src/
29#	zlib-#.#.#.tar.gz or zlib###.zip
30# Please see Ghostscript's `Make.htm' file for instructions about how to
31# unpack these archives.
32#
33# When each version of Ghostscript is released, we copy the associated
34# version of the zlib library to
35#	ftp://ftp.cs.wisc.edu/ghost/3rdparty/
36# for more convenient access.
37#
38# This makefile is known to work with zlib source version 1.2.1.
39# It will only work with earlier versions (1.1.4) when SHARE_ZLIB=1.
40# Note that there are obscure bugs in zlib versions before 1.1.3 that
41# may cause the FlateDecode filter to produce an occasional ioerror
42# and there is a serious security problem with 1.1.3: we strongly
43# recommend using version 1.1.4 or later.
44
45ZSRC=$(ZSRCDIR)$(D)
46ZGEN=$(ZGENDIR)$(D)
47ZOBJ=$(ZOBJDIR)$(D)
48ZAUX=$(ZAUXDIR)$(D)
49ZO_=$(O_)$(ZOBJ)
50ZAO_=$(O_)$(ZAUX)
51
52# We need D_, _D_, and _D because the OpenVMS compiler uses different
53# syntax from other compilers.
54# ZI_ and ZF_ are defined in gs.mak.
55ZCCFLAGS=$(ZLIB_CFLAGS) $(I_)$(ZI_)$(_I) $(ZF_) $(D_)verbose$(_D_)-1$(_D)
56ZCC=$(CC_) $(ZCCFLAGS)
57ZCCAUXFLAGS=$(ZLIB_CFLAGS) $(I_)$(ZI_)$(_I) $(ZF_) $(D_)verbose$(_D_)-1$(_D)
58ZCCAUX=$(CCAUX_) $(ZCCAUXFLAGS)
59
60# Define the name of this makefile.
61ZLIB_MAK=$(GLSRC)zlib.mak $(TOP_MAKEFILES)
62
63z.clean : z.config-clean z.clean-not-config-clean
64
65### WRONG.  MUST DELETE OBJ AND GEN FILES SELECTIVELY.
66z.clean-not-config-clean :
67	$(RM_) $(ZOBJ)*.$(OBJ)
68
69z.config-clean :
70	$(RMN_) $(ZGEN)zlib*.dev $(ZGEN)crc32*.dev
71
72ZDEP=$(AK) $(ZLIB_MAK) $(MAKEDIRS)
73
74# Code common to compression and decompression.
75
76zlibc_=$(ZOBJ)zutil.$(OBJ)
77$(ZGEN)zlibc.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(zlibc_)
78	$(SETMOD) $(ZGEN)zlibc $(zlibc_)
79
80$(ZOBJ)zutil.$(OBJ) : $(ZSRC)zutil.c $(ZDEP)
81	$(ZCC) $(ZO_)zutil.$(OBJ) $(C_) $(ZSRC)zutil.c
82
83# Encoding (compression) code.
84
85$(ZGEN)zlibe.dev : $(ZLIB_MAK) $(ZGEN)zlibe_$(SHARE_ZLIB).dev \
86 $(MAKEDIRS)
87	$(CP_) $(ZGEN)zlibe_$(SHARE_ZLIB).dev $(ZGEN)zlibe.dev
88
89$(ZGEN)zlibe_1.dev : $(ZLIB_MAK) $(ZLIB_MAK) $(ECHOGS_XE) \
90 $(MAKEDIRS)
91	$(SETMOD) $(ZGEN)zlibe_1 -lib $(ZLIB_NAME)
92
93zlibe_=$(ZOBJ)adler32.$(OBJ) $(ZOBJ)deflate.$(OBJ) \
94	$(ZOBJ)compress.$(OBJ) $(ZOBJ)trees.$(OBJ) $(ZOBJ)crc32.$(OBJ)
95$(ZGEN)zlibe_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZGEN)zlibc.dev $(zlibe_) \
96 $(MAKEDIRS)
97	$(SETMOD) $(ZGEN)zlibe_0 $(zlibe_)
98	$(ADDMOD) $(ZGEN)zlibe_0 -include $(ZGEN)zlibc.dev
99
100$(ZOBJ)adler32.$(OBJ) : $(ZSRC)adler32.c $(ZDEP)
101	$(ZCC) $(ZO_)adler32.$(OBJ) $(C_) $(ZSRC)adler32.c
102
103$(ZOBJ)deflate.$(OBJ) : $(ZSRC)deflate.c $(ZDEP)
104	$(ZCC) $(ZO_)deflate.$(OBJ) $(C_) $(ZSRC)deflate.c
105
106# new file in zlib 1.2.x
107$(ZOBJ)compress.$(OBJ) : $(ZSRC)compress.c $(ZDEP)
108	$(ZCC) $(ZO_)compress.$(OBJ) $(C_) $(ZSRC)compress.c
109
110$(ZOBJ)trees.$(OBJ) : $(ZSRC)trees.c $(ZDEP)
111	$(ZCC) $(ZO_)trees.$(OBJ) $(C_) $(ZSRC)trees.c
112
113# The zlib filters per se don't need crc32, but libpng versions starting
114# with 0.90 do.
115
116$(ZGEN)crc32.dev : $(ZLIB_MAK) $(ZGEN)crc32_$(SHARE_ZLIB).dev \
117 $(MAKEDIRS)
118	$(CP_) $(ZGEN)crc32_$(SHARE_ZLIB).dev $(ZGEN)crc32.dev
119
120$(ZGEN)crc32_1.dev : $(ZLIB_MAK) $(ZLIB_MAK) $(ECHOGS_XE) \
121 $(MAKEDIRS)
122	$(SETMOD) $(ZGEN)crc32_1 -lib $(ZLIB_NAME)
123
124$(ZGEN)crc32_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZOBJ)crc32.$(OBJ) \
125 $(MAKEDIRS)
126	$(SETMOD) $(ZGEN)crc32_0 $(ZOBJ)crc32.$(OBJ)
127
128# We have to compile crc32 without warnings, because it defines 32-bit
129# constants that produces gcc warnings with -Wtraditional.
130$(ZOBJ)crc32.$(OBJ) : $(ZSRC)crc32.c $(ZDEP)
131	$(CC_NO_WARN) $(ZCCFLAGS) $(ZO_)crc32.$(OBJ) $(C_) $(ZSRC)crc32.c
132
133# Decoding (decompression) code.
134
135$(ZGEN)zlibd.dev : $(ZLIB_MAK) $(ZGEN)zlibd_$(SHARE_ZLIB).dev $(MAKEDIRS)
136	$(CP_) $(ZGEN)zlibd_$(SHARE_ZLIB).dev $(ZGEN)zlibd.dev
137
138$(ZGEN)zlibd_1.dev : $(ZLIB_MAK) $(ZLIB_MAK) $(ECHOGS_XE) \
139 $(MAKEDIRS)
140	$(SETMOD) $(ZGEN)zlibd_1 -lib $(ZLIB_NAME)
141
142# zlibd[12]_ list the decompression source files for zlib 1.4.x
143zlibd1_=$(ZOBJ)infblock.$(OBJ) $(ZOBJ)infcodes.$(OBJ) $(ZOBJ)inffast.$(OBJ)
144zlibd2_=$(ZOBJ)inflate.$(OBJ) $(ZOBJ)inftrees.$(OBJ) $(ZOBJ)infutil.$(OBJ) $(ZOBJ)crc32.$(OBJ)
145
146# shorter list of files for zlib 1.2.x
147zlibd_=$(ZOBJ)inffast.$(OBJ) $(ZOBJ)inflate.$(OBJ) $(ZOBJ)inftrees.$(OBJ) $(ZOBJ)uncompr.$(OBJ)
148
149
150$(ZGEN)zlibd_0.dev : $(ZLIB_MAK) $(ECHOGS_XE) $(ZGEN)zlibc.dev $(zlibd_) $(MAKEDIRS)
151	$(SETMOD) $(ZGEN)zlibd_0 $(zlibd_)
152	$(ADDMOD) $(ZGEN)zlibd_0 -include $(ZGEN)zlibc.dev
153
154$(ZOBJ)infblock.$(OBJ) : $(ZSRC)infblock.c $(ZDEP)
155	$(ZCC) $(ZO_)infblock.$(OBJ) $(C_) $(ZSRC)infblock.c
156
157$(ZOBJ)infcodes.$(OBJ) : $(ZSRC)infcodes.c $(ZDEP)
158	$(ZCC) $(ZO_)infcodes.$(OBJ) $(C_) $(ZSRC)infcodes.c
159
160$(ZOBJ)inffast.$(OBJ) : $(ZSRC)inffast.c $(ZDEP)
161	$(ZCC) $(ZO_)inffast.$(OBJ) $(C_) $(ZSRC)inffast.c
162
163$(ZOBJ)inflate.$(OBJ) : $(ZSRC)inflate.c $(ZDEP)
164	$(ZCC) $(ZO_)inflate.$(OBJ) $(C_) $(ZSRC)inflate.c
165
166$(ZOBJ)inftrees.$(OBJ) : $(ZSRC)inftrees.c $(ZDEP)
167	$(ZCC) $(ZO_)inftrees.$(OBJ) $(C_) $(ZSRC)inftrees.c
168
169$(ZOBJ)infutil.$(OBJ) : $(ZSRC)infutil.c $(ZDEP)
170	$(ZCC) $(ZO_)infutil.$(OBJ) $(C_) $(ZSRC)infutil.c
171
172# new file in zlib 1.2.x
173$(ZOBJ)uncompr.$(OBJ) : $(ZSRC)uncompr.c $(ZDEP)
174	$(ZCC) $(ZO_)uncompr.$(OBJ) $(C_) $(ZSRC)uncompr.c
175
176# Auxiliary objects
177
178$(ZAUX)adler32.$(OBJ) : $(ZSRC)adler32.c $(ZDEP)
179	$(ZCCAUX) $(ZAO_)adler32.$(OBJ) $(C_) $(ZSRC)adler32.c
180
181$(ZAUX)deflate.$(OBJ) : $(ZSRC)deflate.c $(ZDEP)
182	$(ZCCAUX) $(ZAO_)deflate.$(OBJ) $(C_) $(ZSRC)deflate.c
183
184# new file in zlib 1.2.x
185$(ZAUX)compress.$(OBJ) : $(ZSRC)compress.c $(ZDEP)
186	$(ZCCAUX) $(ZAO_)compress.$(OBJ) $(C_) $(ZSRC)compress.c
187
188$(ZAUX)trees.$(OBJ) : $(ZSRC)trees.c $(ZDEP)
189	$(ZCCAUX) $(ZAO_)trees.$(OBJ) $(C_) $(ZSRC)trees.c
190
191$(ZAUX)zutil.$(OBJ) : $(ZSRC)zutil.c $(ZDEP)
192	$(ZCCAUX) $(ZAO_)zutil.$(OBJ) $(C_) $(ZSRC)zutil.c
193
194# We have to compile crc32 without warnings, because it defines 32-bit
195# constants that produces gcc warnings with -Wtraditional.
196$(ZAUX)crc32.$(OBJ) : $(ZSRC)crc32.c $(ZDEP)
197	$(CCAUX_NO_WARN) $(ZCCAUXFLAGS) $(ZAO_)crc32.$(OBJ) $(C_) $(ZSRC)crc32.c
198