pnglibconf.dfa 37.9 KB
Newer Older
1
# scripts/pnglibconf.dfa - library build configuration control
2
#
3 4
@/*- pnglibconf.dfn intermediate file
@ *  generated from scripts/pnglibconf.dfa
5 6
@ */
#
7
com pnglibconf.h - library build configuration
8
com
9
version
10
com
11 12
com Copyright (c) 2018 Cosmin Truta
com Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
13 14 15 16 17
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
18

19
file 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 24
# configuration options.  The file lists the various options
# that can *only* be specified during the libpng build;
25
# pnglibconf.h freezes the definitions selected for the specific
26 27
# build.
#
28
# The syntax is detailed in scripts/options.awk; this is a summary
29 30
# only:
#
31
# setting <name> [requires ...] [default]
32
#    #define PNG_<name> <value>  /* value comes from current setting */
33
# option <name> [requires ...] [if ...] [enables ...] [disabled]
34 35
#    #define PNG_<name>_SUPPORTED if the requirements are met and
#    enable the other options listed
36 37 38 39 40 41 42 43 44 45 46
# chunk <name> [requires ...] [enables ...] [disabled]
#    Enable chunk processing for the given ancillary chunk; any
#    'requires something' expands to READ_something for read and
#    WRITE_something for write, but the enables list members are
#    used as given (e.g. enables GAMMA just expands to that on the
#    correspond READ_name and WRITE_name lines.)
#
# "," may be used to separate options on an 'option' line and is ignored; it
# doesn't change the meaning of the line.  (NOT setting, where "," becomes
# part of the setting!)  A comma at the end of an option line causes a
# continuation (the next line is included in the option too.)
47
#
48 49 50
# Note that the 'on' and 'off' keywords, while valid on both option
# and chunk, should not be used in this file because they force the
# relevant options on or off.
51 52 53

#----------------------------------------------------------------------

54 55
# The following setting, option and chunk values can all be changed
# while building libpng:
56
#
57
# setting: change 'setting' lines to fine tune library performance;
58 59 60 61 62 63 64 65 66 67
#   changes to the settings don't affect the libpng API functionally
#
# option: change 'option' lines to remove or add capabilities from
#   or to the library; options change the library API
#
# chunk: change 'chunk' lines to remove capabilities to process
#   optional ('ancillary') chunks.  This does not prevent PNG
#   decoding but does change the libpng API because some chunks
#   will be ignored.
#
68
# There are three ways of disabling features, in no particular order:
69 70 71 72 73
#
# 1) Create 'pngusr.h', enter the required private build information
# detailed below and #define PNG_NO_<option> for each option you
# don't want in that file in that file.  You can also turn on options
# using PNG_<option>_SUPPORTED.  When you have finished rerun
74
# configure and rebuild pnglibconf.h file with -DPNG_USER_CONFIG:
75
#
76 77
#  make clean
#  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 82 83 84 85
# is safer to ensure that -DPNG_USER_CONFIG is specified throughout
# the build by changing the CPPFLAGS passed to the initial ./configure
#
# 2) Add definitions of the settings you want to change to
# CPPFLAGS; for example:
86
#
87
#   -DPNG_DEFAULT_READ_MACROS=0
88 89 90 91 92 93 94
#
# (This would change the default to *not* use read macros.)  Be
# very careful to change only settings that don't alter the API
# because this approach bypasses the private build checking.  You
# can also change settings from pngpriv.h (read pngpriv.h) safely
# without API changes.  Do that in the same way.
#
95 96 97 98 99 100 101 102
# 3) Write a new '.dfa' file (say 'pngusr.dfa') and in this file
# provide override values for setting entries and turn option or
# chunk values explicitly 'on' or 'off':
#
#    setting FOO default VALUE
#    option BAR [on|off]
#
# Then add this file to the options.awk command line (the *first*
103 104 105 106
# one) after this file.  The make macro DFA_XTRA is provided to make
# this easier (set it like CPPFLAGS prior to running ./configure).
# Look at the builds below contrib/pngminim for some extreme examples
# of how this can be used.
107 108 109
#
# Don't edit this file unless you are contributing a patch to
# 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

116 117
logunsupported = 1

118 119 120 121 122 123 124
# The following allows the output from configure to modify the contents of
# pnglibconf.h

@#ifdef HAVE_CONFIG_H
@#  include "config.h"
@#endif

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 129
#
# If you create a private DLL you need to define the following
# macros in the file 'pngusr.h' and set -DPNG_USER_CONFIG for
130
# compilation (i.e. in CPPFLAGS.)
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
# #define PNG_USER_PRIVATEBUILD \
#     <Describes by whom and why this version of the DLL was built>
#  e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
# #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
#        distinguish your DLL from those of the official release. These
#        correspond to the trailing letters that come after the version
#        number and must match your private DLL name>
#  e.g. // private DLL "libpng13gx.dll"
#       #define PNG_USER_DLLFNAME_POSTFIX "gx"
#
# The following macros are also at your disposal if you want to complete the
# DLL VERSIONINFO structure.
# - PNG_USER_VERSIONINFO_COMMENTS
# - PNG_USER_VERSIONINFO_COMPANYNAME
# - PNG_USER_VERSIONINFO_LEGALTRADEMARKS

