1. Installing NASM from source (Unix, MacOS X; Windows - Cygwin;
   Windows - MinGW; DOS - DJGPP)
2. Installing NASM from source (Windows - MS Visual C++)
3. Installing NASM from source (DOS, Windows, OS/2 - OpenWatcom)


1. Installing NASM from source (Unix, MacOS X; Windows - Cygwin;
   Windows - MinGW; DOS - DJGPP)
================================================================

Installing NASM is pretty straightforward on Unix or Unix-like systems
with a C compiler, Make, and standard shell tools installed, including
MinGW for Windows (with MSYS installed) and DJGPP for DOS with the
appropriate tools.  Perl is not required for compiling unmodified
sources from a tarball, but is required to build from git or for most
source modifications.

If you checked out source from git you will need to run autoconf to
generate configure, otherwise you don't have to.

$ sh autogen.sh

Then run configure to detect your platform settings and generate makefiles.

$ sh configure

You can get information about available configuration options by
running `sh configure --help`.

If configure fails, please file a bug report with detailed platform
information at:

    http://www.sf.net/projects/nasm/

If everything went okay, type

$ make

to build NASM, ndisasm and rdoff tools, or

$ make everything

to build the former plus the docs.

You can decrease the size of produces executables by stripping off
unnecessary information, to achieve this run

$ make strip

If you install to a system-wide location you might need to become
root:

$ su <enter root password>

then

$ make install

optionally followed by 

$ make install_rdf

Or you can 

$ make install_everything

to install everything =)


Thats it, enjoy!


2. Installing NASM from source (Windows - MS Visual C++)
========================================================

The recommended compiler for NASM on Windows is MinGW
(http://www.mingw.org/), but it is also possible to compile with
Microsoft Visual C++ (tested with Visual C++ 2005 Express Edition.)

To do so, start the "Visual C++ Command Shell", go to the directory
where the NASM source code was extracted, and run:

> nmake /f Mkfiles/msvc.mak

We recommend MinGW over Visual C++ 2005 as we have found it to be more
up to date with regards to C99 compliance, and we are increasingly
using C99 features in NASM.


3. Installing NASM from source (DOS, Windows, OS/2 - OpenWatcom)
================================================================

NASM has been reported to build correctly with OpenWatcom 1.7 on the
Windows and OS/2 platforms.  In addition, it *should* work under DOS
with the DOS4GW DOS extender, although the NASM developers recommend
using DJGPP with the CWSDPMI DOS extender instead.

A WMAKE make file is provided:

> wmake -f Mkfiles\openwcom.mak <platform>

... where <platform> is "dos", "win32" or "os2".
