This directory contains project files for building zlib under various
Integrated Development Environments (IDE).

If you wish to submit a new project to this directory, you should comply
to the following requirements.  Otherwise (e.g. if you wish to integrate
a custom piece of code that changes the zlib interface or its behavior),
please consider submitting the project to the contrib directory.


Requirements
============

- The project must build zlib using the source files from the official
  zlib source distribution, exclusively.

- If the project produces redistributable builds (e.g. shared objects
  or DLL files), these builds must be compatible to those produced by
  makefiles, if such makefiles exist in the zlib distribution.
  In particular, if the project produces a DLL build for the Win32
  platform, this build must comply to the officially-ammended Win32 DLL
  Application Binary Interface (ABI), described in win32/DLL_FAQ.txt.

- The project may provide additional build targets, which depend on
  3rd-party (unofficially-supported) software, present in the contrib
  directory.  For example, it is possible to provide an "ASM build",
  besides the officially-supported build, and have ASM source files
  among its dependencies.

- If there are significant differences between the project files created
  by different versions of an IDE (e.g. Visual C++ 6.0 vs. 7.0), the name
  of the project directory should contain the version number of the IDE
  for which the project is intended (e.g. "visualc6" for Visual C++ 6.0,
  or "visualc7" for Visual C++ 7.0 and 7.1).


Current projects
================

visualc6/   by Simon-Pierre Cadieux <methodex@methodex.ca>
            and Cosmin Truta <cosmint@cs.ubbcluj.ro>
        Project for Microsoft Visual C++ 6.0