147 148 149 150 151 152
# It is necessary to include configures definitions here so that AC_DEFINE
# in configure.ac works in a comprehensible way
@#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
@#  include "config.h"
@#endif

153 154 155 156
@#ifdef PNG_USER_CONFIG
@#  include "pngusr.h"
@#endif

G
[devel]  
Glenn Randers-Pehrson 已提交
157 158 159 160 161
# This is a special fixup for the Watcom C compiler on Windows, which has
# multiple procedure call standards.  Unless PNG_API_RULE is set explicitly
# (i.e. if it is not defined at this point) it will be forced to '2' here when
# using Watcom.  This indicates to the other header files that Watcom behaviour
# is required where appropriate.
162

G
[devel]  
Glenn Randers-Pehrson 已提交
163 164 165 166 167 168
@#ifdef __WATCOMC__
@#  ifndef PNG_API_RULE
@#     define PNG_API_RULE 2 /* Use Watcom calling conventions */
@#  endif
@#endif

169 170 171 172 173 174
# IN DEVELOPMENT
# These are currently experimental features; define them if you want (NOTE:
# experimental options must be disabled before they are defined in this file!)

# NONE

175
# Note that PNG_USER_CONFIG only has an effect when building
176
# pnglibconf.h
177

178
setting USER_CONFIG
179 180 181 182 183 184 185 186 187
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)
188 189
# Changing this setting has a fundamental affect on the PNG ABI,
# do not release shared libraries with this changed.
190

191 192
setting API_RULE default 0

L
luz.paz 已提交
193
# This allows a prefix to be added to the front of every API function name (and
194 195 196 197 198 199
# therefore every symbol) by redefining all the function names with the prefix
# at the end of pnglibconf.h.  It also turns on similar internal symbol renaming
# by causing a similar build-time only file, pngprefix.h, to be generated.

setting PREFIX

200 201 202 203 204
# Implementation specific control of the optimizations, enabled by those
# hardware or software options that need it (typically when run-time choices
# must be made by the user)
option SET_OPTION disabled

205 206 207 208 209 210
# These options are specific to the ARM NEON hardware optimizations.  At present
# these optimizations depend on GCC specific pre-processing of an assembler (.S)
# file so they probably won't work with other compilers.
#
# ARM_NEON_OPT: unset: check at compile time (__ARM_NEON__ must be defined by
#                      the compiler, typically as a result of specifying
211
#                      CC="gcc -mfpu=neon".)
212 213 214
#                   0: disable (even if the CPU has a NEON FPU.)
#                   1: check at run time (via ARM_NEON_{API,CHECK})
#                   2: switch on unconditionally (inadvisable - instead pass
215
#                      -mfpu=neon to GCC in CC)
216 217 218 219 220 221 222 223 224
#           When building libpng avoid using any setting other than '0'; '1' is
#           set automatically when either 'API' or 'CHECK' are configured in,
#           '2' should not be necessary as -mfpu=neon will achieve the same
#           effect as well as applying NEON optimizations to the rest of the
#           libpng code.
#           NOTE: any setting other than '0' requires ALIGNED_MEMORY
# ARM_NEON_API:   (PNG_ARM_NEON == 1) allow the optimization to be switched on
#                 with png_set_option
# ARM_NEON_CHECK: (PNG_ARM_NEON == 1) compile a run-time check to see if Neon
225
#                 extensions are supported. This is poorly supported and
226
#                 deprecated - use the png_set_option API.
227 228 229 230 231
setting ARM_NEON_OPT
option ARM_NEON_API disabled requires ALIGNED_MEMORY enables SET_OPTION,
   sets ARM_NEON_OPT 1
option ARM_NEON_CHECK disabled requires ALIGNED_MEMORY,
   sets ARM_NEON_OPT 1
232

233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
# These options are specific to the PowerPC VSX hardware optimizations.
#
# POWERPC_VSX_OPT: unset: check at compile time (__PPC64__,__ALTIVEC__,__VSX__
#                      must be defined by the compiler, typically as a result
#                      of specifying
#                      "-mvsx -maltivec" compiler flags)
#                   0: disable (even if the CPU supports VSX.)
#                   1: check at run time (via POWERPC_VSX_{API,CHECK})
#                   2: switch on unconditionally (inadvisable - instead pass
#                      -mvsx -maltivec to compiler options)
#           When building libpng avoid using any setting other than '0'; '1' is
#           set automatically when either 'API' or 'CHECK' are configured in,
#           '2' should not be necessary as "-mvsx -maltivec" will achieve the same
#           effect as well as applying VSX optimizations to the rest of the
#           libpng code.
# POWERPC_VSX_API:   (PNG_POWERPC_VSX == 1) allow the optimization to be switched on
#                 with png_set_option
# POWERPC_VSX_CHECK: (PNG_POWERPC_VSX == 1) compile a run-time check to see if VSX
#                 extensions are supported. This is supported not for all OSes
#                 (see contrib/powerpc/README)
setting POWERPC_VSX_OPT
option POWERPC_VSX_API disabled enables SET_OPTION,
  sets POWERPC_VSX_OPT 1
