[-ChnqVv] [program [args ...]]
     penv -L [-D depth] [-d basedir] [-f config] [-o option] [-nqv]
     penv -p [-D depth] [-d basedir] [-f config] [-o option] [-nqv]
     penv -S [-D depth] [-d basedir] [-f config] [-m mode] [-o option] var=val
          ...
     penv -R [-D depth] [-d basedir] [-f config] [-o option] var ...


DESCRIPTION

     penv runs a specified program with an execution environment determined by
     the current working directory.  The execution environment is determined
     by invoking envdir(1) (or whatever environment processing program is
     specified by the envdir_p configuration file directive) on an environment
     directory.  The name of that directory is formed by taking the last com-
     ponents of the name of the current working directory and appending them
     to a base directory name.

     The various configuration options (see CONFIGURATION FILE and ENVIRONMENT
     below) may be set in several ways.  Values are obtained from (in that
     order):

     o command-line options;

     o environment settings;

     o the per-user configuration file;

     o the global configuration file.

     The following options are available:

     -c cmd  Perform a specified action.  A list of all available actions may
             be obtained by the help command.  By default, the exec action is
             performed.

     -C      Clean the environment before invoking the environmental proces-
             sor, thus running the specified program with only the environment
             supplied by the environment directory.

     -D depth
             Specify the number of components to be taken from the end of the
             name of the current working directory.

     -d basedir
             Specify an alternative base for forming the environment directory
             name.

     -f config
             Specify an alternative configuration file name.

     -h      Display a short help message and exit.

     -L      Do not run any program, only print the environment specified by
     -p      Do not run any program, only print the environment directory that
             would be used.  This does not take a program argument.  This is
             equivalent to the path command.

     -q      Quiet operation.  penv is even more quiet when more than one -q
             flag is specified.

     -R      Reset the specified variables, i.e. remove files by those names
             from the environment directory.  This is equivalent to the reset
             command.

     -S      Set the specified variables to the specified values, i.e. create
             files in the environment directory.  This is equivalent to the
             set command.

     -V      Display version information and exit.  When combined with one or
             more -v switches, penv also attempts to display information about
             its build environment.

     -v      Verbose operation.  penv is even more verbose when more than one
             -v flag is specified.


CONFIGURATION FILE

     The penv configuration file is parsed line by line.  Lines consisting of
     whitespace only are ignored.  Lines starting with the ``#'' character are
     considered comments and are also ignored.  All other lines must be in the
     format ``variable = value''.  If a variable has been assigned a value,
     either in a configuration file or by a command-line flag, any further
     assignments to it have no effect.  Thus, a command-line setting overrides
     any configuration file variables.

     penv currently recognizes the following variables:

     basedir       (string) The base for forming the environment directory
                   name.  Equivalent to (and overridden by) the -d command-
                   line flag.

                   Default: /var/db/penv.

     conffile      (string) The name of the configuration file to read.  This
                   variable has no effect when specified in the global config-
                   uration file, although it may be used in a per-user config-
                   uration file to override the default name of the global
                   one.  Equivalent to (and overridden by) the -f command-line
                   flag.

                   Default: /usr/local/etc/penv.conf.

     depth         (unsigned integer) The number of components to be taken
                   from the name of the current working directory.  Equivalent
                   to (and overridden by) the -D command-line flag.

     specified in the penv configuration file.  Variables set in the penv
     environment override the settings in the penv configuration file, but are
     in their turn overridden by command-line options.

     The environment variables honored by penv and the corresponding configu-
     ration file variables are as follows:

     PENV_BASEDIR   basedir

     PENV_CONFFILE  conffile

     PENV_DEPTH     depth

     PENV_ENVDIR_P  envdir_p


FILES

     ~/.penvrc
             The per-user configuration file.

     /usr/local/etc/penv.conf
             The default name for the penv configuration file.

     /var/db/penv
             The default base for forming the environment directory name.


SEE ALSO

     envdir(1)


BUGS

     o   The configuration file should contain more than variable assignments.
         The configuration parsing should probably be rewritten using a lex(1)
         / yacc(1) parser.

     o   There should be a build configuration mechanism and a library of
         helper functions - does this really build on anything besides
         FreeBSD?  asprintf(3) seems to be of somewhat limited availability,
         and at least some older versions of Slackware Linux seem to lack
         dirname(3) and basename(3).


HISTORY

     penv was written by Peter Pentchev in August 2001.  The name ``penv'' is
     derived from ``port environment'' - penv was originally intended to
     facilitate building FreeBSD ports with the same environment build set-
     tings over and over again.


AUTHORS

     Peter Pentchev <roam@ringlet.net>.

                                March 22, 2002

Man(1) output converted with man2html