$IdPath$

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 (CVS) Copy -- On UNIX
  * Generating ChangeLogs


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 deisgn 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 src/ 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.

  * 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

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 (CVS) Copy -- On UNIX
=============================================

Unlike a packaged distribution, the YASM CVS 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.  All of the following are GNU programs,
which are fairly portable in their own right:
  * automake (1.5 or newer)
  * autoconf (2.5 or newer preferred, 2.13 will still work)
  * m4
  * gettext
  * make (GNU preferred)
  * flex
  * bison
  * gcc
  * groff
  * perl (5.003 or newer)

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-dev".  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!

Generating ChangeLogs
=====================

YASM does not keep ChangeLog files, because they're redundant with the CVS log
entries.  But ChangeLog is an easier format to browse, so it's often handy to
generate a ChangeLog from the CVS log data.  You can do so with the script
cvs2cl.pl, from:

  http://www.red-bean.com/cvs2cl/

If you've never used it before, try invoking it like this:

  cvs2cl.pl -r -f Changes

Caution: don't use the default output filename (ChangeLog) in the top-level.
It's all too easy to check it into CVS by accident.  Someday we may fix this.
