
Installing libpng version 1.2.15beta3 - December 5, 2006

On Unix/Linux and similar systems, you can simply type

    ./configure [--prefix=$HOME]
    make check
    make install

and ignore the rest of this document.

If configure does not work on your system and you have a reasonably
up-to-date set of tools, running ./autogen.sh before running ./configure
may fix the problem.  You can also run the individual commands in
autogen.sh with the --force option, if supported by your version of
the tools.  If you run 'libtoolize --force', though, this will replace
the distributed, patched, version of ltmain.sh with an unpatched version
and your shared library builds may fail to produce libraries with the
correct version numbers.

Instead, you can use one of the custom-built makefiles in the
"scripts" directory

    cp scripts/makefile.system makefile
    make test
    make install

Or you can use one of the "projects" in the "projects" directory.

Before installing libpng, you must first install zlib, if it
is not already on your system.  zlib can usually be found
wherever you got libpng.  zlib can be placed in another directory,
at the same level as libpng.

If your system already has a preinstalled zlib 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.15beta3" or "lpng109" and "zlib-1.2.1"
or "zlib121") 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
             pngminus
             pngsuite
             visupng
          projects
             beos
             c5builder (Borland)
             visualc6 (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 projects\visualc6 directory and follow the instructions in
projects\visualc6\README.txt.

You can build libpng for WindowsCE by downloading and installing
the projects\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 or Beos as instructed in projects\netware.txt
or projects\beos.

Else enter the zlib directory and follow the instructions in zlib/README,
then come back here and run "configure" or 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.elf      =>  Linux/ELF makefile symbol versioning,
                       gcc, creates libpng12.so.0.1.2.15beta3)
 makefile.linux    =>  Linux/ELF makefile
                       (gcc, creates libpng12.so.0.1.2.15beta3)
 makefile.gcmmx    =>  Linux/ELF makefile
                       (gcc, creates libpng12.so.0.1.2.15beta3,
                       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.freebsd  =>  FreeBSD 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
 libpng.icc        =>  Project file for IBM VisualAge/C++ version 4.0 or later
 makefile.netbsd   =>  NetBSD/cc makefile, uses PNGGCCRD, makes libpng.so.
 makefile.ne12bsd  =>  NetBSD/cc makefile, uses PNGGCCRD,
                       makes libpng12.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.15beta3)
 makefile.sunos    =>  Sun makefile
 makefile.solaris  =>  Solaris 2.X makefile (gcc,
                       creates libpng12.so.0.1.2.15beta3)
 makefile.so9      =>  Solaris 9 makefile (gcc,
                       creates libpng12.so.0.1.2.15beta3)
 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.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
 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" which will create the libpng library in
this directory and "make test" which will 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 contrib/pngsuite/*.png" 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.


Using the ./configure script -- 16 December 2002.
=================================================


The ./configure script should work compatibly with what scripts/makefile.*
did, however there are some options you need to add to configure explicitly,
which previously was done semi-automatically (if you didn't edit
scripts/makefile.* yourself, that is)


CFLAGS="-Wall -O3 -funroll-loops \
-malign-loops=2 -malign-functions=2" ./configure --prefix=/usr/include \
--with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include

You can alternatively specify --includedir=/usr/include, /usr/local/include,
/usr/include/png12, or whatever.