option POWERPC_VSX_CHECK disabled,
  sets POWERPC_VSX_OPT 1


260
# These settings configure the default compression level (0-9) and 'strategy';
261
# strategy is as defined by the implementors of zlib. It describes the input
262 263 264 265 266 267
# data and modifies the zlib parameters in an attempt to optimize the balance
# between search and huffman encoding in the zlib algorithms.  The defaults are
# the zlib.h defaults - the apparently recursive definition does not arise
# because the name of the setting is prefixed by PNG_
#
# The TEXT values are the defaults when writing compressed text (all forms)
268 269

# Include the zlib header so that the defaults below are known
270 271 272 273
@#  include <zlib.h>

# The '@' here means to substitute the value when pnglibconf.h is built
setting Z_DEFAULT_COMPRESSION default @Z_DEFAULT_COMPRESSION
274 275
# TODO: why aren't these Z_RLE; zlib.h says that Z_RLE, specifically, is
# appropriate for PNG images, maybe it doesn't exist in all versions?
276 277
setting Z_DEFAULT_STRATEGY default @Z_FILTERED
setting Z_DEFAULT_NOFILTER_STRATEGY default @Z_DEFAULT_STRATEGY
278
setting ZLIB_VERNUM default @ZLIB_VERNUM
279

280 281 282 283 284 285 286 287 288 289 290
# Linkage of:
#
#  API:      libpng API functions
#  CALLBACK: internal non-file-local callbacks
#  FUNCTION: internal non-file-local functions
#  DATA:     internal non-file-local (const) data
setting LINKAGE_API default extern
setting LINKAGE_CALLBACK default extern
setting LINKAGE_FUNCTION default extern
setting LINKAGE_DATA default extern

291 292 293
setting TEXT_Z_DEFAULT_COMPRESSION default @Z_DEFAULT_COMPRESSION
setting TEXT_Z_DEFAULT_STRATEGY default @Z_DEFAULT_STRATEGY

294 295 296 297
# Default to using the read macros

setting DEFAULT_READ_MACROS default 1

298 299 300 301
# The alternative is to call functions to read PNG values, if
# the functions are turned *off* the read macros must always
# be enabled, so turning this off will actually force the
# USE_READ_MACROS option on (see pngconf.h)
302

303 304
option READ_INT_FUNCTIONS requires READ

305 306 307 308
# The same for write  but these can only be switched off if no writing
# is required at all - hence the use of a 'disabled', not a 'requires'.
# If these are needed, they are enabled in the 'WRITE options' section
# below.
309

310
option WRITE_INT_FUNCTIONS disabled
311

312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
# Error controls
#
# WARNINGS: normally on, if off no warnings are generated
# ERROR_TEXT: normally on, if off errors happen but there is no message
# ERROR_NUMBERS: unimplemented feature, therefore disabled
# BENIGN_ERRORS: support for just issuing warnings for recoverable errors
#
# BENIGN_READ_ERRORS:
#     By default recoverable errors on read should just generate warnings,
#     generally safe but PNG files that don't conform to the specification will
#     be accepted if a meaningful result can be produced.
#
# BENIGN_WRITE_ERRORS:
#     By default recoverable errors on write should just generate warnings,
#     not generally safe because this allows the application to write invalid
#     PNG files.  Applications should enable this themselves; it's useful
U
Unknown 已提交
328
#     because it means that a failure to write an ancillary chunk can often be
329
#     ignored.
330

G
[devel]  
Glenn Randers-Pehrson 已提交
331
option WARNINGS
332 333 334
option ERROR_TEXT
option ERROR_NUMBERS disabled

335
option BENIGN_ERRORS
336 337 338 339 340 341
option BENIGN_WRITE_ERRORS requires BENIGN_ERRORS disabled
option BENIGN_READ_ERRORS requires BENIGN_ERRORS


# Generic options - affect both read and write.

342
option MNG_FEATURES
G
[devel]  
Glenn Randers-Pehrson 已提交
343 344

# Arithmetic options, the first is the big switch that chooses between internal
345
# floating and fixed point arithmetic implementations - it does not affect any
G
[devel]  
Glenn Randers-Pehrson 已提交
346
# APIs.  The second two (the _POINT settings) switch off individual APIs.
347 348 349 350
#
# Prior to libpng 1.6.8 one of the API (_POINT) variants had to be selected.  At
# 1.6.8 this restriction has been removed; the simplified API can be used
# without enabling any of the low level fixed/floating APIs.
351

G
[devel]  
Glenn Randers-Pehrson 已提交
352
option FLOATING_ARITHMETIC
353 354
option FLOATING_POINT
option FIXED_POINT
355 356 357 358 359 360 361 362 363

# 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.
364

