@need 3200

@node System Requirements
@chapter System Requirements

In order to use @code{arch}, there are some software tools that you must
already have available.  

@need 3200

@section Tools Used to Build arch

@strong{GNU Make} You will need @code{GNU Make} in order to build @code{arch}.


@strong{Standard Posix Shell Tools} The package framework (i.e., the
configure and build process) assumes that some standard Posix shell
tools are available on your system:

@example
@group
        awk     find    mkdir   sh      wc
        cat     fold    printf  tee     xargs
        chmod   grep    pwd     test
        date    head    rm      touch
        echo    ls      sed     tsort
@end group
@group
@end group
@end example

@emph{Note:}  On some systems, the program installed as @code{/bin/sh} is
@emph{not} a Posix shell (it may be a variant of @code{csh} or a very buggy
implementation of Posix @code{sh}).   On such systems, you should use a 
different shell to run @code{configure}, such as:

@example
@group
  % /usr/local/bin/bash ../configure --config-shell /usr/local/bin/bash
@end group
@group
@end group
@end example

@strong{The null Device} Your system must have @code{/dev/null}.  Information
directed to @code{/dev/null} should simply disappear from the universe.  As
a special "Green Software" measure, we have made provisions that
will enable your computers to convert that discarded information into
@emph{heat}, which you may use to supplement conventional heating
systems.




@need 3200

@section Tools Used Internally by arch

The remaining tools are used internally by arch itself.  They don't
necessarily need to be on your @code{PATH} -- when you build @code{arch} from
source, run the configure script:

@example
@group
       % ./configure --help
@end group
@group
@end group
@end example

@noindent
and

@example
@group
        % ./configure --help-options
@end group
@group
@end group
@end example

@noindent
for information about how to point @code{arch} to the correct versions.


@strong{GNU Tar} You must have @code{GNU tar}.  @code{arch} invokes @code{tar} internally to
pack and unpack files that it stores in archives.   It is important
that all versions of @code{arch} use a compatible version of @code{tar}, for
which purpose @code{GNU tar} was chosen.


@strong{GNU diff and GNU patch} After much deliberation, I've decided to go
ahead and rely on the @emph{@strong{GNU}} versions of @code{diff} and @code{patch}.
Specifically, you need a version of @code{diff} that can generate "unified
format" output (option @code{-u}) and a version of @code{patch} that
understands that format and that understands @code{--posix}.  (It would be
trivial to use "context diffs" and, thus, standard @code{diff} and
@code{patch}, however, unified diffs are much easier to read, and I'm
hoping that picking specific implementations of these critical
sub-components will help contribute to the long-term stability of
@code{arch}.)







