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"