Man Linux: Main Page and Category List

NAME

       usepackage - Usepackage Environment Manager

SYNOPSIS

       See use(1).

DESCRIPTION

       Usepackage  is  an  environment  management program. It is based on the
       principle of packages - collections of executables that share a  common
       set  of  necessary  environment  variables,  such  as  PATH, MANPATH or
       LD_LIBRARY_PATH.

       For  each  given  package,  use  sources  the  appropriate  environment
       information  into  the  current  shell.  The environment information is
       specified in packages files, see PACKAGES.

       The usepackage executable is  the  backend  program  used  to  generate
       environment information suitable for sourcing into a running shell. The
       use frontend should be  invoked  to  actually  effect  changes  to  the
       environment, see use(1).

   OPTIONS
       -v     Output verbose information to the standard error stream.

       -s     Silence  warnings  for  un-matched packages. This is useful in a
              shell rc script when a package is known not to be  available  on
              all architectures that the shell is used on, see PACKAGES.

       -c     Force csh style environment output.

       -b     Force bourne shell style environment output.

       -f file
              Specify an alternate initial configuration file, see PACKAGES.

       -l     List  available packages and groups, see ANNOTATIONS and GROUPS.

PACKAGES

       Usepackage reads package environment information from the configuration
       file as follows:

   LOAD ORDER
       When  Usepackage starts up, it loads an initial configuration file, the
       name of this file may be given  on  the  command  line  (see  OPTIONS),
       otherwise  it  defaults  to  the  builtin  name  "usepackage.conf" (see
       FILES).  This file is located by searching along a path which  defaults
       to:

            /usr/etc:~:.

       This path may be overridden with the PACKAGES_PATH environment variable
       (see ENVIRONMENT).  A packages file may  contain  inclusion  directives
       which  cause  the sourcing of other files at given points. An inclusion
       directive looks like:

            (include file-name)

       The same location mechanism is used to  find  "file-name"  as  for  the
       initial configuration file. A package file name may also be given as an
       absolute file name or may be shell-style  user  directory,  tilde  (~),
       relative.

   SYNTAX
       A  package  file consists of comments, delimited by a leading hash (#),
       or package definitions of the form:

            package [arch [os [version [host [shell]]]]]
                 [<= requires ...] : setting [, setting ...] ;

       The package, arch, os, version, host, and shell  parts  may  be  simple
       shell-style patterns of the form:

       *              matches anything.

       foo*           matches "foo", "foobar" etc.

       {foo,bar}      matches "foo" or "bar".

       The  requires  list specifies the names of other packages which must be
       sourced into the environment before the settings for this  package  are
       processed.

       A  setting  is  either  a variable definition (as described below) or a
       section of text to be directly evaluated in the shell,  delimited  with
       <[ and ]>, for example:

            <[ /usr/local/bin/test-init ]>

       When  Usepackage  searches for the definition for a particular package,
       it compares each line in the packages file  against  the  name  of  the
       package  given  (package)  and  system-dependant  information  for  the
       execution host, as obtained  by  uname(2).   This  information  is  the
       hardware implementation (platform), the operating system name (os), the
       operating system version (version) and the hostname (host). Comparisons
       are  case-insensitive.  If  a match is obtained then the given variable
       definitions  and  script  sections  are   processed   to   modify   the
       environment.  A   variable  definition  may  have  one of the following
       forms:

                 var-name = "string"
                 var-name = path-list
                 var-name += path-list
                 var-name += "string"

       The first sets the given variable to a literal string value, the second
       sets  the given variable to a path list, the third prepends the current
       value of a variable with the given path list, and the fourth interprets
       the  literal string as a path list and prepends it to the current value
       of  the  variable.  Path  lists  are  colon  (:)  separated  lists   of
       directories  and  may  contain  shell-style  tilde  (~), user-relative,
       directories which will be expanded automatically (except when the  path
       list  is  given  as  a  literal  string).  When  pre-pending paths to a
       variable, duplicate paths are removed from the original value first.

       In addition, Usepackage can optionally test for the existence of  paths
       before  setting or adding them to variables. This is done with the test
       form of the above operators:

                 var-name ?= path-list
                 var-name ?+= path-list
                 var-name ?+= "string"

       These operate as per  the  definitions  above,  but  will  ignore  path
       components that don’t exist.

   GROUPS
       In  addition  to  the package definitions in a packages file, there may
       also be group definitions. These have the following syntax:

            group := package [, package ...] ;

       Usepackage searches for a given package  name  in  the  defined  groups
       first,  if the given name matchs a group name then the packages defined
       as part of that group are sourced  into  the  environment  together.  A
       group  definition  may  not  reference other groups and may not contain
       patterns.

   ANNOTATIONS
       In order to give useful package information to  the  user,  annotations
       may  be  placed  in  the packages file that give summaries of packages.
       These annotations have the form:

            >> name : "description" <<

       Usepackage collects these annotations together and displays  them  when
       called with the -l flag, see OPTIONS.  These annotations have no impact
       on the  package  mechanism  and  need  not  necessarily  be  beside  or
       correspond  to  the  package definitions (although this is the sensible
       way to arrange things).

   EXAMPLE
       The  following  fragment  of  a  packages  file  illustrates  the  main
       features:

            # GNU software is available everywhere:

            >> GNU : "The GNU project software" <<

            GNU :                     PATH += /usr/local/gnu/bin,
                                      MANPATH += /usr/local/gnu/man ;

            # CVS requires RCS which is found in the GNU package, but
            # is only available on SPARC Solaris machines:

            >> CVS : "Concurrent Versions System revision control" <<

            CVS sun4* SunOS 5.* <= GNU :
                                      CVSROOT = /usr/src/cvsroot,
                                      CVSEDITOR = "vi",
                                      PATH += /usr/local/cvs/bin,
                                      MANPATH += /usr/local/cvs/man ;

            # User bin directories (Solaris will run SunOS 4 binaries):
            # (Only added to the path if the directories actually exist)

            >> user : "User’s own programs" <<

            user sun4* SunOS :        PATH ?+= ~/bin/sun4 ;
            user sun4* SunOS 5.* :    PATH ?+= ~/bin/solaris ;
            user alpha OSF :          PATH ?+= ~/bin/alpha ;

            # Special function for zsh:

            >> zsh-function : "Special zsh function" <<

            zsh-function * * * * zsh :
                  <[ hello() { echo "Hello World!"; } ]> ;

            # include standard packages:

            (include packages.standard)

            # security hole:

            dot :                     PATH += . ;

            # groups:

            user-setup := standard, user ;
            programmer-setup := standard, CVS, user, dot ;

       Note the use of Operating System version numbers to distinguish between
       SunOS 4 and Solaris (SunOS 5), the use of "sun4*" to match the multiple
       different  platform versions of SPARC machines (sun4m, sun4c, etc.) and
       the fact that package "user" on a SPARC Solaris machine will match both
       of  the first two lines of the "user" package section, resulting in the
       "solaris" directory and the "sun4" directory being added into the PATH.

       Assuming  the  appropriate  shell  setup  script has been sourced - see
       use(1) - then the following command  will  cause  the  CVS  environment
       (including the GNU environment) to be sourced:

            $ use CVS

       Note that on a DEC Alpha machine, this will generate a warning like:

            $ use CVS
            warning: no match for package ‘CVS’ on this host.

       In  a shell script which is executed on a number of different platforms
       (such as the shell startup script). These warnings may be silenced (see
       OPTIONS).

FILES

       /usr/share/usepackage/usepackage.conf
                      The default master packages file.

       /usr/share/usepackage/use.csh
                      Shell setup for csh and derivatives.

       /usr/share/usepackage/use.bsh
                      Shell setup for bourne shell and derivatives.

       /usr/share/usepackage/use.ksh
                      Shell setup for ksh.

       /usr/bin/usepackage
                      The underlying Usepackage executable.

ENVIRONMENT

       Other  than  the reading and re-definition of environment variables for
       package setup, use also uses the following  environment  variables  for
       user configuration:

       PACKAGES_PATH  Colon-separated  path  list  giving  the  directories to
                      search for configuration files.  Shell-style  tilde  (~)
                      user-directory escapes are expanded.

       HOME           If  present  in the environment, this is used to provide
                      the expansion for the tilde (~) user-directory.

       SHELL          If present in the environment, the last  path  component
                      of  this  is  used  for  shell matching (see SYNTAX) and
                      detecting the style of environment output that should be
                      used (see OPTIONS).

COPYRIGHT

       Usepackage Environment Manager
       Copyright (C) 1995-2005  Jonathan Hogg

       This program is free software; you can redistribute it and/or modify it
       under the terms of the GNU General Public License as published  by  the
       Free  Software Foundation; either version 2 of the License, or (at your
       option) any later version.

       This program is distributed in the hope that it  will  be  useful,  but
       WITHOUT   ANY   WARRANTY;   without   even   the  implied  warranty  of
       MERCHANTABILITY or FITNESS FOR  A  PARTICULAR  PURPOSE.   See  the  GNU
       General Public License for more details.

       You should have received a copy of the GNU General Public License along
       with this program; if not, write to the Free Software Foundation, Inc.,
       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

SEE ALSO

       use(1),   csh(1),   sh(1),   ksh(1),  env(1),  environ(5),  getenv(3C),
       uname(1), uname(2)