Microsoft Developer Studio Build File, Format Version 6.00 for
libpng 1.2.3 (May 21, 2002) and zlib

Copyright (C) 2000 Simon-Pierre Cadieux
For conditions of distribution and use, see copyright notice in png.h

Assumes that libpng sources are in ..\..
Assumes that zlib sources have been copied to ..\..\..\zlib

To build:

0) On the main menu, select "File | Open Workspace" and then
   select "libpng.dsw".

1) On the main menu Select "Build | Set Active configuration". 
   Among the configurations beginning with "libpng" select the 
   one you wish to build (the corresponding "zlib" configuration
   will be built automatically).

2) Select "Build | Clean"

3) Select "Build | Rebuild All".  Ignore warning messages about
   not being able to find certain include files (e.g., m68881.h,
   alloc.h).

4) Look in the appropriate "win32" subdirectories for both "zlib"
   and "libpng" binaries.

This project will build the PNG Development Group's "official" versions of
libpng and zlib libraries:

   libpng12.dll          (default version, currently C code only)
   libpng12a.dll         (C + Assembler version)
   libpng12b.dll         (C + Assembler debug version)
   libpng12d.dll         (C code debug version)
   libpng12vb.dll       (version for VB, uses "stdcall" protocol)
   libpng12[c,e-m].dll   (reserved for official versions) 
   libpng12[n-z].dll     (available for private versions)
   zlib.dll             (default version, currently C code only)
   zlibd.dll            (debug version)
   zlibvb.dll           (version for Visual Basic, uses "stdcall" protocol)

If you change anything in libpng, or select different compiler settings,
please change the library name to an unreserved name, and define
DLLFNAME_POSTFIX and (PRIVATEBUILD or SPECIALBUILD) accordingly. DLLFNAME_POSTFIX
should correspond to a string in the range of "N" to "Z" depending on the letter 
you choose for your private version.

All DLLs built by this project use the Microsoft dynamic C runtime library
MSVCRT.DLL (MSVCRTD.DLL for debug versions). If you distribute any of the
above mentioned libraries you should also include this DLL in your package.
For a list of files that are redistributable in Visual C++ 6.0, see
Common\Redist\Redist.txt on Disc 1 of the Visual C++ 6.0 product CDs. 

5) For an example workspace that builds an application using the resulting
   DLLs, go to Libpng's contrib\msvctest directory and use it to build
   and run "pngtest".
