Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ spmsintro(1P) — Ultrix-32 2.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

chproject(1P)

mkmf(1P)

mkproject(1P)

pcp(1P)

pd(1P)

pdiff(1P)

pexec(1P)

pfind(1P)

pgrep(1P)

phelp(1P)

plog(1P)

pman(1P)

pmkdir(1P)

pmv(1P)

ppd(1P)

prmdir(1P)

ptest(1P)

pwp(1P)

rmproject(1P)

SPMSINTRO(1P)

NAME

spmsintro - introduction to SPMS commands

INTRODUCTION

The Software Project Management System (SPMS) is a system for the management of medium- to large-scale software systems. SPMS provides, within the UNIX environment, a number of commands which can greatly simplify many tasks associated with program development and maintenance. SPMS does not attempt to duplicate existing UNIX program development tools such as make or SCCS, but instead provides a way of coordinating these tools. 

Each software package managed by SPMS is organized as a project. A project is a collection of directories, each of which supports a specific activity such as program development, testing, or documentation. There is no restriction on the number of directories belonging to a project. The directory layout is arbitrary, and can be altered to reflect the changing needs of the package. Projects can be nested to any level and a mechanism is provided for executing commands globally over an entire project hierarchy. 

DESCRIPTION

Getting Started

Before using SPMS for the first time you must do the following −

If you are a C shell, (csh), user:

1.Include the directory ‘/usr/new’ in the command search path. This is done by altering the PATH variable in one of the startup files, ‘.cshrc’  or ‘.login’, in the home directory. 

2.Add the following aliases to the ‘.cshrc’ file
alias chproject  ´eval `"chproject"  \!*`´
alias pd  ´eval `"pd"  \!*`´

3.Add the following command to the ‘.login’ file
chproject  ^

4.Convert the home directory to a project root directory by typing
/usr/new/mkproject  −d  ^

5.Execute the ‘.cshrc’ and ‘.login’ files by typing
source .cshrc
source .login

If you are a Bourne shell, (sh), user:

1.Include the directory ‘/usr/new’ in the command search path. This is done by altering the PATH variable in the startup file, ‘.profile’, in the home directory. 

2.Add the following command to the ‘.profile’ file:
eval  `chproject  \^`

3.Convert the home directory to a project root directory by typing
/usr/new/mkproject  −d  \^

4.Execute the ‘.profile’ file by typing
.  .profile

Global Operations

The means for executing a command over an entire software package is provided by the pexec command. By labeling each project directory according to the type of activity that it supports, global operations can be restricted to specific directories. These labels are known as type labels. In some instances, the directories affected by a global command must be processed in a particular order. This ordering is achieved by appending priorities to type labels. For example, if the project directories ‘include’, ‘cmd1’, ‘cmd2’, ‘lib1’, and ‘lib2’ have the following labels,

includeprint.0, src, update.100, include
cmd1print.1, src, update.300, cmdsrc
cmd2print.1, src, update.300, cmdsrc
lib1print.2, src, update.200, libsrc
lib2print.2, src, update.200, libsrc

the entire software package can be updated by the command

pexec  −Tupdate  make update

in the order ‘include’, ‘lib1’, ‘lib2’, ‘cmd1’, ‘cmd2’. 

Global commands can be made even more precise by using boolean expressions on type labels to select project directories. The formal definition of a boolean type label expression is

E → E or E  | E and E  | not E  | ( E ) | id

where E is a boolean expression; and, or, and not are boolean operators; and id is a type label.  Or and and are left-associative.  Or has the lowest precedence, then and, then not.  In terms of entering the boolean expression on the command line, ‘or’ is represented by the character ‘|’, ‘and’ by the character ‘&’, and ‘not’ by ‘!’. Since these characters, together with ‘(’ and ‘)’, are meaningful to the command shell, it is good idea to enclose the whole expression in quotes. However, even if this is done, the ‘!’ character must still be escaped by a backslash ‘\’ if it precedes a type label to prevent it from being interpreted by the csh history mechanism. The command

pexec  "−Tprint&(libsrc|cmdsrc)"  ´pr *.h *.c´  | lpr

prints the source code in the command and library directories, but not the directory containing header files. Alternatively,

pexec  "−Tprint&\!include"  ´pr *.h *.c´  | lpr

achieves the same result. 

Project Pathnames

Project pathnames provide a convenient way for accessing a particular directory or file within a project hierarchy. A project pathname is formed by a succession of project names separated by ‘^’ characters, followed by the name of the directory or file. For instance, to describe a file ‘main.c’ in the project directory ‘work’ in the project ‘spms’, the project pathname is

^spms^work/main.c

The project at the top of each user’s project hierarchy is called the root project and is given the special name ‘^’. If a project pathname begins with the character ‘^’, it is interpreted relative to the root project and is called an absolute project pathname.  However, a project pathname not beginning with ‘^’ is interpreted with respect to the current working project and is therefore called a relative project pathname. The parent of the working project is called ‘....’ and the alternative name for the current project is ‘...’. 

Project pathnames may have a prepended ~username, and an appended regular pathname. For example, the pathname

~pjn^spms^work/old/main.c

represents the path to ‘main.c’ located in the directory ‘old’ in the project ‘spms’ owned by ‘pjn’. 

OPTIONS

The options to SPMS commands follow certain conventions. Keyword options are uppercase (with the exception of the −f option). The keyword can immediately follow the option, or be separated by an arbitrary amount of space. The following options are uniformly recognized. 

−P pdirname
Specify a project other than the current working project.

−T typexpr
Only use project directories corresponding to boolean type label expression, typexpr. 

Non-keyword options are lowercase (with the exception of the −D option). The following options are standard. 

−qQuiet mode. Do not print titles. 

−rApply the command recursively to subprojects. 

−xTrace and print, but do not execute. 

−DPrint the expanded pathname when a project pathname is converted to a regular pathname. 

An option specified as {+−}x means +x or −x. 

ENVIRONMENT VARIABLES

PROJECTAbsolute pathname of the current working project root directory.  This variable is set by chproject. 

ROOTPROJECTAbsolute pathname of the root project directory. The default is the user’s home directory. 

FILES

...Project link directory. 

SEE ALSO

chproject(1P), mkmf(1P), mkproject(1P), pcp(1P), pd(1P), pdiff(1P), pexec(1P), pfind(1P), pgrep(1P), phelp(1P), plog(1P), pman(1P), pmkdir(1P), pmv(1P), ppd(1P), prmdir(1P), ptest(1P), pwp(1P), rmproject(1P)
 
Peter J. Nicklin  The SPMS Software Project Management System

AUTHOR

Peter J. Nicklin

BUGS

At present, project pathnames are only recognized by SPMS commands. 

Since the Bourne shell, sh, recognizes the ‘^’ character as an alternative pipe symbol, Bourne shell users must type ‘\^’ instead. 

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026