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