365 366 367 368
option STDIO
option CONSOLE_IO requires STDIO

# Note: prior to 1.5.0 this option could not be disabled if STDIO
369
# was enabled.  Prior to 1.5.3 this option required STDIO
370

371
option TIME_RFC1123
372 373

# PNG_SETJMP_NOT_SUPPORTED is an old equivalent for NO_SETJMP
374

375 376 377 378 379 380
option SETJMP
= NO_SETJMP SETJMP_NOT_SUPPORTED

# 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.
381

382 383 384
option EASY_ACCESS

# Added at libpng-1.2.0
385

386 387 388
option USER_MEM

# Added at libpng-1.4.0
389

390 391
option IO_STATE

392 393 394
# Libpng limits: limit the size of images and data on read.
#
# If this option is disabled all the limit checking code will be disabled:
395

396
option USER_LIMITS requires READ
397

398
# The default settings given below for the limits mean that libpng will
U
Unknown 已提交
399
# limit the size of images or the size of data in ancillary chunks to less
400
# than the specification or implementation limits. Settings have the
401 402 403 404 405 406 407 408
# following interpretations:
#
# USER_WIDTH_MAX: maximum width of an image that will be read
# USER_HEIGHT_MAX: maximum height
# USER_CHUNK_MALLOC_MAX: maximum in-memory (decompressed) size of a single chunk
# USER_CHUNK_CACHE_MAX: maximum number of chunks to be cached
#
# Only chunks that are variable in number are counted towards the
409

410 411 412 413 414 415 416
# Use 0x7fffffff for unlimited
setting USER_WIDTH_MAX default        1000000
setting USER_HEIGHT_MAX default       1000000

# Use 0 for unlimited
setting USER_CHUNK_CACHE_MAX default     1000
setting USER_CHUNK_MALLOC_MAX default 8000000
417 418 419 420

# If this option is enabled APIs to set the above limits at run time are added;
# without this the hardwired (compile time) limits will be used.
option SET_USER_LIMITS requires USER_LIMITS
421

422 423 424 425 426
# All of the following options relate to code capabilities for
# processing image data before creating a PNG or after reading one.
# You can remove these capabilities safely and still be PNG
# conformant, however the library that results is still non-standard.
# See the comments above about how to change options and settings.
427 428

# READ options
429 430 431 432 433 434 435 436 437 438 439 440 441
#
# WARNING: in libpng 1.5 maintained configuration compatibility with earlier
# versions.  In some cases turning off an option turned off other options, in
# others it was ineffective unless dependent options were also turned off.
# Libpng 1.6 changes this: in general if you turn off an option that affects
# APIs it stays off and simply disables APIs that depend on it.
#
# As a result if you simply port the libpng 1.5 configuration to libpng 1.6 you
# will probably see build failures due to missing APIs.  Fixing these failures
# requires some, perhaps considerable, knowledge of what your libpng using
# applications are doing, fortunately there is no great reason for you to move
# to libpng 1.6; the new interfaces in 1.6 will take several years to become
# popular.
442

443
option READ enables READ_INTERLACING SET_OPTION
444

445 446
# Disabling READ_16BIT does not disable reading 16-bit PNG files, but it
# forces them to be chopped down to 8-bit, and disables any 16-bit
447
# processing after that has happened.  You need to be sure to enable
448 449
# READ_SCALE_16_TO_8 or READ_STRIP_16_TO_8 when you disable READ_16BIT for
# this to work properly.  You should disable the other option if you need to
450
# ensure a particular conversion (otherwise the app can chose.)
451

452 453
option READ_16BIT requires READ enables 16BIT

454
option READ_QUANTIZE requires READ
455 456

option READ_TRANSFORMS requires READ
457
= NO_READ_TRANSFORMS READ_TRANSFORMS_NOT_SUPPORTED
458

459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
# Read gamma handling.  Gamma processing is a core part of libpng and many of
# the capabilities are dependent on libpng performing gamma correction.
#
# In libpng 1.6 disabling gamma processing (setting PNG_NO_READ_GAMMA)
# consistently disables those parts of the API that depend on it.  Prior to
# 1.6.0 this was not true; the results were unpredictable and varied between
# releases.
#
# If you disable gamma processing and your program no longer compiles you need
# to ask whether you really need the APIs that are missing.  If you do then you
# almost certainly need the gamma processing.
#
# If you handle gamma issues outside libpng then you do not need the libpng
# gamma processing; and it is an enormous waste of space.  You just need to
# remove the use of libpng APIs that depend on it.
474
option READ_GAMMA requires READ_TRANSFORMS, READ_gAMA, READ_sRGB
475 476 477

