Cygwin is a software package that sets up a Unix-like platform on a
Windows (win32) system.  Here are some specific things you need in
that environment to build and use Netpbm.  All these programs and
libraries are optional parts of the cygwin package.

   Programs: 
    1) gcc suite 
    2) binutils
    3) bash
    4) dlltool
    5) flex & byacc
    6) patch
    7) install
    8) rm, ln, cp and other file utilities
   Libraries:
    1) libtiff (cygtiff3.dll)
    2) libpng  (cygpng2.dll)
    3) libjpeg6b (cygjpeg6b.dll)
    4) libz (cygz.dll)

Find Cygwin at http://sources.redhat.com/cygwin/ .

One problem special to Windows is the common existence of directories
with space in their names (e.g. Windows 2000's "Documents and
Settings" directory.  (Such filenames are possible on non-Windows
systems, but are highly unconventional).  Don't try to build Netpbm in
such a directory or with files in such a directory.  It ought to work,
but it just doesn't.  And the error messages are far from helpful,
since those spaces completely change the nature of the commands that
include them.

One way to deal with this is to use the Cygwin "mount" facility to map
the Windows path "c:/Documents and Settings/aaa/bbb/cccc/Distributions" to
something short and friendly, such as /Distributions.


MINGW
------

You can use Cygwin on Windows to build Netpbm to run on Windows, but
have the Netpbm programs use Mingw code instead of Cygwin code.

Two reasons to do this:

  - We don't appear to have a way to statically link Cygwin library
    routines into Netpbm, so you have to have a Cygwin library (DLL)
    installed on a system as well as Netpbm to run Netpbm.

  - If you link Netpbm with a Cygwin library (some believe even if the
    program links itself to a Cygwin library at run time), you cannot
    distribute the resulting Netpbm, or any extension of your own,
    unless you distribute it under GPL.  That's because Cygwin is
    publicly distributed under GPL, so you probably got your
    permission to distribute Cygwin as part of Netpbm from GPL.  A
    condition of that permission was that you distribute everything you
    wrap around Cygwin under GPL as well.

Mingw is a small POSIX emulation library for Windows.  See 
<http://mingw.org>.

Mingw comes with tools you can use to build Netpbm with the Mingw
library, but you can just use the Cygwin tools if you prefer.
<http://www.delorie.com/howto/cygwin/mno-cygwin-howto.html> tells how.
There isn't much to it -- it's just a matter of telling the compiler to
search for include files and link libraries in a different place,
which is basically just a -mno-cygwin option and -I and -L options.

You can easily add the compiler options you need at the bottom of
config.mk after you create it with the automatic configurator
('configure').

Mingw does not have the Unix process management facilities (fork/wait,
etc.), so Netpbm will build without some of its function if you use
Mingw.  Areas of Netpbm that require those facilities are so arcane you
probably will not miss them.




