@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.  These don't necessarily need to be on your
@code{PATH} -- @code{arch} can use a separate @code{PATH} if you need it to.


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


@strong{GNU Tar} You must have @code{GNU tar}.  More specifically, you must have
a version of tar that has options:

@example
@group
        -zcf F          to create a gzip-compressed tar file called
                        F, where F may be `-', meaning to write
                        the tar file to the standard-output stream
@end group
@group
@end group
@end example
@example
@group
        -zxf F          to extract files from a gzip-compressed tar
                        file called F, where F may be `-', meaning
                        to read the tar file from the standard-input
                        stream.  
@end group
@group
@end group
@end example
@example
@group
        -T -            This option reads a list of files from
                        standard input.  Only those files are 
                        read or written to the archive -- others
                        are ignored.
@end group
@group
@end group
@end example
@example
@group
        -m              When extracting files, don't restore
                        modification times.
@end group
@group
@end group
@end example

@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 understand @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}.)


@strong{Standard Posix Shell Tools} The package framework assumes that some
standard Posix shell tools are available on your system.  At the
moment, @code{sh} must be installed as @code{/bin/sh}, but this will be
corrected in a future release:

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

@strong{ordinary -exec extension to find} Your version of @code{find} must be able to
expand @code{@{@}} even in the context of a larger string.  For example:

@example
@group
        find . -exec echo ">>>@{@}<<<" ";"
@end group
@group
@end group
@end example

@noindent
should print a list of all files and directories, surrounded by '>>>'
and '<<<'.  @code{GNU find} has this property as do, I believe, most
implementations.  (Posix explicitly requires only that @code{@{@}} be
expanded in isolation, leaving undefined the meaning of @code{@{@}} when
embedded in a longer string.)


@strong{The null Device} Your system must have @code{/dev/null}.  Output directed
to @code{/dev/null} should simply disappear from the universe, in the usual
way.


@strong{The BSD column program -- maybe} If the program @code{column} is on your
@code{PATH} (or the path being used by @code{arch}), it should be a program
which formats its input into columns and, with the option @code{-x}, fills
columns before rows.  If this program isn't found, it won't be used.




