
Installing libpng version 1.2.6rc2 - August 8, 2004

Before installing libpng, you must first install zlib.  zlib
can usually be found wherever you got libpng.  zlib can be
placed in another directory, at the same level as libpng.
Note that your system might already have a preinstalled
zlib, but you will still need to have access to the
zlib.h and zconf.h include files that correspond to the
version of zlib that's installed.

You can rename the directories that you downloaded (they
might be called "libpng-1.2.6rc2" or "lpng109" and "zlib-1.1.3"
or "zlib113") so that you have directories called "zlib" and "libpng".

Your directory structure should look like this:

   ..       (the parent directory)
      libpng  (this directory)
          INSTALL (this file)
          README
          *.h
          *.c
          contrib
             gregbook
             msvctest
             pngminus
             pngsuite
             visupng
          projects
             beos
             borland
             msvc
             netware.txt
             wince.txt
          scripts
             makefile.*
          pngtest.png
          etc.
      zlib
          README
          *.h
          *.c
          contrib
          etc.

If the line endings in the files look funny, you may wish to get the other
distribution of libpng.  It is available in both tar.gz (UNIX style line
endings) and zip (DOS style line endings) formats.

If you are building libpng with MSVC, you can enter the libpng\msvc directory
and follow the instructions in msvc\README.txt.

You can build libpng for WindowsCE by entering the downloading and installing
the libpng\wince directory as instructed in the projects\wince.txt file, and
then following the instructions in the README* files.  Similarly, you can
build libpng for Netware as instructed in projects\netware.txt.

Else enter the zlib directory and follow the instructions in zlib/README,
then come back here and choose the appropriate makefile.sys in the scripts
directory.

The files that are presently available in the scripts directory
include

 makefile.std      =>  Generic UNIX makefile (cc, creates static libpng.a)
 makefile.linux    =>  Linux/ELF makefile (gcc, creates libpng12.so.0.1.2.6rc2)
 makefile.gcmmx    =>  Linux/ELF makefile (gcc, creates libpng12.so.0.1.2.6rc2,
                       uses assembler code tuned for Intel MMX platform)
 makefile.gcc      =>  Generic makefile (gcc, creates static libpng.a)
 makefile.knr      =>  Archaic UNIX Makefile that converts files with
                       ansi2knr (Requires ansi2knr.c from
                       ftp://ftp.cs.wisc.edu/ghost)
 makefile.aix      =>  AIX/gcc makefile
 makefile.cygwin   =>  Cygwin/gcc makefile
 makefile.darwin   =>  Darwin makefile, can use on MacosX
 makefile.dec      =>  DEC Alpha UNIX makefile
 makefile.hpgcc    =>  FreeBSD makefile
 makefile.hpgcc    =>  HPUX makefile using gcc
 makefile.hpux     =>  HPUX (10.20 and 11.00) makefile
 makefile.ibmc     =>  IBM C/C++ version 3.x for Win32 and OS/2 (static)
 makefile.intel    =>  Intel C/C++ version 4.0 and later
 libpng.icc        =>  Project file for IBM VisualAge/C++ version 4.0 or later
 makefile.netbsd   =>  NetBSD/cc makefile, uses PNGGCCRD, makes libpng.so.
 makefile.ne0bsd  =>  NetBSD/cc makefile, uses PNGGCCRD, makes libpng0.so
 makefile.openbsd  =>  OpenBSD makefile
 makefile.sgi      =>  Silicon Graphics IRIX makefile (cc, creates static lib)
 makefile.sggcc    =>  Silicon Graphics (gcc, creates libpng12.so.0.1.2.6rc2)
 makefile.sunos    =>  Sun makefile
 makefile.solaris  =>  Solaris 2.X makefile (gcc, creates libpng12.so.0.1.2.6rc2)
 makefile.so9      =>  Solaris 9 makefile (gcc, creates libpng12.so.0.1.2.6rc2)
 makefile.32sunu   =>  Sun Ultra 32-bit makefile
 makefile.64sunu   =>  Sun Ultra 64-bit makefile
 makefile.sco      =>  For SCO OSr5  ELF and Unixware 7 with Native cc
 makefile.mips     =>  MIPS makefile
 makefile.acorn    =>  Acorn makefile
 makefile.amiga    =>  Amiga makefile
 smakefile.ppc     =>  AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
                       (Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
 makefile.atari    =>  Atari makefile
 makefile.beos     =>  BEOS makefile for X86
 makefile.bor      =>  Borland makefile (uses bcc)
 makefile.bc32     =>  32-bit Borland C++ (all modules compiled in C mode)
 makefile.bd32     =>  To make a png32bd.dll with Borland C++ 4.5
 makefile.tc3      =>  Turbo C 3.0 makefile
 makefile.dj2      =>  DJGPP 2 makefile
 makefile.msc      =>  Microsoft C makefile
 makefile.vcawin32 =>  makefile for Microsoft Visual C++ 5.0 and later (uses
                       assembler code tuned for Intel MMX platform)
 makefile.vcwin32  =>  makefile for Microsoft Visual C++ 4.0 and later (does
                       not use assembler code)
 makefile.os2      =>  OS/2 Makefile (gcc and emx, requires pngos2.def)
 pngos2.def        =>  OS/2 module definition file used by makefile.os2
 makefile.watcom   =>  Watcom 10a+ Makefile, 32-bit flat memory model
 makevms.com       =>  VMS build script
 descrip.mms       =>  VMS makefile for MMS or MMK
 pngdef.pas        =>  Defines for a png32bd.dll with Borland C++ 4.5
 SCOPTIONS.ppc     =>  Used with smakefile.ppc

Copy the file (or files) that you need from the
scripts directory into this directory, for example

   MSDOS example: copy scripts\makefile.msc makefile
   UNIX example:    cp scripts/makefile.std makefile

Read the makefile to see if you need to change any source or
target directories to match your preferences.

Then read pngconf.h to see if you want to make any configuration
changes.

Then just run "make test" which will create the libpng library in
this directory and run a quick test that reads the "pngtest.png"
file and writes a "pngout.png" file that should be identical to it.
Look for "9782 zero samples" in the output of the test.  For more
confidence, you can run another test by typing "pngtest pngnow.png"
and looking for "289 zero samples" in the output.  Also, you can
run "pngtest -m *.png" in the "contrib/pngsuite" directory and compare
your output with the result shown in contrib/pngsuite/README.

Most of the makefiles will allow you to run "make install" to
put the library in its final resting place (if you want to
do that, run "make install" in the zlib directory first if necessary).
Some also allow you to run "make test-installed" after you have
run "make install".

If you encounter a compiler error message complaining about the
lines
      __png.h__ already includes setjmp.h;
      __dont__ include it again.;
This means you have compiled another module that includes setjmp.h,
which is hazardous because the two modules might not include exactly
the same setjmp.h.  If you are sure that you know what you are doing
and that they are exactly the same, then you can comment out or
delete the two lines.  Better yet, use the cexcept interface
instead, as demonstrated in contrib/visupng of the libpng distribution.

Further information can be found in the README and libpng.txt
files, in the individual makefiles, in png.h, and the manual pages
libpng.3 and png.5.
