summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ANNOUNCE14
-rw-r--r--CHANGES12
-rw-r--r--libpng-1.5.0beta17.txt2
-rw-r--r--libpng.32
-rw-r--r--png.h112
-rw-r--r--pngconf.h914
-rw-r--r--pngdebug.h18
-rw-r--r--pngpriv.h112
-rw-r--r--scripts/checksym.awk59
-rw-r--r--scripts/checksym.dfn102
-rw-r--r--scripts/def.dfn32
-rw-r--r--scripts/options.awk566
-rw-r--r--scripts/pnglconf.dfa329
-rw-r--r--scripts/pnglconf.h155
-rw-r--r--scripts/pngwin.def3
-rw-r--r--scripts/pngwin.dfn38
-rw-r--r--scripts/symbols.def5
-rw-r--r--scripts/symbols.dfn58
18 files changed, 1452 insertions, 1081 deletions
diff --git a/ANNOUNCE b/ANNOUNCE
index 3621e6489..a7983d61b 100644
--- a/ANNOUNCE
+++ b/ANNOUNCE
@@ -150,7 +150,19 @@ version 1.5.0beta17 [April 17, 2010]
PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
Added some "(long)" typecasts to printf calls in png_handle_cHRM().
-Send comments/corrections/commendations to png-mng-implement at lists.sf.net
+version 1.5.0freeze01 [April 17, 2010]
+ Freeze build-time only configuration in the build.
+ In all prior versions of libpng most configuration options
+ controlled by compiler #defines had to be repeated by the
+ application code that used libpng. This patch changes this
+ so that compilation options that can only be changed at build
+ time are frozen in the build. Options that are compiler
+ dependent (and those that are system dependent) are evaluated
+ each time - pngconf.h holds these. Options that can be changed
+ per-file in the application are in png.h. Frozen options are
+ in the new installed header file pnglconf.h
+
+Send comments/corrections/commendations to png-mng-implement at lists.sf.net:
(subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe) or to glennrp at users.sourceforge.net
diff --git a/CHANGES b/CHANGES
index 36a488efc..1f04649c8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2622,7 +2622,7 @@ version 1.5.0beta16 [April 1, 2010]
Combined multiple png_warning() calls for a single error.
Restored the macro definition of png_check_sig().
-version 1.5.0beta17 [April 17, 2010]
+version 1.5.0beta17 [April 16, 2010]
Added some "(long)" typecasts to printf calls in png_handle_cHRM().
Documented the fact that png_set_dither() was disabled since libpng-1.4.0.
Reenabled png_set_dither() but renamed it to png_set_quantize() to reflect
@@ -2630,6 +2630,16 @@ version 1.5.0beta17 [April 17, 2010]
the PNG_DITHER_[RED,GREEN_BLUE]_BITS macros to
PNG_QUANTIZE_[RED,GREEN,BLUE]_BITS.
Added some "(long)" typecasts to printf calls in png_handle_cHRM().
+ Freeze build-time only configuration in the build.
+ In all prior versions of libpng most configuration options
+ controlled by compiler #defines had to be repeated by the
+ application code that used libpng. This patch changes this
+ so that compilation options that can only be changed at build
+ time are frozen in the build. Options that are compiler
+ dependent (and those that are system dependent) are evaluated
+ each time - pngconf.h holds these. Options that can be changed
+ per-file in the application are in png.h. Frozen options are
+ in the new installed header file pnglconf.h
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit
diff --git a/libpng-1.5.0beta17.txt b/libpng-1.5.0beta17.txt
index 07642f2da..48f5b2cf1 100644
--- a/libpng-1.5.0beta17.txt
+++ b/libpng-1.5.0beta17.txt
@@ -1168,7 +1168,7 @@ recommended that PNG viewers support gamma correction.
If you need to reduce an RGB file to a paletted file, or if a paletted
file has more entries then will fit on your screen, png_set_quantize()
-will do that. Note that this is a simple match dither that merely
+will do that. Note that this is a simple match quantization that merely
finds the closest color available. This should work fairly well with
optimized palettes, and fairly badly with linear color cubes. If you
pass a palette that is larger then maximum_colors, the file will
diff --git a/libpng.3 b/libpng.3
index c3a5a8a0c..d6686b700 100644
--- a/libpng.3
+++ b/libpng.3
@@ -1957,7 +1957,7 @@ recommended that PNG viewers support gamma correction.
If you need to reduce an RGB file to a paletted file, or if a paletted
file has more entries then will fit on your screen, png_set_quantize()
-will do that. Note that this is a simple match dither that merely
+will do that. Note that this is a simple match quantization that merely
finds the closest color available. This should work fairly well with
optimized palettes, and fairly badly with linear color cubes. If you
pass a palette that is larger then maximum_colors, the file will
diff --git a/png.h b/png.h
index 2e891ed7b..b2b4948e1 100644
--- a/png.h
+++ b/png.h
@@ -386,13 +386,28 @@
*/
#define PNG_LIBPNG_VER 10500 /* 1.5.0 */
+/* Library configuration: these options cannot be changed after
+ * the library has been built.
+ */
+#ifndef PNGLCONF_H
+# include "pnglconf.h"
+#endif
+
#ifndef PNG_VERSION_INFO_ONLY
+/* Standard header files (not needed for the version info) */
+# ifdef PNG_STDIO_SUPPORTED
+# include <stdio.h>
+# endif
+# ifdef PNG_SETJMP_SUPPORTED
+# include <setjmp.h>
+# endif
+
/* Include the compression library's header */
# include "zlib.h"
-#endif
-/* Include all user configurable info, including optional assembler routines */
-#include "pngconf.h"
+/* Machine specific configuration. */
+# include "pngconf.h"
+#endif
/*
* Added at libpng-1.2.8
@@ -408,7 +423,7 @@
* StringFileInfo block must contain a SpecialBuild string.
*/
-#ifdef PNG_USER_PRIVATEBUILD
+#ifdef PNG_USER_PRIVATEBUILD /* From pnglconf.h */
# define PNG_LIBPNG_BUILD_TYPE \
(PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
#else
@@ -427,17 +442,56 @@
extern "C" {
#endif /* __cplusplus */
-/* This file is arranged in several sections. The first section contains
- * structure and type definitions. The second section contains the external
- * library functions, while the third has the internal library functions,
- * which applications aren't expected to use directly.
- */
-
/* Version information for C files, stored in png.c. This had better match
* the version above.
*/
#define png_libpng_ver png_get_header_ver(NULL)
+/* This file is arranged in several sections:
+ *
+ * 1. Any configuration options that can be specified by for the application
+ * code when it is built. (Build time configuration is in pnglconf.h)
+ * 2. Type definitions (base types are defined in pngconf.h), structure
+ * definitions.
+ * 3. Exported library functions.
+ *
+ * The library source code has additional files (principally pngpriv.h) that
+ * allow configuration of the library.
+ */
+/* Section 1: run time configuration
+ * See pnglconf.h for build time configuration
+ *
+ * Run time configuration allows the application to choose between
+ * implementations of certain arithmetic APIs. The default is set
+ * at build time and recorded in pnglconf.h, but it is safe to
+ * override these (and only these) settings. Note that this won't
+ * change what the library does, only application code, and the
+ * settings can (and probably should) be made on a per-file basis
+ * by setting the #defines before including png.h
+ *
+ * Use macros to read integers from PNG data or use the exported
+ * functions?
+ * PNG_USE_READ_MACROS: use the macros (see below) Note that
+ * the macros evaluate their argument multiple times.
+ * PNG_NO_USE_READ_MACROS: call the relevant library function.
+ *
+ * Use the alternative algorithm for compositing alpha samples that
+ * does not use division?
+ * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'
+ * algorithm.
+ * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.
+ *
+ * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is
+ * false?
+ * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error
+ * APIs to png_warning.
+ * Otherwise the calls are mapped to png_error.
+ */
+
+/* Section 2: type definitions, including structures and compile time
+ * constants.
+ * See pngconf.h for base types that vary by machine/system
+ */
/* Three color definitions. The order of the red, green, and blue, (and the
* exact size) is not important, although the size of the fields need to
* be png_byte or png_uint_16 (as defined below).
@@ -784,7 +838,8 @@ typedef png_structp version_1_5_0beta17;
typedef png_struct FAR * FAR * png_structpp;
-/* Here are the function definitions most commonly used. This is not
+/* Section 3: exported functions
+ * Here are the function definitions most commonly used. This is not
* the place to find out how to use libpng. See libpng.txt for the
* full explanation, see example.c for the summary. This just provides
* a simple one line description of the use of each function.
@@ -1398,7 +1453,7 @@ extern PNG_EXPORT(void,png_free_default,(png_structp png_ptr,
png_voidp ptr),,101);
#endif
-#ifndef PNG_NO_ERROR_TEXT
+#ifdef PNG_ERROR_TEXT_SUPPORTED
/* Fatal error in PNG image of libpng - can't continue */
extern PNG_EXPORT(void,png_error,(png_structp png_ptr,
png_const_charp error_message),PNG_NORETURN,102);
@@ -1423,15 +1478,25 @@ extern PNG_EXPORT(void,png_chunk_warning,(png_structp png_ptr,
#ifdef PNG_BENIGN_ERRORS_SUPPORTED
/* Benign error in libpng. Can continue, but may have a problem.
* User can choose whether to handle as a fatal error or as a warning. */
+# undef png_benign_error
extern PNG_EXPORT(void,png_benign_error,(png_structp png_ptr,
png_const_charp warning_message),,107);
/* Same, chunk name is prepended to message. */
+# undef png_chunk_benign_error
extern PNG_EXPORT(void,png_chunk_benign_error,(png_structp png_ptr,
png_const_charp warning_message),,108);
extern PNG_EXPORT(void,png_set_benign_errors,(png_structp png_ptr,
int allowed),,109);
+#else
+# ifdef PNG_ALLOW_BENIGN_ERRORS
+# define png_benign_error png_warning
+# define png_chunk_benign_error png_chunk_warning
+# else
+# define png_benign_error png_error
+# define png_chunk_benign_error png_chunk_error
+# endif
#endif
/* The png_set_<chunk> functions are for storing values in the png_info_struct.
@@ -1851,7 +1916,7 @@ extern PNG_EXPORT(png_alloc_size_t,png_get_chunk_malloc_max,
(png_structp png_ptr),,192);
#endif
-#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
+#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
PNG_EXPORT(png_uint_32,png_get_pixels_per_inch,(png_structp png_ptr,
png_infop info_ptr),,193);
@@ -1872,7 +1937,7 @@ PNG_EXPORT(png_uint_32,png_get_pHYs_dpi,(png_structp png_ptr,
png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,
int *unit_type),,198);
# endif /* PNG_pHYs_SUPPORTED */
-#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
+#endif /* PNG_INCH_CONVERSIONS_SUPPORTED && PNG_FLOATING_POINT_SUPPORTED */
/* Added in libpng-1.4.0 */
#ifdef PNG_IO_STATE_SUPPORTED
@@ -1943,7 +2008,6 @@ extern PNG_EXPORT(png_bytep,png_get_io_chunk_name,(png_structp png_ptr),,200);
* The png_get_int_32() routine assumes we are using two's complement
* format for negative values, which is almost certainly true.
*/
-/* We could make special-case BIG_ENDIAN macros that do direct reads here */
# define png_get_uint_32(buf) \
(((png_uint_32)(*(buf)) << 24) + \
((png_uint_32)(*((buf) + 1)) << 16) + \
@@ -1959,20 +2023,21 @@ extern PNG_EXPORT(png_bytep,png_get_io_chunk_name,(png_structp png_ptr),,200);
((png_int_32)(*((buf) + 2)) << 8) + \
((png_int_32)(*((buf) + 3))))
# endif
-#else
+#endif
extern PNG_EXPORT(png_uint_32,png_get_uint_32,(png_bytep buf),,201);
extern PNG_EXPORT(png_uint_16,png_get_uint_16,(png_bytep buf),,202);
# ifdef PNG_GET_INT_32_SUPPORTED
extern PNG_EXPORT(png_int_32,png_get_int_32,(png_bytep buf),,203);
# endif
-#endif
extern PNG_EXPORT(png_uint_32,png_get_uint_31,(png_structp png_ptr,
png_bytep buf),,204);
/* No png_get_int_16 -- may be added if there's a real need for it. */
/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
extern PNG_EXPORT(void,png_save_uint_32,(png_bytep buf, png_uint_32 i),,205);
+#ifdef PNG_SAVE_INT_32_SUPPORTED
extern PNG_EXPORT(void,png_save_int_32,(png_bytep buf, png_int_32 i),,206);
+#endif
/* Place a 16-bit number into a buffer in PNG byte order.
* The parameter is declared unsigned int, not png_uint_16,
@@ -1988,19 +2053,6 @@ extern PNG_EXPORT(void,png_save_uint_16,(png_bytep buf, unsigned int i),,207);
PNG_EXPORT_LAST_ORDINAL(207);
#endif
-/* ************************************************************************* */
-
-/* Various modes of operation. Note that after an init, mode is set to
- * zero automatically when the structure is created.
- */
-#define PNG_HAVE_IHDR 0x01
-#define PNG_HAVE_PLTE 0x02
-#define PNG_HAVE_IDAT 0x04
-#define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */
-#define PNG_HAVE_IEND 0x10
-#define PNG_HAVE_gAMA 0x20
-#define PNG_HAVE_cHRM 0x40
-
#ifdef __cplusplus
}
#endif
diff --git a/pngconf.h b/pngconf.h
index 37d1a3ffa..aeb7af61d 100644
--- a/pngconf.h
+++ b/pngconf.h
@@ -22,152 +22,40 @@
#ifndef PNGCONF_H
#define PNGCONF_H
-#ifndef PNG_NO_LIMITS_H
-# include <limits.h>
-#endif
-
-/*
- * Added at libpng-1.2.8
- *
- * PNG_USER_CONFIG has to be defined on the compiler command line. This
- * includes the resource compiler for Windows DLL configurations.
+/* Need the time information for converting tIME chunks, it
+ * defines struct tm:
*/
-#ifdef PNG_USER_CONFIG
-# ifndef PNG_USER_PRIVATEBUILD
-# define PNG_USER_PRIVATEBUILD
-# endif
-# include "pngusr.h"
+#ifdef PNG_CONVERT_tIME_SUPPORTED
+ /* "time.h" functions are not supported on WindowsCE */
+# include <time.h>
#endif
-/*
- * If you create a private DLL you need to define in "pngusr.h" the followings:
- * #define PNG_USER_PRIVATEBUILD <Describes by whom and why this version of
- * the DLL was built>
- * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
- * #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
- * distinguish your DLL from those of the official release. These
- * correspond to the trailing letters that come after the version
- * number and must match your private DLL name>
- * e.g. // private DLL "libpng13gx.dll"
- * #define PNG_USER_DLLFNAME_POSTFIX "gx"
- *
- * The following macros are also at your disposal if you want to complete the
- * DLL VERSIONINFO structure.
- * - PNG_USER_VERSIONINFO_COMMENTS
- * - PNG_USER_VERSIONINFO_COMPANYNAME
- * - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
- */
-
-#ifdef __STDC__
-# ifdef SPECIALBUILD
-# pragma message("PNG_LIBPNG_SPECIALBUILD (and deprecated SPECIALBUILD) \
- are now LIBPNG reserved macros. Use PNG_USER_PRIVATEBUILD instead.")
-# endif
-
-# ifdef PRIVATEBUILD
-# pragma message("PRIVATEBUILD is deprecated.\
- Use PNG_USER_PRIVATEBUILD instead.")
-# define PNG_USER_PRIVATEBUILD PRIVATEBUILD
-# endif
-#endif /* __STDC__ */
-
-/* End of material added to libpng-1.2.8 */
-
-#ifndef PNG_VERSION_INFO_ONLY
-
-/* This is the size of the compression buffer, and thus the size of
- * an IDAT chunk. Make this whatever size you feel is best for your
- * machine. One of these will be allocated per png_struct. When this
- * is full, it writes the data to the disk, and does some other
- * calculations. Making this an extremely small size will slow
- * the library down, but you may want to experiment to determine
- * where it becomes significant, if you are concerned with memory
- * usage. Note that zlib allocates at least 32Kb also. For readers,
- * this describes the size of the buffer available to read the data in.
- * Unless this gets smaller than the size of a row (compressed),
- * it should not make much difference how big this is.
+/* PNG_NO_LIMITS_H may be used to turn off the use of the standard C
+ * definition file for machine specific limits, this may impact the
+ * correctness of the definitons below (see uses of INT_MAX).
*/
-
-#ifndef PNG_ZBUF_SIZE
-# define PNG_ZBUF_SIZE 8192
-#endif
-
-/* Enable if you want a write-only libpng */
-
-#ifndef PNG_NO_READ_SUPPORTED
-# define PNG_READ_SUPPORTED
-#endif
-
-/* Enable if you want a read-only libpng */
-
-#ifndef PNG_NO_WRITE_SUPPORTED
-# define PNG_WRITE_SUPPORTED
-#endif
-
-/* Enabled in 1.4.0. */
-#ifdef PNG_ALLOW_BENIGN_ERRORS
-# define png_benign_error png_warning
-# define png_chunk_benign_error png_chunk_warning
-#else
-# ifndef PNG_BENIGN_ERRORS_SUPPORTED
-# define png_benign_error png_error
-# define png_chunk_benign_error png_chunk_error
-# endif
-#endif
-
-/* Added at libpng version 1.4.0 */
-#if !defined(PNG_NO_WARNINGS) && !defined(PNG_WARNINGS_SUPPORTED)
-# define PNG_WARNINGS_SUPPORTED
-#endif
-
-/* Added at libpng version 1.4.0 */
-#if !defined(PNG_NO_ERROR_TEXT) && !defined(PNG_ERROR_TEXT_SUPPORTED)
-# define PNG_ERROR_TEXT_SUPPORTED
-#endif
-
-/* Added at libpng version 1.4.0 */
-#if !defined(PNG_NO_CHECK_cHRM) && !defined(PNG_CHECK_cHRM_SUPPORTED)
-# define PNG_CHECK_cHRM_SUPPORTED
-#endif
-
-/* Added at libpng version 1.4.0 */
-#if !defined(PNG_NO_ALIGNED_MEMORY) && !defined(PNG_ALIGNED_MEMORY_SUPPORTED)
-# define PNG_ALIGNED_MEMORY_SUPPORTED
+#ifndef PNG_NO_LIMITS_H
+# include <limits.h>
#endif
-/* Enabled by default in 1.2.0. You can disable this if you don't need to
- * support PNGs that are embedded in MNG datastreams
+/* This controls optimization of the reading of 16 and 32 bit values
+ * from PNG files. It can be set on a per-app-file basis - it
+ * just changes whether a macro is used to the function is called.
+ * The library builder sets the default.
*/
-#ifndef PNG_NO_MNG_FEATURES
-# ifndef PNG_MNG_FEATURES_SUPPORTED
-# define PNG_MNG_FEATURES_SUPPORTED
-# endif
-#endif
-
-/* Added at libpng version 1.4.0 */
-#ifndef PNG_NO_FLOATING_POINT_SUPPORTED
-# ifndef PNG_FLOATING_POINT_SUPPORTED
-# define PNG_FLOATING_POINT_SUPPORTED
+#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
+# if PNG_DEFAULT_READ_MACROS
+# define PNG_USE_READ_MACROS
# endif
#endif
-/* Added at libpng-1.4.0beta49 for testing (this test is no longer used
- * in libpng and png_calloc() is always present)
- */
-#define PNG_CALLOC_SUPPORTED
-
-/* If you are running on a machine where you cannot allocate more
- * than 64K of memory at once, uncomment this. While libpng will not
- * normally need that much memory in a chunk (unless you load up a very
- * large file), zlib needs to know how big of a chunk it can use, and
- * libpng thus makes sure to check any memory allocation to verify it
- * will fit into memory.
-#define PNG_MAX_MALLOC_64K
+/* COMPILER SPECIIFC OPTIONS.
+ *
+ * These options are provided so that a variety of difficult compilers
+ * can be used. Some are fixed at build time (e.g. PNG_API_RULE
+ * below) but still have compiler specific implementations, others
+ * may be changed on a per-file basis when compiling against libpng.
*/
-#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
-# define PNG_MAX_MALLOC_64K
-#endif
-
/* This macro protects us against machines that don't have function
* prototypes (ie K&R style headers). If your compiler does not handle
* function prototypes, define this macro and use the included ansi2knr.
@@ -211,10 +99,10 @@
*
* Two common cases are supported:
*
- * PNGAPI_RULE=0 Use the operating system convention for PNGAPI and
+ * PNG_API_RULE=0 Use the operating system convention for PNGAPI and
* the 'C' calling convention (from PNGCAPI) for
* callbacks (PNGCBAPI).
- * PNGAPI_RULE=1 Use PNGCAPI - the 'C' calling convention - throughout.
+ * PNG_API_RULE=1 Use PNGCAPI - the 'C' calling convention - throughout.
* This is correct on Cygwin implementations, assumed to
* be correct on MingW compilations and likely to work
* in C/C++ only environments everywhere else.
@@ -223,10 +111,11 @@
* calling convention, at present this just means the above cases
* (x86 DOS/Windows sytems) and, even then, this does not apply to
* Cygwin running on those systems.
+ *
+ * Note that the value must be defined in pnglconf.h so that what
+ * the application uses to call the library matches the conventions
+ * set when building the library.
*/
-#ifndef PNGAPI_RULE
-# define PNGAPI_RULE 0
-#endif
/* Symbol export
* =============
@@ -302,7 +191,7 @@
# ifndef PNGCAPI
# define PNGCAPI __cdecl
# endif
-# if PNGAPI_RULE == 0 && !defined(PNGAPI)
+# if PNG_API_RULE == 0 && !defined(PNGAPI)
# define PNGAPI __stdcall
# endif
# else
@@ -310,7 +199,7 @@
# ifndef PNGCAPI
# define PNGCAPI _cdecl
# endif
-# if PNGAPI_RULE == 0 && !defined(PNGAPI)
+# if PNG_API_RULE == 0 && !defined(PNGAPI)
# define PNGAPI _stdcall
# endif
# endif /* compiler/api */
@@ -471,89 +360,6 @@
# define PNG_PRIVATE /* This is a private libpng function */
#endif
-/* This protects us against compilers that run on a windowing system
- * and thus don't have or would rather us not use the stdio types:
- * stdin, stdout, and stderr. The only one currently used is stderr
- * in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will
- * prevent these from being compiled and used. #defining PNG_NO_STDIO
- * will also prevent these, plus will prevent the entire set of stdio
- * macros and functions (FILE *, printf, etc.) from being compiled and used,
- * unless (PNG_DEBUG > 0) has been #defined.
- *
- * #define PNG_NO_CONSOLE_IO
- * #define PNG_NO_STDIO
- */
-
-#if !defined(PNG_NO_STDIO) && !defined(PNG_STDIO_SUPPORTED)
-# define PNG_STDIO_SUPPORTED
-#endif
-
-#ifdef PNG_NO_STDIO
-# ifndef PNG_NO_CONSOLE_IO
-# define PNG_NO_CONSOLE_IO
-# endif
-# ifdef PNG_DEBUG
-# if (PNG_DEBUG > 0)
-# include <stdio.h>
-# endif
-# endif
-#else
-# include <stdio.h>
-#endif
-
-#if !(defined PNG_NO_CONSOLE_IO) && !defined(PNG_CONSOLE_IO_SUPPORTED)
-# define PNG_CONSOLE_IO_SUPPORTED
-#endif
-
-/* PNG_SETJMP_NOT_SUPPORTED and PNG_NO_SETJMP_SUPPORTED are deprecated. */
-#if !defined(PNG_NO_SETJMP) && \
- !defined(PNG_SETJMP_NOT_SUPPORTED) && !defined(PNG_NO_SETJMP_SUPPORTED)
-# define PNG_SETJMP_SUPPORTED
-#endif
-
-#ifdef PNG_SETJMP_SUPPORTED
-# include <setjmp.h>
-#endif
-
-#ifdef BSD
-# include <strings.h>
-#else
-# include <string.h>
-#endif
-
-/* Other defines for things like memory and the like can go here. */
-
-/* This controls how fine the quantizing gets. As this allocates
- * a largish chunk of memory (32K), those who are not as concerned
- * with quantizing quality can decrease some or all of these.
- */
-#ifndef PNG_QUANTIZE_RED_BITS
-# define PNG_QUANTIZE_RED_BITS 5
-#endif
-#ifndef PNG_QUANTIZE_GREEN_BITS
-# define PNG_QUANTIZE_GREEN_BITS 5
-#endif
-#ifndef PNG_QUANTIZE_BLUE_BITS
-# define PNG_QUANTIZE_BLUE_BITS 5
-#endif
-
-/* This controls how fine the gamma correction becomes when you
- * are only interested in 8 bits anyway. Increasing this value
- * results in more memory being used, and more pow() functions
- * being called to fill in the gamma tables. Don't set this value
- * less then 8, and even that may not work (I haven't tested it).
- */
-#ifndef PNG_MAX_GAMMA_8
-# define PNG_MAX_GAMMA_8 11
-#endif
-
-/* This controls how much a difference in gamma we can tolerate before
- * we actually start doing gamma conversion.
- */
-#ifndef PNG_GAMMA_THRESHOLD
-# define PNG_GAMMA_THRESHOLD 0.05
-#endif
-
/* The following uses const char * instead of char * for error
* and warning message functions, so some compilers won't complain.
* If you do not want to use const, define PNG_NO_CONST here.
@@ -566,648 +372,6 @@
# endif
#endif
-/* The following defines give you the ability to remove code from the
- * library that you will not be using. I wish I could figure out how to
- * automate this, but I can't do that without making it seriously hard
- * on the users. So if you are not using an ability, change the #define
- * to and #undef, and that part of the library will not be compiled. If
- * your linker can't find a function, you may want to make sure the
- * ability is defined here. Some of these depend upon some others being
- * defined. I haven't figured out all the interactions here, so you may
- * have to experiment awhile to get everything to compile. If you are
- * creating or using a shared library, you probably shouldn't touch this,
- * as it will affect the size of the structures, and this will cause bad
- * things to happen if the library and/or application ever change.
- */
-
-/* Any features you will not be using can be undef'ed here */
-
-/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
- * to turn it off with PNG_NO_READ|WRITE_TRANSFORMS on the compile line,
- * then pick and choose which ones to define without having to edit this
- * file. It is safe to use the PNG_NO_READ|WRITE_TRANSFORMS
- * if you only want to have a png-compliant reader/writer but don't need
- * any of the extra transformations. This saves about 80 kbytes in a
- * typical installation of the library. (PNG_NO_* form added in version
- * 1.0.1c, for consistency; PNG_*_TRANSFORMS_NOT_SUPPORTED deprecated in
- * 1.4.0)
- */
-
-/* Ignore attempt to turn off both floating and fixed point support */
-#if !defined(PNG_FLOATING_POINT_SUPPORTED) || \
- !defined(PNG_NO_FIXED_POINT_SUPPORTED)
-# define PNG_FIXED_POINT_SUPPORTED
-#endif
-
-#ifdef PNG_READ_SUPPORTED
-
-/* PNG_READ_TRANSFORMS_NOT_SUPPORTED is deprecated. */
-# if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
- !defined(PNG_NO_READ_TRANSFORMS)
-# define PNG_READ_TRANSFORMS_SUPPORTED
-# endif
-
-# ifdef PNG_READ_TRANSFORMS_SUPPORTED
-# ifndef PNG_NO_READ_EXPAND
-# define PNG_READ_EXPAND_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_SHIFT
-# define PNG_READ_SHIFT_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_PACK
-# define PNG_READ_PACK_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_BGR
-# define PNG_READ_BGR_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_SWAP
-# define PNG_READ_SWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_PACKSWAP
-# define PNG_READ_PACKSWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_INVERT
-# define PNG_READ_INVERT_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_QUANTIZE
-# define PNG_READ_QUANTIZE_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_BACKGROUND
-# define PNG_READ_BACKGROUND_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_16_TO_8
-# define PNG_READ_16_TO_8_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_FILLER
-# define PNG_READ_FILLER_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_GAMMA
-# define PNG_READ_GAMMA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_GRAY_TO_RGB
-# define PNG_READ_GRAY_TO_RGB_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_SWAP_ALPHA
-# define PNG_READ_SWAP_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_INVERT_ALPHA
-# define PNG_READ_INVERT_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_STRIP_ALPHA
-# define PNG_READ_STRIP_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_USER_TRANSFORM
-# define PNG_READ_USER_TRANSFORM_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_RGB_TO_GRAY
-# define PNG_READ_RGB_TO_GRAY_SUPPORTED
-# endif
-# endif /* PNG_READ_TRANSFORMS_SUPPORTED */
-
-# ifndef PNG_NO_PROGRESSIVE_READ
-# define PNG_PROGRESSIVE_READ_SUPPORTED
-# endif
-/* You can define PNG_NO_PROGRESSIVE_READ if you don't do progressive reading.
- * This is not talking about interlacing capability! You'll still have
- * interlacing unless you change the following define which is required
- * for PNG-compliant decoders:
- */
-
-# define PNG_READ_INTERLACING_SUPPORTED
-
- /* PNG_NO_SEQUENTIAL_READ_SUPPORTED is deprecated. */
-# if !defined(PNG_NO_SEQUENTIAL_READ) && \
- !defined(PNG_SEQUENTIAL_READ_SUPPORTED) && \
- !defined(PNG_NO_SEQUENTIAL_READ_SUPPORTED)
-# define PNG_SEQUENTIAL_READ_SUPPORTED
-# endif
-
-# ifndef PNG_NO_READ_COMPOSITE_NODIV
-# ifndef PNG_NO_READ_COMPOSITED_NODIV /* libpng-1.0.x misspelling */
- /* well tested on Intel, SGI */
-# define PNG_READ_COMPOSITE_NODIV_SUPPORTED
-# endif
-# endif
-
-# if !defined(PNG_NO_GET_INT_32) || defined(PNG_READ_oFFS_SUPPORTED) || \
- defined(PNG_READ_pCAL_SUPPORTED)
-# ifndef PNG_GET_INT_32_SUPPORTED
-# define PNG_GET_INT_32_SUPPORTED
-# endif
-# endif
-
-#endif /* PNG_READ_SUPPORTED */
-
-#ifdef PNG_WRITE_SUPPORTED
-
-/* PNG_WRITE_TRANSFORMS_NOT_SUPPORTED is deprecated. */
-# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
- !defined(PNG_NO_WRITE_TRANSFORMS)
-# define PNG_WRITE_TRANSFORMS_SUPPORTED
-# endif
-
-# ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
-# ifndef PNG_NO_WRITE_SHIFT
-# define PNG_WRITE_SHIFT_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_PACK
-# define PNG_WRITE_PACK_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_BGR
-# define PNG_WRITE_BGR_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_SWAP
-# define PNG_WRITE_SWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_PACKSWAP
-# define PNG_WRITE_PACKSWAP_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_INVERT
-# define PNG_WRITE_INVERT_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_FILLER
-# define PNG_WRITE_FILLER_SUPPORTED /* same as WRITE_STRIP_ALPHA */
-# endif
-# ifndef PNG_NO_WRITE_SWAP_ALPHA
-# define PNG_WRITE_SWAP_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_INVERT_ALPHA
-# define PNG_WRITE_INVERT_ALPHA_SUPPORTED
-# endif
-# ifndef PNG_NO_WRITE_USER_TRANSFORM
-# define PNG_WRITE_USER_TRANSFORM_SUPPORTED
-# endif
-# endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */
-
-# if !defined(PNG_NO_WRITE_INTERLACING_SUPPORTED) && \
- !defined(PNG_WRITE_INTERLACING_SUPPORTED)
- /* This is not required for PNG-compliant encoders, but can cause
- * trouble if left undefined
- */
-# define PNG_WRITE_INTERLACING_SUPPORTED
-# endif
-
-# if !defined(PNG_NO_WRITE_WEIGHTED_FILTER) && \
- !defined(PNG_WRITE_WEIGHTED_FILTER) && \
- defined(PNG_FLOATING_POINT_SUPPORTED)
-# define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-# endif
-
-# ifndef PNG_NO_WRITE_FLUSH
-# define PNG_WRITE_FLUSH_SUPPORTED
-# endif
-
-# if !defined(PNG_NO_SAVE_INT_32) || defined(PNG_WRITE_oFFS_SUPPORTED) || \
- defined(PNG_WRITE_pCAL_SUPPORTED)
-# ifndef PNG_SAVE_INT_32_SUPPORTED
-# define PNG_SAVE_INT_32_SUPPORTED
-# endif
-# endif
-
-#endif /* PNG_WRITE_SUPPORTED */
-
-#define PNG_NO_ERROR_NUMBERS
-
-#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
- defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
-# ifndef PNG_NO_USER_TRANSFORM_PTR
-# define PNG_USER_TRANSFORM_PTR_SUPPORTED
-# endif
-#endif
-
-#if defined(PNG_STDIO_SUPPORTED) && !defined(PNG_TIME_RFC1123_SUPPORTED)
-# define PNG_TIME_RFC1123_SUPPORTED
-#endif
-
-/* This adds extra functions in pngget.c for accessing data from the
- * info pointer (added in version 0.99)
- * png_get_image_width()
- * png_get_image_height()
- * png_get_bit_depth()
- * png_get_color_type()
- * png_get_compression_type()
- * png_get_filter_type()
- * png_get_interlace_type()
- * png_get_pixel_aspect_ratio()
- * png_get_pixels_per_meter()
- * png_get_x_offset_pixels()
- * png_get_y_offset_pixels()
- * png_get_x_offset_microns()
- * png_get_y_offset_microns()
- */
-#if !defined(PNG_NO_EASY_ACCESS) && !defined(PNG_EASY_ACCESS_SUPPORTED)
-# define PNG_EASY_ACCESS_SUPPORTED
-#endif
-
-/* Added at libpng-1.2.0 */
-#if !defined(PNG_NO_USER_MEM) && !defined(PNG_USER_MEM_SUPPORTED)
-# define PNG_USER_MEM_SUPPORTED
-#endif
-
-/* Added at libpng-1.2.6 */
-#ifndef PNG_NO_SET_USER_LIMITS
-# ifndef PNG_SET_USER_LIMITS_SUPPORTED
-# define PNG_SET_USER_LIMITS_SUPPORTED
-# endif
- /* Feature added at libpng-1.4.0, this flag added at 1.4.1 */
-# ifndef PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
-# define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
-# endif
- /* Feature added at libpng-1.4.1, this flag added at 1.4.1 */
-# ifndef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-# define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
-# endif
-#endif
-
-/* Added at libpng-1.2.43 */
-#ifndef PNG_NO_USER_LIMITS
-# ifndef PNG_USER_LIMITS_SUPPORTED
-# define PNG_USER_LIMITS_SUPPORTED
-# endif
-#endif
-
-/* Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGs no matter
- * how large, set these two limits to 0x7fffffffL
- */
-#ifndef PNG_USER_WIDTH_MAX
-# define PNG_USER_WIDTH_MAX 1000000L
-#endif
-#ifndef PNG_USER_HEIGHT_MAX
-# define PNG_USER_HEIGHT_MAX 1000000L
-#endif
-
-/* Added at libpng-1.2.43. To accept all valid PNGs no matter
- * how large, set these two limits to 0.
- */
-#ifndef PNG_USER_CHUNK_CACHE_MAX
-# define PNG_USER_CHUNK_CACHE_MAX 0
-#endif
-
-/* Added at libpng-1.2.43 */
-#ifndef PNG_USER_CHUNK_MALLOC_MAX
-# define PNG_USER_CHUNK_MALLOC_MAX 0
-#endif
-
-/* Added at libpng-1.4.0 */
-#if !defined(PNG_NO_IO_STATE) && !defined(PNG_IO_STATE_SUPPORTED)
-# define PNG_IO_STATE_SUPPORTED
-#endif
-
-#ifndef PNG_LITERAL_SHARP
-# define PNG_LITERAL_SHARP 0x23
-#endif
-#ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET
-# define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b
-#endif
-#ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET
-# define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d
-#endif
-#ifndef PNG_STRING_NEWLINE
-# define PNG_STRING_NEWLINE "\n"
-#endif
-
-/* These are currently experimental features, define them if you want */
-
-/* Very little testing, not enabled by default. */
-/*
-#ifdef PNG_READ_SUPPORTED
-# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
-# endif
-#endif
-*/
-
-/* This is only for PowerPC big-endian and 680x0 systems */
-/* some testing, not enabled by default. */
-/*
-#ifndef PNG_READ_BIG_ENDIAN_SUPPORTED
-# define PNG_READ_BIG_ENDIAN_SUPPORTED
-#endif
-*/
-
-#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS)
-# define PNG_USE_READ_MACROS
-#endif
-
-/* Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING */
-#if !defined(PNG_NO_POINTER_INDEXING) && \
- !defined(PNG_POINTER_INDEXING_SUPPORTED)
-# define PNG_POINTER_INDEXING_SUPPORTED
-#endif
-
-
-/* Any chunks you are not interested in, you can undef here. The
- * ones that allocate memory may be expecially important (hIST,
- * tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info
- * a bit smaller.
- */
-
-/* The size of the png_text structure changed in libpng-1.0.6 when
- * iTXt support was added. iTXt support was turned off by default through
- * libpng-1.2.x, to support old apps that malloc the png_text structure
- * instead of calling png_set_text() and letting libpng malloc it. It
- * was turned on by default in libpng-1.4.0.
- */
-
-/* PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */
-#if defined(PNG_READ_SUPPORTED) && \
- !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
- !defined(PNG_NO_READ_ANCILLARY_CHUNKS)
-# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
-#endif
-
-/* PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. */
-#if defined(PNG_WRITE_SUPPORTED) && \
- !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
- !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS)
-# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
-#endif
-
-#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
-
-# ifdef PNG_NO_READ_TEXT
-# define PNG_NO_READ_iTXt
-# define PNG_NO_READ_tEXt
-# define PNG_NO_READ_zTXt
-# endif
-
-# ifndef PNG_NO_READ_bKGD
-# define PNG_READ_bKGD_SUPPORTED
-# define PNG_bKGD_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_cHRM
-# define PNG_READ_cHRM_SUPPORTED
-# define PNG_cHRM_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_gAMA
-# define PNG_READ_gAMA_SUPPORTED
-# define PNG_gAMA_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_hIST
-# define PNG_READ_hIST_SUPPORTED
-# define PNG_hIST_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_iCCP
-# define PNG_READ_iCCP_SUPPORTED
-# define PNG_iCCP_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_iTXt
-# ifndef PNG_READ_iTXt_SUPPORTED
-# define PNG_READ_iTXt_SUPPORTED
-# endif
-# ifndef PNG_iTXt_SUPPORTED
-# define PNG_iTXt_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_READ_oFFs
-# define PNG_READ_oFFs_SUPPORTED
-# define PNG_oFFs_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_pCAL
-# define PNG_READ_pCAL_SUPPORTED
-# define PNG_pCAL_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_sCAL
-# define PNG_READ_sCAL_SUPPORTED
-# define PNG_sCAL_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_pHYs
-# define PNG_READ_pHYs_SUPPORTED
-# define PNG_pHYs_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_sBIT
-# define PNG_READ_sBIT_SUPPORTED
-# define PNG_sBIT_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_sPLT
-# define PNG_READ_sPLT_SUPPORTED
-# define PNG_sPLT_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_sRGB
-# define PNG_READ_sRGB_SUPPORTED
-# define PNG_sRGB_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_tEXt
-# define PNG_READ_tEXt_SUPPORTED
-# define PNG_tEXt_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_tIME
-# define PNG_READ_tIME_SUPPORTED
-# define PNG_tIME_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_tRNS
-# define PNG_READ_tRNS_SUPPORTED
-# define PNG_tRNS_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_zTXt
-# define PNG_READ_zTXt_SUPPORTED
-# define PNG_zTXt_SUPPORTED
-# endif
-# ifndef PNG_NO_READ_OPT_PLTE
- /* This only affects support of the optional PLTE chunk in RGB and RGBA
- * images.
- */
-# define PNG_READ_OPT_PLTE_SUPPORTED
-# endif
-# if defined(PNG_READ_iTXt_SUPPORTED) || defined(PNG_READ_tEXt_SUPPORTED) || \
- defined(PNG_READ_zTXt_SUPPORTED)
-# define PNG_READ_TEXT_SUPPORTED
-# define PNG_TEXT_SUPPORTED
-# endif
-
-#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */
-
-#ifndef PNG_NO_READ_UNKNOWN_CHUNKS
-# ifndef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-# define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
-# endif
-# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
-# define PNG_UNKNOWN_CHUNKS_SUPPORTED
-# endif
-# ifndef PNG_READ_USER_CHUNKS_SUPPORTED
-# define PNG_READ_USER_CHUNKS_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_READ_USER_CHUNKS
-# ifndef PNG_READ_USER_CHUNKS_SUPPORTED
-# define PNG_READ_USER_CHUNKS_SUPPORTED
-# endif
-# ifndef PNG_USER_CHUNKS_SUPPORTED
-# define PNG_USER_CHUNKS_SUPPORTED
-# endif
-#endif
-#ifndef PNG_NO_HANDLE_AS_UNKNOWN
-# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# endif
-#endif
-
-#ifdef PNG_WRITE_SUPPORTED
-# ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
-
-# ifdef PNG_NO_WRITE_TEXT
-# define PNG_NO_WRITE_iTXt
-# define PNG_NO_WRITE_tEXt
-# define PNG_NO_WRITE_zTXt
-# endif
-# ifndef PNG_NO_WRITE_bKGD
-# define PNG_WRITE_bKGD_SUPPORTED
-# ifndef PNG_bKGD_SUPPORTED
-# define PNG_bKGD_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_cHRM
-# define PNG_WRITE_cHRM_SUPPORTED
-# ifndef PNG_cHRM_SUPPORTED
-# define PNG_cHRM_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_gAMA
-# define PNG_WRITE_gAMA_SUPPORTED
-# ifndef PNG_gAMA_SUPPORTED
-# define PNG_gAMA_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_hIST
-# define PNG_WRITE_hIST_SUPPORTED
-# ifndef PNG_hIST_SUPPORTED
-# define PNG_hIST_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_iCCP
-# define PNG_WRITE_iCCP_SUPPORTED
-# ifndef PNG_iCCP_SUPPORTED
-# define PNG_iCCP_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_iTXt
-# ifndef PNG_WRITE_iTXt_SUPPORTED
-# define PNG_WRITE_iTXt_SUPPORTED
-# endif
-# ifndef PNG_iTXt_SUPPORTED
-# define PNG_iTXt_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_oFFs
-# define PNG_WRITE_oFFs_SUPPORTED
-# ifndef PNG_oFFs_SUPPORTED
-# define PNG_oFFs_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_pCAL
-# define PNG_WRITE_pCAL_SUPPORTED
-# ifndef PNG_pCAL_SUPPORTED
-# define PNG_pCAL_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_sCAL
-# define PNG_WRITE_sCAL_SUPPORTED
-# ifndef PNG_sCAL_SUPPORTED
-# define PNG_sCAL_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_pHYs
-# define PNG_WRITE_pHYs_SUPPORTED
-# ifndef PNG_pHYs_SUPPORTED
-# define PNG_pHYs_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_sBIT
-# define PNG_WRITE_sBIT_SUPPORTED
-# ifndef PNG_sBIT_SUPPORTED
-# define PNG_sBIT_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_sPLT
-# define PNG_WRITE_sPLT_SUPPORTED
-# ifndef PNG_sPLT_SUPPORTED
-# define PNG_sPLT_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_sRGB
-# define PNG_WRITE_sRGB_SUPPORTED
-# ifndef PNG_sRGB_SUPPORTED
-# define PNG_sRGB_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_tEXt
-# define PNG_WRITE_tEXt_SUPPORTED
-# ifndef PNG_tEXt_SUPPORTED
-# define PNG_tEXt_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_tIME
-# define PNG_WRITE_tIME_SUPPORTED
-# ifndef PNG_tIME_SUPPORTED
-# define PNG_tIME_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_tRNS
-# define PNG_WRITE_tRNS_SUPPORTED
-# ifndef PNG_tRNS_SUPPORTED
-# define PNG_tRNS_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_WRITE_zTXt
-# define PNG_WRITE_zTXt_SUPPORTED
-# ifndef PNG_zTXt_SUPPORTED
-# define PNG_zTXt_SUPPORTED
-# endif
-# endif
-# if defined(PNG_WRITE_iTXt_SUPPORTED) || \
- defined(PNG_WRITE_tEXt_SUPPORTED) || \
- defined(PNG_WRITE_zTXt_SUPPORTED)
-# define PNG_WRITE_TEXT_SUPPORTED
-# ifndef PNG_TEXT_SUPPORTED
-# define PNG_TEXT_SUPPORTED
-# endif
-# endif
-
-# ifdef PNG_WRITE_tIME_SUPPORTED
-# ifndef PNG_NO_CONVERT_tIME
- /* The "tm" structure is not supported on WindowsCE */
-# ifndef _WIN32_WCE
-# ifndef PNG_CONVERT_tIME_SUPPORTED
-# define PNG_CONVERT_tIME_SUPPORTED
-# endif
-# endif
-# endif
-# endif
-
-# endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
-
-# ifndef PNG_NO_WRITE_FILTER
-# ifndef PNG_WRITE_FILTER_SUPPORTED
-# define PNG_WRITE_FILTER_SUPPORTED
-# endif
-# endif
-
-# ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
-# define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
-# ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
-# define PNG_UNKNOWN_CHUNKS_SUPPORTED
-# endif
-# endif
-# ifndef PNG_NO_HANDLE_AS_UNKNOWN
-# ifndef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-# endif
-# endif
-#endif /* PNG_WRITE_SUPPORTED */
-
-/* Turn this off to disable png_read_png() and png_write_png() and
- * leave the row_pointers member out of the info structure.
- */
-#ifndef PNG_NO_INFO_IMAGE
-# define PNG_INFO_IMAGE_SUPPORTED
-#endif
-
-/* Need the time information for converting tIME chunks */
-#ifdef PNG_CONVERT_tIME_SUPPORTED
- /* "time.h" functions are not supported on WindowsCE */
-# include <time.h>
-#endif
-
/* Some typedefs to get us started. These should be safe on most of the
* common platforms. The typedefs should be at least as large as the
* numbers suggest (a png_uint_32 must be at least 32 bits long), but they
@@ -1254,7 +418,7 @@ typedef size_t png_size_t;
# endif
/* GRR: why is Cygwin in here? Cygwin is not Borland C... */
# if !defined(__WIN32__) && !defined(__FLAT__) && !defined(__CYGWIN__)
-# define PNG_MAX_MALLOC_64K
+# define PNG_MAX_MALLOC_64K /* only used in build */
# if (LDATA != 1)
# ifndef FAR
# define FAR __far
@@ -1310,7 +474,7 @@ typedef PNG_CONST char FAR * png_const_charp;
typedef char FAR * png_charp;
typedef png_fixed_point FAR * png_fixed_point_p;
-#ifndef PNG_NO_STDIO
+#ifdef PNG_STDIO_SUPPORTED
typedef FILE * png_FILE_p;
#endif
@@ -1440,16 +604,4 @@ typedef char FAR * FAR * FAR * png_charppp;
#endif
/* End of memory model/platform independent support */
-/* Just a little check that someone hasn't tried to define something
- * contradictory.
- */
-#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)
-# undef PNG_ZBUF_SIZE
-# define PNG_ZBUF_SIZE 65536L
-#endif
-
-
-/* Added at libpng-1.2.8 */
-#endif /* PNG_VERSION_INFO_ONLY */
-
#endif /* PNGCONF_H */
diff --git a/pngdebug.h b/pngdebug.h
index f76778d73..88e128118 100644
--- a/pngdebug.h
+++ b/pngdebug.h
@@ -34,6 +34,21 @@
*/
#ifndef PNGDEBUG_H
#define PNGDEBUG_H
+/* These settings control the formatting of messages in pngerror.c */
+/* Moved to pngdebug.h at 1.5.0 */
+# ifndef PNG_LITERAL_SHARP
+# define PNG_LITERAL_SHARP 0x23
+# endif
+# ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET
+# define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b
+# endif
+# ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET
+# define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d
+# endif
+# ifndef PNG_STRING_NEWLINE
+# define PNG_STRING_NEWLINE "\n"
+# endif
+
#ifdef PNG_DEBUG
# if (PNG_DEBUG > 0)
# if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
@@ -54,6 +69,9 @@
# endif
# endif
# else /* PNG_DEBUG_FILE || !_MSC_VER */
+# ifndef PNG_STDIO_SUPPORTED
+# include <stdio.h> /* not included yet */
+# endif
# ifndef PNG_DEBUG_FILE
# define PNG_DEBUG_FILE stderr
# endif /* PNG_DEBUG_FILE */
diff --git a/pngpriv.h b/pngpriv.h
index ccd6aba81..9829d5e5b 100644
--- a/pngpriv.h
+++ b/pngpriv.h
@@ -30,12 +30,18 @@
#include "pngstruct.h"
#include <stdlib.h>
+#ifdef BSD
+# include <strings.h>
+#else
+# include <string.h>
+#endif
/* Added at libpng-1.2.9 */
/* Moved to pngpriv.h at libpng-1.5.0 */
/* config.h is created by and PNG_CONFIGURE_LIBPNG is set by the "configure"
- * script.
+ * script. We may need it here to get the correct configuration on things
+ * like limits.
*/
#ifdef PNG_CONFIGURE_LIBPNG
# ifdef HAVE_CONFIG_H
@@ -43,6 +49,85 @@
# endif
#endif
+/* Moved to pngpriv.h at libpng-1.5.0 */
+/* If you are running on a machine where you cannot allocate more
+ * than 64K of memory at once, uncomment this. While libpng will not
+ * normally need that much memory in a chunk (unless you load up a very
+ * large file), zlib needs to know how big of a chunk it can use, and
+ * libpng thus makes sure to check any memory allocation to verify it
+ * will fit into memory.
+ *
+ * zlib provides 'MAXSEG_64K' which, if defined, indicates the
+ * same limit and pngconf.h (already included) sets the limit
+ * if certain operating systems are detected.
+ */
+#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
+# define PNG_MAX_MALLOC_64K
+#endif
+
+/* Moved to pngpriv.h at libpng-1.5.0 */
+/* Feature support: in 1.4 this was in pngconf.h, but these
+ * features have no affect on the libpng API. Add library
+ * only features to the end of this list. Add features that
+ * affect the API to scipts/config.dfn using png_on or png_off
+ * as determined by the default and update scripts/config.std
+ */
+/* Added at libpng version 1.4.0 */
+#if !defined(PNG_NO_WARNINGS) && !defined(PNG_WARNINGS_SUPPORTED)
+# define PNG_WARNINGS_SUPPORTED
+#endif
+
+/* Added at libpng version 1.4.0 */
+#if !defined(PNG_NO_CHECK_cHRM) && !defined(PNG_CHECK_cHRM_SUPPORTED)
+# define PNG_CHECK_cHRM_SUPPORTED
+#endif
+
+/* Added at libpng version 1.4.0 */
+#if !defined(PNG_NO_ALIGNED_MEMORY) && !defined(PNG_ALIGNED_MEMORY_SUPPORTED)
+# define PNG_ALIGNED_MEMORY_SUPPORTED
+#endif
+
+/* Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING
+ * See png[wr]util.c
+ */
+#if !defined(PNG_NO_POINTER_INDEXING) && \
+ !defined(PNG_POINTER_INDEXING_SUPPORTED)
+# define PNG_POINTER_INDEXING_SUPPORTED
+#endif
+
+/* Other defines for things like memory and the like can go here. */
+
+/* This controls how fine the dithering gets. As this allocates
+ * a largish chunk of memory (32K), those who are not as concerned
+ * with dithering quality can decrease some or all of these.
+ */
+#ifndef PNG_DITHER_RED_BITS
+# define PNG_DITHER_RED_BITS 5
+#endif
+#ifndef PNG_DITHER_GREEN_BITS
+# define PNG_DITHER_GREEN_BITS 5
+#endif
+#ifndef PNG_DITHER_BLUE_BITS
+# define PNG_DITHER_BLUE_BITS 5
+#endif
+
+/* This controls how fine the gamma correction becomes when you
+ * are only interested in 8 bits anyway. Increasing this value
+ * results in more memory being used, and more pow() functions
+ * being called to fill in the gamma tables. Don't set this value
+ * less then 8, and even that may not work (I haven't tested it).
+ */
+#ifndef PNG_MAX_GAMMA_8
+# define PNG_MAX_GAMMA_8 11
+#endif
+
+/* This controls how much a difference in gamma we can tolerate before
+ * we actually start doing gamma conversion.
+ */
+#ifndef PNG_GAMMA_THRESHOLD
+# define PNG_GAMMA_THRESHOLD 0.05
+#endif
+
/* The functions exported by PNG_EXTERN are internal functions, which
* aren't usually used outside the library (as far as I know), so it is
* debatable if they should be exported at all. In the future, when it
@@ -92,6 +177,31 @@
# endif
#endif
+/* This is the size of the compression buffer, and thus the size of
+ * an IDAT chunk. Make this whatever size you feel is best for your
+ * machine. One of these will be allocated per png_struct. When this
+ * is full, it writes the data to the disk, and does some other
+ * calculations. Making this an extremely small size will slow
+ * the library down, but you may want to experiment to determine
+ * where it becomes significant, if you are concerned with memory
+ * usage. Note that zlib allocates at least 32Kb also. For readers,
+ * this describes the size of the buffer available to read the data in.
+ * Unless this gets smaller than the size of a row (compressed),
+ * it should not make much difference how big this is.
+ */
+
+#ifndef PNG_ZBUF_SIZE
+# define PNG_ZBUF_SIZE 8192
+#endif
+
+/* Just a little check that someone hasn't tried to define something
+ * contradictory.
+ */
+#if (PNG_ZBUF_SIZE > 65536L) && defined(PNG_MAX_MALLOC_64K)
+# undef PNG_ZBUF_SIZE
+# define PNG_ZBUF_SIZE 65536L
+#endif
+
/* Various modes of operation. Note that after an init, mode is set to
* zero automatically when the structure is created.
*/
diff --git a/scripts/checksym.awk b/scripts/checksym.awk
index 1d2755a12..d6f273122 100644
--- a/scripts/checksym.awk
+++ b/scripts/checksym.awk
@@ -33,7 +33,7 @@ master == "" {
}
FILENAME==master && NF==2 && $2~/^@/ && $1!~/^;/ {
o=0+substr($2,2)
- if (o >0) {
+ if (o > 0) {
if (official[o] == "") {
official[o] = $1
if (o > mastero) mastero = o
@@ -51,13 +51,14 @@ FILENAME==master {
# Read new definitions, these are free form but the lines must
# just be symbol definitions. Lines will be commented out for
# 'removed' symbols, introduced in png.h using PNG_REMOVED rather
-# than PNG_EXPORT. Use checksym.dfn to generate the input file.
+# than PNG_EXPORT. Use symbols.dfn or pngwin.dfn to generate the
+# input file.
#
-# symbol ordinal # two fields, exported symbol
-# ; symbol ordinal # three fields, removed symbol
-# ; ordinal # two fields, the last ordinal
-NF==2 && $1 == ";" && $2 ~ /^[1-9][0-9]*$/ { # last ordinal
- o = 0+$2
+# symbol @ordinal # two fields, exported symbol
+# ; symbol @ordinal # three fields, removed symbol
+# ; @ordinal # two fields, the last ordinal
+NF==2 && $1 == ";" && $2 ~ /^@[1-9][0-9]*$/ { # last ordinal
+ o=0+substr($2,2)
if (lasto == 0 || lasto == o)
lasto=o
else {
@@ -66,8 +67,8 @@ NF==2 && $1 == ";" && $2 ~ /^[1-9][0-9]*$/ { # last ordinal
}
next
}
-NF==3 && $1 == ";" && $3 ~ /^[1-9][0-9]*$/ { # removed symbol
- o = 0+$3
+NF==3 && $1 == ";" && $3 ~ /^@[1-9][0-9]*$/ { # removed symbol
+ o=0+substr($3,2)
if (removed[o] == "" || removed[o] == $2) {
removed[o] = $2
if (o > symbolo) symbolo = o
@@ -78,8 +79,8 @@ NF==3 && $1 == ";" && $3 ~ /^[1-9][0-9]*$/ { # removed symbol
}
next
}
-NF==2 && $2 ~ /^[1-9][0-9]*$/ { # exported symbol
- o = 0+$2
+NF==2 && $2 ~ /^@[1-9][0-9]*$/ { # exported symbol
+ o=0+substr($2,2)
if (symbol[o] == "" || symbol[o] == $1) {
symbol[o] = $1
if (o > symbolo) symbolo = o
@@ -105,36 +106,38 @@ END{
mastero ", exceeds last ordinal from png.h", lasto
err = 1
}
- missing = 0
+ unexported=0
for (o=1; o<=lasto; ++o) {
- stop=0
if (symbol[o] == "" && removed[o] == "") {
- if (missing == 0) missing = o
- if (o < lasto) continue
- stop=1
+ if (unexported == 0) unexported = o
+ if (official[o] == "") {
+ # missing in export list too, so ok
+ if (o < lasto) continue
+ }
}
- if (missing != 0) {
- if (o-1 > missing)
- print "png.h: missing symbol definitions:", missing "-" o-1
+ if (unexported != 0) {
+ # Symbols in the .def but not in the new file are errors
+ if (o-1 > unexported)
+ print "png.h: warning: unexported symbol definitions:",
+ unexported "-" o-1
else
- print "png.h: missing symbol definition:", missing
- missing = 0
- err = 1
+ print "png.h: warning: unexported symbol definition:",
+ unexported
+ unexported = 0
}
- if (stop == 1) break; # lasto is missing
if (symbol[o] != "" && removed[o] != "") {
print "png.h: symbol", o,
"both exported as '" symbol[o] "' and removed as '" removed[o] "'"
err = 1
} else if (symbol[o] != official[o]) {
- # either master symbol not there or it changed
+ # either the symbol is missing somewhere or it changed
err = 1
if (symbol[o] == "")
- print "png.h: removed symbol", o,
- "'" symbol[o] "' exported as '" official[o] "' in", master
+ print "png.h: symbol", o,
+ "is exported as '" official[o] "' in", master
else if (official[o] == "")
- print "png.h: exported symbol", o, "'" symbol[o] "' not present in",
- master
+ print "png.h: exported symbol", o,
+ "'" symbol[o] "' not present in", master
else
print "png.h: exported symbol", o,
"'" symbol[o] "' exists as '" official[o] "' in", master
diff --git a/scripts/checksym.dfn b/scripts/checksym.dfn
deleted file mode 100644
index 39f7e21c6..000000000
--- a/scripts/checksym.dfn
+++ /dev/null
@@ -1,102 +0,0 @@
-
-/* pngwin.dfn - find all exported symbols
- *
- * Last changed in libpng 1.5.0 [April 17, 2010]
- * Copyright (c) 1998-2010 Glenn Randers-Pehrson
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#define PNG_EXPORT(type, name, args, attributes, ordinal)\
- PNG_DEFN_MAGIC-name ordinal-PNG_DEFN_END
-#define PNG_REMOVED(type, name, args, attributes, ordinal)\
- PNG_DEFN_MAGIC-; name ordinal-PNG_DEFN_END
-#define PNG_EXPORT_LAST_ORDINAL(ordinal)\
- PNG_DEFN_MAGIC-; ordinal-PNG_DEFN_END
-
-/* Turn on everything that we can turn on: */
-#define PNG_BENIGN_ERRORS_SUPPORTED
-#define PNG_CONVERT_tIME_SUPPORTED
-#define PNG_EASY_ACCESS_SUPPORTED
-#define PNG_ERROR_NUMBERS_SUPPORTED
-#undef PNG_FIXED_POINT_SUPPORTED /* Chose between floating and fixed */
-#define PNG_FLOATING_POINT_SUPPORTED
-#define PNG_NO_USE_READ_MACROS /* Exposes no APIs if defined */
-#define PNG_GET_INT_32_SUPPORTED
-#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
-#define PNG_INCH_CONVERSIONS /* NOTE: no SUPPORTED! */
-#define PNG_INFO_IMAGE_SUPPORTED
-#define PNG_IO_STATE_SUPPORTED
-#define PNG_MNG_FEATURES_SUPPORTED
-#define PNG_PROGRESSIVE_READ_SUPPORTED
-#define PNG_READ_16_TO_8_SUPPORTED
-#define PNG_READ_BACKGROUND_SUPPORTED
-#define PNG_READ_BGR_SUPPORTED
-#define PNG_READ_COMPOSITE_NODIV_SUPPORTED
-#define PNG_READ_DITHER_SUPPORTED
-#define PNG_READ_EXPAND_SUPPORTED
-#define PNG_READ_FILLER_SUPPORTED
-#define PNG_READ_GAMMA_SUPPORTED
-#define PNG_READ_GRAY_TO_RGB_SUPPORTED
-#define PNG_READ_INTERLACING_SUPPORTED
-#define PNG_READ_INVERT_ALPHA_SUPPORTED
-#define PNG_READ_INVERT_SUPPORTED
-#define PNG_READ_PACKSWAP_SUPPORTED
-#define PNG_READ_PACK_SUPPORTED
-#define PNG_READ_RGB_TO_GRAY_SUPPORTED
-#define PNG_READ_SHIFT_SUPPORTED
-#define PNG_READ_STRIP_ALPHA_SUPPORTED
-#define PNG_READ_SWAP_ALPHA_SUPPORTED
-#define PNG_READ_SWAP_SUPPORTED
-#define PNG_READ_USER_TRANSFORM_SUPPORTED
-#define PNG_SEQUENTIAL_READ_SUPPORTED
-#define PNG_SETJMP_SUPPORTED
-#define PNG_SET_USER_LIMITS_SUPPORTED
-#define PNG_STDIO_SUPPORTED
-#define PNG_TEXT_SUPPORTED
-#define PNG_TIME_RFC1123_SUPPORTED
-#define PNG_UNKNOWN_CHUNKS_SUPPORTED
-#define PNG_USER_CHUNKS_SUPPORTED
-#define PNG_USER_MEM_SUPPORTED
-#define PNG_NO_ERROR_TEXT /* NOTE: no supported */
-#define PNG_WRITE_BGR_SUPPORTED
-#define PNG_WRITE_FILLER_SUPPORTED
-#define PNG_WRITE_FLUSH_SUPPORTED
-#define PNG_WRITE_INTERLACING_SUPPORTED
-#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
-#define PNG_WRITE_INVERT_SUPPORTED
-#define PNG_WRITE_PACKSWAP_SUPPORTED
-#define PNG_WRITE_PACK_SUPPORTED
-#define PNG_WRITE_SHIFT_SUPPORTED
-#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
-#define PNG_WRITE_SWAP_SUPPORTED
-#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
-#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
-#define PNG_bKGD_SUPPORTED
-#define PNG_cHRM_SUPPORTED
-#define PNG_gAMA_SUPPORTED
-#define PNG_hIST_SUPPORTED
-#define PNG_iCCP_SUPPORTED
-#define PNG_iTXt_SUPPORTED
-#define PNG_oFFs_SUPPORTED
-#define PNG_pCAL_SUPPORTED
-#define PNG_pHYs_SUPPORTED
-#define PNG_sBIT_SUPPORTED
-#define PNG_sCAL_SUPPORTED
-#define PNG_sPLT_SUPPORTED
-#define PNG_sRGB_SUPPORTED
-#define PNG_tIME_SUPPORTED
-#define PNG_tRNS_SUPPORTED
-
-#include "../png.h"
-
-/* Now repeat, but toggle everything that has a #else clause */
-#define PNG_FIXED_POINT_SUPPORTED
-#undef PNG_FLOATING_POINT_SUPPORTED
-#define PNG_NO_FLOATING_POINT_SUPPORTED
-#undef PNG_NO_ERROR_TEXT
-
-#undef PNG_H
-#include "../png.h"
diff --git a/scripts/def.dfn b/scripts/def.dfn
index 6e175b65c..e69de29bb 100644
--- a/scripts/def.dfn
+++ b/scripts/def.dfn
@@ -1,32 +0,0 @@
-
-/* def.dfn - define format of libpng.def
- *
- * Last changed in libpng 1.5.0 [March 12, 2010]
- * Copyright (c) 1998-2010 Glenn Randers-Pehrson
- *
- * This code is released under the libpng license.
- * For conditions of distribution and use, see the disclaimer
- * and license in png.h
- */
-
-#define PNG_EXPORT(type, name, args, attributes, ordinal)\
- PNG_DEFN_MAGIC- name @ordinal-PNG_DEFN_END
-#define PNG_REMOVED(type, name, args, attributes, ordinal)\
- PNG_DEFN_MAGIC-; name @ordinal-PNG_DEFN_END
-
-PNG_DEFN_MAGIC-;---------------------------------------------------------------PNG_DEFN_END
-PNG_DEFN_MAGIC-; LIBPNG module definition file for Windows, WindowsCE and OS/2-PNG_DEFN_END
-PNG_DEFN_MAGIC-; On OS/2 uncomment lines preceded by ;0S2-PNG_DEFN_END
-PNG_DEFN_MAGIC-;---------------------------------------------------------------PNG_DEFN_END
-PNG_DEFN_MAGIC--PNG_DEFN_END
-PNG_DEFN_MAGIC-; If you give the library an explicit name one or other files-PNG_DEFN_END
-PNG_DEFN_MAGIC-; may need modifying to support the new name on one or more-PNG_DEFN_END
-PNG_DEFN_MAGIC-; systems.-PNG_DEFN_END
-PNG_DEFN_MAGIC-LIBRARY-PNG_DEFN_END
-PNG_DEFN_MAGIC-;OS2 DESCRIPTION "PNG image compression library"-PNG_DEFN_END
-PNG_DEFN_MAGIC-;OS2 CODE PRELOAD MOVEABLE DISCARDABLE-PNG_DEFN_END
-PNG_DEFN_MAGIC--PNG_DEFN_END
-PNG_DEFN_MAGIC-EXPORTS-PNG_DEFN_END
-PNG_DEFN_MAGIC-;Version PNGLIB_VERSION-PNG_DEFN_END
-
-#include "../png.h"
diff --git a/scripts/options.awk b/scripts/options.awk
new file mode 100644
index 000000000..61d111ef4
--- /dev/null
+++ b/scripts/options.awk
@@ -0,0 +1,566 @@
+#!/bin/awk -f
+# scripts/options.awk - library build configuration control
+#
+# libpng version 1.5.0beta17 - April 2, 2010
+#
+# Copyright (c) 1998-2010 Glenn Randers-Pehrson
+#
+# This code is released under the libpng license.
+# For conditions of distribution and use, see the disclaimer
+# and license in png.h
+
+# The output of this script is written to the file given by
+# the variable 'out'. The script is run twice, once with
+# an intermediate output file, 'options.tmp' then again on
+# that file to produce the final output. Each time the
+# output files and whether or not to pre-prrocess must be
+# specified:
+#
+# awk -f scripts/options.awk pre=1 out=options.tmp scripts/options.dat 1>&2
+# awk -f scripts/options.awk pre=0 out=options.dfn options.tmp 1>&2
+
+BEGIN{
+ out="/dev/null" # intermediate, preprocessed, file
+ pre=-1 # preprocess
+ start="PNG_DEFN_MAGIC-" # Arbitrary start
+ end="-PNG_DEFN_END" # Arbitrary end
+ cx= "/@@@*" # Open C comment for output file
+ comment=start cx # Comment start
+ cend="*/" end # Comment end
+ def=start "#define PNG_@@@" # Arbitrary define
+ sup="@@@_SUPPORTED" end # end supported option
+ und=comment "#undef PNG_@@@" # Unsupported option
+ une="@@@_SUPPORTED" cend # end unsupported option
+ error=start "ERROR:" # error message
+ deb=0 # debug - set on command line
+ logunsupported=0 # write unsupported options too
+
+ # Precreate arrays
+ option[""] = "" # list of all options: default on/off/""
+ done[""] = 1 # marks option as having been output
+ requires[""] = "" # requires by option
+ iffs[""] = "" # if by option
+ enabledby[""] = "" # options that enable it by option
+ setting[""] = "" # requires by setting
+ defaults[""] = "" # used for a defaulted value
+ doneset[""] = 1 # marks setting as having been output
+ r[""] = "" # Temporary array
+
+ # For decorating the output file
+ protect = ""
+}
+
+# Preprocessing - this just copies the input file with lines
+# that need preprocessing (just chunk at present) expanded
+pre && $1 != "chunk"{
+ print >out
+ next
+}
+
+# The first characters of the line determine how it is processed,
+# leading spaces are ignored. In general tokens that are not
+# keywords are the names of options. An option 'name' is
+# controlled by the definition of the corresponding macros:
+#
+# PNG_name_SUPPORTED The option is turned on
+# PNG_NO_name
+# PNG_NO_name_SUPPORTED If the first macro is not defined
+# either of these will turn the option off
+#
+# If none of these macros are defined the option is turned on, unless
+# the keyword 'off' is given in a line relating to the option. The
+# keyword 'on' can also be given, but it will be ignored (since it is
+# the default.)
+#
+# In the syntax below a 'name' is indicated by "NAME", other macro
+# values are indicated by "MACRO", as with "NAME" the leading "PNG_"
+# is omitted, but in this case the "NO_" prefix and the "_SUPPORTED"
+# suffix are never used.
+#
+# Each line is introduced by a keyword - the first non-space characters
+# on the line. A line starting with a '#' is a comment - it is totally
+# ignored. Keywords are as follows, a NAME, is simply a macro name
+# without the leading PNG_, PNG_NO_ or the trailing _SUPPORTED.
+
+$1 ~ /^#/ || $0 ~ /^[ ]*$/{
+ next
+}
+
+# com <comment>
+# The whole line is placed in the output file as a comment with
+# the preceding 'com' removed
+$1 == "com"{
+ if (NF > 1) {
+ sub(/^[ ]*com[ ]*/, "")
+ print comment, $0, cend >out
+ } else
+ print start end >out
+ next
+}
+
+# file output input protect
+# Informational: the official name of the input file (without
+# make generated local directories), the official name of the
+# output file and, if required, a name to use in a protection
+# macro for the contents.
+$1 == "file" && NF >= 2{
+ print comment, $2, cend >out
+ print comment, "Machine generated file: DO NOT EDIT", cend >out
+ if (NF >= 3)
+ print comment, "Derived from:", $3, cend >out
+ protect = $4
+ if (protect != "") {
+ print start "#ifndef", protect end >out
+ print start "#define", protect end >out
+ }
+ next
+}
+
+# option NAME ( (requires|enables|if) NAME* | on | off )*
+# Declares an option 'NAME' and describes its default setting (on|off)
+# and its relationship to other options. The option is disabled
+# unless *all* the options listed after 'requires' are set and at
+# least one of the options listed after 'if' is set. If the
+# option is set then it turns on all the options listed after 'enables'.
+
+$1 == "option" && NF >= 2{
+ onoff = option[$2] # records default on or default off
+ key = ""
+ for (i=3; i<=NF; ++i) {
+ if ($(i) == "on" || $(i) == "off") {
+ key = ""
+ if (onoff != $(i)) {
+ if (onoff == "")
+ onoff = $(i)
+ else {
+ # Print a message, otherwise the error
+ # below is incomprehensible
+ print $2 ": currently", onoff ": attempt to turn", $(i)
+ break
+ }
+ }
+ } else if ($(i) == "requires" || $(i) == "if" || $(i) == "enables") {
+ key = $(i)
+ } else if (key == "requires") {
+ requires[$2] = requires[$2] " " $(i)
+ } else if (key == "if") {
+ iffs[$2] = iffs[$2] " " $(i)
+ } else if (key == "enables") {
+ enabledby[$(i)] = enabledby[$(i)] " " $2
+ } else
+ break # bad line format
+ }
+
+ if (i > NF) {
+ # Set the option - this may explicitly set it to "", that's good
+ # becaue we need to ensure it exists and we can't rely on some
+ # actually quite sensible awk implementation not optimising the
+ # read above away (gawk doesn't)
+ option[$2] = onoff
+ next
+ }
+ # Else fall through to the error handler
+}
+
+# chunk NAME [requires OPT] [off]
+# Expands to the 'option' settings appropriate to the reading and
+# writing of an ancilliary PNG chunk 'NAME':
+#
+# option READ_NAME requires READ_ANCILLARY_CHUNKS [READ_OPT]
+# option READ_NAME enables NAME
+# [option READ_NAME off]
+# option WRITE_NAME requires WRITE_ANCILLARY_CHUNKS [WRITE_OPT]
+# option WRITE_NAME enables NAME
+# [option WRITE_NAME off]
+
+pre && $1 == "chunk" && NF >= 2{
+ # 'chunk' is handled on the first pass by writing appropriate
+ # 'option' lines into the intermediate file.
+ onoff = ""
+ reqread = ""
+ reqwrite = ""
+ i = 3 # indicates format error
+ if (NF > 2) {
+ # read the keywords/additional OPTS
+ req = 0
+ for (i=3; i<=NF; ++i) {
+ if ($(i) == "on" || $(i) == "off") {
+ if (onoff != $(i)) {
+ if (onoff == "")
+ onoff = $(i)
+ else
+ break # on/off conflict
+ }
+ } else if ($(i) == "requires")
+ req = 1
+ else if (req != 1)
+ break # bad line: handled below
+ else {
+ reqread = reqread " READ_" $(i)
+ reqwrite = reqwrite " WRITE_" $(i)
+ }
+ }
+ }
+
+ if (i > NF) {
+ # Output new 'option' lines to the intermediate file (out)
+ print "option READ_" $2,
+ "requires READ_ANCILLARY_CHUNKS" reqread,
+ "enables", $2, onoff >out
+ print "option WRITE_" $2,
+ "requires WRITE_ANCILLARY_CHUNKS" reqwrite,
+ "enables", $2, onoff >out
+ next
+ }
+ # Else hit the error handler below - bad line format!
+}
+
+# setting MACRO ( requires MACRO* )* [ default VALUE ]
+# Behaves in a similar way to 'option' without looking for NO_ or
+# _SUPPORTED; the macro is enabled if it is defined so long as all
+# the 'requires' macros are also defined. The definitions may be
+# empty, an error will be issued if the 'requires' macros are
+# *not* defined. If given the 'default' value is used if the
+# macro is not defined. The default value will be re-tokenised.
+# (BTW: this is somewhat restrictive, it mainly exists for the
+# support of non-standard configurations and numeric parameters,
+# see the uses in scripts/options.dat
+
+$1 == "setting" && (NF == 2 || NF >= 3 && ($3 == "requires" || $3 == "default")){
+ reqs = ""
+ deflt = ""
+ isdef = 0
+ key = ""
+ for (i=3; i<=NF; ++i)
+ if ($(i) == "requires" || $(i) == "default") {
+ key = $(i)
+ if (key == "default") isdef = 1
+ } else if (key == "requires")
+ reqs = reqs " " $(i)
+ else if (key == "default")
+ deflt = deflt " " $(i)
+ else
+ break # Format error, handled below
+
+ setting[$2] = reqs
+ if (isdef && deflt == "")
+ deflt = " " # as a flag to force output
+ defaults[$2] = deflt
+ next
+}
+
+# The order of the dependency lines (option, chunk, setting) is irrelevant
+# - the 'enables', 'requires' and 'if' settings will be used to determine
+# the correct order in the output and the final values in pnglconf.h are
+# not order dependent. 'requires' and 'if' entries take precedence over
+# 'enables' from other options; if an option requires another option it
+# won't be set regardless of any options that enable it unless the other
+# option is also enabled.
+#
+# Similarly 'enables' trumps a NO_ definition in CFLAGS or pngusr.h
+#
+# For simplicity cycles in the definitions are regarded as errors,
+# even if they are not ambiguous.
+# A given NAME can be specified in as many 'option' lines as required, the
+# definitions are additive.
+
+# For backwards compatibility equivalent macros may be listed thus:
+#
+# = [NO_]NAME MACRO
+# Makes -DMACRO equivalent to -DPNG_NO_NAME or -DPNG_NAME_SUPPORTED
+# as appropriate.
+#
+# The definition is injected into the C compiler input when encountered
+# in the second pass (so all these definitions appear *after* the @
+# lines!)
+#
+# 'NAME' is as above, but 'MACRO' is the full text of the equivalent
+# old, deprecated, macro.
+
+$1 == "=" && NF == 3{
+ print "#ifdef PNG_" $3 >out
+ if ($2 ~ /^NO_/)
+ print "# define PNG_" $2 >out
+ else
+ print "# define PNG_" $2 "_SUPPORTED" >out
+ print "#endif" >out
+ next
+}
+
+# Lines may be injected into the C compiler input by preceding them
+# with an "@" character. The line is copied with just the leading
+# @ removed.
+
+$1 ~ /^@/{
+ sub(/^[ ]*@/, "")
+ print >out
+ next
+}
+
+# Check for unreognized lines, because of the preprocessing chunk
+# format errors will be detected on the first pass independent of
+# any other format errors.
+{
+ print "options.awk: bad line (" NR "):", $0
+ exit 1
+}
+
+# For checking purposes names that start with "ok_" or "fail_" are
+# not output to pnglconf.h and must be either enabled or disabled
+# respectively for the build to succeed. This allows interdependencies
+# between options of the form "at least one of" or "at most one of"
+# to be checked. For example:
+#
+# option FLOATING_POINT enables ok_math
+# option FIXED_POINT enables ok_math
+# This ensures that at least one of FLOATING_POINT and FIXED_POINT
+# must be set for the build to succeed.
+#
+# option fail_math requires FLOATING_POINT FIXED_POINT
+# This means the build will fail if *both* FLOATING_POINT and
+# FIXED_POINT are set (this is an example; in fact both are allowed.)
+#
+# If all these options were given the build would require exactly one
+# of the names to be enabled.
+
+END{
+ if (out == "/dev/null") {
+ print "out=output.file must be given on the command line"
+ exit 1
+ }
+ if (pre) {
+ if (pre != 1) {
+ print "pre=0 or pre=1 must be given on command line"
+ exit 1
+ }
+ exit 0
+ }
+
+ # Do the 'setting' values first, the algorithm the standard
+ # tree walk (O(1)) done in an O(2) while/for loop; interations
+ # settings x depth, outputing the deepest required macros
+ # first.
+ print "" >out
+ print "/* SETTINGS */" >out
+ print comment, "settings", cend >out
+ finished = 0
+ while (!finished) {
+ finished = 1
+ movement = 0 # done nothing
+ for (i in setting) if (!doneset[i]) {
+ nreqs = split(setting[i], r)
+ if (nreqs > 0) {
+ for (j=1; j<=nreqs; ++j) if (!doneset[r[j]])
+ break
+ if (j<=nreqs) {
+ finished = 0
+ continue # try a different setting
+ }
+ }
+
+ # All the requirements have been processed, output
+ # this setting.
+ if (deb) print "setting", i
+ print "" >out
+ print "/* setting: ", i >out
+ print " * requires:" setting[i] >out
+ print " * default: ", defaults[i], "*/" >out
+ if (defaults[i] == "") # no default, only check if defined
+ print "#ifdef PNG_" i >out
+ for (j=1; j<=nreqs; ++j) {
+ print "# ifndef PNG_" r[j] >out
+ print error, i, "requires", r[j] end >out
+ print "# endif" >out
+ }
+ if (defaults[i] != "") # default handling
+ print "#ifdef PNG_" i >out
+ print def i, "PNG_" i end >out
+ if (defaults[i] != "") {
+ print "#else /*default*/" >out
+ print def i defaults[i] end >out
+ }
+ print "#endif" >out
+
+ doneset[i] = 1
+ ++movement
+ }
+
+ if (!finished && !movement) {
+ print "setting: loop or missing setting in 'requires', cannot process:"
+ for (i in setting) if (!doneset[i])
+ print " setting", i, "requires" setting[i]
+ exit 1
+ }
+ }
+ print comment, "end of settings", cend >out
+
+ # Now do the options - somewhat more complex. The dependency
+ # tree is thus:
+ #
+ # name > name
+ # name requires name
+ # name if name
+ # name enabledby name
+ #
+ # First build a list 'tree' by option of all the things on which
+ # it depends.
+ print "" >out
+ print "/* OPTIONS */" >out
+ print comment, "options", cend >out
+ for (opt in enabledby) tree[opt] = 1 # may not be explicit options
+ for (opt in option) tree[opt] = "" # so unlisted options marked
+ for (opt in tree) {
+ if (tree[opt] == 1) {
+ tree[opt] = ""
+ if (option[opt] != "") {
+ print "internal error (1)"
+ exit 1
+ }
+ # Macros only listed in 'enables' remain off unless
+ # one of the enabling macros is on.
+ option[opt] = "off"
+ }
+
+ split("", list) # clear 'list'
+ # Now add every requires, iffs or enabledby entry to 'list'
+ # so that we can add a unique list of requirements to tree[i]
+ split(requires[opt] iffs[opt] enabledby[opt], r)
+ for (i in r) list[r[i]] = 1
+ for (i in list) tree[opt] = tree[opt] " " i
+ }
+
+ # print the tree for extreme debugging
+ if (deb > 2) for (i in tree) if (i != "") print i, "depends-on" tree[i]
+
+ # option[i] is now the complete list of all the tokens we may
+ # need to output, go through it as above, depth first.
+ finished = 0
+ while (!finished) {
+ finished = 1
+ movement = 0 # done nothing
+ for (i in option) if (!done[i]) {
+ nreqs = split(tree[i], r)
+ if (nreqs > 0) {
+ for (j=1; j<=nreqs; ++j) if (!done[r[j]])
+ break
+ if (j<=nreqs) {
+ finished = 0
+ continue # next option
+ }
+ }
+
+ # All the requirements have been processed, output
+ # this option. An option is _SUPPORTED if:
+ #
+ # all 'requires' are _SUPPORTED AND
+ # at least one of the 'if' options are _SUPPORTED AND
+ # EITHER:
+ # The name is _SUPPORTED (on the command line)
+ # OR:
+ # an 'enabledby' is _SUPPORTED
+ # OR:
+ # NO_name is not defined AND
+ # the option is not marked "off"
+ if (deb) print "option", i
+ print "" >out
+ print "/* option:", i, option[i] >out
+ print " * requires: " requires[i] >out
+ print " * if: " iffs[i] >out
+ print " * enabled-by:" enabledby[i], "*/" >out
+ print "#undef PNG_on" >out
+ print "#define PNG_on 1" >out
+
+ # requires
+ nreqs = split(requires[i], r)
+ for (j=1; j<=nreqs; ++j) {
+ print "#ifndef PNG_" r[j] "_SUPPORTED" >out
+ print "# undef PNG_on /*!" r[j] "*/" >out
+ print "#endif" >out
+ }
+
+ # if
+ nreqs = split(iffs[i], r)
+ print "#undef PNG_no_if" >out
+ if (nreqs > 0) {
+ print "/* if" iffs[i], "*/" >out
+ print "#define PNG_no_if 1" >out
+ for (j=1; j<=nreqs; ++j) {
+ print "#ifdef PNG_" r[j] "_SUPPORTED" >out
+ print "# undef PNG_no_if /*" r[j] "*/" >out
+ print "#endif" >out
+ }
+ print "#ifdef PNG_no_if /*missing if*/" >out
+ print "# undef PNG_on" >out
+ print "#endif" >out
+ }
+
+ print "#ifdef PNG_on /*requires, if*/" >out
+ # enables
+ print "# undef PNG_not_enabled" >out
+ print "# define PNG_not_enabled 1" >out
+ print " /* enabled by" enabledby[i], "*/" >out
+ nreqs = split(enabledby[i], r)
+ for (j=1; j<=nreqs; ++j) {
+ print "#ifdef PNG_" r[j] "_SUPPORTED" >out
+ print "# undef PNG_not_enabled /*" r[j] "*/" >out
+ print "#endif" >out
+ }
+
+ print "# ifndef PNG_" i "_SUPPORTED /*!command line*/" >out
+ print "# ifdef PNG_not_enabled /*!enabled*/" >out
+ if (option[i] == "off") {
+ print "# undef PNG_on /*default off*/" >out
+ } else {
+ print "# ifdef PNG_NO_" i >out
+ print "# undef PNG_on /*turned off*/" >out
+ print "# endif" >out
+ print "# ifdef PNG_NO_" i "_SUPPORTED" >out
+ print "# undef PNG_on /*turned off*/" >out
+ print "# endif" >out
+ }
+ print "# endif /*!enabled*/" >out
+ print "# ifdef PNG_on" >out
+ # The _SUPPORTED macro must be defined so that dependent
+ # options output later work.
+ print "# define PNG_" i "_SUPPORTED" >out
+ print "# endif" >out
+ print "# endif /*!command line*/" >out
+ # If PNG_on is still set the option should be defined in
+ # pnglconf.h
+ print "# ifdef PNG_on" >out
+ if (i ~ /^fail_/)
+ print error, i, "if" iffs[i], "requires" requires[i] end >out
+ else if (i !~ /^ok_/)
+ print def i sup >out
+ print "# endif /* definition */" >out
+ print "#endif /*requires, if*/" >out
+ if (logunsupported || i ~ /^ok_/) {
+ print "#ifndef PNG_on" >out
+ if (logunsupported)
+ print und i une >out
+ if (i ~ /^ok_/)
+ print error, i, "if" iffs[i], "requires" requires[i] end >out
+ print "#endif" >out
+ }
+
+ done[i] = 1
+ ++movement
+ }
+
+ if (!finished && !movement) {
+ print "option: loop or missing option in dependency tree, cannot process:"
+ for (i in option) if (!done[i]) {
+ print " option", i, "depends on" tree[i], "needs:"
+ nreqs = split(tree[i], r)
+ if (nreqs > 0) for (j=1; j<=nreqs; ++j) if (!done[r[j]])
+ print " " r[j]
+ }
+ exit 1
+ }
+ }
+ print comment, "end of options", cend >out
+
+ # Regular end - everything looks ok
+ if (protect != "")
+ print start "#endif", cx, protect, "*/" end >out
+}
diff --git a/scripts/pnglconf.dfa b/scripts/pnglconf.dfa
new file mode 100644
index 000000000..bf7fd63c8
--- /dev/null
+++ b/scripts/pnglconf.dfa
@@ -0,0 +1,329 @@
+# scripts/pnglconf.dfa - library build configuration control
+#
+@/*- pnglconf.dfn intermediate file
+@ * generated from scripts/pnglconf.dfa
+@ */
+#
+com pnglconf.h - library build configuration
+com
+com libpng version PNGLIB_VERSION - April 2, 2010
+com
+com Copyright (c) 1998-2010 Glenn Randers-Pehrson
+com
+com This code is released under the libpng license.
+com For conditions of distribution and use, see the disclaimer
+com and license in png.h
+com
+file pnglconf.h scripts/pnglconf.dfa PNGLCONF_H
+
+# This file is preprocessed by scripts/options.awk and the
+# C compiler to generate 'pnglconf.h' - a list of all the
+# configuration options. The file lists the various options
+# that can *only* be specified during the libpng build;
+# pnglconf.h freezes the definitons selected for the specific
+# build.
+#
+# The syntax is detailed in scripts/options.awk, this is a summary
+# only:
+#
+# setting <name> [requires ...] [default]
+# #define PNG_<name> <value> /* value comes from current setting */
+# option <name> [requires ...] [if ...] [enables ...] [on|off]
+# #define PNG_<name>_SUPPORTED if the requirements are met and
+# enable the other options listed
+# chunk <name> [requires ...] [on|off]
+# Enable chunk processing for the given ancillary chunk
+
+#----------------------------------------------------------------------
+
+# PNG_USER_CONFIG has to be defined on the compiler command line
+# to cause pngusr.h to be read while constructing pnglconf.h
+#
+# If this is set during the build 'pnglconf.h' will define
+# PNG_USER_PRIVATEBUILD to the value that *must* be set by pngusr.h
+# and contain other definitions as below.
+#
+# If you create a private DLL you need to define the following
+# macros in the file 'pngusr.h' and set -DPNG_USER_CONFIG for
+# compilation (i.e. in CFLAGS.)
+# #define PNG_USER_PRIVATEBUILD \
+# <Describes by whom and why this version of the DLL was built>
+# e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
+# #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
+# distinguish your DLL from those of the official release. These
+# correspond to the trailing letters that come after the version
+# number and must match your private DLL name>
+# e.g. // private DLL "libpng13gx.dll"
+# #define PNG_USER_DLLFNAME_POSTFIX "gx"
+#
+# The following macros are also at your disposal if you want to complete the
+# DLL VERSIONINFO structure.
+# - PNG_USER_VERSIONINFO_COMMENTS
+# - PNG_USER_VERSIONINFO_COMPANYNAME
+# - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
+
+@#ifdef PNG_USER_CONFIG
+@# include "pngusr.h"
+@#endif
+
+# Note that PNG_USR_CONFIG only has an effect when building
+# pnglconf.h
+setting USR_CONFIG requires USER_PRIVATEBUILD USER_DLLFNAME_POSTFIX
+setting USER_PRIVATEBUILD
+setting USER_DLLFNAME_POSTFIX
+setting USER_VERSIONINFO_COMMENTS
+setting USER_VERSIONINFO_COMPANYNAME
+setting USER_VERSIONINFO_LEGALTRADEMARKS
+
+# Record the 'API rule' used to select calling conventions on
+# those systems that support such things (see all the comments in
+# pngconf.h)
+setting API_RULE default 0
+
+# Default to using the read macros
+setting DEFAULT_READ_MACROS default 1
+
+# Generic options - affect both read and write.
+option BENIGN_ERRORS off
+option MNG_FEATURES
+option FLOATING_POINT enables ok_math
+option FIXED_POINT enables ok_math
+
+# Added at libpng version 1.4.0
+option ERROR_TEXT
+
+# The following is always on (defined empty)
+setting CALLOC_SUPPORTED default
+
+# This protects us against compilers that run on a windowing system
+# and thus don't have or would rather us not use the stdio types:
+# stdin, stdout, and stderr. The only one currently used is stderr
+# in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will
+# prevent these from being compiled and used. #defining PNG_NO_STDIO
+# will also prevent these, plus will prevent the entire set of stdio
+# macros and functions (FILE *, printf, etc.) from being compiled and used,
+# unless (PNG_DEBUG > 0) has been #defined.
+option STDIO
+option CONSOLE_IO requires STDIO
+
+# Note: prior to 1.5.0 this option could not be disabled if STDIO
+# was enabled.
+option TIME_RFC1123 requires STDIO
+
+# PNG_SETJMP_NOT_SUPPORTED is an old equivalent for NO_SETJMP
+option SETJMP
+= NO_SETJMP SETJMP_NOT_SUPPORTED
+
+# For the moment this is disabled (no code support):
+option ERROR_NUMBERS off
+
+# If this is disabled it is not possible for apps to get the
+# values from the 'info' structure, this effectively removes
+# quite a lot of the READ API.
+option EASY_ACCESS
+
+# Added at libpng-1.2.0
+option USER_MEM
+
+# Added at libpng-1.4.0
+option IO_STATE
+
+# This is only for PowerPC big-endian and 680x0 systems
+# some testing, not enabled by default.
+# NO LONGER USED
+#option READ_BIG_ENDIAN off
+
+# Allow users to control limits on what the READ code will
+# read:
+
+# Added at libpng-1.2.43; adds limit fields to png_struct,
+# allows some usages of these fields
+option USER_LIMITS
+
+# Added at libpng-1.2.6; adds setting APIs, allows additional
+# usage of this field (UTSL)
+option SET_USER_LIMITS requires USER_LIMITS
+
+# Feature added at libpng-1.4.0, this flag added at 1.4.1
+option SET_USER_LIMITS enables SET_CHUNK_CACHE_LIMIT
+# Feature added at libpng-1.4.1, this flag added at 1.4.1
+option SET_USER_LIMITS enables SET_CHUNK_MALLOC_LIMIT
+
+# Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGs no matter
+# how large, set these two limits to 0x7fffffffL
+setting USER_WIDTH_MAX default 1000000L
+setting USER_HEIGHT_MAX default 1000000L
+
+# Added at libpng-1.2.43. To accept all valid PNGs no matter
+# how large, set these two limits to 0.
+setting USER_CHUNK_CACHE_MAX default 0
+
+# Added at libpng-1.2.43
+setting USER_CHUNK_MALLOC_MAX default 0
+
+# The following defines give you the ability to remove code from the
+# library that you will not be using. It is simply a matter of
+# defining the features on the compiler command line (in CPPFLAGS,
+# or CFLAGS) or, perhaps easier, hand-editing pnglconf.h after it
+# has been generated from this file.
+#
+# If you build a shared library with non-default options then the
+# result should normally be made a 'private' build so that applications
+# linked against the default DLL do not fail at run time because of
+# unresolved symbols.
+
+# READ options
+option READ enables READ_INTERLACING
+
+option READ_TRANSFORMS requires READ
+= NO_READ_TRANSFORMS PNG_READ_TRANSFORMS_NOT_SUPPORTED
+
+option READ_EXPAND requires READ_TRANSFORMS
+option READ_SHIFT requires READ_TRANSFORMS
+option READ_PACK requires READ_TRANSFORMS
+option READ_BGR requires READ_TRANSFORMS
+option READ_SWAP requires READ_TRANSFORMS
+option READ_PACKSWAP requires READ_TRANSFORMS
+option READ_INVERT requires READ_TRANSFORMS
+option READ_BACKGROUND requires READ_TRANSFORMS
+option READ_16_TO_8 requires READ_TRANSFORMS
+option READ_FILLER requires READ_TRANSFORMS
+option READ_GAMMA requires READ_TRANSFORMS
+option READ_GRAY_TO_RGB requires READ_TRANSFORMS
+option READ_SWAP_ALPHA requires READ_TRANSFORMS
+option READ_INVERT_ALPHA requires READ_TRANSFORMS
+option READ_STRIP_ALPHA requires READ_TRANSFORMS
+option READ_USER_TRANSFORM requires READ_TRANSFORMS
+option READ_RGB_TO_GRAY requires READ_TRANSFORMS
+
+option PROGRESSIVE_READ requires READ
+option SEQUENTIAL_READ requires READ
+
+# You can define PNG_NO_PROGRESSIVE_READ if you don't do progressive reading.
+# This is not talking about interlacing capability! You'll still have
+# interlacing unless you turn off the following which is required
+# for PNG-compliant decoders. (In other words, do not do this - in
+# fact it can't be disabled from the command line!)
+#option READ_INTERLACING requires READ
+
+option READ_COMPOSITE_NODIV requires READ
+= NO_READ_COMPOSITE_NODIV PNG_NO_READ_COMPOSITED_NODIV
+
+# Inch conversions: not switched on by default
+option INCH_CONVERSIONS requires FLOATING_POINT off
+= INCH_CONVERSIONS PNG_INCH_CONVERSIONS
+
+# IN DEVELOPMENT
+# These are currently experimental features, define them if you want
+
+# Never enabled?
+option READ_DITHER requires READ off
+
+# Very little testing, not enabled by default.
+option READ_16_TO_8_ACCURATE_SCALE requires READ off
+
+# WRITE options
+option WRITE
+
+option WRITE_TRANSFORMS requires WRITE
+= NO_WRITE_TRANSFORMS PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
+
+# ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
+option WRITE_SHIFT requires WRITE_TRANSFORMS
+option WRITE_PACK requires WRITE_TRANSFORMS
+option WRITE_BGR requires WRITE_TRANSFORMS
+option WRITE_SWAP requires WRITE_TRANSFORMS
+option WRITE_PACKSWAP requires WRITE_TRANSFORMS
+option WRITE_INVERT requires WRITE_TRANSFORMS
+option WRITE_FILLER requires WRITE_TRANSFORMS
+option WRITE_SWAP_ALPHA requires WRITE_TRANSFORMS
+option WRITE_INVERT_ALPHA requires WRITE_TRANSFORMS
+option WRITE_USER_TRANSFORM requires WRITE_TRANSFORMS
+
+# This is not required for PNG-compliant encoders, but can cause
+# trouble if left undefined
+option WRITE_INTERLACING requires WRITE
+
+option WRITE_WEIGHTED_FILTER requires WRITE FLOATING_POINT
+
+option WRITE_FLUSH requires WRITE
+
+# Note: this can be turned off explicitly, is this correcct?
+option USER_TRANSFORM_PTR if READ_USER_TRANSFORM WRITE_USER_TRANSFORM
+
+# Any chunks you are not interested in, you can undef here. The
+# ones that allocate memory may be expecially important (hIST,
+# tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info
+# a bit smaller.
+
+# The size of the png_text structure changed in libpng-1.0.6 when
+# iTXt support was added. iTXt support was turned off by default through
+# libpng-1.2.x, to support old apps that malloc the png_text structure
+# instead of calling png_set_text() and letting libpng malloc it. It
+# was turned on by default in libpng-1.4.0.
+
+option READ_ANCILLARY_CHUNKS requires READ
+# PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated.
+= NO_READ_ANCILLARY_CHUNKS READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
+
+option WRITE_ANCILLARY_CHUNKS requires WRITE
+# PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated.
+= NO_WRITE_ANCILLARY_CHUNKS WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
+
+# These options disable *all* the text chunks if turned off
+option READ_TEXT requires READ_ANCILLARY_CHUNKS enables TEXT
+option WRITE_TEXT requires WRITE_ANCILLARY_CHUNKS enables TEXT
+
+# Ancillary chunks
+chunk bKGD
+chunk cHRM
+chunk gAMA
+chunk hIST
+chunk iCCP
+chunk iTXt requires TEXT
+chunk oFFs
+chunk pCAL
+chunk sCAL
+chunk pHYs
+chunk sBIT
+chunk sPLT
+chunk sRGB
+chunk tEXt requires TEXT
+chunk tIME
+chunk tRNS
+chunk zTXt requires TEXT
+
+# This only affects support of the optional PLTE chunk in RGB and RGBA
+# images. Notice that READ_ANCILLARY_CHUNKS therefore disables part
+# of the regular chunk reading too.
+option READ_OPT_PLTE requires READ_ANCILLARY_CHUNKS
+
+option READ_UNKNOWN_CHUNKS requires READ
+option READ_UNKNOWN_CHUNKS enables UNKNOWN_CHUNKS READ_USER_CHUNKS
+option READ_USER_CHUNKS requires READ enables USER_CHUNKS
+
+option CONVERT_tIME requires WRITE_ANCILLARY_CHUNKS
+# The "tm" structure is not supported on WindowsCE
+@#ifdef _WIN32_WCE
+@# define PNG_NO_CONVERT_tIME
+@#endif
+
+option WRITE_FILTER requires WRITE
+
+option WRITE_UNKNOWN_CHUNKS requires WRITE
+
+option HANDLE_AS_UNKNOWN
+
+option GET_INT_32 requires READ
+# png_get_int_32 is required by the ancillary chunks oFFs and pCAL
+option READ_oFFs enables GET_INT_32
+option READ_pCAL enables GET_INT_32
+
+option SAVE_INT_32 requires WRITE
+# Likewise for png_save_int_32
+option WRITE_oFFs enables SAVE_INT_32
+option WRITE_pCAL enables SAVE_INT_32
+
+# Turn this off to disable png_read_png() and png_write_png() and
+# leave the row_pointers member out of the info structure.
+option INFO_IMAGE
diff --git a/scripts/pnglconf.h b/scripts/pnglconf.h
new file mode 100644
index 000000000..8241b7be0
--- /dev/null
+++ b/scripts/pnglconf.h
@@ -0,0 +1,155 @@
+/* 1.5.0beta17 STANDARD API DEFINITION */
+/* pnglconf.h - library build configuration */
+
+/* libpng version 1.5.0beta17 - April 2, 2010 */
+
+/* Copyright (c) 1998-2010 Glenn Randers-Pehrson */
+
+/* This code is released under the libpng license. */
+/* For conditions of distribution and use, see the disclaimer */
+/* and license in png.h */
+
+/* pnglconf.h */
+/* Machine generated file: DO NOT EDIT */
+/* Derived from: scripts/pnglconf.dfa */
+#ifndef PNGLCONF_H
+#define PNGLCONF_H
+/* settings */
+#define PNG_CALLOC_SUPPORTED
+#define PNG_USER_WIDTH_MAX 1000000L
+#define PNG_API_RULE 0
+#define PNG_USER_CHUNK_CACHE_MAX 0
+#define PNG_USER_HEIGHT_MAX 1000000L
+#define PNG_USER_CHUNK_MALLOC_MAX 0
+#define PNG_DEFAULT_READ_MACROS 1
+/* end of settings */
+/* options */
+#define PNG_INFO_IMAGE_SUPPORTED
+#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
+#define PNG_WRITE_SUPPORTED
+#define PNG_WRITE_INTERLACING_SUPPORTED
+#define PNG_EASY_ACCESS_SUPPORTED
+#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
+#define PNG_USER_LIMITS_SUPPORTED
+#define PNG_FIXED_POINT_SUPPORTED
+/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/
+#define PNG_ERROR_TEXT_SUPPORTED
+#define PNG_READ_SUPPORTED
+/*#undef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED*/
+/*#undef PNG_BENIGN_ERRORS_SUPPORTED*/
+#define PNG_SETJMP_SUPPORTED
+#define PNG_WRITE_FLUSH_SUPPORTED
+#define PNG_MNG_FEATURES_SUPPORTED
+#define PNG_FLOATING_POINT_SUPPORTED
+/*#undef PNG_INCH_CONVERSIONS_SUPPORTED*/
+#define PNG_STDIO_SUPPORTED
+#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+#define PNG_USER_MEM_SUPPORTED
+#define PNG_IO_STATE_SUPPORTED
+#define PNG_SET_USER_LIMITS_SUPPORTED
+#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
+#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
+#define PNG_WRITE_FILTER_SUPPORTED
+#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
+#define PNG_WRITE_iCCP_SUPPORTED
+#define PNG_READ_TRANSFORMS_SUPPORTED
+#define PNG_READ_GAMMA_SUPPORTED
+#define PNG_READ_bKGD_SUPPORTED
+#define PNG_UNKNOWN_CHUNKS_SUPPORTED
+#define PNG_READ_sCAL_SUPPORTED
+#define PNG_WRITE_hIST_SUPPORTED
+#define PNG_READ_OPT_PLTE_SUPPORTED
+#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
+#define PNG_WRITE_gAMA_SUPPORTED
+#define PNG_READ_GRAY_TO_RGB_SUPPORTED
+#define PNG_WRITE_pCAL_SUPPORTED
+#define PNG_READ_INVERT_ALPHA_SUPPORTED
+#define PNG_WRITE_TRANSFORMS_SUPPORTED
+#define PNG_READ_sBIT_SUPPORTED
+#define PNG_READ_PACK_SUPPORTED
+#define PNG_WRITE_SWAP_SUPPORTED
+#define PNG_READ_cHRM_SUPPORTED
+#define PNG_WRITE_tIME_SUPPORTED
+#define PNG_READ_INTERLACING_SUPPORTED
+#define PNG_READ_tRNS_SUPPORTED
+#define PNG_WRITE_pHYs_SUPPORTED
+#define PNG_WRITE_INVERT_SUPPORTED
+#define PNG_READ_RGB_TO_GRAY_SUPPORTED
+#define PNG_WRITE_sRGB_SUPPORTED
+#define PNG_READ_oFFs_SUPPORTED
+#define PNG_WRITE_FILLER_SUPPORTED
+#define PNG_WRITE_TEXT_SUPPORTED
+#define PNG_WRITE_SHIFT_SUPPORTED
+#define PNG_PROGRESSIVE_READ_SUPPORTED
+#define PNG_READ_SHIFT_SUPPORTED
+#define PNG_CONVERT_tIME_SUPPORTED
+#define PNG_READ_USER_TRANSFORM_SUPPORTED
+#define PNG_READ_USER_CHUNKS_SUPPORTED
+#define PNG_READ_hIST_SUPPORTED
+/*#undef PNG_READ_DITHER_SUPPORTED*/
+#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
+#define PNG_READ_SWAP_ALPHA_SUPPORTED
+#define PNG_READ_COMPOSITE_NODIV_SUPPORTED
+#define PNG_SEQUENTIAL_READ_SUPPORTED
+#define PNG_READ_BACKGROUND_SUPPORTED
+#define PNG_READ_iCCP_SUPPORTED
+#define PNG_READ_STRIP_ALPHA_SUPPORTED
+#define PNG_READ_PACKSWAP_SUPPORTED
+#define PNG_READ_sRGB_SUPPORTED
+#define PNG_WRITE_tEXt_SUPPORTED
+#define PNG_READ_gAMA_SUPPORTED
+#define PNG_READ_pCAL_SUPPORTED
+#define PNG_READ_EXPAND_SUPPORTED
+#define PNG_WRITE_sPLT_SUPPORTED
+#define PNG_READ_SWAP_SUPPORTED
+#define PNG_READ_tIME_SUPPORTED
+#define PNG_READ_pHYs_SUPPORTED
+#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
+#define PNG_TIME_RFC1123_SUPPORTED
+#define PNG_READ_TEXT_SUPPORTED
+#define PNG_WRITE_BGR_SUPPORTED
+#define PNG_USER_CHUNKS_SUPPORTED
+#define PNG_CONSOLE_IO_SUPPORTED
+#define PNG_GET_INT_32_SUPPORTED
+#define PNG_WRITE_PACK_SUPPORTED
+#define PNG_READ_FILLER_SUPPORTED
+#define PNG_WRITE_bKGD_SUPPORTED
+#define PNG_WRITE_tRNS_SUPPORTED
+#define PNG_READ_sPLT_SUPPORTED
+#define PNG_WRITE_sCAL_SUPPORTED
+#define PNG_WRITE_oFFs_SUPPORTED
+#define PNG_READ_tEXt_SUPPORTED
+#define PNG_WRITE_sBIT_SUPPORTED
+#define PNG_READ_INVERT_SUPPORTED
+#define PNG_READ_16_TO_8_SUPPORTED
+#define PNG_WRITE_cHRM_SUPPORTED
+#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
+#define PNG_READ_BGR_SUPPORTED
+#define PNG_WRITE_PACKSWAP_SUPPORTED
+#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
+#define PNG_sCAL_SUPPORTED
+#define PNG_WRITE_zTXt_SUPPORTED
+#define PNG_sBIT_SUPPORTED
+#define PNG_cHRM_SUPPORTED
+#define PNG_bKGD_SUPPORTED
+#define PNG_tRNS_SUPPORTED
+#define PNG_WRITE_iTXt_SUPPORTED
+#define PNG_oFFs_SUPPORTED
+#define PNG_USER_TRANSFORM_PTR_SUPPORTED
+#define PNG_hIST_SUPPORTED
+#define PNG_iCCP_SUPPORTED
+#define PNG_sRGB_SUPPORTED
+#define PNG_READ_zTXt_SUPPORTED
+#define PNG_gAMA_SUPPORTED
+#define PNG_pCAL_SUPPORTED
+#define PNG_tIME_SUPPORTED
+#define PNG_pHYs_SUPPORTED
+#define PNG_READ_iTXt_SUPPORTED
+#define PNG_TEXT_SUPPORTED
+#define PNG_SAVE_INT_32_SUPPORTED
+#define PNG_sPLT_SUPPORTED
+#define PNG_tEXt_SUPPORTED
+#define PNG_zTXt_SUPPORTED
+#define PNG_iTXt_SUPPORTED
+/* end of options */
+#endif /* PNGLCONF_H */
diff --git a/scripts/pngwin.def b/scripts/pngwin.def
index cc46d3dba..a5a646859 100644
--- a/scripts/pngwin.def
+++ b/scripts/pngwin.def
@@ -198,6 +198,9 @@ EXPORTS
png_get_chunk_malloc_max @192
png_get_io_state @199
png_get_io_chunk_name @200
+ png_get_uint_32 @201
+ png_get_uint_16 @202
+ png_get_int_32 @203
png_get_uint_31 @204
png_save_uint_32 @205
png_save_int_32 @206
diff --git a/scripts/pngwin.dfn b/scripts/pngwin.dfn
new file mode 100644
index 000000000..8d8c21320
--- /dev/null
+++ b/scripts/pngwin.dfn
@@ -0,0 +1,38 @@
+
+/* pngwin.dfn - define format of pngwin.def
+ *
+ * Last changed in libpng 1.5.0 [March 12, 2010]
+ * Copyright (c) 1998-2010 Glenn Randers-Pehrson
+ *
+ * This code is released under the libpng license.
+ * For conditions of distribution and use, see the disclaimer
+ * and license in png.h
+ */
+
+#define PNG_EXPORT(type, name, args, attributes, ordinal)\
+ PNG_DEFN_MAGIC- name @ordinal-PNG_DEFN_END
+#define PNG_REMOVED(type, name, args, attributes, ordinal)\
+ PNG_DEFN_MAGIC-; name @ordinal-PNG_DEFN_END
+#define PNG_EXPORT_LAST_ORDINAL(ordinal)\
+ PNG_DEFN_MAGIC-; @ordinal-PNG_DEFN_END
+
+PNG_DEFN_MAGIC-;---------------------------------------------------------------PNG_DEFN_END
+PNG_DEFN_MAGIC-; LIBPNG module definition file for Windows, WindowsCE and OS/2-PNG_DEFN_END
+PNG_DEFN_MAGIC-; On OS/2 uncomment lines preceded by ;0S2-PNG_DEFN_END
+PNG_DEFN_MAGIC-;---------------------------------------------------------------PNG_DEFN_END
+PNG_DEFN_MAGIC--PNG_DEFN_END
+PNG_DEFN_MAGIC-; If you give the library an explicit name one or other files-PNG_DEFN_END
+PNG_DEFN_MAGIC-; may need modifying to support the new name on one or more-PNG_DEFN_END
+PNG_DEFN_MAGIC-; systems.-PNG_DEFN_END
+PNG_DEFN_MAGIC-LIBRARY-PNG_DEFN_END
+PNG_DEFN_MAGIC-;OS2 DESCRIPTION "PNG image compression library"-PNG_DEFN_END
+PNG_DEFN_MAGIC-;OS2 CODE PRELOAD MOVEABLE DISCARDABLE-PNG_DEFN_END
+PNG_DEFN_MAGIC--PNG_DEFN_END
+PNG_DEFN_MAGIC-EXPORTS-PNG_DEFN_END
+PNG_DEFN_MAGIC-;Version PNGLIB_VERSION-PNG_DEFN_END
+
+/* Read the defaults, but use scripts/pnglconf.h; the 'standard'
+ * header file.
+ */
+#include "pnglconf.h"
+#include "../png.h"
diff --git a/scripts/symbols.def b/scripts/symbols.def
index f650f72b4..b2b445e7b 100644
--- a/scripts/symbols.def
+++ b/scripts/symbols.def
@@ -1,5 +1,5 @@
;--------------------------------------------------------------
-; LIBPNG symbol list as a WIn32 DEF file
+; LIBPNG symbol list as a Win32 DEF file
; Contains all the symbols that can be exported from libpng
;--------------------------------------------------------------
LIBRARY
@@ -54,7 +54,7 @@ EXPORTS
png_set_invert_mono @46
png_set_background @47
png_set_strip_16 @48
-; png_set_dither @49
+ png_set_quantize @49
png_set_gamma @50
png_set_flush @51
png_write_flush @52
@@ -213,4 +213,3 @@ EXPORTS
png_save_uint_32 @205
png_save_int_32 @206
png_save_uint_16 @207
- png_set_quantize @208
diff --git a/scripts/symbols.dfn b/scripts/symbols.dfn
new file mode 100644
index 000000000..4a594056f
--- /dev/null
+++ b/scripts/symbols.dfn
@@ -0,0 +1,58 @@
+
+/* symbols.dfn - find all exported symbols
+ *
+ * Last changed in libpng 1.5.0 [April 1, 2010]
+ * Copyright (c) 1998-2010 Glenn Randers-Pehrson
+ *
+ * This code is released under the libpng license.
+ * For conditions of distribution and use, see the disclaimer
+ * and license in png.h
+ */
+
+/* NOTE: making 'symbols.chk' checks both that the exported
+ * symbols in the library don't change and (implicitly) that
+ * scripts/pnglconf.h is as expected. If scripts/pnglconf.h
+ * is remade using scripts/pnglconf.dfa then this checks the
+ * .dfa file too.
+ */
+
+#define PNG_EXPORT(type, name, args, attributes, ordinal)\
+ PNG_DEFN_MAGIC-name @ordinal-PNG_DEFN_END
+#define PNG_REMOVED(type, name, args, attributes, ordinal)\
+ PNG_DEFN_MAGIC-; name @ordinal-PNG_DEFN_END
+#define PNG_EXPORT_LAST_ORDINAL(ordinal)\
+ PNG_DEFN_MAGIC-; @ordinal-PNG_DEFN_END
+
+/* Read the defaults, but use scripts/pnglconf.h; the 'standard'
+ * header file.
+ */
+#include "pnglconf.h"
+#include "../png.h"
+
+/* Some things are turned off by default. Turn these things
+ * on here (by hand) to get the APIs they expose and validate
+ * that no harm is done. This list is the set of options
+ * defaulted to 'off' in scripts/pnglconf.dfa
+ *
+ * Maintenance: if scripts/pnglconf.dfa options are changed
+ * from, or to, 'off' this needs updating!
+ */
+#define PNG_BENIGN_ERRORS_SUPPORTED
+#define PNG_ERROR_NUMBERS_SUPPORTED
+#define PNG_READ_BIG_ENDIAN_SUPPORTED /* should do nothing! */
+#define PNG_INCH_CONVERSIONS_SUPPORTED
+#define PNG_READ_DITHER_SUPPORTED
+#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
+
+#undef PNG_H
+#include "../png.h"
+
+/* Finally there are a couple of places where option support
+ * actually changes the APIs revealed using a #if/#else/#endif
+ * test in png.h, test these here.
+ */
+#undef PNG_FLOATING_POINT_SUPPORTED /* Exposes 'fixed' APIs */
+#undef PNG_ERROR_TEXT_SUPPORTED /* Exposes unsupported APIs */
+
+#undef PNG_H
+#include "../png.h"