option READ_ALPHA_MODE requires READ_TRANSFORMS, READ_GAMMA
option READ_BACKGROUND requires READ_TRANSFORMS, READ_STRIP_ALPHA, READ_GAMMA
478
option READ_BGR requires READ_TRANSFORMS
479 480
option READ_EXPAND_16 requires READ_TRANSFORMS, READ_16BIT, READ_EXPAND
option READ_EXPAND requires READ_TRANSFORMS
481 482 483
option READ_FILLER requires READ_TRANSFORMS
option READ_GRAY_TO_RGB requires READ_TRANSFORMS
option READ_INVERT_ALPHA requires READ_TRANSFORMS
484 485 486
option READ_INVERT requires READ_TRANSFORMS
option READ_PACK requires READ_TRANSFORMS
option READ_PACKSWAP requires READ_TRANSFORMS
487
option READ_RGB_TO_GRAY requires READ_TRANSFORMS, READ_GAMMA enables COLORSPACE
488 489 490
option READ_SCALE_16_TO_8 requires READ_TRANSFORMS
option READ_SHIFT requires READ_TRANSFORMS
option READ_STRIP_16_TO_8 requires READ_TRANSFORMS
491
option READ_STRIP_ALPHA requires READ_TRANSFORMS
492 493
option READ_SWAP_ALPHA requires READ_TRANSFORMS
option READ_SWAP requires READ_TRANSFORMS, READ_16BIT
494 495 496 497 498 499 500 501 502 503 504 505 506
option READ_USER_TRANSFORM 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
507
= NO_READ_COMPOSITE_NODIV NO_READ_COMPOSITED_NODIV
508

G
[devel]  
Glenn Randers-Pehrson 已提交
509
# Inch conversions
510

G
[devel]  
Glenn Randers-Pehrson 已提交
511
option INCH_CONVERSIONS
512
= INCH_CONVERSIONS INCH_CONVERSIONS
513

514
# API to build a grayscale palette
515
# NOTE: this is not used internally by libpng at present.
516 517 518

option BUILD_GRAYSCALE_PALETTE

519
# WRITE options
520

521
option WRITE enables WRITE_INT_FUNCTIONS
522

523 524
# Disabling WRITE_16BIT prevents 16-bit PNG files from being
# generated.
525
option WRITE_16BIT requires WRITE enables 16BIT
526

527
option WRITE_TRANSFORMS requires WRITE
528
= NO_WRITE_TRANSFORMS WRITE_TRANSFORMS_NOT_SUPPORTED
529 530 531 532

option WRITE_SHIFT requires WRITE_TRANSFORMS
option WRITE_PACK requires WRITE_TRANSFORMS
option WRITE_BGR requires WRITE_TRANSFORMS
533
option WRITE_SWAP requires WRITE_TRANSFORMS, WRITE_16BIT
534 535 536 537 538 539 540 541 542
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
543

544 545
option WRITE_INTERLACING requires WRITE

546
# Deprecated, will be removed.
547
option WRITE_WEIGHTED_FILTER requires WRITE
548 549 550

option WRITE_FLUSH requires WRITE

551 552
# Note: these can be turned off explicitly if not required by the
# apps implementing the user transforms
553 554
option USER_TRANSFORM_PTR if READ_USER_TRANSFORM, WRITE_USER_TRANSFORM
option USER_TRANSFORM_INFO if READ_USER_TRANSFORM, WRITE_USER_TRANSFORM
555

556 557 558 559
# This enables API to set compression parameters for compressing
# non-IDAT chunks (zTXt, iTXt, iCCP, and unknown chunks).  This feature
# was added at libpng-1.5.3.
option WRITE_CUSTOMIZE_ZTXT_COMPRESSION requires WRITE
560
option WRITE_CUSTOMIZE_COMPRESSION requires WRITE
561

562
# Any chunks you are not interested in, you can undef here.  The
U
Unknown 已提交
563
# ones that allocate memory may be especially important (hIST,
564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581
# 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
582

J
John Bowler 已提交
583
option TEXT disabled
584 585 586
option READ_TEXT requires READ_ANCILLARY_CHUNKS enables TEXT
option WRITE_TEXT requires WRITE_ANCILLARY_CHUNKS enables TEXT

G
[devel]  
Glenn Randers-Pehrson 已提交
587 588 589 590 591 592 593 594 595 596 597 598
# Moved to pnglibconf.h at libpng-1.5.0
# Feature support: in 1.4 this was in pngconf.h, but the following
# features have no affect on the libpng API.  Add library
# only features to the end of this list.  Add features that
# affect the API above.  (Note: the list of chunks follows
# the library-only settings.)
#
# BUILD TIME ONLY OPTIONS
#   These options do not affect the API but rather alter how the
#   API is implemented, they get recorded in pnglibconf.h, but
#   can't be changed by the application.

599 600 601 602 603 604 605 606 607
# Colorspace support (enabled as required); just the support for colorant
# information.  Gamma support, likewise, is just support for the gamma
# information, READ_GAMMA is required for gamma transformations (so it
# is possible to read PNG gamma without enabling all the libpng transform
# code - do this for applications that do their own gamma processing)
#
# As of 1.6.0 COLORSPACE is only useful if the application processes the
# information; this is because the library does not do any colorspace
# processing, it just validates the data in the PNG file.
608

609 610
option GAMMA disabled
option COLORSPACE enables GAMMA disabled
611

