From 862cb20ea60f78a05cb4c8a6cdc33f23bebe3248 Mon Sep 17 00:00:00 2001 From: Glenn Randers-Pehrson Date: Fri, 16 Apr 2010 22:12:51 -0500 Subject: [PATCH] [devel] 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 --- ANNOUNCE | 14 +- CHANGES | 12 +- libpng-1.5.0beta17.txt | 2 +- libpng.3 | 2 +- png.h | 116 ++++-- pngconf.h | 924 ++--------------------------------------- pngdebug.h | 18 + pngpriv.h | 112 ++++- scripts/checksym.awk | 59 +-- scripts/checksym.dfn | 102 ----- scripts/def.dfn | 32 -- scripts/options.awk | 566 +++++++++++++++++++++++++ scripts/pnglconf.dfa | 329 +++++++++++++++ scripts/pnglconf.h | 155 +++++++ scripts/pngwin.def | 3 + scripts/pngwin.dfn | 38 ++ scripts/symbols.def | 5 +- scripts/symbols.dfn | 58 +++ 18 files changed, 1459 insertions(+), 1088 deletions(-) delete mode 100644 scripts/checksym.dfn create mode 100644 scripts/options.awk create mode 100644 scripts/pnglconf.dfa create mode 100644 scripts/pnglconf.h create mode 100644 scripts/pngwin.dfn create mode 100644 scripts/symbols.dfn 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 */ -#ifndef PNG_VERSION_INFO_ONLY -/* Include the compression library's header */ -# include "zlib.h" +/* Library configuration: these options cannot be changed after + * the library has been built. + */ +#ifndef PNGLCONF_H +# include "pnglconf.h" #endif -/* Include all user configurable info, including optional assembler routines */ -#include "pngconf.h" +#ifndef PNG_VERSION_INFO_ONLY +/* Standard header files (not needed for the version info) */ +# ifdef PNG_STDIO_SUPPORTED +# include +# endif +# ifdef PNG_SETJMP_SUPPORTED +# include +# endif + +/* Include the compression library's header */ +# include "zlib.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_ 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 +/* Need the time information for converting tIME chunks, it + * defines struct tm: + */ +#ifdef PNG_CONVERT_tIME_SUPPORTED + /* "time.h" functions are not supported on WindowsCE */ +# include +#endif + +/* 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_NO_LIMITS_H # include #endif -/* - * Added at libpng-1.2.8 +/* 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. + */ +#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) +# if PNG_DEFAULT_READ_MACROS +# define PNG_USE_READ_MACROS +# endif +#endif + +/* COMPILER SPECIIFC OPTIONS. * - * PNG_USER_CONFIG has to be defined on the compiler command line. This - * includes the resource compiler for Windows DLL configurations. + * 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. */ -#ifdef PNG_USER_CONFIG -# ifndef PNG_USER_PRIVATEBUILD -# define PNG_USER_PRIVATEBUILD -# endif -# include "pngusr.h" -#endif - -/* - * If you create a private DLL you need to define in "pngusr.h" the followings: - * #define PNG_USER_PRIVATEBUILD - * e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." - * #define PNG_USER_DLLFNAME_POSTFIX - * 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. - */ - -#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 -#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 - */ -#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 -# 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 - */ -#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 -# endif -# endif -#else -# include -#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 -#endif - -#ifdef BSD -# include -#else -# include -#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 -#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 /* 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 +#ifdef BSD +# include +#else +# include +#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 +# 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 [requires ...] [default] +# #define PNG_ /* value comes from current setting */ +# option [requires ...] [if ...] [enables ...] [on|off] +# #define PNG__SUPPORTED if the requirements are met and +# enable the other options listed +# chunk [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 \ +# +# e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." +# #define PNG_USER_DLLFNAME_POSTFIX +# 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"