John Bowler 269b753496 Do not build unused Adler32 code
This removes the default build of an undocumented feature to disable
Adler32 checksums on those systems where it was the default.

The PR is motived by github #187 however it fixes a much more general
problem (#187 is limited to an issue where libpng "crashes" on some
manufacturer systems).  The fix is based on a suggestion by @sgowdev who
is the originator of the issue.

When libpng disables the checking of Adler32 checksums it does so by an
undocumented and therefore possibly unsupported call to a zlib function
which does not exist in some versions of zlib.

Fortunately libpng only does this if the caller of libpng explicitly
asks for it to happen.  Unfortunately the call to the undocumented
function is still in the compiled and built libpng and this means that
on some systems (as identified in #187) libpng can fail to load or maybe
even crash.

The libpng authors are currently unaware of any program or system that
uses this feature and none has been identified by the contributors to

In this fix an option is added to *enable* the code so that by default
the code is *disabled* - this is a simple generalization of the
suggestion by @sgowdev.

BENEFITS: the problem is eliminated, users of the functionality, if any,
are idenfified, the functionality can be implemented correctly in the
future or it can be removed.  Hardly anyone complains.

COSTS: someone will complain that they have to enable an option in a
libpng build to use a feature that never worked consistently in the
first place.

This patch has been tested both with the option enabled and with it
disabled via pngusr.dfa.  Tests, checks pass with cmake and configure,
make distcheck passes on configure.

Reported-by: Stephen Gowen <dev.sgowen@gmail.com>
Signed-off-by: John Bowler <jbowler@acm.org>
Signed-off-by: Cosmin Truta <ctruta@gmail.com>
2024-01-18 23:57:06 +02:00
..
2020-03-29 23:58:29 -04:00
2023-06-26 11:09:17 +03:00
2022-09-05 17:30:06 +03:00
2022-09-05 17:30:06 +03:00
2022-09-05 17:30:06 +03:00
2022-09-05 17:30:06 +03:00
2020-03-29 23:58:29 -04:00
2020-03-29 23:58:29 -04:00
2020-03-29 23:58:29 -04:00
2020-03-29 23:58:29 -04:00
2020-03-29 23:58:29 -04:00

Makefiles for libpng

pnglibconf.h.prebuilt  =>  Configuration settings
 makefile.linux    =>  Linux/ELF makefile
                       (gcc, creates shared libpng16.so.16.1.6.*)
 makefile.linux-opt=>  Linux/ELF makefile with hardware optimizations on
                       (gcc, creates shared libpng16.so.16.1.6.*)
 makefile.gcc      =>  Generic makefile (gcc, creates static libpng.a)
 makefile.acorn    =>  Acorn makefile
 makefile.aix      =>  AIX/gcc makefile
 makefile.amiga    =>  Amiga makefile
 makefile.atari    =>  Atari makefile
 makefile.bc32     =>  32-bit Borland C++ (all modules compiled in C mode)
 makefile.beos     =>  BeOS makefile
 makefile.clang    =>  Generic clang makefile
 makefile.darwin   =>  Darwin makefile, for macOS (formerly Mac OS X)
 makefile.dec      =>  DEC Alpha UNIX makefile
 makefile.dj2      =>  DJGPP 2 makefile
 makefile.freebsd  =>  FreeBSD makefile
 makefile.gcc      =>  Generic gcc makefile
 makefile.hpgcc    =>  HPUX makefile using gcc
 makefile.hpux     =>  HPUX (10.20 and 11.00) makefile
 makefile.hp64     =>  HPUX (10.20 and 11.00) makefile, 64-bit
 makefile.ibmc     =>  IBM C/C++ version 3.x for Win32 and OS/2 (static)
 makefile.intel    =>  Intel C/C++ version 4.0 and later
 makefile.mips     =>  MIPS makefile
 makefile.netbsd   =>  NetBSD/cc makefile, makes shared libpng.so
 makefile.openbsd  =>  OpenBSD makefile
 makefile.sco      =>  SCO OSr5 ELF and Unixware 7 with Native cc
 makefile.sggcc    =>  Silicon Graphics makefile
                       (gcc, creates shared libpng16.so.16.1.6.*)
 makefile.sgi      =>  Silicon Graphics IRIX makefile (cc, creates static lib)
 makefile.solaris  =>  Solaris 2.X makefile
                       (gcc, creates shared libpng16.so.16.1.6.*)
 makefile.so9      =>  Solaris 9 makefile
                       (gcc, creates shared libpng16.so.16.1.6.*)
 makefile.std      =>  Generic UNIX makefile (cc, creates static libpng.a)
 makefile.sunos    =>  Sun makefile
 makefile.32sunu   =>  Sun Ultra 32-bit makefile
 makefile.64sunu   =>  Sun Ultra 64-bit makefile
 makefile.vcwin32  =>  makefile for Microsoft Visual C++ 4.0 and later
 makevms.com       =>  VMS build script
 smakefile.ppc     =>  AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
                       (Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)

Other supporting scripts:
 README.txt        =>  This file
 descrip.mms       =>  VMS makefile for MMS or MMK
 libpng-config-body.in => used by several makefiles to create libpng-config
 libpng-config-head.in => used by several makefiles to create libpng-config
 libpng.pc.in      =>  Used by several makefiles to create libpng.pc
 pngwin.rc         =>  Used by the visualc71 project
 pngwin.def        =>  Used by makefile.os2
 pngwin.dfn        =>  Used to maintain pngwin.def
 SCOPTIONS.ppc     =>  Used with smakefile.ppc

 checksym.awk      =>  Used for maintaining pnglibconf.h
 def.dfn           =>  Used for maintaining pnglibconf.h
 options.awk       =>  Used for maintaining pnglibconf.h
 pnglibconf.dfa    =>  Used for maintaining pnglibconf.h
 pnglibconf.mak    =>  Used for maintaining pnglibconf.h
 sym.dfn           =>  Used for symbol versioning
 symbols.def       =>  Used for symbol versioning
 symbols.dfn       =>  Used for symbol versioning
 vers.dfn          =>  Used for symbol versioning

 libtool.m4        =>  Used by autoconf tools
 ltoptions.m4      =>  Used by autoconf tools
 ltsugar.m4        =>  Used by autoconf tools
 ltversion.m4      =>  Used by autoconf tools
 lt~obsolete.m4    =>  Used by autoconf tools

 intprefix.dfn     =>  Used by autoconf tools
 macro.lst         =>  Used by autoconf tools
 prefix.dfn        =>  Used by autoconf tools

Further information can be found in comments in the individual scripts and
makefiles.