612
# When an ICC profile is read, or png_set, it will be checked for a match
613 614 615
# against known sRGB profiles if the sRGB handling is enabled.  The
# PNG_sRGB_PROFILE_CHECKS setting controls how much work is done during the
# check:
616
#
617 618
# -1: Don't do any sRGB profile checking.
#
619 620 621 622 623 624 625 626 627 628 629 630 631
#  0: Just validate the profile MD5 signature if present, otherwise use
#     the checks in option 1.
#
#  1: Additionally check the length, intent and adler32 checksum of the
#     actual data.   If enabled this will reject known profiles that have
#     had the rendering intent in the header changed as well as other edits
#     done without updating the checksum.  See the discussion below.
#
#  2: Additionally checksum all the data using the ethernet CRC32 algorithm.
#     This makes it more difficult to fake profiles and makes it less likely
#     to get a false positive on profiles with no signature, but is probably
#     just a waste of time since all currently approved ICC sRGB profiles have
#     a secure MD5 signature.
632 633 634 635 636 637 638 639 640 641 642 643
#
# The rendering intent.  An ICC profile stores an intended rendering intent,
# but does not include the value in the signature.  The intent is documented
# as the intent that should be used when combining two profiles.  The sRGB
# profile is intended, however, to be used with any of the four defined intents.
# For this reason the sRGB chunk includes an 'intent' to be used when displaying
# the image (intent is really a property of the image not the profile.)
#
# Unfortunately the iCCP chunk does not.  It may therefore be that some
# applications modify the intent in profiles (including sRGB profiles) to work
# round this problem.  Selecting an option other than option '0' will cause such
# modified profiles to be rejected.
644
#
645 646 647 648 649 650 651 652 653 654
# Security.  The use of Adler32 and CRC32 checksums does not help significantly
# with any security issues.  It is relatively easy to produce arbitrary profiles
# with the required checksums on current computer systems.  Nevertheless
# security does not seem to be an issue because the only consequence of a false
# positive is a false assertion that the profile is an sRGB profile.  This might
# be used to hide data from libpng using applications, but it doesn't seem
# possible to damage them.

setting sRGB_PROFILE_CHECKS default 2

G
[devel]  
Glenn Randers-Pehrson 已提交
655 656 657 658
# Artificially align memory - the code typically aligns to 8 byte
# boundaries if this is switched on, it's a small waste of space
# but can help (in theory) on some architectures.  Only affects
# internal structures.  Added at libpng 1.4.0
659

660
option ALIGNED_MEMORY
G
[devel]  
Glenn Randers-Pehrson 已提交
661 662 663

# Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING
# See png[wr]util.c, normally this should always be *on*
664

G
[devel]  
Glenn Randers-Pehrson 已提交
665 666 667 668 669 670 671 672 673 674 675 676 677
option POINTER_INDEXING

# Other defines for things like memory and the like can go here.

# BUILD TIME SETTINGS
# Like build time options these do not affect the API, but they
# may be useful to applications because they record details of
# how the API will behave particularly with regard to overall
# accuracy.

# 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.
678

G
[devel]  
Glenn Randers-Pehrson 已提交
679 680 681 682 683 684 685 686
setting QUANTIZE_RED_BITS default 5
setting QUANTIZE_GREEN_BITS default 5
setting QUANTIZE_BLUE_BITS default 5

# 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
687
# less than 8, and even that may not work (I haven't tested it).
688

G
[devel]  
Glenn Randers-Pehrson 已提交
689 690 691 692 693 694
setting MAX_GAMMA_8 default 11

# This controls how much a difference in gamma we can tolerate before
# we actually start doing gamma conversion, it's a fixed point value,
# so the default below is 0.05, meaning libpng ignores corrections in
# the range 0.95 to 1.05
695

G
[devel]  
Glenn Randers-Pehrson 已提交
696 697 698 699 700
setting GAMMA_THRESHOLD_FIXED default 5000

# Precision to use when converting a floating point value to a PNG
# extension format string in an sCAL chunk (only relevant if the
# floating point API is enabled)
701

G
[devel]  
Glenn Randers-Pehrson 已提交
702 703 704 705 706 707 708 709 710 711 712 713 714
setting sCAL_PRECISION default 5

# 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 may 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.
715

G
[devel]  
Glenn Randers-Pehrson 已提交
716 717
setting ZBUF_SIZE default 8192

718
# This is the size of the decompression buffer used when counting or checking
U
Unknown 已提交
719
# the decompressed size of an LZ stream from a compressed ancillary chunk; the
720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741
# decompressed data is never used so a different size may be optimal.  This size
# was determined using contrib/libtests/timepng.c with compressed zTXt data
# around 11MByte in size.  Slight speed improvements (up to about 14% in
# timepng) can be achieved by very large increases (to 32kbyte) on regular data,
# but highly compressible data shows only around 2% improvement.   The size is
# chosen to minimize the effects of DoS attacks based on using very large
# amounts of highly compressible data.

setting INFLATE_BUF_SIZE default 1024

# This is the maximum amount of IDAT data that the sequential reader will
# process at one time.  The setting does not affect the size of IDAT chunks
# read, just the amount read at once.  Neither does it affect the progressive
# reader, which processes just the amount of data the application gives it.
# The sequential reader is currently unable to process more than one IDAT at
# once - it has to read and process each one in turn.  There is no point setting
# this to a value larger than the IDAT chunks typically encountered (it would
# just waste memory) but there may be some point in reducing it below the value
# of ZBUF_SIZE (the size of IDAT chunks written by libpng.)

setting IDAT_READ_SIZE default PNG_ZBUF_SIZE

742 743
# Ancillary chunks
chunk bKGD
744
chunk cHRM enables COLORSPACE
745
chunk eXIf
746
chunk gAMA enables GAMMA
747
chunk hIST
748
chunk iCCP enables COLORSPACE, GAMMA
749
chunk iTXt enables TEXT
750 751 752 753
chunk oFFs
chunk pCAL
chunk pHYs
chunk sBIT
754
chunk sCAL
755
chunk sPLT
756
chunk sRGB enables COLORSPACE, GAMMA, SET_OPTION
757 758 759
chunk tEXt requires TEXT
chunk tIME
chunk tRNS
760
chunk zTXt enables TEXT
761 762 763 764

# 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.
765

766 767
option READ_OPT_PLTE requires READ_ANCILLARY_CHUNKS

768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791
# Unknown chunk handling
#
# 'UNKNOWN_CHUNKS' is a global option to disable all unknown chunk handling on
# read or write; everything else below requires it (directly or indirectly).
option UNKNOWN_CHUNKS

# There are three main options to control the ability to read and write unknown
# chunks.  If either read option is turned on then unknown chunks will be read,
# otherwise they are skipped.  If the write option is turned on unknown chunks
# set by png_set_unknown_chunks will be written otherwise it is an error to call
# that API on a write struct.
option WRITE_UNKNOWN_CHUNKS requires WRITE requires UNKNOWN_CHUNKS
option WRITE_UNKNOWN_CHUNKS enables STORE_UNKNOWN_CHUNKS

# The first way to read user chunks is to have libpng save them for a later call
# to png_get_unknown_chunks, the application must call
# png_set_keep_unknown_chunks to cause this to actually happen (see png.h)
option SAVE_UNKNOWN_CHUNKS requires READ requires SET_UNKNOWN_CHUNKS
option SAVE_UNKNOWN_CHUNKS enables READ_UNKNOWN_CHUNKS, STORE_UNKNOWN_CHUNKS

# The second approach is to use an application provided callback to process the
# chunks, the callback can either handle the chunk entirely itself or request
# that libpng store the chunk for later retrieval via png_get_unknown_chunks.
#
792 793 794 795 796 797 798
# NOTE: If STORE_UNKNOWN_CHUNKS is not enabled (which is the default if
# both SAVE_UNKNOWN_CHUNKS and WRITE_UNKNOWN_CHUNKS are disabled) then a
# 0 result from the callback will be ignored because no support for saving
# unknown chunks has been compiled in.  The normal symptom is that your app
# fails to compile because png_get_unknown_chunks is no longer defined in png.h.
# If you encounter this issue simply enable STORE_UNKNOWN_CHUNKS in your build.
#
799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823
# Note that there is no 'WRITE_USER_CHUNKS' so the USER_CHUNKS option is always
# the same as READ_USER_CHUNKS at present
option READ_USER_CHUNKS requires READ, UNKNOWN_CHUNKS
option READ_USER_CHUNKS enables READ_UNKNOWN_CHUNKS, USER_CHUNKS

# Two further options are provided to allow detailed control of the handling.
# The first enables png_set_keep_unknown_chunks; this allows the default to be
# changed from discarding unknown chunks and allows per-chunk control.  This is
# required to use the SAVE_UNKNOWN_CHUNKS option.  If enabled this option also
# applies to write (see png.h), otherwise the write API simply writes all the
# chunks it is given.
#
# The second option extends the unknown handling to allow known chunks to be
# handled as though they were unknown.  This option doesn't change any APIs, it
# merely turns on the code to check known as well as unknown chunks.
#
# This option no longer affects the write code.  It can be safely disabled and
# will prevent applications stopping libpng reading known chunks.
option SET_UNKNOWN_CHUNKS requires UNKNOWN_CHUNKS
option HANDLE_AS_UNKNOWN requires SET_UNKNOWN_CHUNKS

# The following options are derived from the above and should not be turned on
# explicitly.
option READ_UNKNOWN_CHUNKS requires UNKNOWN_CHUNKS disabled
option STORE_UNKNOWN_CHUNKS requires UNKNOWN_CHUNKS disabled
824 825 826

option CONVERT_tIME requires WRITE_ANCILLARY_CHUNKS
# The "tm" structure is not supported on WindowsCE
827

828 829 830 831 832 833
@#ifdef _WIN32_WCE
@#   define PNG_NO_CONVERT_tIME
@#endif

option WRITE_FILTER requires WRITE

