|
|
1.1 root 1:
2:
3:
4: SPMSINTRO(1P) UNIX Programmer's Manual SPMSINTRO(1P)
5:
6:
7:
8: NAME
9: spmsintro - introduction to SPMS commands
10:
11: INTRODUCTION
12: The Software Project Management System (SPMS) is a system
13: for the management of medium- to large-scale software sys-
14: tems. SPMS provides, within the UNIX environment, a number
15: of commands which can greatly simplify many tasks associated
16: with program development and maintenance. SPMS does not
17: attempt to duplicate existing UNIX program development tools
18: such as _m_a_k_e or _S_C_C_S, but instead provides a way of coordi-
19: nating these tools.
20:
21: Each software package managed by SPMS is organized as a pro-
22: ject. A project is a collection of directories, each of
23: which supports a specific activity such as program develop-
24: ment, testing, or documentation. There is no restriction on
25: the number of directories belonging to a project. The direc-
26: tory layout is arbitrary, and can be altered to reflect the
27: changing needs of the package. Projects can be nested to any
28: level and a mechanism is provided for executing commands
29: globally over an entire project hierarchy.
30:
31: SPMS can be fitted to existing software systems. It retains
32: the full capabilities of the UNIX environment with unres-
33: tricted access to UNIX tools. As a result, software packages
34: developed using SPMS do not depend on the system for their
35: survival and can be ported to versions of UNIX that do not
36: support SPMS.
37:
38: DESCRIPTION
39: Getting Started
40:
41: Before using SPMS for the first time you must do the follow-
42: ing -
43:
44: If you are a C shell, _c_s_h, user:
45:
46: 1. Include the directory `/usr/new' in the command search
47: path. This is done by altering the PATH variable in one
48: of the startup files, `.cshrc' or `.login', in the
49: home directory.
50:
51: 2. Add the following aliases to the `.cshrc' file
52: alias chproject 'eval `"chproject" \!*`'
53: alias pd 'eval `"pd" \!*`'
54:
55: 3. Add the following command to the `.login' file
56: chproject ^
57:
58: 4. Convert the home directory to a project root directory
59: by typing
60:
61:
62:
63: Printed 6/22/83 5/20/83 1
64:
65:
66:
67:
68:
69:
70: SPMSINTRO(1P) UNIX Programmer's Manual SPMSINTRO(1P)
71:
72:
73:
74: /usr/new/mkproject -d ^
75:
76: 5. Execute the `.cshrc' and `.login' files by typing
77: source .cshrc
78: source .login
79:
80: If you are a Bourne shell, _s_h, user:
81:
82: 1. Include the directory `/usr/new' in the command search
83: path. This is done by altering the PATH variable in the
84: startup file, `.profile', in the home directory.
85:
86: 2. Add the following command to the `.profile' file:
87: eval `chproject \^`
88:
89: 3. Convert the home directory to a project root directory
90: by typing
91: /usr/new/mkproject -d \^
92:
93: 4. Execute the `.profile' file by typing
94: . .profile
95:
96: Global Operations
97:
98: The mechanism for executing a command over an entire
99: software package is provided by the _p_e_x_e_c command. By label-
100: ing each project directory according to the type of activity
101: that it supports, global operations can be restricted to
102: specific directories. These labels are known as _t_y_p_e _l_a_b_e_l_s.
103: In some instances, the directories affected by a global com-
104: mand must be processed in a particular order. This ordering
105: is achieved by appending priorities to type labels. For
106: example, if the project directories `include', `cmd1',
107: `cmd2', `lib1', and `lib2' have the following labels,
108:
109: include print.0, src, update.100, include
110: cmd1 print.1, src, update.300, cmdsrc
111: cmd2 print.1, src, update.300, cmdsrc
112: lib1 print.2, src, update.200, libsrc
113: lib2 print.2, src, update.200, libsrc
114:
115: the entire software package can be updated by the command
116:
117: pexec -Tupdate make update
118:
119: in the order `include', `lib1', `lib2', `cmd1', `cmd2'.
120:
121: Global commands can be made even more precise by using
122: boolean expressions on type labels to select project direc-
123: tories. The formal definition of a boolean type label
124: expression is
125:
126:
127:
128:
129: Printed 6/22/83 5/20/83 2
130:
131:
132:
133:
134:
135:
136: SPMSINTRO(1P) UNIX Programmer's Manual SPMSINTRO(1P)
137:
138:
139:
140: _E -> _E or _E | _E and _E | not _E | ( E ) | id
141:
142: where _E is a boolean expression; and, or, and not are
143: boolean operators; and id is a type label. Or and and are
144: left-associative. Or has the lowest precedence, then and,
145: then not. In terms of entering the boolean expression on the
146: command line, or is represented by the character `|', and by
147: the character `&', and not by `!'. Since these characters,
148: together with `(' and `)', are meaningful to the command
149: shell, it is good idea to enclose the whole expression in
150: quotes. Even if this is done, the `!' character must still
151: be escaped by a backslash `\' if it precedes a type label to
152: prevent it from being interpreted by the _c_s_h history mechan-
153: ism. The command
154:
155: pexec "-Tprint&(libsrc|cmdsrc)" 'pr *.h *.c' | lpr
156:
157: prints the source code in the command and library direc-
158: tories, but not the directory containing header files.
159: Alternatively,
160:
161: pexec "-Tprint&\!include" 'pr *.h *.c' | lpr
162:
163: achieves the same result.
164:
165: Project Pathnames
166:
167: _P_r_o_j_e_c_t _p_a_t_h_n_a_m_e_s provide a convenient way for accessing a
168: particular directory or file within a project hierarchy. A
169: project pathname is formed by a succession of project names
170: separated by `^' characters, followed by the name of the
171: directory or file. For instance, to describe a file `main.c'
172: in the project directory `work' in the project `spms', the
173: project pathname is
174:
175: ^spms^work/main.c
176:
177: The project at the top of each user's project hierarchy is
178: called the _r_o_o_t _p_r_o_j_e_c_t and is given the special name `^'.
179: If a project pathname begins with the character `^', it is
180: interpreted relative to the root project and is called an
181: _a_b_s_o_l_u_t_e _p_r_o_j_e_c_t _p_a_t_h_n_a_m_e. However, a project pathname not
182: beginning with `^' is interpreted with respect to the
183: current working project and is therefore called a _r_e_l_a_t_i_v_e
184: _p_r_o_j_e_c_t _p_a_t_h_n_a_m_e. The parent of the working project is
185: called `....' and the alternative name for the current pro-
186: ject is `...'.
187:
188: Project pathnames may have a prepended ~_u_s_e_r_n_a_m_e, and an
189: appended regular pathname. For example, the pathname
190:
191:
192:
193:
194:
195: Printed 6/22/83 5/20/83 3
196:
197:
198:
199:
200:
201:
202: SPMSINTRO(1P) UNIX Programmer's Manual SPMSINTRO(1P)
203:
204:
205:
206: ~pjn^spms^work/old/main.c
207:
208: represents the path to `main.c' located in the directory
209: `old' in the project `spms' owned by `pjn'.
210:
211: OPTIONS
212: ENVIRONMENT VARIABLES
213: PROJECT Absolute pathname of the current working
214: project root directory. This variable is
215: set by _c_h_p_r_o_j_e_c_t.
216:
217: ROOTPROJECT Absolute pathname of the root project direc-
218: tory. The default is the user's home direc-
219: tory.
220:
221: FILES
222: ... Project link directory.
223:
224: SEE ALSO
225: chproject(1P), mkmf(1P), mkproject(1P), pcp(1P), pd(1P),
226: pdiff(1P), pexec(1P), pfind(1P), pgrep(1P), phelp(1P),
227: plog(1P), pman(1P), pmkdir(1P), pmv(1P), ppd(1P),
228: prmdir(1P), ptest(1P), pwp(1P), rmproject(1P)
229: Peter J. Nicklin _T_h_e _S_P_M_S _S_o_f_t_w_a_r_e _P_r_o_j_e_c_t _M_a_n_a_g_e_m_e_n_t _S_y_s_-
230: _t_e_m
231:
232: AUTHOR
233: Peter J. Nicklin
234:
235: BUGS
236: At present, project pathnames are only recognized by SPMS
237: commands.
238:
239: Since the Bourne shell, _s_h, recognizes the `^' character as
240: an alternative pipe symbol, Bourne shell users must type
241: `\^' instead.
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261: Printed 6/22/83 5/20/83 4
262:
263:
264:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.