blob: d2619f9e92b434b7e8716182805423dd69a04cf2 [file] [log] [blame]
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -04001# makefile for libpng.a and libpng16.so on Linux ELF with gcc
xNombre232e9ca2020-07-03 22:10:22 +02002# Copyright (C) 2020 Cosmin Truta
3# Copyright (C) 1998, 1999, 2002, 2006, 2008, 2010-2014, 2017 Greg Roelofs and
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -04004# Glenn Randers-Pehrson
xNombre232e9ca2020-07-03 22:10:22 +02005# Copyright (C) 1996, 1997 Andreas Dilger
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -04006#
7# This code is released under the libpng license.
8# For conditions of distribution and use, see the disclaimer
9# and license in png.h
10
11# Library name:
12LIBNAME = libpng16
13PNGMAJ = 16
xNombred07bb0d2020-03-10 20:17:12 +010014RELEASE = 37
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -040015
16# Shared library names:
17LIBSO=$(LIBNAME).so
18LIBSOMAJ=$(LIBNAME).so.$(PNGMAJ)
19LIBSOREL=$(LIBSOMAJ).$(RELEASE)
20OLDSO=libpng.so
21
22# Utilities:
23AR_RC=ar rc
24CC=gcc
25MKDIR_P=mkdir -p
26LN_SF=ln -sf
27RANLIB=ranlib
28CP=cp
29RM_F=/bin/rm -f
30
31# where "make install" puts libpng16.a, libpng16.so*,
32# libpng16/png.h, libpng16/pngconf.h, and libpng16/pnglibconf.h
33# Prefix must be a full pathname.
34prefix=/usr/local
35exec_prefix=$(prefix)
36
37# Where the zlib library and include files are located.
38#ZLIBLIB=/usr/local/lib
39#ZLIBINC=/usr/local/include
40ZLIBLIB=../zlib
41ZLIBINC=../zlib
42
xNombre232e9ca2020-07-03 22:10:22 +020043WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
44 -Wmissing-declarations -Wtraditional -Wcast-align \
45 -Wstrict-prototypes -Wmissing-prototypes #-Wconversion
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -040046
47CPPFLAGS=-I$(ZLIBINC)
48CPPFLAGS += -DPNG_ARM_NEON
49CPPFLAGS += -DPNG_MIPS_MSA
50CPPFLAGS += -DPNG_INTEL_SSE
51CPPFLAGS += -DPNG_POWERPC_VSX
xNombre232e9ca2020-07-03 22:10:22 +020052
53CFLAGS=-W -Wall -O3 -funroll-loops # $(WARNMORE) -g
54CFLAGS += -ansi -pedantic
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -040055
56LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng16 -lz -lm
57LDFLAGS_A=-L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) libpng.a -lz -lm
58
59INCPATH=$(prefix)/include
60LIBPATH=$(exec_prefix)/lib
61MANPATH=$(prefix)/man
62BINPATH=$(exec_prefix)/bin
63
64# override DESTDIR= on the make install command line to easily support
65# installing into a temporary location. Example:
66#
67# make install DESTDIR=/tmp/build/libpng
68#
69# If you're going to install into a temporary location
70# via DESTDIR, $(DESTDIR)$(prefix) must already exist before
71# you execute make install.
72DESTDIR=
73
74DB=$(DESTDIR)$(BINPATH)
75DI=$(DESTDIR)$(INCPATH)
76DL=$(DESTDIR)$(LIBPATH)
77DM=$(DESTDIR)$(MANPATH)
78
79# Pre-built configuration
80# See scripts/pnglibconf.mak for more options
81PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
82
xNombre232e9ca2020-07-03 22:10:22 +020083# File lists
84OBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o \
85 pngread.o pngrio.o pngrtran.o pngrutil.o pngset.o \
86 pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.o \
87 arm/arm_init.o arm/filter_neon_intrinsics.o \
88 intel/intel_init.o intel/filter_sse2_intrinsics.o \
89 mips/mips_init.o mips/filter_msa_intrinsics.o \
90 powerpc/powerpc_init.o powerpc/filter_vsx_intrinsics.o
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -040091
92OBJSDLL = $(OBJS:.o=.pic.o)
93
94.SUFFIXES: .c .o .pic.o
95
96.c.o:
97 $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
98
99.c.pic.o:
100 $(CC) -c $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ $*.c
101
102all: libpng.a $(LIBSO) pngtest pngtest-static libpng.pc libpng-config
103
104pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
105 $(CP) $(PNGLIBCONF_H_PREBUILT) $@
106
107libpng.a: $(OBJS)
108 $(AR_RC) $@ $(OBJS)
109 $(RANLIB) $@
110
111libpng.pc:
112 cat scripts/libpng.pc.in | sed -e s!@prefix@!$(prefix)! \
113 -e s!@exec_prefix@!$(exec_prefix)! \
114 -e s!@libdir@!$(LIBPATH)! \
115 -e s!@includedir@!$(INCPATH)! \
116 -e s!-lpng16!-lpng16\ -lz\ -lm! > libpng.pc
117
118libpng-config:
119 ( cat scripts/libpng-config-head.in; \
120 echo prefix=\"$(prefix)\"; \
121 echo I_opts=\"-I$(INCPATH)/$(LIBNAME)\"; \
122 echo L_opts=\"-L$(LIBPATH)\"; \
123 echo R_opts=\"-Wl,-rpath,$(LIBPATH)\"; \
124 echo libs=\"-lpng16 -lz -lm\"; \
125 cat scripts/libpng-config-body.in ) > libpng-config
126 chmod +x libpng-config
127
128$(LIBSO): $(LIBSOMAJ)
129 $(LN_SF) $(LIBSOMAJ) $(LIBSO)
130
131$(LIBSOMAJ): $(OBJSDLL)
132 $(CC) -shared -Wl,-soname,$(LIBSOMAJ) -o $(LIBSOMAJ) $(OBJSDLL)
133
134pngtest: pngtest.o $(LIBSO)
135 $(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
136
137pngtest-static: pngtest.o libpng.a
138 $(CC) -o pngtest-static $(CFLAGS) pngtest.o $(LDFLAGS_A)
139
140test: pngtest pngtest-static
141 @echo ""
142 @echo " Running pngtest dynamically linked with $(LIBSO):"
143 @echo ""
144 ./pngtest
145 @echo ""
146 @echo " Running pngtest statically linked with libpng.a:"
147 @echo ""
148 ./pngtest-static
149
150install-headers: png.h pngconf.h pnglibconf.h
151 -@if [ ! -d $(DI) ]; then $(MKDIR_P) $(DI); fi
152 -@if [ ! -d $(DI)/$(LIBNAME) ]; then $(MKDIR_P) $(DI)/$(LIBNAME); fi
153 cp png.h pngconf.h pnglibconf.h $(DI)/$(LIBNAME)
154 chmod 644 $(DI)/$(LIBNAME)/png.h $(DI)/$(LIBNAME)/pngconf.h $(DI)/$(LIBNAME)/pnglibconf.h
155 -@$(RM_F) $(DI)/png.h $(DI)/pngconf.h $(DI)/pnglibconf.h
156 -@$(RM_F) $(DI)/libpng
157 (cd $(DI); $(LN_SF) $(LIBNAME) libpng; $(LN_SF) $(LIBNAME)/* .)
158
159install-static: install-headers libpng.a
160 -@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
161 cp libpng.a $(DL)/$(LIBNAME).a
162 chmod 644 $(DL)/$(LIBNAME).a
163 -@$(RM_F) $(DL)/libpng.a
164 (cd $(DL); $(LN_SF) $(LIBNAME).a libpng.a)
165
166install-shared: install-headers $(LIBSOMAJ) libpng.pc
167 -@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
168 -@$(RM_F) $(DL)/$(LIBSO)
169 -@$(RM_F) $(DL)/$(LIBSOREL)
170 -@$(RM_F) $(DL)/$(OLDSO)
171 cp $(LIBSOMAJ) $(DL)/$(LIBSOREL)
172 chmod 755 $(DL)/$(LIBSOREL)
173 (cd $(DL); \
174 $(LN_SF) $(LIBSOREL) $(LIBSO); \
175 $(LN_SF) $(LIBSO) $(OLDSO))
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400176 -@if [ ! -d $(DL)/pkgconfig ]; then $(MKDIR_P) $(DL)/pkgconfig; fi
177 -@$(RM_F) $(DL)/pkgconfig/$(LIBNAME).pc
178 -@$(RM_F) $(DL)/pkgconfig/libpng.pc
179 cp libpng.pc $(DL)/pkgconfig/$(LIBNAME).pc
180 chmod 644 $(DL)/pkgconfig/$(LIBNAME).pc
181 (cd $(DL)/pkgconfig; $(LN_SF) $(LIBNAME).pc libpng.pc)
182
183install-man: libpng.3 libpngpf.3 png.5
184 -@if [ ! -d $(DM) ]; then $(MKDIR_P) $(DM); fi
185 -@if [ ! -d $(DM)/man3 ]; then $(MKDIR_P) $(DM)/man3; fi
186 -@$(RM_F) $(DM)/man3/libpng.3
187 -@$(RM_F) $(DM)/man3/libpngpf.3
188 cp libpng.3 $(DM)/man3
189 cp libpngpf.3 $(DM)/man3
190 -@if [ ! -d $(DM)/man5 ]; then $(MKDIR_P) $(DM)/man5; fi
191 -@$(RM_F) $(DM)/man5/png.5
192 cp png.5 $(DM)/man5
193
194install-config: libpng-config
195 -@if [ ! -d $(DB) ]; then $(MKDIR_P) $(DB); fi
196 -@$(RM_F) $(DB)/libpng-config
197 -@$(RM_F) $(DB)/$(LIBNAME)-config
198 cp libpng-config $(DB)/$(LIBNAME)-config
199 chmod 755 $(DB)/$(LIBNAME)-config
200 (cd $(DB); $(LN_SF) $(LIBNAME)-config libpng-config)
201
202install: install-static install-shared install-man install-config
203
204# If you installed in $(DESTDIR), test-installed won't work until you
205# move the library to its final location. Use test-dd to test it
206# before then.
207
208test-dd:
209 echo
210 echo Testing installed dynamic shared library in $(DL).
211 $(CC) -I$(DI) $(CPPFLAGS) \
212 `$(BINPATH)/$(LIBNAME)-config --cflags` pngtest.c \
213 -L$(DL) -L$(ZLIBLIB) -Wl, -rpath,$(DL) -Wl,-rpath,$(ZLIBLIB) \
214 -o pngtestd `$(BINPATH)/$(LIBNAME)-config --ldflags`
215 ./pngtestd pngtest.png
216
217test-installed:
xNombre232e9ca2020-07-03 22:10:22 +0200218 echo
219 echo Testing installed dynamic shared library.
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400220 $(CC) $(CPPFLAGS) \
221 `$(BINPATH)/$(LIBNAME)-config --cflags` pngtest.c \
222 -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) \
223 -o pngtesti `$(BINPATH)/$(LIBNAME)-config --ldflags`
224 ./pngtesti pngtest.png
225
226clean:
xNombre232e9ca2020-07-03 22:10:22 +0200227 $(RM_F) $(OBJS) $(OBJSDLL) libpng.a
228 $(RM_F) pngtest*.o pngtest pngtesti pngtest-static pngout.png
229 $(RM_F) $(LIBSO) $(LIBSOMAJ)*
230 $(RM_F) libpng.pc pnglibconf.h libpng-config
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400231
232# DO NOT DELETE THIS LINE -- make depend depends on it.
233
xNombre232e9ca2020-07-03 22:10:22 +0200234png.o png.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400235pngerror.o pngerror.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
xNombre232e9ca2020-07-03 22:10:22 +0200236pngget.o pngget.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
237pngmem.o pngmem.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
238pngpread.o pngpread.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
239pngread.o pngread.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
240pngrio.o pngrio.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400241pngrtran.o pngrtran.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
242pngrutil.o pngrutil.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
xNombre232e9ca2020-07-03 22:10:22 +0200243pngset.o pngset.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400244pngtrans.o pngtrans.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
xNombre232e9ca2020-07-03 22:10:22 +0200245pngwio.o pngwio.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400246pngwrite.o pngwrite.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
247pngwtran.o pngwtran.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
248pngwutil.o pngwutil.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
xNombre232e9ca2020-07-03 22:10:22 +0200249arm/arm_init.o arm/arm_init.o: pngpriv.h
250arm/filter_neon_intrinsics.o arm/filter_neon_intrinsics.pic.o: pngpriv.h
251intel/intel_init.o intel/intel_init.pic.o: pngpriv.h
252intel/filter_sse2_intrinsics.o intel/filter_sse2_intrinsics.pic.o: pngpriv.h
253mips/mips_init.o mips/mips_init.pic.o: pngpriv.h
254mips/filter_msa_intrinsics.o mips/filter_msa_intrinsics.pic.o: pngpriv.h
255powerpc/powerpc_init.o powerpc/powerpc_init.pic.o: pngpriv.h
256powerpc/filter_vsx_intrinsics.o powerpc/filter_vsx_intrinsics.pic.o: pngpriv.h
Leon Scroggins III3cc83ac2017-10-06 11:02:56 -0400257
258pngtest.o: png.h pngconf.h pnglibconf.h