1 |
<! Style Sheet Header>
|
2 |
<html>
|
3 |
<head>
|
4 |
<title>Requirements.html</title>
|
5 |
<body bgcolor="beige">
|
6 |
<! End Style Sheet Header -----------Insert Text Here --------------------->
|
7 |
<center>
|
8 |
<H1>SCRAM</H1>
|
9 |
<font color=red>S</font>oftware <font color=red>C</font>onfiguration,
|
10 |
<font color=red>R</font>elease <font color=red>A</font>nd
|
11 |
<font color=red>M</font>anagement
|
12 |
</center>
|
13 |
<hr>
|
14 |
This is the orignal list of functional requirements that the SCRAM project
|
15 |
is supposed to
|
16 |
address, along with the current status as regards implementation.
|
17 |
<p>
|
18 |
<table border=1>
|
19 |
<tr>
|
20 |
<th>
|
21 |
Requirement
|
22 |
</th>
|
23 |
<th>
|
24 |
Implementation Status
|
25 |
</th>
|
26 |
</tr>
|
27 |
<tr>
|
28 |
<td>
|
29 |
<li>Support Any Project Configuration
|
30 |
</td>
|
31 |
<td>
|
32 |
SCRAM provides a background functionality with a project interface. The
|
33 |
project interface allows tailoring the system to a wide range of project
|
34 |
structures through the use of SCRAM project classes.
|
35 |
Project classes are implemented currently as GNUmakefiles and are expected
|
36 |
to differ between projects. They are stored in the project, not in SCRAM.
|
37 |
</td>
|
38 |
</tr>
|
39 |
<tr>
|
40 |
<td>
|
41 |
<li>
|
42 |
Shall be easy to use. The user/developer should have
|
43 |
a very simple easily learnt interface.
|
44 |
</td>
|
45 |
<td>
|
46 |
Most frontline scram functionality is reached through the <b>scram</b> command.
|
47 |
Online help makes it easy to find out what commands are available and how
|
48 |
to use them. The exact functionality of some of the commands are somewhat
|
49 |
dependent on the project configuration. There is currently no easy way of
|
50 |
providing online help as to exactly what this is without relying on the
|
51 |
project administrator to document it carefully.
|
52 |
</td>
|
53 |
</tr>
|
54 |
<tr>
|
55 |
<td>
|
56 |
<li>
|
57 |
Shall provide an easy to use mechanism to select specific versions
|
58 |
of any build objects<p>
|
59 |
<li>
|
60 |
Shall obtain build objects from all available resources
|
61 |
transparently (e.g Local installation, Central Installation,
|
62 |
ftp archive etc. etc.)
|
63 |
</td>
|
64 |
<td>
|
65 |
SCRAM uses the popular idea of developer and common build areas. Selection
|
66 |
of specific files etc. is left to the projects versioning system (e.g. CVS).
|
67 |
<p>
|
68 |
Setting up specific external products etc. is handled with a special mechanism.
|
69 |
Every product has a special SCRAM description file which specifies such things
|
70 |
as library configurations, standard locations, environment requirements etc.
|
71 |
Once such a file exists then a <em>'scram setup url'</em> command
|
72 |
will download it into your development space and
|
73 |
set it up for your environment ready for use. <br>
|
74 |
Once it is tested and the tool is to be made available to the entire project,
|
75 |
its name/url should be added to the 'project requirements' file via the
|
76 |
<Require > tag.<br>
|
77 |
<em>Current limitations</em><br>
|
78 |
The url mechanism is limited to a simple toolname which corresponds to a file
|
79 |
in the current SCRAM toolbox area. <br>
|
80 |
Future developments will allow any url (e.g file:, http:) to be specified.
|
81 |
This will allow description files to be stored anywhere on the net for use
|
82 |
between different projects that use the same external product.
|
83 |
<p>
|
84 |
Specifying a product to be used once its installed can be done via the
|
85 |
BuildFile and a special <External name=<em>toolname</em>> tag. This will
|
86 |
soon be depreciated to simplyfy the interface to be replaced with the
|
87 |
<Use external=> tag.
|
88 |
</td>
|
89 |
</tr>
|
90 |
<tr>
|
91 |
<td>
|
92 |
<li>
|
93 |
Shall obtain required build objects in the most efficient manner
|
94 |
</td>
|
95 |
<td>
|
96 |
This requirement really
|
97 |
was designed to consider wether it would be quicker to build a local copy than
|
98 |
wait for a slow network connection when working against a central
|
99 |
installation. As yet no such intelligence is used - a local copy is always
|
100 |
assumed for the developers and a full build is required for any setup of a
|
101 |
remote development site.
|
102 |
</td>
|
103 |
</tr>
|
104 |
<tr>
|
105 |
<td>
|
106 |
<li>
|
107 |
Linking against central installations and external software shall
|
108 |
be transparent to the user.
|
109 |
</td>
|
110 |
<td>
|
111 |
Fully implemented.
|
112 |
</td>
|
113 |
</tr>
|
114 |
<tr>
|
115 |
<td>
|
116 |
<li>
|
117 |
A mechanism should be provided to allow a user to override default
|
118 |
build instructions. (e.g. Build a shared rather than an archive library
|
119 |
for a specific package and/or domain, try out new tools etc.)
|
120 |
</td>
|
121 |
<td>
|
122 |
All libraries and binaries can be built in debug, optimised or Insure++ modes.
|
123 |
This can be done in parrallel - no need for seperate development areas.
|
124 |
Which of these are to be built by default is specified in the project level
|
125 |
setup.
|
126 |
In the
|
127 |
directory corresponding to the library, overriding the default is simply a
|
128 |
matter of specifying the appropriate
|
129 |
<em>lib, lib_debug, lib_insure</em> arguments to the 'scram build' command.
|
130 |
Similarly for the binaries with <em>bin, bin_debug, bin_insure</em>.
|
131 |
<p>
|
132 |
Building from the top level, overriding defaults gets clumsy.
|
133 |
Things here need to be improved to provide a consistent interface.
|
134 |
</td>
|
135 |
</tr>
|
136 |
<tr>
|
137 |
<td>
|
138 |
<li>
|
139 |
Support builds on multiple "platforms" with multiple compilers and QA-tools
|
140 |
<p>
|
141 |
<li>
|
142 |
Shall be easily extendible to include new "Object Validation"
|
143 |
tools and SW process support tools
|
144 |
</td>
|
145 |
<td>
|
146 |
Multiple platforms are supported. Choice of compilers etc. is made at the
|
147 |
project level. Compiler types/QA tool are currently hardcoded in although
|
148 |
future developments will require a tool description file for each
|
149 |
so that any such tool can be easily installed/used with the scram setup
|
150 |
command as with any other external product.
|
151 |
</td>
|
152 |
</tr>
|
153 |
<tr>
|
154 |
<td>
|
155 |
<li>
|
156 |
shall allow for bug-fixing of major releases.
|
157 |
<p>
|
158 |
<li>
|
159 |
Shall support releases of movable "Taggged Objects"
|
160 |
(e.g. alpha beta etc.) i.e tags that can indicate different objects
|
161 |
with time.
|
162 |
<p>
|
163 |
<li>
|
164 |
support "Tagged Objects" with major, minor and
|
165 |
bug-fix versions
|
166 |
</td>
|
167 |
<td>
|
168 |
Any development area can be turned into a central release by the
|
169 |
co-ordinator with the <em>scram install</em> command. For each release
|
170 |
a 'requirements document' and 'Bootstrap file' are required to allow the
|
171 |
specify external requirements, environment, appropriate versions and
|
172 |
automated dowload/setup information.
|
173 |
<p>
|
174 |
SCRAM does not interfere in any way with the version control system and so
|
175 |
any tagging allowed by the system is allowed in SCRAM.
|
176 |
<br>
|
177 |
Currently the process of creating/validating these files is not yet automated.
|
178 |
</td>
|
179 |
</tr>
|
180 |
<tr>
|
181 |
<td>
|
182 |
<li>
|
183 |
Provide build support for the different levels of testing.
|
184 |
</td>
|
185 |
<td>
|
186 |
SCRAM does not dirrectly provide this, however it does allow the project to
|
187 |
be configured to allow this by defining its own test classes and how such
|
188 |
classes are called.
|
189 |
</td>
|
190 |
</tr>
|
191 |
<tr>
|
192 |
<td>
|
193 |
<li>
|
194 |
support multiple "release" types
|
195 |
(e.g user release, developer release) defined by the project
|
196 |
configuration.
|
197 |
</td>
|
198 |
<td>
|
199 |
This can be achieved through seperate combinations of
|
200 |
'BootStrap' and 'Requirements' files. It is envisioned that a better
|
201 |
mechanism than this will be developed.
|
202 |
</td>
|
203 |
</tr>
|
204 |
<tr>
|
205 |
<td>
|
206 |
<li>
|
207 |
All build objects in a public release must be made available to be
|
208 |
picked up by remote sites - i.e need a "distribution system"
|
209 |
</td>
|
210 |
<td>
|
211 |
Partially implemented, through the BootStrap file. Automated downloading
|
212 |
of binaries/libs etc is not yet implemented. Src code is available from
|
213 |
the version control system - automatically directed by the BootStrapFile.
|
214 |
</td>
|
215 |
</tr>
|
216 |
<tr>
|
217 |
<td>
|
218 |
<li>
|
219 |
provide automated release documentation
|
220 |
</td>
|
221 |
<td>
|
222 |
Partially Implemented. SGML documents are required to give functionality,
|
223 |
in particular in regards to the release is the Requirements Document. Converting
|
224 |
to HTML or other format would certianly be possible although not yet
|
225 |
implemented. Release logging is also intended although not yet implemented.
|
226 |
</td>
|
227 |
</tr>
|
228 |
<tr>
|
229 |
<td>
|
230 |
<li>
|
231 |
shall be time-efficiency optimised for the work of the
|
232 |
release manager.
|
233 |
</td>
|
234 |
<td>
|
235 |
SCRAM reduces the work of the release manager in a number of ways.
|
236 |
<p>
|
237 |
e.g. The build environment has to be stated explicitly in the SCRAM project
|
238 |
files - no more hunting down special features of some developers environment.
|
239 |
<p>
|
240 |
Works directly from the src tree as seen in the versioning system. No need
|
241 |
to create special units for each individual package.
|
242 |
<p>
|
243 |
Coming - automated BootStrap file generation and documentation
|
244 |
to describe the release.
|
245 |
</td>
|
246 |
</tr>
|
247 |
<tr>
|
248 |
<td>
|
249 |
<li>
|
250 |
shall allow a public release to be compiled for many different
|
251 |
platforms from a single platform. (e.g. the use of architecture
|
252 |
specific/Backward compatability switches in compilers)
|
253 |
</td>
|
254 |
<td>
|
255 |
Not yet. You still have to log onto each seperate machine and 'scram build'.
|
256 |
</td>
|
257 |
</tr>
|
258 |
<tr>
|
259 |
<td>
|
260 |
<li>
|
261 |
shall support arbitrary naming for sub-directories containing
|
262 |
header files
|
263 |
</td>
|
264 |
<td>
|
265 |
SCRAM does not place any limitations. This is defined at the project level.
|
266 |
</td>
|
267 |
</tr>
|
268 |
<tr>
|
269 |
<td>
|
270 |
<li>
|
271 |
shall support arbitrary combinations of extensions for header
|
272 |
and source files
|
273 |
</td>
|
274 |
<td>
|
275 |
SCRAM however has hardoded some extensions to match certain operations
|
276 |
(e.g .cc .C .cpp all mean C++ src code).
|
277 |
As the file extensions etc. are decided at the project level there is
|
278 |
not problem with the project level configuration files converting these
|
279 |
extensions to those required by scram with a little fancy GNUmakefile.
|
280 |
</td>
|
281 |
</tr>
|
282 |
<tr>
|
283 |
<td>
|
284 |
<li>
|
285 |
shall be independent of the subsystem/package structure
|
286 |
<p>
|
287 |
<li>
|
288 |
shall support a directory structure of at least two levels
|
289 |
</td>
|
290 |
<td>
|
291 |
All defined at the project level. SCRAM makes no limitations.
|
292 |
</td>
|
293 |
</tr>
|
294 |
<tr>
|
295 |
<td>
|
296 |
<li>
|
297 |
shall be able to handle O(1000) packages in a user friendly manner
|
298 |
</td>
|
299 |
<td>
|
300 |
No limitations provided by SCRAM although the tools scram uses
|
301 |
(e.g. compilers) may cause a problem.
|
302 |
</td>
|
303 |
</tr>
|
304 |
<tr>
|
305 |
<td>
|
306 |
<li>
|
307 |
Maintenance of the "central installation" should be automated as much
|
308 |
as possible
|
309 |
</td>
|
310 |
<td>
|
311 |
Download is a matter of clicking on a link in a web page with SCRAM.<br>
|
312 |
It then can then be installed with a single command. Removal is not fully
|
313 |
supported as yet (the SCRAM database needs updating automatically)
|
314 |
, although 'rm' wont hurt!
|
315 |
</td>
|
316 |
</tr>
|
317 |
<tr>
|
318 |
<td>
|
319 |
<li>
|
320 |
must produce executables with built in version (tag) information
|
321 |
</td>
|
322 |
<td>
|
323 |
Not yet
|
324 |
</td>
|
325 |
</tr>
|
326 |
<tr>
|
327 |
<td>
|
328 |
<li>
|
329 |
shall support Objectivity, and provide easy mechanisms to
|
330 |
accommodate developments of this technology
|
331 |
</td>
|
332 |
<td>
|
333 |
An Objectivity tool description file does exist for linking with libraries etc.
|
334 |
Although full Objectivity functionality is not yet provided, this file
|
335 |
is the place to develop it.
|
336 |
</td>
|
337 |
</tr>
|
338 |
<tr>
|
339 |
<td>
|
340 |
<li>
|
341 |
shall place libraries in a common directory
|
342 |
</td>
|
343 |
<td>
|
344 |
Yes
|
345 |
</td>
|
346 |
</tr>
|
347 |
<tr>
|
348 |
<td>
|
349 |
<li>
|
350 |
shall provide the means to use a mix of programming languages
|
351 |
</td>
|
352 |
<td>
|
353 |
A combination of file extensions and tool files should do the trick.
|
354 |
Currently only fortran and C++ supported though
|
355 |
</td>
|
356 |
</tr>
|
357 |
<tr>
|
358 |
<td>
|
359 |
<li>
|
360 |
shall provide switches to use QA tools such as static code
|
361 |
analysers, and run-time debuggers
|
362 |
</td>
|
363 |
<td>
|
364 |
Ultimately these will be automatically generated (and documented)
|
365 |
in accordance to the tool description file for that product. At the moment they
|
366 |
have to be hard coded in.
|
367 |
</td>
|
368 |
</tr>
|
369 |
<tr>
|
370 |
<td>
|
371 |
<li>
|
372 |
More than one version of SCRAM must be able to reside on any given
|
373 |
"site" at the same time.
|
374 |
</td>
|
375 |
<td>
|
376 |
Yes - currently controlled through the SCRAM_HOME variable.
|
377 |
<p>
|
378 |
Developments will allow a project to specify that it requires a specific scram version, which will be automatically acquired (if not already available)
|
379 |
and set up for use.
|
380 |
</td>
|
381 |
</tr>
|
382 |
<tr>
|
383 |
<td>
|
384 |
<li>
|
385 |
An automatic installation procedure
|
386 |
</td>
|
387 |
<td>
|
388 |
Yes, although will be improved (See previous entry).
|
389 |
</td>
|
390 |
</tr>
|
391 |
<tr>
|
392 |
<td>
|
393 |
<li>
|
394 |
shall be configurable, such that different "tools" in the same
|
395 |
class can be easily interchanged. (e.g repository management software)
|
396 |
<p>
|
397 |
<li>
|
398 |
SCRAM shall have "project" specific selection of any "tools"
|
399 |
and "external software" (including version specification).
|
400 |
(e.g. Compilers, Package Management, libraries, repository,
|
401 |
SCRAM Version)
|
402 |
</td>
|
403 |
<td>
|
404 |
Yes with tool description files/ project files and no dependence on any
|
405 |
particular source code management system SCRAM is highly configurable.
|
406 |
</td>
|
407 |
</tr>
|
408 |
<tr>
|
409 |
<td>
|
410 |
<li>
|
411 |
provide an automatic installation procedure for any
|
412 |
SCRAM maintained project
|
413 |
</td>
|
414 |
<td>
|
415 |
Just click on a web page to install the project!
|
416 |
<p>
|
417 |
If you have things in non standard places you may be asked a few questions as to where things are.
|
418 |
</td>
|
419 |
</tr>
|
420 |
<tr>
|
421 |
<td>
|
422 |
<li>
|
423 |
All "project" specific information is to be maintained in the
|
424 |
"project" repository
|
425 |
</td>
|
426 |
<td>
|
427 |
Yes. (with the exception of groups which are currently hardcoded).
|
428 |
</td>
|
429 |
</tr>
|
430 |
<tr>
|
431 |
<td>
|
432 |
<li>
|
433 |
SCRAM shall be easily portable to new "platforms"
|
434 |
</td>
|
435 |
<td>
|
436 |
SCRAM is written in Perl5, and does not invoke system calls directly except for
|
437 |
gmake. As such it should be runnable anywhere that Perl5 and gmake
|
438 |
is available. By
|
439 |
removing the hard coded compiler descriptions and replacing them with
|
440 |
tool files will aid porting futher.
|
441 |
</td>
|
442 |
</tr>
|
443 |
<tr>
|
444 |
<td>
|
445 |
<li>
|
446 |
shall not rely on "platform"/"tool" dependent features
|
447 |
</td>
|
448 |
<td>
|
449 |
SCRAM BuildFiles simply require you to describe what, not how to make
|
450 |
something. Thus the logical build is seperated from the physical implementation
|
451 |
details. Its then a question of providing the right tool to perform the function
|
452 |
requested in the BuildFile.
|
453 |
</td>
|
454 |
</tr>
|
455 |
<tr>
|
456 |
<td>
|
457 |
<li>
|
458 |
Locations of external software must be specified solely at the site of
|
459 |
installation.
|
460 |
<p>
|
461 |
<li>
|
462 |
Specification of "external software" locations shall be automated as
|
463 |
much as possible. The user must be informed clearly of any missing
|
464 |
product information.
|
465 |
</td>
|
466 |
<td>
|
467 |
Setup of tools will match the current system to the toolfile requirements.
|
468 |
Where automation fails the user will be asked where a product is installed
|
469 |
</td>
|
470 |
</tr>
|
471 |
<tr>
|
472 |
<td>
|
473 |
<li>
|
474 |
SCRAM must provide a mechanism to specify "external software"
|
475 |
requirements and default configurations.
|
476 |
<p>
|
477 |
<li>
|
478 |
A project must explicity specify all external requirements for any
|
479 |
given "platform", for any given "release"
|
480 |
</td>
|
481 |
<td>
|
482 |
Yes through the requirements document
|
483 |
</td>
|
484 |
</tr>
|
485 |
<tr>
|
486 |
<td>
|
487 |
<li>
|
488 |
must be able to support multiple "projects" on the same machine
|
489 |
</td>
|
490 |
<td>
|
491 |
Yes - individual projects are self contained.
|
492 |
</td>
|
493 |
</tr>
|
494 |
<tr>
|
495 |
<td>
|
496 |
User must be able to see the project resources made available
|
497 |
through SCRAM
|
498 |
</td>
|
499 |
<td>
|
500 |
Once a project is installed it is entered into a SCRAM database. The
|
501 |
<em>scram list</em> command will show all the available projects installed
|
502 |
which are available to the user. SCRAM also allows database linking so that
|
503 |
scram project installations on remote sites can
|
504 |
also be made available over a shared file system.
|
505 |
</td>
|
506 |
</tr>
|
507 |
</table>
|
508 |
|
509 |
<! Style Sheet Footer ---------------Do not change anything after this line-->
|
510 |
<hr>
|
511 |
<table border=1 width=100%>
|
512 |
<td align=left>
|
513 |
<a href=mailto:Christopher.Williams@cern.ch
|
514 |
>Chris Williams</a>
|
515 |
</td>
|
516 |
<td align=center>
|
517 |
Last Updated Tue Aug 22 16:37:41 2000
|
518 |
</td>
|
519 |
<td align=right><a href=/cgi-cmc/pagestat>Show Stats</a>
|
520 |
</td>
|
521 |
</table>
|
522 |
</body> </html>
|
523 |
<! End Style Sheet Footer>
|