VirtualBox

source: vbox/trunk/src/libs/libpng-1.6.45/INSTALL@ 108378

最後變更 在這個檔案從108378是 107813,由 vboxsync 提交於 2 月 前

libpng-1.6.45: Applied and adjusted our libpng changes to 1.6.45. bugref:8515

檔案大小: 19.2 KB
 
1 Installing libpng
2
3Contents
4
5 I. Simple installation
6 II. Rebuilding the configure scripts
7 III. Using scripts/makefile*
8 IV. Using cmake
9 V. Directory structure
10 VI. Building with project files
11 VII. Building with makefiles
12 VIII. Configuring libpng for 16-bit platforms
13 IX. Configuring for DOS
14 X. Configuring for Medium Model
15 XI. Prepending a prefix to exported symbols
16 XII. Configuring for compiler xxx:
17 XIII. Removing unwanted object code
18 XIV. Enabling or disabling hardware optimizations
19 XV. Changes to the build and configuration of libpng in libpng-1.5.x
20 XVI. Setjmp/longjmp issues
21 XVII. Common linking failures
22 XVIII. Other sources of information about libpng
23
24I. Simple installation
25
26On Unix/Linux and similar systems, you can simply type
27
28 ./configure [--prefix=/path]
29 make check
30 make install
31
32and ignore the rest of this document. "/path" is the path to the directory
33where you want to install the libpng "lib", "include", and "bin"
34subdirectories.
35
36If you downloaded a GIT clone, you will need to run ./autogen.sh before
37running ./configure, to create "configure" and "Makefile.in" which are
38not included in the GIT repository.
39
40Note that "configure" is only included in the "*.tar" distributions and not
41in the "*.zip" or "*.7z" distributions. If you downloaded one of those
42distributions, see "Building with project files" or "Building with makefiles",
43below.
44
45II. Rebuilding the configure scripts
46
47If configure does not work on your system, or if you have a need to
48change configure.ac or Makefile.am, and you have a reasonably
49up-to-date set of tools, running ./autogen.sh in a git clone before
50running ./configure may fix the problem. To be really sure that you
51aren't using any of the included pre-built scripts, especially if you
52are building from a tar distribution instead of a git distribution,
53do this:
54
55 ./configure --enable-maintainer-mode
56 make maintainer-clean
57 ./autogen.sh --maintainer --clean
58 ./autogen.sh --maintainer
59 ./configure [--prefix=/path] [other options]
60 make
61 make install
62 make check
63
64III. Using scripts/makefile*
65
66Instead, you can use one of the custom-built makefiles in the
67"scripts" directory
68
69 cp scripts/pnglibconf.h.prebuilt pnglibconf.h
70 cp scripts/makefile.system makefile
71 make test
72 make install
73
74The files that are presently available in the scripts directory
75are listed and described in scripts/README.txt.
76
77Or you can use one of the "projects" in the "projects" directory.
78
79Before installing libpng, you must first install zlib, if it
80is not already on your system. zlib can usually be found
81wherever you got libpng; otherwise go to https://zlib.net/. You can
82place zlib in the same directory as libpng or in another directory.
83
84If your system already has a preinstalled zlib you will still need
85to have access to the zlib.h and zconf.h include files that
86correspond to the version of zlib that's installed.
87
88If you wish to test with a particular zlib that is not first in the
89standard library search path, put ZLIBLIB, ZLIBINC, CPPFLAGS, LDFLAGS,
90and LD_LIBRARY_PATH in your environment before running "make test"
91or "make distcheck":
92
93 ZLIBLIB=/path/to/lib export ZLIBLIB
94 ZLIBINC=/path/to/include export ZLIBINC
95 CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
96 LDFLAGS="-L$ZLIBLIB" export LDFLAGS
97 LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
98
99If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
100in your environment and type
101
102 make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test
103
104IV. Using cmake
105
106If you want to use "cmake" (see www.cmake.org), type
107
108 cmake . -DCMAKE_INSTALL_PREFIX=/path
109 make
110 make install
111
112As when using the simple configure method described above, "/path" points to
113the installation directory where you want to put the libpng "lib", "include",
114and "bin" subdirectories.
115
116V. Directory structure
117
118You can rename the directories that you downloaded (they
119might be called "libpng-x.y.z" or "libpngNN" and "zlib-1.2.8"
120or "zlib128") so that you have directories called "zlib" and "libpng".
121
122Your directory structure should look like this:
123
124 .. (the parent directory)
125 libpng (this directory)
126 INSTALL (this file)
127 README
128 *.h, *.c => libpng source files
129 CMakeLists.txt => "cmake" script
130 ci
131 ci_*.sh
132 configuration files:
133 configure.ac, configure, Makefile.am, Makefile.in,
134 autogen.sh, config.guess, ltmain.sh, missing, libpng.pc.in,
135 libpng-config.in, aclocal.m4, config.h.in, config.sub,
136 depcomp, install-sh, mkinstalldirs, test-pngtest.sh, etc.
137 contrib
138 arm-neon, conftest, examples, gregbook, libtests, pngminim,
139 pngminus, pngsuite, tools, visupng
140 projects
141 owatcom, visualc71, vstudio
142 scripts
143 makefile.*
144 *.def (module definition files)
145 etc.
146 pngtest.png
147 etc.
148 zlib
149 README, *.h, *.c, contrib, etc.
150
151If the line endings in the files look funny, you may wish to get the other
152distribution of libpng. It is available in both tar.gz (UNIX style line
153endings) and zip (DOS style line endings) formats.
154
155VI. Building with project files
156
157If you are building libpng with Microsoft Visual Studio, you can enter
158the directory projects\visualc71 or projects\vstudio and follow the
159instructions in README.txt.
160
161Otherwise, enter the zlib directory and follow the instructions in
162zlib/README, then come back here and run "configure" or choose the
163appropriate makefile in the scripts directory.
164
165VII. Building with makefiles
166
167Copy the file (or files) that you need from the
168scripts directory into this directory, for example
169
170UNIX example:
171
172 cp scripts/makefile.std Makefile
173 make
174
175Windows example:
176
177 nmake -f scripts\makefile.vcwin32
178
179Read the makefile to see if you need to change any source or
180target directories to match your preferences.
181
182Then read pnglibconf.dfa to see if you want to make any configuration
183changes.
184
185Then 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
192your output with the result shown in contrib/pngsuite/README.
193
194Most of the makefiles used to allow you to run "make install" to put
195the library in its final resting place, but that feature is no longer
196supported. The only tested and supported manners to install libpng are
197the conventional build and install procedures driven by the configure
198script or by the CMake file.
199
200VIII. Configuring for DOS and other 16-bit platforms
201
202Officially, the support for 16-bit platforms has been removed.
203
204For DOS users who only have access to the lower 640K, you will
205have to limit zlib's memory usage via a png_set_compression_mem_level()
206call. See zlib.h or zconf.h in the zlib library for more information.
207
208You may be or may not be in luck if you target the "large" memory model,
209but all the smaller models ("small", "compact" and "medium") are known
210to be unworkable. For DOS users who have access beyond the lower 640K,
211a "flat" 32-bit DOS model (such as DJGPP) is strongly recommended.
212
213For DOS users who only have access to the lower 640K, you will have to
214limit zlib's memory usage via a png_set_compression_mem_level() call.
215You will also have to look into zconf.h to tell zlib (and thus libpng)
216that it cannot allocate more than 64K at a time. Even if you can, the
217memory won't be accessible. Therefore, you should limit zlib and libpng
218to 64K by defining MAXSEG_64K.
219
220IX. Prepending a prefix to exported symbols
221
222Starting with libpng-1.6.0, you can configure libpng (when using the
223"configure" script) to prefix all exported symbols by means of the
224configuration option "--with-libpng-prefix=FOO_", where FOO_ can be any
225string beginning with a letter and containing only uppercase
226and lowercase letters, digits, and the underscore (i.e., a C language
227identifier). This creates a set of macros in pnglibconf.h, so this is
228transparent to applications; their function calls get transformed by
229the macros to use the modified names.
230
231X. Configuring for compiler xxx:
232
233All includes for libpng are in pngconf.h. If you need to add, change
234or delete an include, this is the place to do it.
235The includes that are not needed outside libpng are placed in pngpriv.h,
236which is only used by the routines inside libpng itself.
237The files in libpng proper only include pngpriv.h and png.h, which
238in turn includes pngconf.h and, as of libpng-1.5.0, pnglibconf.h.
239As of libpng-1.5.0, pngpriv.h also includes three other private header
240files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material
241that previously appeared in the public headers.
242
243XI. Removing unwanted object code
244
245There are a bunch of #define's in pngconf.h that control what parts of
246libpng are compiled. All the defines end in _SUPPORTED. If you are
247never going to use a capability, you can change the #define to #undef
248before recompiling libpng and save yourself code and data space, or
249you can turn off individual capabilities with defines that begin with
250"PNG_NO_".
251
252In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
253
254You can also turn all of the transforms and ancillary chunk capabilities
255off en masse with compiler directives that define
256PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
257or all four, along with directives to turn on any of the capabilities that
258you do want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the
259extra transformations but still leave the library fully capable of reading
260and writing PNG files with all known public chunks. Use of the
261PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
262that is incapable of reading or writing ancillary chunks. If you are
263not using the progressive reading capability, you can turn that off
264with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
265capability, which you'll still have).
266
267All the reading and writing specific code are in separate files, so the
268linker should only grab the files it needs. However, if you want to
269make sure, or if you are building a stand alone library, all the
270reading files start with "pngr" and all the writing files start with "pngw".
271The files that don't match either (like png.c, pngtrans.c, etc.)
272are used for both reading and writing, and always need to be included.
273The progressive reader is in pngpread.c
274
275If you are creating or distributing a dynamically linked library (a .so
276or DLL file), you should not remove or disable any parts of the library,
277as this will cause applications linked with different versions of the
278library to fail if they call functions not available in your library.
279The size of the library itself should not be an issue, because only
280those sections that are actually used will be loaded into memory.
281
282XII. Enabling or disabling hardware optimizations
283
284Certain hardware capabilities, such as the Intel SSE instructions,
285are normally detected at run time. Enable them with configure options
286such as one of
287
288 --enable-arm-neon=yes
289 --enable-mips-msa=yes
290 --enable-intel-sse=yes
291 --enable-powerpc-vsx=yes
292
293or enable them all at once with
294
295 --enable-hardware-optimizations=yes
296
297or, if you are not using "configure", you can use one
298or more of
299
300 CPPFLAGS += "-DPNG_ARM_NEON"
301 CPPFLAGS += "-DPNG_MIPS_MSA"
302 CPPFLAGS += "-DPNG_INTEL_SSE"
303 CPPFLAGS += "-DPNG_POWERPC_VSX"
304
305See for example scripts/makefile.linux-opt
306
307If you wish to avoid using them,
308you can disable them via the configure option
309
310 --disable-hardware-optimizations
311
312to disable them all, or
313
314 --enable-intel-sse=no
315
316to disable a particular one,
317or via compiler-command options such as
318
319 CPPFLAGS += "-DPNG_ARM_NEON_OPT=0, -DPNG_MIPS_MSA_OPT=0,
320 -DPNG_INTEL_SSE_OPT=0, -DPNG_POWERPC_VSX_OPT=0"
321
322If you are using cmake, hardware optimizations are "on"
323by default. To disable them, use
324
325 cmake . -DPNG_ARM_NEON=no -DPNG_INTEL_SSE=no \
326 -DPNG_MIPS_MSA=no -DPNG_POWERPC_VSX=no
327
328or disable them all at once with
329
330 cmake . -DPNG_HARDWARE_OPTIMIZATIONS=no
331
332XIII. Changes to the build and configuration of libpng in libpng-1.5.x
333
334Details of internal changes to the library code can be found in the CHANGES
335file and in the GIT repository logs. These will be of no concern to the vast
336majority of library users or builders; however, the few who configure libpng
337to a non-default feature set may need to change how this is done.
338
339There should be no need for library builders to alter build scripts if
340these use the distributed build support - configure or the makefiles -
341however, users of the makefiles may care to update their build scripts
342to build pnglibconf.h where the corresponding makefile does not do so.
343
344Building libpng with a non-default configuration has changed completely.
345The old method using pngusr.h should still work correctly even though the
346way pngusr.h is used in the build has been changed; however, library
347builders will probably want to examine the changes to take advantage of
348new capabilities and to simplify their build system.
349
350A. Specific changes to library configuration capabilities
351
352The exact mechanism used to control attributes of API functions has
353changed. A single set of operating system independent macro definitions
354is used and operating system specific directives are defined in
355pnglibconf.h
356
357As part of this the mechanism used to choose procedure call standards on
358those systems that allow a choice has been changed. At present this only
359affects certain Microsoft (DOS, Windows) and IBM (OS/2) operating systems
360running on Intel processors. As before, PNGAPI is defined where required
361to control the exported API functions; however, two new macros, PNGCBAPI
362and PNGCAPI, are used instead for callback functions (PNGCBAPI) and
363(PNGCAPI) for functions that must match a C library prototype (currently
364only png_longjmp_ptr, which must match the C longjmp function.) The new
365approach is documented in pngconf.h
366
367Despite these changes, libpng 1.5.0 only supports the native C function
368calling standard on those platforms tested so far ("__cdecl" on Microsoft
369Windows). This is because the support requirements for alternative
370calling conventions seem to no longer exist. Developers who find it
371necessary to set PNG_API_RULE to 1 should advise the mailing list
372(png-mng-implement) of this and library builders who use Openwatcom and
373therefore set PNG_API_RULE to 2 should also contact the mailing list.
374
375B. Changes to the configuration mechanism
376
377Prior to libpng-1.5.0 library builders who needed to configure libpng
378had either to modify the exported pngconf.h header file to add system
379specific configuration or had to write feature selection macros into
380pngusr.h and cause this to be included into pngconf.h by defining
381PNG_USER_CONFIG. The latter mechanism had the disadvantage that an
382application built without PNG_USER_CONFIG defined would see the
383unmodified, default, libpng API and thus would probably fail to link.
384
385These mechanisms still work in the configure build and in any makefile
386build that builds pnglibconf.h, although the feature selection macros
387have changed somewhat as described above. In 1.5.0, however, pngusr.h is
388processed only once, at the time the exported header file pnglibconf.h is
389built. pngconf.h no longer includes pngusr.h; therefore, pngusr.h is ignored
390after the build of pnglibconf.h and it is never included in an application
391build.
392
393The formerly used alternative of adding a list of feature macros to the
394CPPFLAGS setting in the build also still works; however, the macros will be
395copied to pnglibconf.h and this may produce macro redefinition warnings
396when the individual C files are compiled.
397
398All configuration now only works if pnglibconf.h is built from
399scripts/pnglibconf.dfa. This requires the program awk. Brian Kernighan
400(the original author of awk) maintains C source code of that awk and this
401and all known later implementations (often called by subtly different
402names - nawk and gawk for example) are adequate to build pnglibconf.h.
403The Sun Microsystems (now Oracle) program 'awk' is an earlier version
404and does not work; this may also apply to other systems that have a
405functioning awk called 'nawk'.
406
407Configuration options are now documented in scripts/pnglibconf.dfa. This
408file also includes dependency information that ensures a configuration is
409consistent; that is, if a feature is switched off, dependent features are
410also switched off. As a recommended alternative to using feature macros in
411pngusr.h a system builder may also define equivalent options in pngusr.dfa
412(or, indeed, any file) and add that to the configuration by setting
413DFA_XTRA to the file name. The makefiles in contrib/pngminim illustrate
414how to do this, and also illustrate a case where pngusr.h is still required.
415
416After you have built libpng, the definitions that were recorded in
417pnglibconf.h are available to your application (pnglibconf.h is included
418in png.h and gets installed alongside png.h and pngconf.h in your
419$PREFIX/include directory). Do not edit pnglibconf.h after you have built
420libpng, because than the settings would not accurately reflect the settings
421that were used to build libpng.
422
423XIV. Setjmp/longjmp issues
424
425Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
426is known to be not thread-safe on some platforms and we don't know of
427any platform where it is guaranteed to be thread-safe. Therefore, if
428your application is going to be using multiple threads, you should
429configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
430-DPNG_NO_SETJMP on your compile line, or with
431
432 #undef PNG_SETJMP_SUPPORTED
433
434in your pnglibconf.h or pngusr.h.
435
436Starting with libpng-1.6.0, the library included a "simplified API".
437This requires setjmp/longjmp, so you must either build the library
438with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
439and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
440
441XV. Common linking failures
442
443If your application fails to find libpng or zlib entries while linking:
444
445 Be sure "-lz" appears after "-lpng" on your linking command.
446
447 Be sure you have built libpng, zlib, and your application for the
448 same platform (e.g., 32-bit or 64-bit).
449
450 If you are using the vstudio project, observe the WARNING in
451 project/vstudio/README.txt.
452
453XVI. Other sources of information about libpng:
454
455Further information can be found in the README and libpng-manual.txt
456files, in the individual makefiles, in png.h, and the manual pages
457libpng.3 and png.5.
458
459Copyright (c) 2022 Cosmin Truta
460Copyright (c) 1998-2002,2006-2016 Glenn Randers-Pehrson
461This document is released under the libpng license.
462For conditions of distribution and use, see the disclaimer
463and license in png.h.
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette