
Installing libpng version 1.0.4d - October 6, 1999

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.0.4d" or "lpng103" 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
          scripts
             makefile.*
          pngtest.png
          etc.
      zlib
          README
          *.h
          *.c
          contrib
          etc.

First 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

 descrip.mms      =>  VMS makefile for MMS or MMK
 makefile.std     =>  Generic UNIX makefile
 makefile.knr     =>  Archaic UNIX Makefile that converts files with
                      ansi2knr (Requires ansi2knr.c from
                      ftp://ftp.cs.wisc.edu/ghost)
 makefile.dec     =>  DEC Alpha UNIX makefile
 makefile.hpux    =>  HPUX (10.20 and 11.00) makefile
 makefile.sgi     =>  Silicon Graphics IRIX makefile
 makefile.sunos   =>  Sun makefile
 makefile.solaris =>  Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.4d)
 makefile.linux   =>  Linux/ELF makefile (gcc, creates libpng.so.2.1.0.4d)
 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.borland =>  Borland makefile
 build.bat        =>  MS-DOS batch file for Borland compiler
 makefile.dj2     =>  DJGPP 2 makefile
 makefile.msc     =>  Microsoft C makefile
 makefile.vcawin32 => makefile for Microsoft Visual C++ 5.0 and later (uses
                      assembler code)
 makefile.vcwin32 =>  makefile for Microsoft Visual C++ 4.0 and later (does not
                      use assembler code)
 makefile.turboc3 =>  Turbo C 3.0 makefile
 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
 pngdll.mak       =>  To make a png32bd.dll with Borland C++ 4.5
 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.msd 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.

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).

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