Annotation of 43BSD/contrib/spms/man/mann/spmsintro.n, revision 1.1.1.1

1.1       root        1: .TH SPMSINTRO 1P "1 July 1985"
                      2: .UC 4
                      3: .SH NAME
                      4: spmsintro - introduction to SPMS commands
                      5: .SH INTRODUCTION
                      6: The Software Project Management System (SPMS) is a system for the management
                      7: of medium- to large-scale software systems. SPMS provides, within the
                      8: UNIX environment, a number of commands which can greatly simplify many tasks
                      9: associated with program development and maintenance. SPMS does not
                     10: attempt to duplicate existing UNIX program development tools such as
                     11: .I make
                     12: or
                     13: .I SCCS,
                     14: but instead provides a way of coordinating these tools.
                     15: .PP
                     16: Each software package managed by SPMS is organized as a project. A
                     17: project is a collection of directories, each of which supports a
                     18: specific activity such as program development, testing, or
                     19: documentation. There is no restriction on the number of directories
                     20: belonging to a project. The directory layout is arbitrary, and can be
                     21: altered to reflect the changing needs of the package. Projects can be
                     22: nested to any level and a mechanism is provided for executing commands
                     23: globally over an entire project hierarchy.
                     24: .SH DESCRIPTION
                     25: .PP
                     26: \fBGetting Started\fR
                     27: .PP
                     28: Before using SPMS for the first time you must do the following \-
                     29: .PP
                     30: If you are a \fBC shell\fR, (\fIcsh\fR), user:
                     31: .IP 1.
                     32: Include the directory `/usr/new' in the
                     33: command search path. This is done by altering the PATH variable
                     34: in one of the startup files, `.cshrc'  or `.login', in the home directory.
                     35: .IP 2.
                     36: Add the following aliases to the `.cshrc' file
                     37: .br
                     38:        alias chproject  \'eval \`\^"chproject"  \\!*\`\^\'
                     39: .br
                     40:        alias pd  \'eval \`\^"pd"  \\!*\`\^\'
                     41: .IP 3.
                     42: Add the following command to the `.login' file
                     43: .br
                     44:        chproject  ^
                     45: .IP 4.
                     46: Convert the home directory to a project root directory by typing
                     47: .br
                     48:        /usr/new/mkproject  \-d  ^
                     49: .IP 5.
                     50: Execute the `.cshrc' and `.login' files by typing
                     51: .br
                     52:        source .cshrc
                     53: .br
                     54:        source .login
                     55: .PP
                     56: If you are a \fBBourne shell\fR, (\fIsh\fR), user:
                     57: .IP 1.
                     58: Include the directory `/usr/new' in the command search path. This is
                     59: done by altering the PATH variable in the startup file, `.profile', in
                     60: the home directory.
                     61: .IP 2.
                     62: Add the following command to the `.profile' file:
                     63: .br
                     64:        eval  \`chproject  \\^\^\`
                     65: .IP 3.
                     66: Convert the home directory to a project root directory by typing
                     67: .br
                     68:        /usr/new/mkproject  \-d  \\^
                     69: .IP 4.
                     70: Execute the `.profile' file by typing
                     71: .br
                     72:        .  .profile
                     73: .PP
                     74: \fBGlobal Operations\fR
                     75: .PP
                     76: The means for executing a command over an entire software package
                     77: is provided by the
                     78: .I pexec
                     79: command. By labeling each project directory according to the type of
                     80: activity that it supports, global operations can be restricted to
                     81: specific directories. These labels are known as \fItype labels\fR. In
                     82: some instances, the directories affected by a global command must be
                     83: processed in a particular order. This ordering is achieved by appending
                     84: priorities to type labels. For example, if the project directories
                     85: `include', `cmd1', `cmd2', `lib1', and `lib2' have the following
                     86: labels,
                     87: .PP
                     88: .nf
                     89: .ta 1.0i 2.5i
                     90:        include print.0, src, update.100, include
                     91:        cmd1    print.1, src, update.300, cmdsrc
                     92:        cmd2    print.1, src, update.300, cmdsrc
                     93:        lib1    print.2, src, update.200, libsrc
                     94:        lib2    print.2, src, update.200, libsrc
                     95: .DT
                     96: .fi
                     97: .PP
                     98: the entire software package can be updated by the command
                     99: .PP
                    100:        pexec  \-Tupdate  make update
                    101: .PP
                    102: in the order `include', `lib1', `lib2', `cmd1', `cmd2'.
                    103: .PP
                    104: Global commands can be made even more precise by using boolean expressions
                    105: on type labels to select project directories. The formal definition of
                    106: a boolean type label expression is
                    107: .LP
                    108: .ce
                    109: \fIE\fR \(-> \fIE\fB or \fIE\fR  | \fIE\fB and \fIE\fR  | \fBnot\fI E\fR  | ( E ) | \fBid\fR
                    110: .LP
                    111: where
                    112: .I E
                    113: is a boolean expression; \fBand\fR, \fBor\fR, and \fBnot\fR are
                    114: boolean operators; and
                    115: .B id
                    116: is a type label.
                    117: .B Or
                    118: and
                    119: .B and
                    120: are left-associative.
                    121: .B Or
                    122: has the lowest precedence, then \fBand\fR, then
                    123: .B not.
                    124: In terms of entering the boolean expression on the command line, `\fBor\fR'
                    125: is represented by the character `|', `\fBand\fR' by the character `&', and
                    126: `\fBnot\fR' by `!'. Since these characters, together with `(' and `)',
                    127: are meaningful to the command shell, it is good idea to enclose the
                    128: whole expression in quotes. However, even if this is done, the `!'
                    129: character must still be escaped by a backslash `\\' if it precedes a
                    130: type label to prevent it from being interpreted by the
                    131: .I csh
                    132: history mechanism. The command
                    133: .PP
                    134:        pexec  "\-Tprint\|&\|(libsrc\||\|cmdsrc)"  \'pr *.h *.c\'  | lpr
                    135: .PP
                    136: prints the source code in the command and library directories, but not
                    137: the directory containing header files. Alternatively,
                    138: .PP
                    139:        pexec  "\-Tprint\|&\|\\!include"  \'pr *.h *.c\'  | lpr
                    140: .PP
                    141: achieves the same result.
                    142: .PP
                    143: \fBProject Pathnames\fR
                    144: .PP
                    145: \fIProject pathnames\fR provide a convenient way for accessing a
                    146: particular directory or file within a project hierarchy. A project
                    147: pathname is formed by a succession of project names separated by `^'
                    148: characters, followed by the name of the directory or file. For instance,
                    149: to describe a file `main.c' in the project directory `work' in the project
                    150: `spms', the project pathname is
                    151: .PP
                    152:        ^spms^work/main.c
                    153: .PP
                    154: The project at the top of each user's project hierarchy is called the
                    155: \fIroot project\fR and is given the special name `^'. If a project
                    156: pathname begins with the character `^', it is interpreted relative
                    157: to the root project and is called an \fIabsolute project pathname\fR.
                    158: However, a project pathname not beginning with `^' is interpreted with
                    159: respect to the current working project and is therefore called a
                    160: \fIrelative project pathname\fR. The parent of the working project is
                    161: called `....' and the alternative name for the current project is
                    162: `...'.
                    163: .PP
                    164: Project pathnames may have a prepended ~\fIusername\fR, and an appended
                    165: regular pathname. For example, the pathname
                    166: .PP
                    167:        ~pjn^spms^work/old/main.c
                    168: .PP
                    169: represents the path to `main.c' located in the directory `old' in the
                    170: project `spms' owned by `pjn'.
                    171: .SH OPTIONS
                    172: The options to SPMS commands follow certain conventions. Keyword
                    173: options are uppercase (with the exception of the
                    174: .B \-f
                    175: option). The keyword can immediately follow the option, or be
                    176: separated by an arbitrary amount of space. The following options
                    177: are uniformly recognized.
                    178: .IP "\fB\-P \fIpdirname\fR"
                    179: Specify a project other than the current working project.
                    180: .IP "\fB\-T \fItypexpr\fR"
                    181: Only use project directories corresponding to boolean type label
                    182: expression,
                    183: .I typexpr.
                    184: .PP
                    185: Non-keyword options are lowercase (with the exception of the
                    186: .B \-D
                    187: option). The following options are standard.
                    188: .IP \fB\-q\fR
                    189: Quiet mode. Do not print titles.
                    190: .IP \fB\-r\fR
                    191: Apply the command recursively to subprojects.
                    192: .IP \fB\-x\fR
                    193: Trace and print, but do not execute.
                    194: .IP \fB\-D\fR
                    195: Print the expanded pathname when a project pathname is converted to a
                    196: regular pathname.
                    197: .PP
                    198: An option specified as {+\^\-}\fIx\fR means +\fIx\fR or \-\fIx\fR.
                    199: .SH "ENVIRONMENT VARIABLES"
                    200: .IP PROJECT \w'ROOTPROJECT'u+.5i
                    201: Absolute pathname of the current working project root directory.
                    202: This variable is set by
                    203: .I chproject.
                    204: .IP ROOTPROJECT
                    205: Absolute pathname of the root project directory. The default is the
                    206: user's home directory.
                    207: .SH FILES
                    208: .ta \w'ROOTPROJECT'u+.5i
                    209: \&...  Project link directory.
                    210: .DT
                    211: .SH "SEE ALSO"
                    212: mkmf(1), chproject(1P), mkproject(1P), pcp(1P), pd(1P), pdiff(1P), pexec(1P),
                    213: pfind(1P), pgrep(1P), phelp(1P), plog(1P), pman(1P), pmkdir(1P), pmv(1P),
                    214: ppd(1P), prmdir(1P), ptest(1P), pwp(1P), rmproject(1P)
                    215: 
                    216: Peter J. Nicklin  \fIThe SPMS Software Project Management System\fR
                    217: .SH AUTHOR
                    218: Peter J. Nicklin
                    219: .SH BUGS
                    220: At present, project pathnames are only recognized by SPMS commands.
                    221: .PP
                    222: Since the Bourne shell,
                    223: .I sh,
                    224: recognizes the `^' character as an alternative pipe
                    225: symbol, Bourne shell users must type `\\^' instead.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.