|
|
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.