blob: 4c17022515011c567ad9103bdab60711a8c304f1 [file] [log] [blame]
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -06001
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -05002 Installing libpng
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -06003
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -05004Contents
5
Glenn Randers-Pehrsone175eb12016-08-18 12:15:53 -05006 I. Simple installation
7 II. Rebuilding the configure scripts
8 III. Using scripts/makefile*
9 IV. Using cmake
10 V. Directory structure
11 VI. Building with project files
12 VII. Building with makefiles
13 VIII. Configuring libpng for 16-bit platforms
14 IX. Configuring for DOS
15 X. Configuring for Medium Model
16 XI. Prepending a prefix to exported symbols
17 XII. Configuring for compiler xxx:
18 XIII. Removing unwanted object code
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -050019 XIV. Enabling or disabling hardware optimizations
20 XV. Changes to the build and configuration of libpng in libpng-1.5.x
21 XVI. Setjmp/longjmp issues
22 XVII. Common linking failures
23 XVIII. Other sources of information about libpng
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -050024
25I. Simple installation
26
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060027On Unix/Linux and similar systems, you can simply type
28
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -060029 ./configure [--prefix=/path]
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060030 make check
31 make install
32
Glenn Randers-Pehrson91319c62014-07-04 11:46:17 -050033and ignore the rest of this document. "/path" is the path to the directory
34where you want to install the libpng "lib", "include", and "bin"
Glenn Randers-Pehrson67152e72014-10-24 22:11:11 -050035subdirectories.
36
37If you downloaded a GIT clone, you will need to run ./autogen.sh before
38running ./configure, to create "configure" and "Makefile.in" which are
39not included in the GIT repository.
40
41Note that "configure" is only included in the "*.tar" distributions and not
42in the "*.zip" or "*.7z" distributions. If you downloaded one of those
43distributions, see "Building with project files" or "Building with makefiles",
Glenn Randers-Pehrson4aa3f402014-10-24 21:45:38 -050044below.
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060045
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -050046II. Rebuilding the configure scripts
47
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -060048If configure does not work on your system, or if you have a need to
49change configure.ac or Makefile.am, and you have a reasonably
50up-to-date set of tools, running ./autogen.sh in a git clone before
51running ./configure may fix the problem. To be really sure that you
Glenn Randers-Pehrsone2d113c2016-02-23 09:29:08 -060052aren't using any of the included pre-built scripts, especially if you
53are building from a tar distribution instead of a git distribution,
54do this:
Glenn Randers-Pehrson66676012010-10-16 07:18:09 -050055
Glenn Randers-Pehrson66121142010-10-16 07:22:19 -050056 ./configure --enable-maintainer-mode
Glenn Randers-Pehrson66676012010-10-16 07:18:09 -050057 make maintainer-clean
Glenn Randers-Pehrson871b1d02013-03-02 14:58:22 -060058 ./autogen.sh --maintainer --clean
59 ./autogen.sh --maintainer
Glenn Randers-Pehrson66121142010-10-16 07:22:19 -050060 ./configure [--prefix=/path] [other options]
Glenn Randers-Pehrson66676012010-10-16 07:18:09 -050061 make
62 make install
63 make check
Glenn Randers-Pehrson6bc53be2006-06-16 07:52:03 -050064
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -050065III. Using scripts/makefile*
66
Glenn Randers-Pehrson6bc53be2006-06-16 07:52:03 -050067Instead, you can use one of the custom-built makefiles in the
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060068"scripts" directory
69
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -050070 cp scripts/pnglibconf.h.prebuilt pnglibconf.h
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060071 cp scripts/makefile.system makefile
72 make test
73 make install
74
Glenn Randers-Pehrson9d27a1b2009-11-15 07:59:06 -060075The files that are presently available in the scripts directory
76are listed and described in scripts/README.txt.
77
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060078Or you can use one of the "projects" in the "projects" directory.
79
80Before installing libpng, you must first install zlib, if it
81is not already on your system. zlib can usually be found
Viktor Szakats95f3c072017-05-27 13:54:30 +000082wherever you got libpng; otherwise go to https://zlib.net/. You can
83place zlib in the same directory as libpng or in another directory.
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -060084
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -050085If your system already has a preinstalled zlib you will still need
86to have access to the zlib.h and zconf.h include files that
87correspond to the version of zlib that's installed.
88
89If you wish to test with a particular zlib that is not first in the
90standard library search path, put ZLIBLIB, ZLIBINC, CPPFLAGS, LDFLAGS,
91and LD_LIBRARY_PATH in your environment before running "make test"
92or "make distcheck":
93
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -050094 ZLIBLIB=/path/to/lib export ZLIBLIB
95 ZLIBINC=/path/to/include export ZLIBINC
96 CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
97 LDFLAGS="-L$ZLIBLIB" export LDFLAGS
98 LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -050099
100If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -0500101in your environment and type
102
103 make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500104
105IV. Using cmake
106
Glenn Randers-Pehrson5b754aa2009-08-26 12:16:18 -0500107If you want to use "cmake" (see www.cmake.org), type
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600108
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -0500109 cmake . -DCMAKE_INSTALL_PREFIX=/path
110 make
111 make install
Glenn Randers-Pehrson7edd4582006-12-07 19:16:44 -0600112
Glenn Randers-Pehrson91319c62014-07-04 11:46:17 -0500113As when using the simple configure method described above, "/path" points to
114the installation directory where you want to put the libpng "lib", "include",
115and "bin" subdirectories.
116
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500117V. Directory structure
Glenn Randers-Pehrsonc2a15d02014-03-16 19:53:29 -0500118
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600119You can rename the directories that you downloaded (they
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500120might be called "libpng-x.y.z" or "libpngNN" and "zlib-1.2.8"
121or "zlib128") so that you have directories called "zlib" and "libpng".
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600122
123Your directory structure should look like this:
124
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -0500125 .. (the parent directory)
Glenn Randers-Pehrsond9940f62016-07-08 08:43:30 -0500126 libpng (this directory)
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600127 INSTALL (this file)
128 README
Glenn Randers-Pehrson67152e72014-10-24 22:11:11 -0500129 *.h, *.c => libpng source files
Glenn Randers-Pehrsonbe199c12009-11-12 13:57:42 -0600130 CMakeLists.txt => "cmake" script
Glenn Randers-Pehrson22ad8f02009-11-14 07:25:31 -0600131 configuration files:
132 configure.ac, configure, Makefile.am, Makefile.in,
Glenn Randers-Pehrson39515c92010-08-28 06:21:35 -0500133 autogen.sh, config.guess, ltmain.sh, missing, libpng.pc.in,
134 libpng-config.in, aclocal.m4, config.h.in, config.sub,
Glenn Randers-Pehrson22ad8f02009-11-14 07:25:31 -0600135 depcomp, install-sh, mkinstalldirs, test-pngtest.sh
Glenn Randers-Pehrson860ab2b1999-10-14 07:43:10 -0500136 contrib
Glenn Randers-Pehrson4aa3f402014-10-24 21:45:38 -0500137 arm-neon, conftest, examples, gregbook, libtests, pngminim,
138 pngminus, pngsuite, tools, visupng
Glenn Randers-Pehrsonfbbb5ec2001-01-15 22:01:20 -0600139 projects
Glenn Randers-Pehrson67152e72014-10-24 22:11:11 -0500140 cbuilder5, owatcom, visualc71, vstudio, xcode
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600141 scripts
142 makefile.*
Glenn Randers-Pehrsonbe199c12009-11-12 13:57:42 -0600143 *.def (module definition files)
Glenn Randers-Pehrson8c667862010-08-24 16:16:35 -0500144 etc.
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600145 pngtest.png
146 etc.
147 zlib
Glenn Randers-Pehrson67152e72014-10-24 22:11:11 -0500148 README, *.h, *.c contrib, etc.
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600149
Glenn Randers-Pehrson61c32d92000-02-04 23:40:16 -0600150If the line endings in the files look funny, you may wish to get the other
151distribution of libpng. It is available in both tar.gz (UNIX style line
152endings) and zip (DOS style line endings) formats.
153
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500154VI. Building with project files
155
Glenn Randers-Pehrson9c3ab682006-02-20 22:09:05 -0600156If you are building libpng with MSVC, you can enter the
Glenn Randers-Pehrson67152e72014-10-24 22:11:11 -0500157libpng projects\visualc71 or vstudio directory and follow the instructions
Glenn Randers-Pehrsonbe199c12009-11-12 13:57:42 -0600158in README.txt.
Glenn Randers-Pehrsond4366722000-06-04 14:29:29 -0500159
Glenn Randers-Pehrsona2aebb52009-11-14 17:58:32 -0600160Otherwise enter the zlib directory and follow the instructions in zlib/README,
Glenn Randers-Pehrsonddfebd32006-02-22 09:19:25 -0600161then come back here and run "configure" or choose the appropriate
162makefile.sys in the scripts directory.
Glenn Randers-Pehrsondb66d442000-06-23 21:38:16 -0500163
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500164VII. Building with makefiles
165
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600166Copy the file (or files) that you need from the
167scripts directory into this directory, for example
168
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -0500169MSDOS example:
170
171 copy scripts\makefile.msc makefile
172 copy scripts\pnglibconf.h.prebuilt pnglibconf.h
173
174UNIX example:
175
176 cp scripts/makefile.std makefile
177 cp scripts/pnglibconf.h.prebuilt pnglibconf.h
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600178
179Read the makefile to see if you need to change any source or
180target directories to match your preferences.
181
Glenn Randers-Pehrson10973a52010-10-16 19:40:09 -0500182Then read pnglibconf.dfa to see if you want to make any configuration
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600183changes.
184
Glenn Randers-Pehrson9c3ab682006-02-20 22:09:05 -0600185Then just run "make" which will create the libpng library in
186this directory and "make test" which will run a quick test that reads
187the "pngtest.png" file and writes a "pngout.png" file that should be
188identical to it. Look for "9782 zero samples" in the output of the
189test. For more confidence, you can run another test by typing
190"pngtest pngnow.png" and looking for "289 zero samples" in the output.
191Also, you can run "pngtest -m contrib/pngsuite/*.png" and compare
Glenn Randers-Pehrson6d8f3b01999-10-23 08:39:18 -0500192your output with the result shown in contrib/pngsuite/README.
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600193
194Most of the makefiles will allow you to run "make install" to
195put the library in its final resting place (if you want to
196do that, run "make install" in the zlib directory first if necessary).
Glenn Randers-Pehrsond1e8c862002-06-20 06:54:34 -0500197Some also allow you to run "make test-installed" after you have
Glenn Randers-Pehrson0cc2f952002-10-03 06:32:37 -0500198run "make install".
Glenn Randers-Pehrson08a33431998-03-07 06:06:55 -0600199
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500200VIII. Configuring libpng for 16-bit platforms
201
202You will want to look into zconf.h to tell zlib (and thus libpng) that
Glenn Randers-Pehrsonbc27b2f2015-03-09 09:11:00 -0500203it cannot allocate more than 64K at a time. Even if you can, the memory
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500204won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
205
206IX. Configuring for DOS
207
208For DOS users who only have access to the lower 640K, you will
209have to limit zlib's memory usage via a png_set_compression_mem_level()
210call. See zlib.h or zconf.h in the zlib library for more information.
211
212X. Configuring for Medium Model
213
214Libpng's support for medium model has been tested on most of the popular
215compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
216defined, and FAR gets defined to far in pngconf.h, and you should be
217all set. Everything in the library (except for zlib's structure) is
218expecting far data. You must use the typedefs with the p or pp on
219the end for pointers (or at least look at them and be careful). Make
220note that the rows of data are defined as png_bytepp, which is
221an "unsigned char far * far *".
222
223XI. Prepending a prefix to exported symbols
224
225Starting with libpng-1.6.0, you can configure libpng (when using the
226"configure" script) to prefix all exported symbols by means of the
227configuration option "--with-libpng-prefix=FOO_", where FOO_ can be any
228string beginning with a letter and containing only uppercase
229and lowercase letters, digits, and the underscore (i.e., a C language
230identifier). This creates a set of macros in pnglibconf.h, so this is
231transparent to applications; their function calls get transformed by
232the macros to use the modified names.
233
234XII. Configuring for compiler xxx:
235
236All includes for libpng are in pngconf.h. If you need to add, change
237or delete an include, this is the place to do it.
238The includes that are not needed outside libpng are placed in pngpriv.h,
239which is only used by the routines inside libpng itself.
240The files in libpng proper only include pngpriv.h and png.h, which
241in turn includes pngconf.h and, as of libpng-1.5.0, pnglibconf.h.
242As of libpng-1.5.0, pngpriv.h also includes three other private header
243files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material
244that previously appeared in the public headers.
245
246XIII. Removing unwanted object code
247
248There are a bunch of #define's in pngconf.h that control what parts of
249libpng are compiled. All the defines end in _SUPPORTED. If you are
250never going to use a capability, you can change the #define to #undef
251before recompiling libpng and save yourself code and data space, or
252you can turn off individual capabilities with defines that begin with
Glenn Randers-Pehrsone175eb12016-08-18 12:15:53 -0500253"PNG_NO_".
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500254
255In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
256
257You can also turn all of the transforms and ancillary chunk capabilities
258off en masse with compiler directives that define
259PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
260or all four, along with directives to turn on any of the capabilities that
261you do want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the
262extra transformations but still leave the library fully capable of reading
263and writing PNG files with all known public chunks. Use of the
264PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
265that is incapable of reading or writing ancillary chunks. If you are
266not using the progressive reading capability, you can turn that off
267with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
268capability, which you'll still have).
269
270All the reading and writing specific code are in separate files, so the
271linker should only grab the files it needs. However, if you want to
272make sure, or if you are building a stand alone library, all the
273reading files start with "pngr" and all the writing files start with "pngw".
274The files that don't match either (like png.c, pngtrans.c, etc.)
275are used for both reading and writing, and always need to be included.
276The progressive reader is in pngpread.c
277
278If you are creating or distributing a dynamically linked library (a .so
279or DLL file), you should not remove or disable any parts of the library,
280as this will cause applications linked with different versions of the
281library to fail if they call functions not available in your library.
282The size of the library itself should not be an issue, because only
283those sections that are actually used will be loaded into memory.
284
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500285XIV. Enabling or disabling hardware optimizations
286
luz.pazeb91c0e2018-02-09 06:57:29 -0500287Certain hardware capabilities, such as the Intel SSE instructions,
Glenn Randers-Pehrson857ef822017-07-06 20:17:09 -0500288are normally detected at run time. Enable them with configure options
289such as one of
290
291 --enable-arm-neon=yes
292 --enable-mips-msa=yes
293 --enable-intel-sse=yes
294 --enable-powerpc-vsx=yes
295
Glenn Randers-Pehrson50b6df52017-07-08 12:59:23 -0500296or enable them all at once with
297
298 --enable-hardware-optimizations=yes
299
Glenn Randers-Pehrsonecea6322017-07-09 19:35:10 -0500300or, if you are not using "configure", you can use one
301or more of
Glenn Randers-Pehrson857ef822017-07-06 20:17:09 -0500302
303 CPPFLAGS += "-DPNG_ARM_NEON"
304 CPPFLAGS += "-DPNG_MIPS_MSA"
305 CPPFLAGS += "-DPNG_INTEL_SSE"
306 CPPFLAGS += "-DPNG_POWERPC_VSX"
307
Glenn Randers-Pehrsonecea6322017-07-09 19:35:10 -0500308See for example scripts/makefile.linux-opt
309
Glenn Randers-Pehrson857ef822017-07-06 20:17:09 -0500310If you wish to avoid using them,
Glenn Randers-Pehrson50b6df52017-07-08 12:59:23 -0500311you can disable them via the configure option
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500312
Glenn Randers-Pehrson50b6df52017-07-08 12:59:23 -0500313 --disable-hardware-optimizations
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500314
Glenn Randers-Pehrson50b6df52017-07-08 12:59:23 -0500315to disable them all, or
316
317 --enable-intel-sse=no
318
319to disable a particular one,
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500320or via compiler-command options such as
321
322 CPPFLAGS += "-DPNG_ARM_NEON_OPT=0, -DPNG_MIPS_MSA_OPT=0,
323 -DPNG_INTEL_SSE_OPT=0, -DPNG_POWERPC_VSX_OPT=0"
324
Glenn Randers-Pehrson2b80b402017-07-08 19:25:08 -0500325If you are using cmake, hardware optimizations are "on"
326by default. To disable them, use
327
328 cmake . -DPNG_ARM_NEON=no -DPNG_INTEL_SSE=no \
329 -DPNG_MIPS_MSA=no -DPNG_POWERPC_VSX=no
330
331or disable them all at once with
332
333 cmake . -DPNG_HARDWARE_OPTIMIZATIONS=no
334
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500335XV. Changes to the build and configuration of libpng in libpng-1.5.x
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500336
337Details of internal changes to the library code can be found in the CHANGES
338file and in the GIT repository logs. These will be of no concern to the vast
339majority of library users or builders; however, the few who configure libpng
340to a non-default feature set may need to change how this is done.
341
342There should be no need for library builders to alter build scripts if
343these use the distributed build support - configure or the makefiles -
344however, users of the makefiles may care to update their build scripts
345to build pnglibconf.h where the corresponding makefile does not do so.
346
347Building libpng with a non-default configuration has changed completely.
348The old method using pngusr.h should still work correctly even though the
349way pngusr.h is used in the build has been changed; however, library
350builders will probably want to examine the changes to take advantage of
351new capabilities and to simplify their build system.
352
353A. Specific changes to library configuration capabilities
354
355The exact mechanism used to control attributes of API functions has
356changed. A single set of operating system independent macro definitions
357is used and operating system specific directives are defined in
358pnglibconf.h
359
360As part of this the mechanism used to choose procedure call standards on
361those systems that allow a choice has been changed. At present this only
362affects certain Microsoft (DOS, Windows) and IBM (OS/2) operating systems
363running on Intel processors. As before, PNGAPI is defined where required
364to control the exported API functions; however, two new macros, PNGCBAPI
365and PNGCAPI, are used instead for callback functions (PNGCBAPI) and
366(PNGCAPI) for functions that must match a C library prototype (currently
367only png_longjmp_ptr, which must match the C longjmp function.) The new
368approach is documented in pngconf.h
369
370Despite these changes, libpng 1.5.0 only supports the native C function
Glenn Randers-Pehrsone175eb12016-08-18 12:15:53 -0500371calling standard on those platforms tested so far ("__cdecl" on Microsoft
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500372Windows). This is because the support requirements for alternative
373calling conventions seem to no longer exist. Developers who find it
374necessary to set PNG_API_RULE to 1 should advise the mailing list
375(png-mng-implement) of this and library builders who use Openwatcom and
376therefore set PNG_API_RULE to 2 should also contact the mailing list.
377
378B. Changes to the configuration mechanism
379
380Prior to libpng-1.5.0 library builders who needed to configure libpng
381had either to modify the exported pngconf.h header file to add system
382specific configuration or had to write feature selection macros into
383pngusr.h and cause this to be included into pngconf.h by defining
384PNG_USER_CONFIG. The latter mechanism had the disadvantage that an
385application built without PNG_USER_CONFIG defined would see the
386unmodified, default, libpng API and thus would probably fail to link.
387
388These mechanisms still work in the configure build and in any makefile
389build that builds pnglibconf.h, although the feature selection macros
390have changed somewhat as described above. In 1.5.0, however, pngusr.h is
Glenn Randers-Pehrson91319c62014-07-04 11:46:17 -0500391processed only once, at the time the exported header file pnglibconf.h is
392built. pngconf.h no longer includes pngusr.h; therefore, pngusr.h is ignored
393after the build of pnglibconf.h and it is never included in an application
394build.
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500395
Glenn Randers-Pehrson44bda932014-09-18 09:25:50 -0500396The formerly used alternative of adding a list of feature macros to the
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500397CPPFLAGS setting in the build also still works; however, the macros will be
398copied to pnglibconf.h and this may produce macro redefinition warnings
399when the individual C files are compiled.
400
401All configuration now only works if pnglibconf.h is built from
402scripts/pnglibconf.dfa. This requires the program awk. Brian Kernighan
403(the original author of awk) maintains C source code of that awk and this
404and all known later implementations (often called by subtly different
405names - nawk and gawk for example) are adequate to build pnglibconf.h.
406The Sun Microsystems (now Oracle) program 'awk' is an earlier version
407and does not work; this may also apply to other systems that have a
408functioning awk called 'nawk'.
409
410Configuration options are now documented in scripts/pnglibconf.dfa. This
411file also includes dependency information that ensures a configuration is
Glenn Randers-Pehrson44bda932014-09-18 09:25:50 -0500412consistent; that is, if a feature is switched off, dependent features are
413also switched off. As a recommended alternative to using feature macros in
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500414pngusr.h a system builder may also define equivalent options in pngusr.dfa
415(or, indeed, any file) and add that to the configuration by setting
416DFA_XTRA to the file name. The makefiles in contrib/pngminim illustrate
Glenn Randers-Pehrson44bda932014-09-18 09:25:50 -0500417how to do this, and also illustrate a case where pngusr.h is still required.
418
419After you have built libpng, the definitions that were recorded in
420pnglibconf.h are available to your application (pnglibconf.h is included
421in png.h and gets installed alongside png.h and pngconf.h in your
422$PREFIX/include directory). Do not edit pnglibconf.h after you have built
423libpng, because than the settings would not accurately reflect the settings
424that were used to build libpng.
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500425
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500426XVI. Setjmp/longjmp issues
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500427
428Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
429is known to be not thread-safe on some platforms and we don't know of
430any platform where it is guaranteed to be thread-safe. Therefore, if
431your application is going to be using multiple threads, you should
432configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
433-DPNG_NO_SETJMP on your compile line, or with
434
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -0500435 #undef PNG_SETJMP_SUPPORTED
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500436
437in your pnglibconf.h or pngusr.h.
438
Glenn Randers-Pehrsond375ca52015-02-21 12:29:36 -0600439Starting with libpng-1.6.0, the library included a "simplified API".
440This requires setjmp/longjmp, so you must either build the library
441with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
442and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
443
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500444XVII. Common linking failures
Glenn Randers-Pehrson11c88032016-07-02 14:29:29 -0500445
446If your application fails to find libpng or zlib entries while linking:
447
448 Be sure "-lz" appears after "-lpng" on your linking command.
449
450 Be sure you have built libpng, zlib, and your application for the
451 same platform (e.g., 32-bit or 64-bit).
452
453 If you are using the vstudio project, observe the WARNING in
454 project/vstudio/README.txt.
455
Glenn Randers-Pehrsonf380ae52017-07-05 19:20:57 -0500456XVIII. Other sources of information about libpng:
Glenn Randers-Pehrson372cad02014-03-21 13:26:43 -0500457
Glenn Randers-Pehrsonf3abb2c2010-10-17 12:51:53 -0500458Further information can be found in the README and libpng-manual.txt
Glenn Randers-Pehrson9c3ab682006-02-20 22:09:05 -0600459files, in the individual makefiles, in png.h, and the manual pages
460libpng.3 and png.5.
Glenn Randers-Pehrson9cab7a22016-08-17 06:39:26 -0500461
462Copyright (c) 1998-2002,2006-2016 Glenn Randers-Pehrson
463This document is released under the libpng license.
464For conditions of distribution and use, see the disclaimer
465and license in png.h.