834 835 836 837
option SAVE_INT_32 disabled
# png_save_int_32 is required internally for writing the ancillary chunks oFFs
# and pCAL and for both reading and writing iCCP (for the generation/checking of
# the corresponding cHRM/gAMA chunks) if full ICC is supported.
838

839 840
# added at libpng-1.5.4

841 842
option WRITE_OPTIMIZE_CMF requires WRITE

843
option READ_COMPRESSED_TEXT disabled
844
option READ_iCCP enables READ_COMPRESSED_TEXT
845 846 847
option READ_iTXt enables READ_COMPRESSED_TEXT
option READ_zTXt enables READ_COMPRESSED_TEXT

848 849
option WRITE_oFFs enables SAVE_INT_32
option WRITE_pCAL enables SAVE_INT_32
850
option WRITE_cHRM enables SAVE_INT_32
851

852
option WRITE_COMPRESSED_TEXT disabled
853 854 855 856
option WRITE_iCCP enables WRITE_COMPRESSED_TEXT
option WRITE_iTXt enables WRITE_COMPRESSED_TEXT
option WRITE_zTXt enables WRITE_COMPRESSED_TEXT

857 858
# Turn this off to disable png_read_png() and png_write_png() and
# leave the row_pointers member out of the info structure.
859

860
option INFO_IMAGE
861

862 863 864 865 866 867 868 869 870 871 872 873 874 875 876
# added at libpng-1.5.10
# Turn this off to disable warning about invalid palette index and
# leave the num_palette_max member out of the png structure.

option CHECK_FOR_INVALID_INDEX enables READ_CHECK_FOR_INVALID_INDEX
option CHECK_FOR_INVALID_INDEX enables WRITE_CHECK_FOR_INVALID_INDEX
option READ_CHECK_FOR_INVALID_INDEX requires READ, CHECK_FOR_INVALID_INDEX
option WRITE_CHECK_FOR_INVALID_INDEX requires WRITE, CHECK_FOR_INVALID_INDEX

# added at libpng-1.5.15
option GET_PALETTE_MAX enables READ_GET_PALETTE_MAX WRITE_GET_PALETTE_MAX
option READ_GET_PALETTE_MAX requires READ_CHECK_FOR_INVALID_INDEX disabled
option WRITE_GET_PALETTE_MAX requires WRITE_CHECK_FOR_INVALID_INDEX disabled

# Simplified API options (added at libpng-1.6.0)
877 878 879 880 881 882 883 884
#  In libpng 1.6.8 the handling of these options was changed to used 'requires'
#  throughout, so that disabling some of the low level support always disables
#  the base simplified read/write API.  This much simplifies the handling and
#  makes 'everything = off' work in a more intuitive way.  It eliminates a
#  previously reported feature that APIs previously enabled by the simplified
#  API couldn't be turned off without explicitly turning off the simplified
#  APIs.
#
885
# Read:
886
option SIMPLIFIED_READ,
887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
   requires SEQUENTIAL_READ, READ_TRANSFORMS, SETJMP, BENIGN_ERRORS,
      READ_EXPAND, READ_16BIT, READ_EXPAND_16, READ_SCALE_16_TO_8,
      READ_RGB_TO_GRAY, READ_ALPHA_MODE, READ_BACKGROUND, READ_STRIP_ALPHA,
      READ_FILLER, READ_SWAP, READ_PACK, READ_GRAY_TO_RGB, READ_GAMMA,
      READ_tRNS, READ_bKGD, READ_gAMA, READ_cHRM, READ_sRGB, READ_sBIT

# AFIRST and BGR read options:
#  Prior to libpng 1.6.8 these were disabled but switched on if the low level
#  libpng routines that do the swaps were enabled.  This worked but was
#  confusing.  In libpng 1.6.8 the options were changed to simple 'requires'
#  and are enabled by default.  This should work the same way in practice.
option SIMPLIFIED_READ_AFIRST enables FORMAT_AFIRST,
   requires SIMPLIFIED_READ READ_SWAP_ALPHA

option SIMPLIFIED_READ_BGR enables FORMAT_BGR,
   requires SIMPLIFIED_READ READ_BGR
903 904

# Write:
905
option SIMPLIFIED_WRITE,
906
   requires WRITE, SETJMP, WRITE_SWAP, WRITE_PACK,
907
      WRITE_tRNS, WRITE_gAMA, WRITE_sRGB, WRITE_cHRM
908

909 910 911
# 1.6.22: allow simplified write without stdio support:
option SIMPLIFIED_WRITE_STDIO requires SIMPLIFIED_WRITE STDIO

912 913
option SIMPLIFIED_WRITE_AFIRST enables FORMAT_AFIRST,
   requires SIMPLIFIED_WRITE WRITE_SWAP_ALPHA
914

915 916
option SIMPLIFIED_WRITE_BGR enables FORMAT_BGR,
   requires SIMPLIFIED_WRITE WRITE_BGR
917 918

# Formats:
919 920
option FORMAT_AFIRST disabled
option FORMAT_BGR disabled