mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
[devel] Freeze build-time only configuration in the build.
In all prior versions of libpng most configuration options
controlled by compiler #defines had to be repeated by the
application code that used libpng. This patch changes this
so that compilation options that can only be changed at build
time are frozen in the build. Options that are compiler
dependent (and those that are system dependent) are evaluated
each time - pngconf.h holds these. Options that can be changed
per-file in the application are in png.h. Frozen options are
in the new installed header file pnglconf.h
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
|
||||
566
scripts/options.awk
Normal file
566
scripts/options.awk
Normal file
@@ -0,0 +1,566 @@
|
||||
#!/bin/awk -f
|
||||
# scripts/options.awk - library build configuration control
|
||||
#
|
||||
# libpng version 1.5.0beta17 - April 2, 2010
|
||||
#
|
||||
# Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
||||
#
|
||||
# This code is released under the libpng license.
|
||||
# For conditions of distribution and use, see the disclaimer
|
||||
# and license in png.h
|
||||
|
||||
# The output of this script is written to the file given by
|
||||
# the variable 'out'. The script is run twice, once with
|
||||
# an intermediate output file, 'options.tmp' then again on
|
||||
# that file to produce the final output. Each time the
|
||||
# output files and whether or not to pre-prrocess must be
|
||||
# specified:
|
||||
#
|
||||
# awk -f scripts/options.awk pre=1 out=options.tmp scripts/options.dat 1>&2
|
||||
# awk -f scripts/options.awk pre=0 out=options.dfn options.tmp 1>&2
|
||||
|
||||
BEGIN{
|
||||
out="/dev/null" # intermediate, preprocessed, file
|
||||
pre=-1 # preprocess
|
||||
start="PNG_DEFN_MAGIC-" # Arbitrary start
|
||||
end="-PNG_DEFN_END" # Arbitrary end
|
||||
cx= "/@@@*" # Open C comment for output file
|
||||
comment=start cx # Comment start
|
||||
cend="*/" end # Comment end
|
||||
def=start "#define PNG_@@@" # Arbitrary define
|
||||
sup="@@@_SUPPORTED" end # end supported option
|
||||
und=comment "#undef PNG_@@@" # Unsupported option
|
||||
une="@@@_SUPPORTED" cend # end unsupported option
|
||||
error=start "ERROR:" # error message
|
||||
deb=0 # debug - set on command line
|
||||
logunsupported=0 # write unsupported options too
|
||||
|
||||
# Precreate arrays
|
||||
option[""] = "" # list of all options: default on/off/""
|
||||
done[""] = 1 # marks option as having been output
|
||||
requires[""] = "" # requires by option
|
||||
iffs[""] = "" # if by option
|
||||
enabledby[""] = "" # options that enable it by option
|
||||
setting[""] = "" # requires by setting
|
||||
defaults[""] = "" # used for a defaulted value
|
||||
doneset[""] = 1 # marks setting as having been output
|
||||
r[""] = "" # Temporary array
|
||||
|
||||
# For decorating the output file
|
||||
protect = ""
|
||||
}
|
||||
|
||||
# Preprocessing - this just copies the input file with lines
|
||||
# that need preprocessing (just chunk at present) expanded
|
||||
pre && $1 != "chunk"{
|
||||
print >out
|
||||
next
|
||||
}
|
||||
|
||||
# The first characters of the line determine how it is processed,
|
||||
# leading spaces are ignored. In general tokens that are not
|
||||
# keywords are the names of options. An option 'name' is
|
||||
# controlled by the definition of the corresponding macros:
|
||||
#
|
||||
# PNG_name_SUPPORTED The option is turned on
|
||||
# PNG_NO_name
|
||||
# PNG_NO_name_SUPPORTED If the first macro is not defined
|
||||
# either of these will turn the option off
|
||||
#
|
||||
# If none of these macros are defined the option is turned on, unless
|
||||
# the keyword 'off' is given in a line relating to the option. The
|
||||
# keyword 'on' can also be given, but it will be ignored (since it is
|
||||
# the default.)
|
||||
#
|
||||
# In the syntax below a 'name' is indicated by "NAME", other macro
|
||||
# values are indicated by "MACRO", as with "NAME" the leading "PNG_"
|
||||
# is omitted, but in this case the "NO_" prefix and the "_SUPPORTED"
|
||||
# suffix are never used.
|
||||
#
|
||||
# Each line is introduced by a keyword - the first non-space characters
|
||||
# on the line. A line starting with a '#' is a comment - it is totally
|
||||
# ignored. Keywords are as follows, a NAME, is simply a macro name
|
||||
# without the leading PNG_, PNG_NO_ or the trailing _SUPPORTED.
|
||||
|
||||
$1 ~ /^#/ || $0 ~ /^[ ]*$/{
|
||||
next
|
||||
}
|
||||
|
||||
# com <comment>
|
||||
# The whole line is placed in the output file as a comment with
|
||||
# the preceding 'com' removed
|
||||
$1 == "com"{
|
||||
if (NF > 1) {
|
||||
sub(/^[ ]*com[ ]*/, "")
|
||||
print comment, $0, cend >out
|
||||
} else
|
||||
print start end >out
|
||||
next
|
||||
}
|
||||
|
||||
# file output input protect
|
||||
# Informational: the official name of the input file (without
|
||||
# make generated local directories), the official name of the
|
||||
# output file and, if required, a name to use in a protection
|
||||
# macro for the contents.
|
||||
$1 == "file" && NF >= 2{
|
||||
print comment, $2, cend >out
|
||||
print comment, "Machine generated file: DO NOT EDIT", cend >out
|
||||
if (NF >= 3)
|
||||
print comment, "Derived from:", $3, cend >out
|
||||
protect = $4
|
||||
if (protect != "") {
|
||||
print start "#ifndef", protect end >out
|
||||
print start "#define", protect end >out
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
# option NAME ( (requires|enables|if) NAME* | on | off )*
|
||||
# Declares an option 'NAME' and describes its default setting (on|off)
|
||||
# and its relationship to other options. The option is disabled
|
||||
# unless *all* the options listed after 'requires' are set and at
|
||||
# least one of the options listed after 'if' is set. If the
|
||||
# option is set then it turns on all the options listed after 'enables'.
|
||||
|
||||
$1 == "option" && NF >= 2{
|
||||
onoff = option[$2] # records default on or default off
|
||||
key = ""
|
||||
for (i=3; i<=NF; ++i) {
|
||||
if ($(i) == "on" || $(i) == "off") {
|
||||
key = ""
|
||||
if (onoff != $(i)) {
|
||||
if (onoff == "")
|
||||
onoff = $(i)
|
||||
else {
|
||||
# Print a message, otherwise the error
|
||||
# below is incomprehensible
|
||||
print $2 ": currently", onoff ": attempt to turn", $(i)
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if ($(i) == "requires" || $(i) == "if" || $(i) == "enables") {
|
||||
key = $(i)
|
||||
} else if (key == "requires") {
|
||||
requires[$2] = requires[$2] " " $(i)
|
||||
} else if (key == "if") {
|
||||
iffs[$2] = iffs[$2] " " $(i)
|
||||
} else if (key == "enables") {
|
||||
enabledby[$(i)] = enabledby[$(i)] " " $2
|
||||
} else
|
||||
break # bad line format
|
||||
}
|
||||
|
||||
if (i > NF) {
|
||||
# Set the option - this may explicitly set it to "", that's good
|
||||
# becaue we need to ensure it exists and we can't rely on some
|
||||
# actually quite sensible awk implementation not optimising the
|
||||
# read above away (gawk doesn't)
|
||||
option[$2] = onoff
|
||||
next
|
||||
}
|
||||
# Else fall through to the error handler
|
||||
}
|
||||
|
||||
# chunk NAME [requires OPT] [off]
|
||||
# Expands to the 'option' settings appropriate to the reading and
|
||||
# writing of an ancilliary PNG chunk 'NAME':
|
||||
#
|
||||
# option READ_NAME requires READ_ANCILLARY_CHUNKS [READ_OPT]
|
||||
# option READ_NAME enables NAME
|
||||
# [option READ_NAME off]
|
||||
# option WRITE_NAME requires WRITE_ANCILLARY_CHUNKS [WRITE_OPT]
|
||||
# option WRITE_NAME enables NAME
|
||||
# [option WRITE_NAME off]
|
||||
|
||||
pre && $1 == "chunk" && NF >= 2{
|
||||
# 'chunk' is handled on the first pass by writing appropriate
|
||||
# 'option' lines into the intermediate file.
|
||||
onoff = ""
|
||||
reqread = ""
|
||||
reqwrite = ""
|
||||
i = 3 # indicates format error
|
||||
if (NF > 2) {
|
||||
# read the keywords/additional OPTS
|
||||
req = 0
|
||||
for (i=3; i<=NF; ++i) {
|
||||
if ($(i) == "on" || $(i) == "off") {
|
||||
if (onoff != $(i)) {
|
||||
if (onoff == "")
|
||||
onoff = $(i)
|
||||
else
|
||||
break # on/off conflict
|
||||
}
|
||||
} else if ($(i) == "requires")
|
||||
req = 1
|
||||
else if (req != 1)
|
||||
break # bad line: handled below
|
||||
else {
|
||||
reqread = reqread " READ_" $(i)
|
||||
reqwrite = reqwrite " WRITE_" $(i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (i > NF) {
|
||||
# Output new 'option' lines to the intermediate file (out)
|
||||
print "option READ_" $2,
|
||||
"requires READ_ANCILLARY_CHUNKS" reqread,
|
||||
"enables", $2, onoff >out
|
||||
print "option WRITE_" $2,
|
||||
"requires WRITE_ANCILLARY_CHUNKS" reqwrite,
|
||||
"enables", $2, onoff >out
|
||||
next
|
||||
}
|
||||
# Else hit the error handler below - bad line format!
|
||||
}
|
||||
|
||||
# setting MACRO ( requires MACRO* )* [ default VALUE ]
|
||||
# Behaves in a similar way to 'option' without looking for NO_ or
|
||||
# _SUPPORTED; the macro is enabled if it is defined so long as all
|
||||
# the 'requires' macros are also defined. The definitions may be
|
||||
# empty, an error will be issued if the 'requires' macros are
|
||||
# *not* defined. If given the 'default' value is used if the
|
||||
# macro is not defined. The default value will be re-tokenised.
|
||||
# (BTW: this is somewhat restrictive, it mainly exists for the
|
||||
# support of non-standard configurations and numeric parameters,
|
||||
# see the uses in scripts/options.dat
|
||||
|
||||
$1 == "setting" && (NF == 2 || NF >= 3 && ($3 == "requires" || $3 == "default")){
|
||||
reqs = ""
|
||||
deflt = ""
|
||||
isdef = 0
|
||||
key = ""
|
||||
for (i=3; i<=NF; ++i)
|
||||
if ($(i) == "requires" || $(i) == "default") {
|
||||
key = $(i)
|
||||
if (key == "default") isdef = 1
|
||||
} else if (key == "requires")
|
||||
reqs = reqs " " $(i)
|
||||
else if (key == "default")
|
||||
deflt = deflt " " $(i)
|
||||
else
|
||||
break # Format error, handled below
|
||||
|
||||
setting[$2] = reqs
|
||||
if (isdef && deflt == "")
|
||||
deflt = " " # as a flag to force output
|
||||
defaults[$2] = deflt
|
||||
next
|
||||
}
|
||||
|
||||
# The order of the dependency lines (option, chunk, setting) is irrelevant
|
||||
# - the 'enables', 'requires' and 'if' settings will be used to determine
|
||||
# the correct order in the output and the final values in pnglconf.h are
|
||||
# not order dependent. 'requires' and 'if' entries take precedence over
|
||||
# 'enables' from other options; if an option requires another option it
|
||||
# won't be set regardless of any options that enable it unless the other
|
||||
# option is also enabled.
|
||||
#
|
||||
# Similarly 'enables' trumps a NO_ definition in CFLAGS or pngusr.h
|
||||
#
|
||||
# For simplicity cycles in the definitions are regarded as errors,
|
||||
# even if they are not ambiguous.
|
||||
# A given NAME can be specified in as many 'option' lines as required, the
|
||||
# definitions are additive.
|
||||
|
||||
# For backwards compatibility equivalent macros may be listed thus:
|
||||
#
|
||||
# = [NO_]NAME MACRO
|
||||
# Makes -DMACRO equivalent to -DPNG_NO_NAME or -DPNG_NAME_SUPPORTED
|
||||
# as appropriate.
|
||||
#
|
||||
# The definition is injected into the C compiler input when encountered
|
||||
# in the second pass (so all these definitions appear *after* the @
|
||||
# lines!)
|
||||
#
|
||||
# 'NAME' is as above, but 'MACRO' is the full text of the equivalent
|
||||
# old, deprecated, macro.
|
||||
|
||||
$1 == "=" && NF == 3{
|
||||
print "#ifdef PNG_" $3 >out
|
||||
if ($2 ~ /^NO_/)
|
||||
print "# define PNG_" $2 >out
|
||||
else
|
||||
print "# define PNG_" $2 "_SUPPORTED" >out
|
||||
print "#endif" >out
|
||||
next
|
||||
}
|
||||
|
||||
# Lines may be injected into the C compiler input by preceding them
|
||||
# with an "@" character. The line is copied with just the leading
|
||||
# @ removed.
|
||||
|
||||
$1 ~ /^@/{
|
||||
sub(/^[ ]*@/, "")
|
||||
print >out
|
||||
next
|
||||
}
|
||||
|
||||
# Check for unreognized lines, because of the preprocessing chunk
|
||||
# format errors will be detected on the first pass independent of
|
||||
# any other format errors.
|
||||
{
|
||||
print "options.awk: bad line (" NR "):", $0
|
||||
exit 1
|
||||
}
|
||||
|
||||
# For checking purposes names that start with "ok_" or "fail_" are
|
||||
# not output to pnglconf.h and must be either enabled or disabled
|
||||
# respectively for the build to succeed. This allows interdependencies
|
||||
# between options of the form "at least one of" or "at most one of"
|
||||
# to be checked. For example:
|
||||
#
|
||||
# option FLOATING_POINT enables ok_math
|
||||
# option FIXED_POINT enables ok_math
|
||||
# This ensures that at least one of FLOATING_POINT and FIXED_POINT
|
||||
# must be set for the build to succeed.
|
||||
#
|
||||
# option fail_math requires FLOATING_POINT FIXED_POINT
|
||||
# This means the build will fail if *both* FLOATING_POINT and
|
||||
# FIXED_POINT are set (this is an example; in fact both are allowed.)
|
||||
#
|
||||
# If all these options were given the build would require exactly one
|
||||
# of the names to be enabled.
|
||||
|
||||
END{
|
||||
if (out == "/dev/null") {
|
||||
print "out=output.file must be given on the command line"
|
||||
exit 1
|
||||
}
|
||||
if (pre) {
|
||||
if (pre != 1) {
|
||||
print "pre=0 or pre=1 must be given on command line"
|
||||
exit 1
|
||||
}
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Do the 'setting' values first, the algorithm the standard
|
||||
# tree walk (O(1)) done in an O(2) while/for loop; interations
|
||||
# settings x depth, outputing the deepest required macros
|
||||
# first.
|
||||
print "" >out
|
||||
print "/* SETTINGS */" >out
|
||||
print comment, "settings", cend >out
|
||||
finished = 0
|
||||
while (!finished) {
|
||||
finished = 1
|
||||
movement = 0 # done nothing
|
||||
for (i in setting) if (!doneset[i]) {
|
||||
nreqs = split(setting[i], r)
|
||||
if (nreqs > 0) {
|
||||
for (j=1; j<=nreqs; ++j) if (!doneset[r[j]])
|
||||
break
|
||||
if (j<=nreqs) {
|
||||
finished = 0
|
||||
continue # try a different setting
|
||||
}
|
||||
}
|
||||
|
||||
# All the requirements have been processed, output
|
||||
# this setting.
|
||||
if (deb) print "setting", i
|
||||
print "" >out
|
||||
print "/* setting: ", i >out
|
||||
print " * requires:" setting[i] >out
|
||||
print " * default: ", defaults[i], "*/" >out
|
||||
if (defaults[i] == "") # no default, only check if defined
|
||||
print "#ifdef PNG_" i >out
|
||||
for (j=1; j<=nreqs; ++j) {
|
||||
print "# ifndef PNG_" r[j] >out
|
||||
print error, i, "requires", r[j] end >out
|
||||
print "# endif" >out
|
||||
}
|
||||
if (defaults[i] != "") # default handling
|
||||
print "#ifdef PNG_" i >out
|
||||
print def i, "PNG_" i end >out
|
||||
if (defaults[i] != "") {
|
||||
print "#else /*default*/" >out
|
||||
print def i defaults[i] end >out
|
||||
}
|
||||
print "#endif" >out
|
||||
|
||||
doneset[i] = 1
|
||||
++movement
|
||||
}
|
||||
|
||||
if (!finished && !movement) {
|
||||
print "setting: loop or missing setting in 'requires', cannot process:"
|
||||
for (i in setting) if (!doneset[i])
|
||||
print " setting", i, "requires" setting[i]
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
print comment, "end of settings", cend >out
|
||||
|
||||
# Now do the options - somewhat more complex. The dependency
|
||||
# tree is thus:
|
||||
#
|
||||
# name > name
|
||||
# name requires name
|
||||
# name if name
|
||||
# name enabledby name
|
||||
#
|
||||
# First build a list 'tree' by option of all the things on which
|
||||
# it depends.
|
||||
print "" >out
|
||||
print "/* OPTIONS */" >out
|
||||
print comment, "options", cend >out
|
||||
for (opt in enabledby) tree[opt] = 1 # may not be explicit options
|
||||
for (opt in option) tree[opt] = "" # so unlisted options marked
|
||||
for (opt in tree) {
|
||||
if (tree[opt] == 1) {
|
||||
tree[opt] = ""
|
||||
if (option[opt] != "") {
|
||||
print "internal error (1)"
|
||||
exit 1
|
||||
}
|
||||
# Macros only listed in 'enables' remain off unless
|
||||
# one of the enabling macros is on.
|
||||
option[opt] = "off"
|
||||
}
|
||||
|
||||
split("", list) # clear 'list'
|
||||
# Now add every requires, iffs or enabledby entry to 'list'
|
||||
# so that we can add a unique list of requirements to tree[i]
|
||||
split(requires[opt] iffs[opt] enabledby[opt], r)
|
||||
for (i in r) list[r[i]] = 1
|
||||
for (i in list) tree[opt] = tree[opt] " " i
|
||||
}
|
||||
|
||||
# print the tree for extreme debugging
|
||||
if (deb > 2) for (i in tree) if (i != "") print i, "depends-on" tree[i]
|
||||
|
||||
# option[i] is now the complete list of all the tokens we may
|
||||
# need to output, go through it as above, depth first.
|
||||
finished = 0
|
||||
while (!finished) {
|
||||
finished = 1
|
||||
movement = 0 # done nothing
|
||||
for (i in option) if (!done[i]) {
|
||||
nreqs = split(tree[i], r)
|
||||
if (nreqs > 0) {
|
||||
for (j=1; j<=nreqs; ++j) if (!done[r[j]])
|
||||
break
|
||||
if (j<=nreqs) {
|
||||
finished = 0
|
||||
continue # next option
|
||||
}
|
||||
}
|
||||
|
||||
# All the requirements have been processed, output
|
||||
# this option. An option is _SUPPORTED if:
|
||||
#
|
||||
# all 'requires' are _SUPPORTED AND
|
||||
# at least one of the 'if' options are _SUPPORTED AND
|
||||
# EITHER:
|
||||
# The name is _SUPPORTED (on the command line)
|
||||
# OR:
|
||||
# an 'enabledby' is _SUPPORTED
|
||||
# OR:
|
||||
# NO_name is not defined AND
|
||||
# the option is not marked "off"
|
||||
if (deb) print "option", i
|
||||
print "" >out
|
||||
print "/* option:", i, option[i] >out
|
||||
print " * requires: " requires[i] >out
|
||||
print " * if: " iffs[i] >out
|
||||
print " * enabled-by:" enabledby[i], "*/" >out
|
||||
print "#undef PNG_on" >out
|
||||
print "#define PNG_on 1" >out
|
||||
|
||||
# requires
|
||||
nreqs = split(requires[i], r)
|
||||
for (j=1; j<=nreqs; ++j) {
|
||||
print "#ifndef PNG_" r[j] "_SUPPORTED" >out
|
||||
print "# undef PNG_on /*!" r[j] "*/" >out
|
||||
print "#endif" >out
|
||||
}
|
||||
|
||||
# if
|
||||
nreqs = split(iffs[i], r)
|
||||
print "#undef PNG_no_if" >out
|
||||
if (nreqs > 0) {
|
||||
print "/* if" iffs[i], "*/" >out
|
||||
print "#define PNG_no_if 1" >out
|
||||
for (j=1; j<=nreqs; ++j) {
|
||||
print "#ifdef PNG_" r[j] "_SUPPORTED" >out
|
||||
print "# undef PNG_no_if /*" r[j] "*/" >out
|
||||
print "#endif" >out
|
||||
}
|
||||
print "#ifdef PNG_no_if /*missing if*/" >out
|
||||
print "# undef PNG_on" >out
|
||||
print "#endif" >out
|
||||
}
|
||||
|
||||
print "#ifdef PNG_on /*requires, if*/" >out
|
||||
# enables
|
||||
print "# undef PNG_not_enabled" >out
|
||||
print "# define PNG_not_enabled 1" >out
|
||||
print " /* enabled by" enabledby[i], "*/" >out
|
||||
nreqs = split(enabledby[i], r)
|
||||
for (j=1; j<=nreqs; ++j) {
|
||||
print "#ifdef PNG_" r[j] "_SUPPORTED" >out
|
||||
print "# undef PNG_not_enabled /*" r[j] "*/" >out
|
||||
print "#endif" >out
|
||||
}
|
||||
|
||||
print "# ifndef PNG_" i "_SUPPORTED /*!command line*/" >out
|
||||
print "# ifdef PNG_not_enabled /*!enabled*/" >out
|
||||
if (option[i] == "off") {
|
||||
print "# undef PNG_on /*default off*/" >out
|
||||
} else {
|
||||
print "# ifdef PNG_NO_" i >out
|
||||
print "# undef PNG_on /*turned off*/" >out
|
||||
print "# endif" >out
|
||||
print "# ifdef PNG_NO_" i "_SUPPORTED" >out
|
||||
print "# undef PNG_on /*turned off*/" >out
|
||||
print "# endif" >out
|
||||
}
|
||||
print "# endif /*!enabled*/" >out
|
||||
print "# ifdef PNG_on" >out
|
||||
# The _SUPPORTED macro must be defined so that dependent
|
||||
# options output later work.
|
||||
print "# define PNG_" i "_SUPPORTED" >out
|
||||
print "# endif" >out
|
||||
print "# endif /*!command line*/" >out
|
||||
# If PNG_on is still set the option should be defined in
|
||||
# pnglconf.h
|
||||
print "# ifdef PNG_on" >out
|
||||
if (i ~ /^fail_/)
|
||||
print error, i, "if" iffs[i], "requires" requires[i] end >out
|
||||
else if (i !~ /^ok_/)
|
||||
print def i sup >out
|
||||
print "# endif /* definition */" >out
|
||||
print "#endif /*requires, if*/" >out
|
||||
if (logunsupported || i ~ /^ok_/) {
|
||||
print "#ifndef PNG_on" >out
|
||||
if (logunsupported)
|
||||
print und i une >out
|
||||
if (i ~ /^ok_/)
|
||||
print error, i, "if" iffs[i], "requires" requires[i] end >out
|
||||
print "#endif" >out
|
||||
}
|
||||
|
||||
done[i] = 1
|
||||
++movement
|
||||
}
|
||||
|
||||
if (!finished && !movement) {
|
||||
print "option: loop or missing option in dependency tree, cannot process:"
|
||||
for (i in option) if (!done[i]) {
|
||||
print " option", i, "depends on" tree[i], "needs:"
|
||||
nreqs = split(tree[i], r)
|
||||
if (nreqs > 0) for (j=1; j<=nreqs; ++j) if (!done[r[j]])
|
||||
print " " r[j]
|
||||
}
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
print comment, "end of options", cend >out
|
||||
|
||||
# Regular end - everything looks ok
|
||||
if (protect != "")
|
||||
print start "#endif", cx, protect, "*/" end >out
|
||||
}
|
||||
329
scripts/pnglconf.dfa
Normal file
329
scripts/pnglconf.dfa
Normal file
@@ -0,0 +1,329 @@
|
||||
# scripts/pnglconf.dfa - library build configuration control
|
||||
#
|
||||
@/*- pnglconf.dfn intermediate file
|
||||
@ * generated from scripts/pnglconf.dfa
|
||||
@ */
|
||||
#
|
||||
com pnglconf.h - library build configuration
|
||||
com
|
||||
com libpng version PNGLIB_VERSION - April 2, 2010
|
||||
com
|
||||
com Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
||||
com
|
||||
com This code is released under the libpng license.
|
||||
com For conditions of distribution and use, see the disclaimer
|
||||
com and license in png.h
|
||||
com
|
||||
file pnglconf.h scripts/pnglconf.dfa PNGLCONF_H
|
||||
|
||||
# This file is preprocessed by scripts/options.awk and the
|
||||
# C compiler to generate 'pnglconf.h' - a list of all the
|
||||
# configuration options. The file lists the various options
|
||||
# that can *only* be specified during the libpng build;
|
||||
# pnglconf.h freezes the definitons selected for the specific
|
||||
# build.
|
||||
#
|
||||
# The syntax is detailed in scripts/options.awk, this is a summary
|
||||
# only:
|
||||
#
|
||||
# setting <name> [requires ...] [default]
|
||||
# #define PNG_<name> <value> /* value comes from current setting */
|
||||
# option <name> [requires ...] [if ...] [enables ...] [on|off]
|
||||
# #define PNG_<name>_SUPPORTED if the requirements are met and
|
||||
# enable the other options listed
|
||||
# chunk <name> [requires ...] [on|off]
|
||||
# Enable chunk processing for the given ancillary chunk
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
# PNG_USER_CONFIG has to be defined on the compiler command line
|
||||
# to cause pngusr.h to be read while constructing pnglconf.h
|
||||
#
|
||||
# If this is set during the build 'pnglconf.h' will define
|
||||
# PNG_USER_PRIVATEBUILD to the value that *must* be set by pngusr.h
|
||||
# and contain other definitions as below.
|
||||
#
|
||||
# If you create a private DLL you need to define the following
|
||||
# macros in the file 'pngusr.h' and set -DPNG_USER_CONFIG for
|
||||
# compilation (i.e. in CFLAGS.)
|
||||
# #define PNG_USER_PRIVATEBUILD \
|
||||
# <Describes by whom and why this version of the DLL was built>
|
||||
# e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
|
||||
# #define PNG_USER_DLLFNAME_POSTFIX <two-letter postfix that serve to
|
||||
# distinguish your DLL from those of the official release. These
|
||||
# correspond to the trailing letters that come after the version
|
||||
# number and must match your private DLL name>
|
||||
# e.g. // private DLL "libpng13gx.dll"
|
||||
# #define PNG_USER_DLLFNAME_POSTFIX "gx"
|
||||
#
|
||||
# The following macros are also at your disposal if you want to complete the
|
||||
# DLL VERSIONINFO structure.
|
||||
# - PNG_USER_VERSIONINFO_COMMENTS
|
||||
# - PNG_USER_VERSIONINFO_COMPANYNAME
|
||||
# - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
|
||||
|
||||
@#ifdef PNG_USER_CONFIG
|
||||
@# include "pngusr.h"
|
||||
@#endif
|
||||
|
||||
# Note that PNG_USR_CONFIG only has an effect when building
|
||||
# pnglconf.h
|
||||
setting USR_CONFIG requires USER_PRIVATEBUILD USER_DLLFNAME_POSTFIX
|
||||
setting USER_PRIVATEBUILD
|
||||
setting USER_DLLFNAME_POSTFIX
|
||||
setting USER_VERSIONINFO_COMMENTS
|
||||
setting USER_VERSIONINFO_COMPANYNAME
|
||||
setting USER_VERSIONINFO_LEGALTRADEMARKS
|
||||
|
||||
# Record the 'API rule' used to select calling conventions on
|
||||
# those systems that support such things (see all the comments in
|
||||
# pngconf.h)
|
||||
setting API_RULE default 0
|
||||
|
||||
# Default to using the read macros
|
||||
setting DEFAULT_READ_MACROS default 1
|
||||
|
||||
# Generic options - affect both read and write.
|
||||
option BENIGN_ERRORS off
|
||||
option MNG_FEATURES
|
||||
option FLOATING_POINT enables ok_math
|
||||
option FIXED_POINT enables ok_math
|
||||
|
||||
# Added at libpng version 1.4.0
|
||||
option ERROR_TEXT
|
||||
|
||||
# The following is always on (defined empty)
|
||||
setting CALLOC_SUPPORTED default
|
||||
|
||||
# This protects us against compilers that run on a windowing system
|
||||
# and thus don't have or would rather us not use the stdio types:
|
||||
# stdin, stdout, and stderr. The only one currently used is stderr
|
||||
# in png_error() and png_warning(). #defining PNG_NO_CONSOLE_IO will
|
||||
# prevent these from being compiled and used. #defining PNG_NO_STDIO
|
||||
# will also prevent these, plus will prevent the entire set of stdio
|
||||
# macros and functions (FILE *, printf, etc.) from being compiled and used,
|
||||
# unless (PNG_DEBUG > 0) has been #defined.
|
||||
option STDIO
|
||||
option CONSOLE_IO requires STDIO
|
||||
|
||||
# Note: prior to 1.5.0 this option could not be disabled if STDIO
|
||||
# was enabled.
|
||||
option TIME_RFC1123 requires STDIO
|
||||
|
||||
# PNG_SETJMP_NOT_SUPPORTED is an old equivalent for NO_SETJMP
|
||||
option SETJMP
|
||||
= NO_SETJMP SETJMP_NOT_SUPPORTED
|
||||
|
||||
# For the moment this is disabled (no code support):
|
||||
option ERROR_NUMBERS off
|
||||
|
||||
# If this is disabled it is not possible for apps to get the
|
||||
# values from the 'info' structure, this effectively removes
|
||||
# quite a lot of the READ API.
|
||||
option EASY_ACCESS
|
||||
|
||||
# Added at libpng-1.2.0
|
||||
option USER_MEM
|
||||
|
||||
# Added at libpng-1.4.0
|
||||
option IO_STATE
|
||||
|
||||
# This is only for PowerPC big-endian and 680x0 systems
|
||||
# some testing, not enabled by default.
|
||||
# NO LONGER USED
|
||||
#option READ_BIG_ENDIAN off
|
||||
|
||||
# Allow users to control limits on what the READ code will
|
||||
# read:
|
||||
|
||||
# Added at libpng-1.2.43; adds limit fields to png_struct,
|
||||
# allows some usages of these fields
|
||||
option USER_LIMITS
|
||||
|
||||
# Added at libpng-1.2.6; adds setting APIs, allows additional
|
||||
# usage of this field (UTSL)
|
||||
option SET_USER_LIMITS requires USER_LIMITS
|
||||
|
||||
# Feature added at libpng-1.4.0, this flag added at 1.4.1
|
||||
option SET_USER_LIMITS enables SET_CHUNK_CACHE_LIMIT
|
||||
# Feature added at libpng-1.4.1, this flag added at 1.4.1
|
||||
option SET_USER_LIMITS enables SET_CHUNK_MALLOC_LIMIT
|
||||
|
||||
# Added at libpng-1.0.16 and 1.2.6. To accept all valid PNGs no matter
|
||||
# how large, set these two limits to 0x7fffffffL
|
||||
setting USER_WIDTH_MAX default 1000000L
|
||||
setting USER_HEIGHT_MAX default 1000000L
|
||||
|
||||
# Added at libpng-1.2.43. To accept all valid PNGs no matter
|
||||
# how large, set these two limits to 0.
|
||||
setting USER_CHUNK_CACHE_MAX default 0
|
||||
|
||||
# Added at libpng-1.2.43
|
||||
setting USER_CHUNK_MALLOC_MAX default 0
|
||||
|
||||
# The following defines give you the ability to remove code from the
|
||||
# library that you will not be using. It is simply a matter of
|
||||
# defining the features on the compiler command line (in CPPFLAGS,
|
||||
# or CFLAGS) or, perhaps easier, hand-editing pnglconf.h after it
|
||||
# has been generated from this file.
|
||||
#
|
||||
# If you build a shared library with non-default options then the
|
||||
# result should normally be made a 'private' build so that applications
|
||||
# linked against the default DLL do not fail at run time because of
|
||||
# unresolved symbols.
|
||||
|
||||
# READ options
|
||||
option READ enables READ_INTERLACING
|
||||
|
||||
option READ_TRANSFORMS requires READ
|
||||
= NO_READ_TRANSFORMS PNG_READ_TRANSFORMS_NOT_SUPPORTED
|
||||
|
||||
option READ_EXPAND requires READ_TRANSFORMS
|
||||
option READ_SHIFT requires READ_TRANSFORMS
|
||||
option READ_PACK requires READ_TRANSFORMS
|
||||
option READ_BGR requires READ_TRANSFORMS
|
||||
option READ_SWAP requires READ_TRANSFORMS
|
||||
option READ_PACKSWAP requires READ_TRANSFORMS
|
||||
option READ_INVERT requires READ_TRANSFORMS
|
||||
option READ_BACKGROUND requires READ_TRANSFORMS
|
||||
option READ_16_TO_8 requires READ_TRANSFORMS
|
||||
option READ_FILLER requires READ_TRANSFORMS
|
||||
option READ_GAMMA requires READ_TRANSFORMS
|
||||
option READ_GRAY_TO_RGB requires READ_TRANSFORMS
|
||||
option READ_SWAP_ALPHA requires READ_TRANSFORMS
|
||||
option READ_INVERT_ALPHA requires READ_TRANSFORMS
|
||||
option READ_STRIP_ALPHA requires READ_TRANSFORMS
|
||||
option READ_USER_TRANSFORM requires READ_TRANSFORMS
|
||||
option READ_RGB_TO_GRAY requires READ_TRANSFORMS
|
||||
|
||||
option PROGRESSIVE_READ requires READ
|
||||
option SEQUENTIAL_READ requires READ
|
||||
|
||||
# You can define PNG_NO_PROGRESSIVE_READ if you don't do progressive reading.
|
||||
# This is not talking about interlacing capability! You'll still have
|
||||
# interlacing unless you turn off the following which is required
|
||||
# for PNG-compliant decoders. (In other words, do not do this - in
|
||||
# fact it can't be disabled from the command line!)
|
||||
#option READ_INTERLACING requires READ
|
||||
|
||||
option READ_COMPOSITE_NODIV requires READ
|
||||
= NO_READ_COMPOSITE_NODIV PNG_NO_READ_COMPOSITED_NODIV
|
||||
|
||||
# Inch conversions: not switched on by default
|
||||
option INCH_CONVERSIONS requires FLOATING_POINT off
|
||||
= INCH_CONVERSIONS PNG_INCH_CONVERSIONS
|
||||
|
||||
# IN DEVELOPMENT
|
||||
# These are currently experimental features, define them if you want
|
||||
|
||||
# Never enabled?
|
||||
option READ_DITHER requires READ off
|
||||
|
||||
# Very little testing, not enabled by default.
|
||||
option READ_16_TO_8_ACCURATE_SCALE requires READ off
|
||||
|
||||
# WRITE options
|
||||
option WRITE
|
||||
|
||||
option WRITE_TRANSFORMS requires WRITE
|
||||
= NO_WRITE_TRANSFORMS PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
|
||||
|
||||
# ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||
option WRITE_SHIFT requires WRITE_TRANSFORMS
|
||||
option WRITE_PACK requires WRITE_TRANSFORMS
|
||||
option WRITE_BGR requires WRITE_TRANSFORMS
|
||||
option WRITE_SWAP requires WRITE_TRANSFORMS
|
||||
option WRITE_PACKSWAP requires WRITE_TRANSFORMS
|
||||
option WRITE_INVERT requires WRITE_TRANSFORMS
|
||||
option WRITE_FILLER requires WRITE_TRANSFORMS
|
||||
option WRITE_SWAP_ALPHA requires WRITE_TRANSFORMS
|
||||
option WRITE_INVERT_ALPHA requires WRITE_TRANSFORMS
|
||||
option WRITE_USER_TRANSFORM requires WRITE_TRANSFORMS
|
||||
|
||||
# This is not required for PNG-compliant encoders, but can cause
|
||||
# trouble if left undefined
|
||||
option WRITE_INTERLACING requires WRITE
|
||||
|
||||
option WRITE_WEIGHTED_FILTER requires WRITE FLOATING_POINT
|
||||
|
||||
option WRITE_FLUSH requires WRITE
|
||||
|
||||
# Note: this can be turned off explicitly, is this correcct?
|
||||
option USER_TRANSFORM_PTR if READ_USER_TRANSFORM WRITE_USER_TRANSFORM
|
||||
|
||||
# Any chunks you are not interested in, you can undef here. The
|
||||
# ones that allocate memory may be expecially important (hIST,
|
||||
# tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info
|
||||
# a bit smaller.
|
||||
|
||||
# The size of the png_text structure changed in libpng-1.0.6 when
|
||||
# iTXt support was added. iTXt support was turned off by default through
|
||||
# libpng-1.2.x, to support old apps that malloc the png_text structure
|
||||
# instead of calling png_set_text() and letting libpng malloc it. It
|
||||
# was turned on by default in libpng-1.4.0.
|
||||
|
||||
option READ_ANCILLARY_CHUNKS requires READ
|
||||
# PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated.
|
||||
= NO_READ_ANCILLARY_CHUNKS READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
|
||||
|
||||
option WRITE_ANCILLARY_CHUNKS requires WRITE
|
||||
# PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED is deprecated.
|
||||
= NO_WRITE_ANCILLARY_CHUNKS WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
|
||||
|
||||
# These options disable *all* the text chunks if turned off
|
||||
option READ_TEXT requires READ_ANCILLARY_CHUNKS enables TEXT
|
||||
option WRITE_TEXT requires WRITE_ANCILLARY_CHUNKS enables TEXT
|
||||
|
||||
# Ancillary chunks
|
||||
chunk bKGD
|
||||
chunk cHRM
|
||||
chunk gAMA
|
||||
chunk hIST
|
||||
chunk iCCP
|
||||
chunk iTXt requires TEXT
|
||||
chunk oFFs
|
||||
chunk pCAL
|
||||
chunk sCAL
|
||||
chunk pHYs
|
||||
chunk sBIT
|
||||
chunk sPLT
|
||||
chunk sRGB
|
||||
chunk tEXt requires TEXT
|
||||
chunk tIME
|
||||
chunk tRNS
|
||||
chunk zTXt requires TEXT
|
||||
|
||||
# This only affects support of the optional PLTE chunk in RGB and RGBA
|
||||
# images. Notice that READ_ANCILLARY_CHUNKS therefore disables part
|
||||
# of the regular chunk reading too.
|
||||
option READ_OPT_PLTE requires READ_ANCILLARY_CHUNKS
|
||||
|
||||
option READ_UNKNOWN_CHUNKS requires READ
|
||||
option READ_UNKNOWN_CHUNKS enables UNKNOWN_CHUNKS READ_USER_CHUNKS
|
||||
option READ_USER_CHUNKS requires READ enables USER_CHUNKS
|
||||
|
||||
option CONVERT_tIME requires WRITE_ANCILLARY_CHUNKS
|
||||
# The "tm" structure is not supported on WindowsCE
|
||||
@#ifdef _WIN32_WCE
|
||||
@# define PNG_NO_CONVERT_tIME
|
||||
@#endif
|
||||
|
||||
option WRITE_FILTER requires WRITE
|
||||
|
||||
option WRITE_UNKNOWN_CHUNKS requires WRITE
|
||||
|
||||
option HANDLE_AS_UNKNOWN
|
||||
|
||||
option GET_INT_32 requires READ
|
||||
# png_get_int_32 is required by the ancillary chunks oFFs and pCAL
|
||||
option READ_oFFs enables GET_INT_32
|
||||
option READ_pCAL enables GET_INT_32
|
||||
|
||||
option SAVE_INT_32 requires WRITE
|
||||
# Likewise for png_save_int_32
|
||||
option WRITE_oFFs enables SAVE_INT_32
|
||||
option WRITE_pCAL enables SAVE_INT_32
|
||||
|
||||
# Turn this off to disable png_read_png() and png_write_png() and
|
||||
# leave the row_pointers member out of the info structure.
|
||||
option INFO_IMAGE
|
||||
155
scripts/pnglconf.h
Normal file
155
scripts/pnglconf.h
Normal file
@@ -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 */
|
||||
@@ -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
|
||||
|
||||
38
scripts/pngwin.dfn
Normal file
38
scripts/pngwin.dfn
Normal file
@@ -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"
|
||||
@@ -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
|
||||
|
||||
58
scripts/symbols.dfn
Normal file
58
scripts/symbols.dfn
Normal file
@@ -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"
|
||||
Reference in New Issue
Block a user