$Id$

If you are contributing code to the YASM project or trying to compile YASM
from a CVS checkout, please read this first.


======================
HACKER'S GUIDE TO YASM
======================

Table of Contents

  * What to Read
  * Building From a Working (Subversion) Copy -- On UNIX


What to Read
============

Before you can contribute code, you'll need to familiarize yourself with the
existing codebase, design, and internal interfaces.

Check out a copy of YASM from CVS (or grab a development tarball) so you can
look at the codebase.

Look at the design document (the online web version is probably the easiest to
read, because the design doc is written in DocBook and most people don't have
the SGML tools installed to process it).  This is the overall design document,
which gives you a high-level view of the assembler modular structure and how
the various components interface.  It also covers coding standards.

Within the libyasm/ directory, there's a bunch of header files with huge
comments.  If you read through these, you'll have a pretty good understanding
of the implementation details.  Or alternatively, read the online doxygen
generated documentation, which is autogenerated from the comments in these
files.

  * the core data structures: bytecode.h, section.h, expr.h, symrec.h
  * the module interfaces: preproc.h, parser.h, objfmt.h, optimizer.h, etc.
  * the error/warning system: errwarn.h

The frontends/ directory contains the programs that users will actually run.
Right now, this is only "yasm", but others may be added someday.

The modules/ directory contains all the loadable module source code, organized
by module type (preproc, parser, etc.).

YASM is written in ANSI/ISO C89 for maximum portability.  See the design
document for more details on portability considerations.  Several C files and
util.h provide functions that are standard on some machines but not available
on others.  The function and header checks are performed using GNU configure.


Building From a Working (Subversion) Copy -- On UNIX
====================================================

Unlike a packaged distribution, the YASM Subversion tree doesn't contain a
configure script nor any of the other generated files normally used in
configuration and building.  You have to regenerate these files in your local
copy before running configure.

Building in this fashion requires many more programs than YASM normally
requires in a packaged distribution.  Programs required:
  * automake (1.5 or newer)
  * autoconf (2.5 or newer)
  * m4
  * gettext
  * make (GNU preferred)
  * bison
  * gcc

To rebuild the manpages from the DocBook XML files, the program "xmlto" and
all of its dependencies are required.

To prepare your working copy for building, run:
  % ./autogen.sh

The autogen.sh script runs gettextize, aclocal, autoconf, autoheader, automake,
and finally runs "./configure --enable-maintainer-mode".  If an error occurs
during this process, something is wrong in your build configuration (such as
required tools missing or misconfigured).  After autogen.sh completes
successfully, use make to build YASM.  We recommend you use GNU make because
gettext seems to play better with it than with other make tools.  Use the
distcheck target of make to build a package.  If this doesn't complete
successfully, something is wrong in the source tree.  If you caused the
breakage, fix it or ask someone to help you fix it.  If you didn't cause it (it
happens with a new checkout), notify the developers!
