|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.