1# scripts/pnglibconf.dfa - library build configuration control 2# 3@/*- pnglibconf.dfn intermediate file 4@ * generated from scripts/pnglibconf.dfa 5@ */ 6# 7com pnglibconf.h - library build configuration 8com 9version 10com 11com Copyright (c) 2018-2024 Cosmin Truta 12com Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson 13com 14com This code is released under the libpng license. 15com For conditions of distribution and use, see the disclaimer 16com and license in png.h 17com 18 19file pnglibconf.h scripts/pnglibconf.dfa PNGLCONF_H 20 21# This file is preprocessed by scripts/options.awk and the 22# C compiler to generate 'pnglibconf.h' - a list of all the 23# configuration options. The file lists the various options 24# that can *only* be specified during the libpng build; 25# pnglibconf.h freezes the definitions selected for the specific 26# build. 27# 28# The syntax is detailed in scripts/options.awk; this is a summary 29# only: 30# 31# setting <name> [requires ...] [default] 32# #define PNG_<name> <value> /* value comes from current setting */ 33# option <name> [requires ...] [if ...] [enables ...] [disabled] 34# #define PNG_<name>_SUPPORTED if the requirements are met and 35# enable the other options listed 36# chunk <name> [requires ...] [enables ...] [disabled] 37# Enable chunk processing for the given ancillary chunk; any 38# 'requires something' expands to READ_something for read and 39# WRITE_something for write, but the enables list members are 40# used as given (e.g. enables GAMMA just expands to that on the 41# correspond READ_name and WRITE_name lines.) 42# 43# "," may be used to separate options on an 'option' line and is ignored; it 44# doesn't change the meaning of the line. (NOT setting, where "," becomes 45# part of the setting!) A comma at the end of an option line causes a 46# continuation (the next line is included in the option too.) 47# 48# Note that the 'on' and 'off' keywords, while valid on both option 49# and chunk, should not be used in this file because they force the 50# relevant options on or off. 51 52#---------------------------------------------------------------------- 53 54# The following setting, option and chunk values can all be changed 55# while building libpng: 56# 57# setting: change 'setting' lines to fine tune library performance; 58# changes to the settings don't affect the libpng API functionally 59# 60# option: change 'option' lines to remove or add capabilities from 61# or to the library; options change the library API 62# 63# chunk: change 'chunk' lines to remove capabilities to process 64# optional ('ancillary') chunks. This does not prevent PNG 65# decoding but does change the libpng API because some chunks 66# will be ignored. 67# 68# There are three ways of disabling features, in no particular order: 69# 70# 1) Create 'pngusr.h', enter the required private build information 71# detailed below and #define PNG_NO_<option> for each option you 72# don't want in that file. You can also turn on options using 73# PNG_<option>_SUPPORTED. When you have finished, rerun configure 74# and rebuild pnglibconf.h file with -DPNG_USER_CONFIG: 75# 76# make clean 77# CPPFLAGS='-DPNG_USER_CONFIG' ./configure 78# make pnglibconf.h 79# 80# pngusr.h is only used during the creation of pnglibconf.h, but it 81# is safer to ensure that -DPNG_USER_CONFIG is specified throughout 82# the build by changing the CPPFLAGS passed to the initial ./configure 83# 84# 2) Add definitions of the settings you want to change to 85# CPPFLAGS; for example: 86# 87# -DPNG_DEFAULT_READ_MACROS=0 88# 89# (This would change the default to *not* use read macros.) Be 90# very careful to change only settings that don't alter the API 91# because this approach bypasses the private build checking. You 92# can also change settings from pngpriv.h (read pngpriv.h) safely 93# without API changes. Do that in the same way. 94# 95# 3) Write a new '.dfa' file (say 'pngusr.dfa') and in this file 96# provide override values for setting entries and turn option or 97# chunk values explicitly 'on' or 'off': 98# 99# setting FOO default VALUE 100# option BAR [on|off] 101# 102# Then add this file to the options.awk command line (the *first* 103# one) after this file. The make macro DFA_XTRA is provided to make 104# this easier (set it like CPPFLAGS prior to running ./configure). 105# Look at the builds below contrib/pngminim for some extreme examples 106# of how this can be used. 107# 108# Don't edit this file unless you are contributing a patch to 109# libpng and need new or modified options/settings. 110#---------------------------------------------------------------------- 111 112# The following causes commented out #undef lines to be written to 113# pnglibconf.h; this can be stopped by logunsupported=0 in a later 114# file or on the command line (after pnglibconf.dfa) 115 116logunsupported = 1 117 118# The following allows the output from configure to modify the contents of 119# pnglibconf.h 120 121@#ifdef HAVE_CONFIG_H 122@# include "config.h" 123@#endif 124 125# PNG_USER_CONFIG has to be defined on the compiler command line 126# to cause pngusr.h to be read while constructing pnglibconf.h 127# 128# If you create a private DLL you need to define the following 129# macros in the file 'pngusr.h' and set -DPNG_USER_CONFIG for 130# compilation (i.e. in CPPFLAGS.) 131# #define PNG_USER_PRIVATEBUILD \ 132# <Describes by whom and why this version of the DLL was built> 133# e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons." 134# #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to 135# distinguish your DLL from those of the official release. These 136# correspond to the trailing letters that come after the version 137# number and must match your private DLL name> 138# e.g. // private DLL "libpng13gx.dll" 139# #define PNG_USER_DLLFNAME_POSTFIX "gx" 140# 141# The following macros are also at your disposal if you want to complete the 142# DLL VERSIONINFO structure. 143# - PNG_USER_VERSIONINFO_COMMENTS 144# - PNG_USER_VERSIONINFO_COMPANYNAME 145# - PNG_USER_VERSIONINFO_LEGALTRADEMARKS 146 147# It is necessary to include configures definitions here so that AC_DEFINE 148# in configure.ac works in a comprehensible way 149@#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H) 150@# include "config.h" 151@#endif 152 153@#ifdef PNG_USER_CONFIG 154@# include "pngusr.h" 155@#endif 156 157# This is a special fixup for the Watcom C compiler on Windows, which has 158# multiple procedure call standards. Unless PNG_API_RULE is set explicitly 159# (i.e. if it is not defined at this point) it will be forced to '2' here when 160# using Watcom. This indicates to the other header files that Watcom behaviour 161# is required where appropriate. 162 163@#ifdef __WATCOMC__ 164@# ifndef PNG_API_RULE 165@# define PNG_API_RULE 2 /* Use Watcom calling conventions */ 166@# endif 167@#endif 168 169# IN DEVELOPMENT 170# These are currently experimental features; define them if you want (NOTE: 171# experimental options must be disabled before they are defined in this file!) 172 173# NONE 174 175# Note that PNG_USER_CONFIG only has an effect when building 176# pnglibconf.h 177 178setting USER_CONFIG 179setting USER_PRIVATEBUILD 180setting USER_DLLFNAME_POSTFIX 181setting USER_VERSIONINFO_COMMENTS 182setting USER_VERSIONINFO_COMPANYNAME 183setting USER_VERSIONINFO_LEGALTRADEMARKS 184 185# Record the 'API rule' used to select calling conventions on 186# those systems that support such things (see all the comments in 187# pngconf.h) 188# Changing this setting has a fundamental affect on the PNG ABI, 189# do not release shared libraries with this changed. 190 191setting API_RULE default 0 192 193# This allows a prefix to be added to the front of every API function name (and 194# therefore every symbol) by redefining all the function names with the prefix 195# at the end of pnglibconf.h. It also turns on similar internal symbol renaming 196# by causing a similar build-time only file, pngprefix.h, to be generated. 197 198setting PREFIX 199 200# Implementation specific control of the optimizations, enabled by those 201# hardware or software options that need it (typically when run-time choices 202# must be made by the user) 203option SET_OPTION disabled 204 205# These options are specific to the ARM NEON hardware optimizations. At present 206# these optimizations depend on GCC specific pre-processing of an assembler (.S) 207# file, so they probably won't work with other compilers. 208# 209# ARM_NEON_OPT: 210# unset: check at compile time 211# (__ARM_NEON__ must be predefined by the compiler, as a result of 212# passing "-mfpu=neon" to the compiler options) 213# 0: disable (even if the CPU has a NEON FPU) 214# 1: check at run time (via ARM_NEON_{API,CHECK}) 215# 2: switch on unconditionally 216# (inadvisable - instead, pass "-mfpu=neon" to the compiler) 217# NOTE: 218# When building libpng, avoid using any setting other than '0'; 219# '1' is set automatically when either 'API' or 'CHECK' are configured in; 220# '2' should not be necessary, as "-mfpu=neon" will achieve the same effect 221# as well as applying the NEON optimizations to the rest of libpng. 222# NOTE: 223# Any setting other than '0' requires ALIGNED_MEMORY. 224# 225# ARM_NEON_API: 226# (PNG_ARM_NEON == 1) 227# Allow the optimization to be switched on with png_set_option. 228# 229# ARM_NEON_CHECK: 230# (PNG_ARM_NEON == 1) 231# Compile a run-time check to see if Neon extensions are supported. 232# This is poorly supported and deprecated - use the png_set_option API. 233# 234setting ARM_NEON_OPT 235option ARM_NEON_API disabled requires ALIGNED_MEMORY enables SET_OPTION, 236 sets ARM_NEON_OPT 1 237option ARM_NEON_CHECK disabled requires ALIGNED_MEMORY, 238 sets ARM_NEON_OPT 1 239 240# These options are specific to the PowerPC VSX hardware optimizations. 241# 242# POWERPC_VSX_OPT: 243# unset: check at compile time 244# (__PPC64__,__ALTIVEC__,__VSX__ must be predefined by the compiler, 245# as a result of passing "-mvsx -maltivec" to the compiler options) 246# 0: disable (even if the CPU supports VSX) 247# 1: check at run time (via POWERPC_VSX_{API,CHECK}) 248# 2: switch on unconditionally 249# (inadvisable - instead, pass "-mvsx -maltivec" to the compiler) 250# NOTE: 251# When building libpng, avoid using any setting other than '0'; 252# '1' is set automatically when either 'API' or 'CHECK' are configured in; 253# '2' should not be necessary, as "-mvsx -maltivec" will achieve the same 254# effect as well as applying the VSX optimizations to the rest of libpng. 255# 256# POWERPC_VSX_API: 257# (PNG_POWERPC_VSX == 1) 258# Allow the optimization to be switched on with png_set_option. 259# 260# POWERPC_VSX_CHECK: 261# (PNG_POWERPC_VSX == 1) 262# Compile a run-time check to see if VSX extensions are supported. 263# This is not supported on all systems. See contrib/powerpc-vsx/README. 264# 265setting POWERPC_VSX_OPT 266option POWERPC_VSX_API disabled enables SET_OPTION, 267 sets POWERPC_VSX_OPT 1 268option POWERPC_VSX_CHECK disabled, 269 sets POWERPC_VSX_OPT 1 270 271# These options are specific to the MIPS MSA hardware optimizations. 272# 273# MIPS_MSA_OPT: 274# unset: check at compile time 275# (__mips_msa must be predefined by the compiler, as a result of 276# passing "-mmsa -mfp64" to the compiler options) 277# 0: disable (even if the CPU supports MSA) 278# 1: check at run time (via MIPS_MSA_{API,CHECK}) 279# 2: switch on unconditionally 280# (inadvisable - instead, pass "-mmsa -mfp64" to the compiler) 281# NOTE: 282# When building libpng, avoid using any setting other than '0'; 283# '1' is set automatically when either 'API' or 'CHECK' are configured in; 284# '2' should not be necessary, as "-mmsa -mfp64" will achieve the same 285# effect as well as applying the MSA optimizations to the rest of libpng. 286# NOTE: 287# Any setting other than '0' requires ALIGNED_MEMORY. 288# 289# MIPS_MSA_API: 290# (PNG_MIPS_MSA == 1) 291# Allow the optimization to be switched on with png_set_option. 292# 293# MIPS_MSA_CHECK: 294# (PNG_MIPS_MSA == 1) 295# Compile a run-time check to see if MSA extensions are supported. 296# 297setting MIPS_MSA_OPT 298option MIPS_MSA_API disabled requires ALIGNED_MEMORY enables SET_OPTION, 299 sets MIPS_MSA_OPT 1 300option MIPS_MSA_CHECK disabled requires ALIGNED_MEMORY, 301 sets MIPS_MSA_OPT 1 302 303# These options are specific to the MIPS MMI hardware optimizations. 304# 305# MIPS_MMI_OPT: 306# unset: check at compile time 307# (__mips_loongson_mmi must be defined by the compiler, as a result of 308# passing "-mloongson-mmi -march=loongson3a" to the compiler options) 309# 0: disable (even if the CPU supports MMI) 310# 1: check at run time (via MIPS_MMI_{API,CHECK}) 311# 2: switch on unconditionally 312# (inadvisable - instead, pass "-mloongson-mmi -march=loongson3a" to the 313# compiler) 314# NOTE: 315# When building libpng, avoid using any setting other than '0'; 316# '1' is set automatically when either 'API' or 'CHECK' are configured in; 317# '2' should not be necessary, as "-mloongson-mmi -march=loongson3a" will 318# achieve the same effect as well as applying the MMI optimizations to the 319# rest of libpng. 320# 321# MIPS_MMI_API: 322# (PNG_MIPS_MMI == 1) 323# Allow the optimization to be switched on with png_set_option. 324# 325# MIPS_MMI_CHECK: 326# (PNG_MIPS_MMI == 1) 327# Compile a run-time check to see if MMI extensions are supported. 328# 329setting MIPS_MMI_OPT 330option MIPS_MMI_API disabled requires ALIGNED_MEMORY enables SET_OPTION, 331 sets MIPS_MMI_OPT 1 332option MIPS_MMI_CHECK disabled requires ALIGNED_MEMORY, 333 sets MIPS_MMI_OPT 1 334 335 336# These settings configure the default compression level (0-9) and 'strategy'; 337# strategy is as defined by the implementors of zlib. It describes the input 338# data and modifies the zlib parameters in an attempt to optimize the balance 339# between search and huffman encoding in the zlib algorithms. The defaults are 340# the zlib.h defaults - the apparently recursive definition does not arise 341# because the name of the setting is prefixed by PNG_ 342# 343# The TEXT values are the defaults when writing compressed text (all forms) 344 345# Include the zlib header so that the defaults below are known 346@# include <zlib.h> 347 348# The '@' here means to substitute the value when pnglibconf.h is built 349setting Z_DEFAULT_COMPRESSION default @Z_DEFAULT_COMPRESSION 350# TODO: why aren't these Z_RLE; zlib.h says that Z_RLE, specifically, is 351# appropriate for PNG images, maybe it doesn't exist in all versions? 352setting Z_DEFAULT_STRATEGY default @Z_FILTERED 353setting Z_DEFAULT_NOFILTER_STRATEGY default @Z_DEFAULT_STRATEGY 354setting ZLIB_VERNUM default @ZLIB_VERNUM 355 356# Linkage of: 357# 358# API: libpng API functions 359# CALLBACK: internal non-file-local callbacks 360# FUNCTION: internal non-file-local functions 361# DATA: internal non-file-local (const) data 362setting LINKAGE_API default extern 363setting LINKAGE_CALLBACK default extern 364setting LINKAGE_FUNCTION default extern 365setting LINKAGE_DATA default extern 366 367setting TEXT_Z_DEFAULT_COMPRESSION default @Z_DEFAULT_COMPRESSION 368setting TEXT_Z_DEFAULT_STRATEGY default @Z_DEFAULT_STRATEGY 369 370# Default to using the read macros 371 372setting DEFAULT_READ_MACROS default 1 373 374# The alternative is to call functions to read PNG values, if 375# the functions are turned *off* the read macros must always 376# be enabled, so turning this off will actually force the 377# USE_READ_MACROS option on (see pngconf.h) 378 379option READ_INT_FUNCTIONS requires READ 380 381# The same for write but these can only be switched off if no writing 382# is required at all - hence the use of a 'disabled', not a 'requires'. 383# If these are needed, they are enabled in the 'WRITE options' section 384# below. 385 386option WRITE_INT_FUNCTIONS disabled 387 388# Error controls 389# 390# WARNINGS: normally on, if off no warnings are generated 391# ERROR_TEXT: normally on, if off errors happen but there is no message 392# ERROR_NUMBERS: unimplemented feature, therefore disabled 393# BENIGN_ERRORS: support for just issuing warnings for recoverable errors 394# 395# BENIGN_READ_ERRORS: 396# By default recoverable errors on read should just generate warnings, 397# generally safe but PNG files that don't conform to the specification will 398# be accepted if a meaningful result can be produced. 399# 400# BENIGN_WRITE_ERRORS: 401# By default recoverable errors on write should just generate warnings, 402# not generally safe because this allows the application to write invalid 403# PNG files. Applications should enable this themselves; it's useful 404# because it means that a failure to write an ancillary chunk can often be 405# ignored. 406 407option WARNINGS 408option ERROR_TEXT 409option ERROR_NUMBERS disabled 410 411option BENIGN_ERRORS 412option BENIGN_WRITE_ERRORS requires BENIGN_ERRORS disabled 413option BENIGN_READ_ERRORS requires BENIGN_ERRORS 414 415# Adler32 checksum 416# 417# This option allows the check of the Adler32 checksum performed by zlib to 418# be turned off for IDAT chunks (only). Unless this option is enabled and 419# turned on (not the default even if enabled) a failed Adler32 at the end of the 420# stream will result in a decompression (inflate) failure on read even though 421# the entire image might have been read successfully. 422# 423# This option relies on an undocumented function 'inflateValidate' which is 424# present in only some versions of zlib. If the function is not present in the 425# zlib used with libpng code which uses -lpng is likely to fail to link or to 426# launch in the case of a DLL. 427# 428# Therefore this option is currently disabled by default; it has to be turned on 429# in pngusr.dfa and then the application program has to explicitly turn the 430# functionality on by calling png_set_option. 431# 432# Furthermore the option is explicitly turned off here if the zlib version 433# number is below that required - libpng wouldn't compile in that case if the 434# option were turned on. 435option DISABLE_ADLER32_CHECK requires READ enables SET_OPTION disabled 436 437# ZLIB_VERNUM must be used here, not PNG_ZLIB_VERNUM, because 438# scripts/options.awk ends up putting this test adhead of the setting of 439# PNG_ZLIB_VERNUM (apparently above, but not because of the two-pass processing) 440@#if ZLIB_VERNUM < 0x1290 441@# define PNG_NO_DISABLE_ADLER32_CHECK 442@#endif 443 444# Generic options - affect both read and write. 445 446option MNG_FEATURES 447 448# Arithmetic options, the first is the big switch that chooses between internal 449# floating and fixed point arithmetic implementations - it does not affect any 450# APIs. The second two (the _POINT settings) switch off individual APIs. 451# 452# Prior to libpng 1.6.8 one of the API (_POINT) variants had to be selected. At 453# 1.6.8 this restriction has been removed; the simplified API can be used 454# without enabling any of the low level fixed/floating APIs. 455 456option FLOATING_ARITHMETIC 457option FLOATING_POINT 458option FIXED_POINT 459 460# This protects us against compilers that run on a windowing system 461# and thus don't have or would rather us not use the stdio types: 462# stdin, stdout, and stderr. The only one currently used is stderr 463# in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will 464# prevent these from being compiled and used. #defining PNG_NO_STDIO 465# will also prevent these, plus will prevent the entire set of stdio 466# macros and functions (FILE *, printf, etc.) from being compiled and used, 467# unless (PNG_DEBUG > 0) has been #defined. 468 469option STDIO 470option CONSOLE_IO requires STDIO 471 472# Note: prior to 1.5.0 this option could not be disabled if STDIO 473# was enabled. Prior to 1.5.3 this option required STDIO 474 475option TIME_RFC1123 476 477# PNG_SETJMP_NOT_SUPPORTED is an old equivalent for NO_SETJMP 478 479option SETJMP 480= NO_SETJMP SETJMP_NOT_SUPPORTED 481 482# If this is disabled it is not possible for apps to get the 483# values from the 'info' structure, this effectively removes 484# quite a lot of the READ API. 485 486option EASY_ACCESS 487 488# Added at libpng-1.2.0 489 490option USER_MEM 491 492# Added at libpng-1.4.0 493 494option IO_STATE 495 496# Libpng limits: limit the size of images and data on read. 497# 498# If this option is disabled all the limit checking code will be disabled: 499 500option USER_LIMITS requires READ 501 502# The default settings given below for the limits mean that libpng will 503# limit the size of images or the size of data in ancillary chunks to less 504# than the specification or implementation limits. Settings have the 505# following interpretations: 506# 507# USER_WIDTH_MAX: maximum width of an image that will be read 508# USER_HEIGHT_MAX: maximum height 509# USER_CHUNK_MALLOC_MAX: maximum in-memory (decompressed) size of a single chunk 510# USER_CHUNK_CACHE_MAX: maximum number of chunks to be cached 511# 512# Only chunks that are variable in number are counted towards the 513 514# Use 0x7fffffff for unlimited 515setting USER_WIDTH_MAX default 1000000 516setting USER_HEIGHT_MAX default 1000000 517 518# Use 0 for unlimited 519setting USER_CHUNK_CACHE_MAX default 1000 520setting USER_CHUNK_MALLOC_MAX default 8000000 521 522# If this option is enabled APIs to set the above limits at run time are added; 523# without this the hardwired (compile time) limits will be used. 524option SET_USER_LIMITS requires USER_LIMITS 525 526# All of the following options relate to code capabilities for 527# processing image data before creating a PNG or after reading one. 528# You can remove these capabilities safely and still be PNG 529# conformant, however the library that results is still non-standard. 530# See the comments above about how to change options and settings. 531 532# READ options 533# 534# WARNING: in libpng 1.5 maintained configuration compatibility with earlier 535# versions. In some cases turning off an option turned off other options, in 536# others it was ineffective unless dependent options were also turned off. 537# Libpng 1.6 changes this: in general if you turn off an option that affects 538# APIs it stays off and simply disables APIs that depend on it. 539# 540# As a result if you simply port the libpng 1.5 configuration to libpng 1.6 you 541# will probably see build failures due to missing APIs. Fixing these failures 542# requires some, perhaps considerable, knowledge of what your libpng using 543# applications are doing, fortunately there is no great reason for you to move 544# to libpng 1.6; the new interfaces in 1.6 will take several years to become 545# popular. 546 547option READ enables READ_INTERLACING SET_OPTION 548 549# Disabling READ_16BIT does not disable reading 16-bit PNG files, but it 550# forces them to be chopped down to 8-bit, and disables any 16-bit 551# processing after that has happened. You need to be sure to enable 552# READ_SCALE_16_TO_8 or READ_STRIP_16_TO_8 when you disable READ_16BIT for 553# this to work properly. You should disable the other option if you need to 554# ensure a particular conversion (otherwise the app can chose.) 555 556option READ_16BIT requires READ enables 16BIT 557 558option READ_QUANTIZE requires READ 559 560option READ_TRANSFORMS requires READ 561= NO_READ_TRANSFORMS READ_TRANSFORMS_NOT_SUPPORTED 562 563# Read gamma handling. Gamma processing is a core part of libpng and many of 564# the capabilities are dependent on libpng performing gamma correction. 565# 566# In libpng 1.6 disabling gamma processing (setting PNG_NO_READ_GAMMA) 567# consistently disables those parts of the API that depend on it. Prior to 568# 1.6.0 this was not true; the results were unpredictable and varied between 569# releases. 570# 571# If you disable gamma processing and your program no longer compiles you need 572# to ask whether you really need the APIs that are missing. If you do then you 573# almost certainly need the gamma processing. 574# 575# If you handle gamma issues outside libpng then you do not need the libpng 576# gamma processing; and it is an enormous waste of space. You just need to 577# remove the use of libpng APIs that depend on it. 578option READ_GAMMA requires READ_TRANSFORMS, READ_gAMA, READ_sRGB 579 580option READ_ALPHA_MODE requires READ_TRANSFORMS, READ_GAMMA 581option READ_BACKGROUND requires READ_TRANSFORMS, READ_STRIP_ALPHA, READ_GAMMA 582option READ_BGR requires READ_TRANSFORMS 583option READ_EXPAND_16 requires READ_TRANSFORMS, READ_16BIT, READ_EXPAND 584option READ_EXPAND requires READ_TRANSFORMS 585option READ_FILLER requires READ_TRANSFORMS 586option READ_GRAY_TO_RGB requires READ_TRANSFORMS 587option READ_INVERT_ALPHA requires READ_TRANSFORMS 588option READ_INVERT requires READ_TRANSFORMS 589option READ_PACK requires READ_TRANSFORMS 590option READ_PACKSWAP requires READ_TRANSFORMS 591option READ_RGB_TO_GRAY requires READ_TRANSFORMS, READ_GAMMA enables COLORSPACE 592option READ_SCALE_16_TO_8 requires READ_TRANSFORMS 593option READ_SHIFT requires READ_TRANSFORMS 594option READ_STRIP_16_TO_8 requires READ_TRANSFORMS 595option READ_STRIP_ALPHA requires READ_TRANSFORMS 596option READ_SWAP_ALPHA requires READ_TRANSFORMS 597option READ_SWAP requires READ_TRANSFORMS, READ_16BIT 598option READ_USER_TRANSFORM requires READ_TRANSFORMS 599 600option PROGRESSIVE_READ requires READ 601option SEQUENTIAL_READ requires READ 602 603# You can define PNG_NO_PROGRESSIVE_READ if you don't do progressive reading. 604# This is not talking about interlacing capability! You'll still have 605# interlacing unless you turn off the following which is required 606# for PNG-compliant decoders. (In other words, do not do this - in 607# fact it can't be disabled from the command line!) 608#option READ_INTERLACING requires READ 609 610option READ_COMPOSITE_NODIV requires READ 611= NO_READ_COMPOSITE_NODIV NO_READ_COMPOSITED_NODIV 612 613# Inch conversions 614 615option INCH_CONVERSIONS 616= INCH_CONVERSIONS INCH_CONVERSIONS 617 618# API to build a grayscale palette 619# NOTE: this is not used internally by libpng at present. 620 621option BUILD_GRAYSCALE_PALETTE 622 623# WRITE options 624 625option WRITE enables WRITE_INT_FUNCTIONS 626 627# Disabling WRITE_16BIT prevents 16-bit PNG files from being 628# generated. 629option WRITE_16BIT requires WRITE enables 16BIT 630 631option WRITE_TRANSFORMS requires WRITE 632= NO_WRITE_TRANSFORMS WRITE_TRANSFORMS_NOT_SUPPORTED 633 634option WRITE_SHIFT requires WRITE_TRANSFORMS 635option WRITE_PACK requires WRITE_TRANSFORMS 636option WRITE_BGR requires WRITE_TRANSFORMS 637option WRITE_SWAP requires WRITE_TRANSFORMS, WRITE_16BIT 638option WRITE_PACKSWAP requires WRITE_TRANSFORMS 639option WRITE_INVERT requires WRITE_TRANSFORMS 640option WRITE_FILLER requires WRITE_TRANSFORMS 641option WRITE_SWAP_ALPHA requires WRITE_TRANSFORMS 642option WRITE_INVERT_ALPHA requires WRITE_TRANSFORMS 643option WRITE_USER_TRANSFORM requires WRITE_TRANSFORMS 644 645# This is not required for PNG-compliant encoders, but can cause 646# trouble if left undefined 647 648option WRITE_INTERLACING requires WRITE 649 650# Deprecated, will be removed. 651option WRITE_WEIGHTED_FILTER requires WRITE 652 653option WRITE_FLUSH requires WRITE 654 655# Note: these can be turned off explicitly if not required by the 656# apps implementing the user transforms 657option USER_TRANSFORM_PTR if READ_USER_TRANSFORM, WRITE_USER_TRANSFORM 658option USER_TRANSFORM_INFO if READ_USER_TRANSFORM, WRITE_USER_TRANSFORM 659 660# This enables API to set compression parameters for compressing 661# non-IDAT chunks (zTXt, iTXt, iCCP, and unknown chunks). This feature 662# was added at libpng-1.5.3. 663option WRITE_CUSTOMIZE_ZTXT_COMPRESSION requires WRITE 664option WRITE_CUSTOMIZE_COMPRESSION requires WRITE 665 666# Any chunks you are not interested in, you can undef here. The 667# ones that allocate memory may be especially important (hIST, 668# tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info 669# a bit smaller. 670 671# The size of the png_text structure changed in libpng-1.0.6 when 672# iTXt support was added. iTXt support was turned off by default through 673# libpng-1.2.x, to support old apps that malloc the png_text structure 674# instead of calling png_set_text() and letting libpng malloc it. It 675# was turned on by default in libpng-1.4.0. 676 677option READ_ANCILLARY_CHUNKS requires READ 678# PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. 679= NO_READ_ANCILLARY_CHUNKS READ_ANCILLARY_CHUNKS_NOT_SUPPORTED 680 681option WRITE_ANCILLARY_CHUNKS requires WRITE 682# PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated. 683= NO_WRITE_ANCILLARY_CHUNKS WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED 684 685# These options disable *all* the text chunks if turned off 686 687option TEXT disabled 688option READ_TEXT requires READ_ANCILLARY_CHUNKS enables TEXT 689option WRITE_TEXT requires WRITE_ANCILLARY_CHUNKS enables TEXT 690 691# Moved to pnglibconf.h at libpng-1.5.0 692# Feature support: in 1.4 this was in pngconf.h, but the following 693# features have no affect on the libpng API. Add library 694# only features to the end of this list. Add features that 695# affect the API above. (Note: the list of chunks follows 696# the library-only settings.) 697# 698# BUILD TIME ONLY OPTIONS 699# These options do not affect the API but rather alter how the 700# API is implemented, they get recorded in pnglibconf.h, but 701# can't be changed by the application. 702 703# Colorspace support (enabled as required); just the support for colorant 704# information. Gamma support, likewise, is just support for the gamma 705# information, READ_GAMMA is required for gamma transformations (so it 706# is possible to read PNG gamma without enabling all the libpng transform 707# code - do this for applications that do their own gamma processing) 708# 709# As of 1.6.0 COLORSPACE is only useful if the application processes the 710# information; this is because the library does not do any colorspace 711# processing, it just validates the data in the PNG file. 712 713option GAMMA disabled 714option COLORSPACE enables GAMMA disabled 715 716# When an ICC profile is read, or png_set, it will be checked for a match 717# against known sRGB profiles if the sRGB handling is enabled. The 718# PNG_sRGB_PROFILE_CHECKS setting controls how much work is done during the 719# check: 720# 721# -1: Don't do any sRGB profile checking. 722# 723# 0: Just validate the profile MD5 signature if present, otherwise use 724# the checks in option 1. 725# 726# 1: Additionally check the length, intent and adler32 checksum of the 727# actual data. If enabled this will reject known profiles that have 728# had the rendering intent in the header changed as well as other edits 729# done without updating the checksum. See the discussion below. 730# 731# 2: Additionally checksum all the data using the ethernet CRC32 algorithm. 732# This makes it more difficult to fake profiles and makes it less likely 733# to get a false positive on profiles with no signature, but is probably 734# just a waste of time since all currently approved ICC sRGB profiles have 735# a secure MD5 signature. 736# 737# The rendering intent. An ICC profile stores an intended rendering intent, 738# but does not include the value in the signature. The intent is documented 739# as the intent that should be used when combining two profiles. The sRGB 740# profile is intended, however, to be used with any of the four defined intents. 741# For this reason the sRGB chunk includes an 'intent' to be used when displaying 742# the image (intent is really a property of the image not the profile.) 743# 744# Unfortunately the iCCP chunk does not. It may therefore be that some 745# applications modify the intent in profiles (including sRGB profiles) to work 746# round this problem. Selecting an option other than option '0' will cause such 747# modified profiles to be rejected. 748# 749# Security. The use of Adler32 and CRC32 checksums does not help significantly 750# with any security issues. It is relatively easy to produce arbitrary profiles 751# with the required checksums on current computer systems. Nevertheless 752# security does not seem to be an issue because the only consequence of a false 753# positive is a false assertion that the profile is an sRGB profile. This might 754# be used to hide data from libpng using applications, but it doesn't seem 755# possible to damage them. 756 757setting sRGB_PROFILE_CHECKS default 2 758 759# Artificially align memory - the code typically aligns to 8 byte 760# boundaries if this is switched on, it's a small waste of space 761# but can help (in theory) on some architectures. Only affects 762# internal structures. Added at libpng 1.4.0 763 764option ALIGNED_MEMORY 765 766# Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING 767# See png[wr]util.c, normally this should always be *on* 768 769option POINTER_INDEXING 770 771# Other defines for things like memory and the like can go here. 772 773# BUILD TIME SETTINGS 774# Like build time options these do not affect the API, but they 775# may be useful to applications because they record details of 776# how the API will behave particularly with regard to overall 777# accuracy. 778 779# This controls how fine the quantizing gets. As this allocates 780# a largish chunk of memory (32K), those who are not as concerned 781# with quantizing quality can decrease some or all of these. 782 783setting QUANTIZE_RED_BITS default 5 784setting QUANTIZE_GREEN_BITS default 5 785setting QUANTIZE_BLUE_BITS default 5 786 787# This controls how fine the gamma correction becomes when you 788# are only interested in 8 bits anyway. Increasing this value 789# results in more memory being used, and more pow() functions 790# being called to fill in the gamma tables. Don't set this value 791# less than 8, and even that may not work (I haven't tested it). 792 793setting MAX_GAMMA_8 default 11 794 795# This controls how much a difference in gamma we can tolerate before 796# we actually start doing gamma conversion, it's a fixed point value, 797# so the default below is 0.05, meaning libpng ignores corrections in 798# the range 0.95 to 1.05 799 800setting GAMMA_THRESHOLD_FIXED default 5000 801 802# Precision to use when converting a floating point value to a PNG 803# extension format string in an sCAL chunk (only relevant if the 804# floating point API is enabled) 805 806setting sCAL_PRECISION default 5 807 808# This is the size of the compression buffer, and thus the size of 809# an IDAT chunk. Make this whatever size you feel is best for your 810# machine. One of these will be allocated per png_struct. When this 811# is full, it writes the data to the disk, and does some other 812# calculations. Making this an extremely small size may slow 813# the library down, but you may want to experiment to determine 814# where it becomes significant, if you are concerned with memory 815# usage. Note that zlib allocates at least 32Kb also. For readers, 816# this describes the size of the buffer available to read the data in. 817# Unless this gets smaller than the size of a row (compressed), 818# it should not make much difference how big this is. 819 820setting ZBUF_SIZE default 8192 821 822# This is the size of the decompression buffer used when counting or checking 823# the decompressed size of an LZ stream from a compressed ancillary chunk; the 824# decompressed data is never used so a different size may be optimal. This size 825# was determined using contrib/libtests/timepng.c with compressed zTXt data 826# around 11MByte in size. Slight speed improvements (up to about 14% in 827# timepng) can be achieved by very large increases (to 32kbyte) on regular data, 828# but highly compressible data shows only around 2% improvement. The size is 829# chosen to minimize the effects of DoS attacks based on using very large 830# amounts of highly compressible data. 831 832setting INFLATE_BUF_SIZE default 1024 833 834# This is the maximum amount of IDAT data that the sequential reader will 835# process at one time. The setting does not affect the size of IDAT chunks 836# read, just the amount read at once. Neither does it affect the progressive 837# reader, which processes just the amount of data the application gives it. 838# The sequential reader is currently unable to process more than one IDAT at 839# once - it has to read and process each one in turn. There is no point setting 840# this to a value larger than the IDAT chunks typically encountered (it would 841# just waste memory) but there may be some point in reducing it below the value 842# of ZBUF_SIZE (the size of IDAT chunks written by libpng.) 843 844setting IDAT_READ_SIZE default PNG_ZBUF_SIZE 845 846# Ancillary chunks 847chunk bKGD 848chunk cHRM enables COLORSPACE 849chunk eXIf 850chunk gAMA enables GAMMA 851chunk hIST 852chunk iCCP enables COLORSPACE, GAMMA 853chunk iTXt enables TEXT 854chunk oFFs 855chunk pCAL 856chunk pHYs 857chunk sBIT 858chunk sCAL 859chunk sPLT 860chunk sRGB enables COLORSPACE, GAMMA, SET_OPTION 861chunk tEXt requires TEXT 862chunk tIME 863chunk tRNS 864chunk zTXt enables TEXT 865 866# This only affects support of the optional PLTE chunk in RGB and RGBA 867# images. Notice that READ_ANCILLARY_CHUNKS therefore disables part 868# of the regular chunk reading too. 869 870option READ_OPT_PLTE requires READ_ANCILLARY_CHUNKS 871 872# Unknown chunk handling 873# 874# 'UNKNOWN_CHUNKS' is a global option to disable all unknown chunk handling on 875# read or write; everything else below requires it (directly or indirectly). 876option UNKNOWN_CHUNKS 877 878# There are three main options to control the ability to read and write unknown 879# chunks. If either read option is turned on then unknown chunks will be read, 880# otherwise they are skipped. If the write option is turned on unknown chunks 881# set by png_set_unknown_chunks will be written otherwise it is an error to call 882# that API on a write struct. 883option WRITE_UNKNOWN_CHUNKS requires WRITE requires UNKNOWN_CHUNKS 884option WRITE_UNKNOWN_CHUNKS enables STORE_UNKNOWN_CHUNKS 885 886# The first way to read user chunks is to have libpng save them for a later call 887# to png_get_unknown_chunks, the application must call 888# png_set_keep_unknown_chunks to cause this to actually happen (see png.h) 889option SAVE_UNKNOWN_CHUNKS requires READ requires SET_UNKNOWN_CHUNKS 890option SAVE_UNKNOWN_CHUNKS enables READ_UNKNOWN_CHUNKS, STORE_UNKNOWN_CHUNKS 891 892# The second approach is to use an application provided callback to process the 893# chunks, the callback can either handle the chunk entirely itself or request 894# that libpng store the chunk for later retrieval via png_get_unknown_chunks. 895# 896# NOTE: If STORE_UNKNOWN_CHUNKS is not enabled (which is the default if 897# both SAVE_UNKNOWN_CHUNKS and WRITE_UNKNOWN_CHUNKS are disabled) then a 898# 0 result from the callback will be ignored because no support for saving 899# unknown chunks has been compiled in. The normal symptom is that your app 900# fails to compile because png_get_unknown_chunks is no longer defined in png.h. 901# If you encounter this issue simply enable STORE_UNKNOWN_CHUNKS in your build. 902# 903# Note that there is no 'WRITE_USER_CHUNKS' so the USER_CHUNKS option is always 904# the same as READ_USER_CHUNKS at present 905option READ_USER_CHUNKS requires READ, UNKNOWN_CHUNKS 906option READ_USER_CHUNKS enables READ_UNKNOWN_CHUNKS, USER_CHUNKS 907 908# Two further options are provided to allow detailed control of the handling. 909# The first enables png_set_keep_unknown_chunks; this allows the default to be 910# changed from discarding unknown chunks and allows per-chunk control. This is 911# required to use the SAVE_UNKNOWN_CHUNKS option. If enabled this option also 912# applies to write (see png.h), otherwise the write API simply writes all the 913# chunks it is given. 914# 915# The second option extends the unknown handling to allow known chunks to be 916# handled as though they were unknown. This option doesn't change any APIs, it 917# merely turns on the code to check known as well as unknown chunks. 918# 919# This option no longer affects the write code. It can be safely disabled and 920# will prevent applications stopping libpng reading known chunks. 921option SET_UNKNOWN_CHUNKS requires UNKNOWN_CHUNKS 922option HANDLE_AS_UNKNOWN requires SET_UNKNOWN_CHUNKS 923 924# The following options are derived from the above and should not be turned on 925# explicitly. 926option READ_UNKNOWN_CHUNKS requires UNKNOWN_CHUNKS disabled 927option STORE_UNKNOWN_CHUNKS requires UNKNOWN_CHUNKS disabled 928 929option CONVERT_tIME requires WRITE_ANCILLARY_CHUNKS 930# The "tm" structure is not supported on WindowsCE 931 932@#ifdef _WIN32_WCE 933@# define PNG_NO_CONVERT_tIME 934@#endif 935 936option WRITE_FILTER requires WRITE 937 938option SAVE_INT_32 disabled 939# png_save_int_32 is required internally for writing the ancillary chunks oFFs 940# and pCAL and for both reading and writing iCCP (for the generation/checking of 941# the corresponding cHRM/gAMA chunks) if full ICC is supported. 942 943# added at libpng-1.5.4 944 945option WRITE_OPTIMIZE_CMF requires WRITE 946 947option READ_COMPRESSED_TEXT disabled 948option READ_iCCP enables READ_COMPRESSED_TEXT 949option READ_iTXt enables READ_COMPRESSED_TEXT 950option READ_zTXt enables READ_COMPRESSED_TEXT 951 952option WRITE_oFFs enables SAVE_INT_32 953option WRITE_pCAL enables SAVE_INT_32 954option WRITE_cHRM enables SAVE_INT_32 955 956option WRITE_COMPRESSED_TEXT disabled 957option WRITE_iCCP enables WRITE_COMPRESSED_TEXT 958option WRITE_iTXt enables WRITE_COMPRESSED_TEXT 959option WRITE_zTXt enables WRITE_COMPRESSED_TEXT 960 961# Turn this off to disable png_read_png() and png_write_png() and 962# leave the row_pointers member out of the info structure. 963 964option INFO_IMAGE 965 966# added at libpng-1.5.10 967# Turn this off to disable warning about invalid palette index and 968# leave the num_palette_max member out of the png structure. 969 970option CHECK_FOR_INVALID_INDEX enables READ_CHECK_FOR_INVALID_INDEX 971option CHECK_FOR_INVALID_INDEX enables WRITE_CHECK_FOR_INVALID_INDEX 972option READ_CHECK_FOR_INVALID_INDEX requires READ, CHECK_FOR_INVALID_INDEX 973option WRITE_CHECK_FOR_INVALID_INDEX requires WRITE, CHECK_FOR_INVALID_INDEX 974 975# added at libpng-1.5.15 976option GET_PALETTE_MAX enables READ_GET_PALETTE_MAX WRITE_GET_PALETTE_MAX 977option READ_GET_PALETTE_MAX requires READ_CHECK_FOR_INVALID_INDEX disabled 978option WRITE_GET_PALETTE_MAX requires WRITE_CHECK_FOR_INVALID_INDEX disabled 979 980# Simplified API options (added at libpng-1.6.0) 981# In libpng 1.6.8 the handling of these options was changed to used 'requires' 982# throughout, so that disabling some of the low level support always disables 983# the base simplified read/write API. This much simplifies the handling and 984# makes 'everything = off' work in a more intuitive way. It eliminates a 985# previously reported feature that APIs previously enabled by the simplified 986# API couldn't be turned off without explicitly turning off the simplified 987# APIs. 988# 989# Read: 990option SIMPLIFIED_READ, 991 requires SEQUENTIAL_READ, READ_TRANSFORMS, SETJMP, BENIGN_ERRORS, 992 READ_EXPAND, READ_16BIT, READ_EXPAND_16, READ_SCALE_16_TO_8, 993 READ_RGB_TO_GRAY, READ_ALPHA_MODE, READ_BACKGROUND, READ_STRIP_ALPHA, 994 READ_FILLER, READ_SWAP, READ_PACK, READ_GRAY_TO_RGB, READ_GAMMA, 995 READ_tRNS, READ_bKGD, READ_gAMA, READ_cHRM, READ_sRGB, READ_sBIT 996 997# AFIRST and BGR read options: 998# Prior to libpng 1.6.8 these were disabled but switched on if the low level 999# libpng routines that do the swaps were enabled. This worked but was 1000# confusing. In libpng 1.6.8 the options were changed to simple 'requires' 1001# and are enabled by default. This should work the same way in practice. 1002option SIMPLIFIED_READ_AFIRST enables FORMAT_AFIRST, 1003 requires SIMPLIFIED_READ READ_SWAP_ALPHA 1004 1005option SIMPLIFIED_READ_BGR enables FORMAT_BGR, 1006 requires SIMPLIFIED_READ READ_BGR 1007 1008# Write: 1009option SIMPLIFIED_WRITE, 1010 requires WRITE, SETJMP, WRITE_SWAP, WRITE_PACK, 1011 WRITE_tRNS, WRITE_gAMA, WRITE_sRGB, WRITE_cHRM 1012 1013# 1.6.22: allow simplified write without stdio support: 1014option SIMPLIFIED_WRITE_STDIO requires SIMPLIFIED_WRITE STDIO 1015 1016option SIMPLIFIED_WRITE_AFIRST enables FORMAT_AFIRST, 1017 requires SIMPLIFIED_WRITE WRITE_SWAP_ALPHA 1018 1019option SIMPLIFIED_WRITE_BGR enables FORMAT_BGR, 1020 requires SIMPLIFIED_WRITE WRITE_BGR 1021 1022# Formats: 1023option FORMAT_AFIRST disabled 1024option FORMAT_BGR disabled 1025