source: CMT/v1r14p20031120/doc/todo.html @ 1

Last change on this file since 1 was 1, checked in by arnault, 19 years ago

Import all tags

File size: 13.4 KB
Line 
1    <center><h1><b>ToDo list</b></h1></center>
2   
3    <blockquote>
4
5      <center><i>Users are welcome to contribute to this list, by sending
6      proposals to the <a href="discussion.html">discussion list</a>
7      </i></center>
8
9    </blockquote>
10    <br>
11    <hr>
12
13    <blockquote>
14
15      <center><table border>
16        <tr>
17          <td><center><i>Type</i></center></td>
18          <td><center><i>Feature</i></center></td>
19          <td><center><i>Status</i></center></td>
20        </tr>
21
22        <tr>
23          <td>Implemented</td>
24          <td><a href="#Support for unstructured directory organization">Support for unstructured directory organization</a></td>
25          <td>Implemented in v1r14 serie</td>
26        </tr>
27
28        <tr>
29          <td>Implemented</td>
30          <td><a href="#Management of versions of external software in Interface packages">Management of versions of external software in Interface packages</a></td>
31          <td>Implemented in v1r12p20020515</td>
32        </tr>
33
34        <tr>
35          <td>Bug</td>
36          <td><a href="#Calling source setup onto a standalone package">Calling "source setup" onto a standalone package</a></td>
37          <td>Fixed in v1r12p20020515</td>
38        </tr>
39
40        <tr>
41          <td>Implemented</td>
42          <td><a href="#Advanced tag management in the requirements file">Advanced tag management in the requirements file</a></td>
43          <td>Implemented in v1r14 serie</td>
44        </tr>
45
46        <tr>
47          <td>Implemented</td>
48          <td><a href="#Advanced tag management (2)">Advanced tag management (2)</a></td>
49          <td>Implemented in v1r14 serie</td>
50        </tr>
51
52        <tr>
53          <td>Proposed</td>
54          <td><a href="#A new concept for binary tag management">A new concept for binary tag management : the <b>project</b></a></td>
55          <td>No longer envisaged</td>
56        </tr>
57
58<!--
59        <tr>
60          <td>Foreseen|Bug|Proposed</td>
61          <td><a href="#">-</a></td>
62          <td>-</td>
63        </tr>
64-->
65
66      </table></center>
67
68    </blockquote>
69    <br>
70    <hr>
71    <h2>Foreseen</h2>
72    <blockquote>
73      <ol>
74        <li><i><a name="Support for unstructured directory organization"></a>Support for unstructured directory organization.</i>
75
76          <p>
77            It has been decided during the <a
78              href="workshop/minutes.html#structure">first CMT workshop</a> to study
79            the possibility to support, in addition to the conventional
80            directory structure, an alternate convention (with limited
81            control power) where the version directory would be absent.</p>
82         
83          <p>
84            In this scheme, the following package organization would
85            be permitted, in addition to the existing one:
86           
87          <blockquote>
88            <pre>
89&lt;package&gt;/cmt
90         /src
91         /...
92            </pre>
93          </blockquote>
94        </p>
95         
96          <p>
97            The version specification for this package could then be
98            optionally located inside the file
99            <tt>cmt/version.cmt</tt>. When found, this specification
100            would be used for version checks.
101          </p>
102
103          <p>
104            Each package would then individually select one or the
105            other structuring style. This selection being done in the
106            "cmt create" or the "cmt checkout" commands through either
107           
108          <ul>
109           
110            <li>one environment variable CMTSTRUCTURINGSTYLE,
111              taking the possible values:
112             
113              <ul>
114                <li>with_version_directory (<i>default value</i>)</li>
115                <li>without_version_directory</li>
116              </ul>
117            </li>
118
119            <li>or the new following options to the cmt command:
120              <ul>
121                <li>-with_version_directory (<i>default value</i>)</li>
122                <li>-without_version_directory</li>
123              </ul>
124            </li>
125          </ul>
126        </p>
127         
128          <p>The known drawbacks and limitations of this new structuring style are:
129          <ul>
130
131            <li>lack of systematic version checking possibilities
132            (since the version file is optional)</li>
133
134            <li>only one version of a given package is possible in the
135            context of a given CMT path</li>
136
137            <li>CVS actions may not be restricted to only one package
138            when sub-packages exist</li>
139
140          </ul>
141        </p>
142
143          <p>Strict backward compatibility is expected (implying that
144          the two structuring styles can always coexist)</p>
145
146          <p>A temptative implementation is currently achieved and
147          will be made visible after stabilization of the v1r12.</p>
148
149        </li>
150
151      <br>
152      <hr>
153      <li><i><a name="Management of versions of external software in Interface packages"></a>Management of versions of external software in Interface packages</i></li>
154
155      <p>As a follow up of discussions in the <a
156      href="workshop/minutes.html#last minute">CMT workshop</a>, it is
157      foreseen to support the new conventional macro
158      <i>&lt;package&gt;_native_version</i>. This macro will be
159      available to specify the exact value of the native version of
160      the associated package.</p>
161
162      <blockquote>
163        <pre>
164macro CLHEP_native_version "1.7.0.1"
165        </pre>
166      </blockquote>
167
168      <p>When specified, this native version will appear in the "cmt
169      show uses" output</p>
170
171      <blockquote>
172        <pre>
173...
174#   use CLHEP CLHEP-00-00-01 External (native_version=1.7.0.1)
175...
176        </pre>
177      </blockquote>
178
179<!-- Next item:
180
181      <br>
182      <hr>
183      <li><i><a name=""></a></i>
184
185-->
186
187    </ol>
188    </blockquote>
189   
190    <br>
191    <hr>
192    <h2>Known bugs</h2>
193    <blockquote>
194      <ol>
195        <li><i><a name="Calling source setup onto a standalone package"></a>Calling "source setup" onto a standalone package</i>
196
197          <p>When this operation is <i>not</i> done right in the
198          package directory this produces an error:</p>
199
200          <blockquote>
201            <pre>
202&gt; cd &lt;<i>somewhere</i>&gt;
203&gt; source setup.sh
204            </pre>
205          </blockquote>
206
207          works well, whereas:
208
209          <blockquote>
210            <pre>
211&gt; source &lt;<i>somewhere</i>&gt;/setup.sh
212            </pre>
213          </blockquote>
214
215          produces an error.
216
217          <p><i>(Note that this works well for a conventional package,
218          after a bug fix in v1r12)</i></p>
219
220          <p><b>Solution:</b></p>
221
222          <blockquote>
223            <i>
224              The setup.[c]sh and cleanup.[c]sh files are badly generated. The "cmt setup"
225              command requires an option "-pack=cmt_standalone"
226            </i>
227          <blockquote>
228
229        </li>
230
231<!-- Next item:
232
233      <br>
234      <hr>
235      <li><i><a name=""></a></i>
236-->
237
238      </ol>
239    </blockquote>
240   
241    <br>
242    <hr>
243    <h2>Possible improvements (to be discussed)</h2>
244    <blockquote>
245      <ol>
246        <li><i><a name="Advanced tag management in the requirements file"></a>Advanced tag management in the requirements file.</i>
247
248          <p>This concerns the possibility to manipulate the tag
249          associations, to add, remove association-tags or to clear
250          the association-tags</p>
251
252          <p>So far tags are defined in a requirements file by declaring associations with other tags</p>
253
254          <blockquote>
255            <pre>
256tag A B C
257            </pre>
258          </blockquote>
259
260          <p>The last revision of v1r12 (ie. v1r12p20020515)
261          introduced the iterative accumulation of those
262          associations. Therefore what is missing now is the
263          possibility to manage this list of associations, such as
264          with:</p>
265
266          <ul>
267            <li>tag_remove A B</li>
268            <li>tag_clear A</li>
269            <li>tag_apply A (<i>or apply_tag A ?</i>)</li>
270          </ul>
271        </li>
272
273        <br>
274        <hr>
275        <li><i><a name="Advanced tag management (2)"></a>Advanced tag management (2).</i>
276
277          <p>Another syntax evolution of the requirements file dealing
278          with tag associations is the possibility to use <i>tag
279          expressions</i> when specifying alternate symbol values.</p>
280
281          <blockquote>
282            <pre>
283macro_append cppflags "" \
284             Linux&debug " -g " \
285             WIN32&debug " /G "
286            </pre>
287          </blockquote>
288
289        <p>This would avoid the need to construct explicit tag mixture
290        associated with new tags.</p>
291
292        <p>Since tags are boolean values (a tag is active or inactive)
293        one considers <i>and</i> and <i>or</i> operations, with the
294        <b>&amp;</b> and <b>|</b> operators, with the obvious meaning
295        that "A&B" is true when both A and B are true.</p>
296
297      <br>
298      <hr>
299      <li><i><a name="A new concept for binary tag management"></a>A new concept for binary tag management : the <b>project</b></i></li>
300
301        <p>Binary tags can follow different conventions according to the
302        <i>sub-projects</i> where packages are defined. Currently,
303        <i>policy</i> packages are the preferred location where these
304        conventions are defined. However, policy packages are
305        submitted to the usual dependency relationship, and tag
306        associations are therefore freely transmitted across multiple
307        policy packages, leading to conflicts and ambiguities,
308        especially when packages from multiple and independent
309        sub-projects are simultaneously used.</p>
310
311        <p>
312          The concept of <b>project</b> is proposed to solve this
313          question, by making explicit the <i>context</i> for all
314          definitions that only belong to a given project, . The
315          following definitions and characteristics are proposed:
316        </p>
317
318        <ul>
319
320          <li>CMT defines one global project by default</li>
321
322          <li>
323            So far two CMT features are candidates for being scoped by the projects:
324            <ul><li>tags</li><li>patterns</li></ul>
325
326            <p>Other features (eg. macros, sets,...) will still be
327            normally transmitted in the use relationship</p>
328
329          </li>
330
331          <li>
332            A project is specified using the following new CMT statement:
333          <blockquote>
334            <pre>
335project &lt;project name&gt;
336            </pre>
337          </blockquote>
338          </li>
339
340          <li>
341            Once defined in a given package, a project becomes
342            <i>the</i> context project, and cannot be overridden by
343            used packages (which will specify their own context project).
344
345            <p>
346              The context project is persistent in the subsequent use
347              graph, unless another context project was specified
348              before
349            </p>
350
351            <p>
352              In the following example:
353            </p>
354
355            <img src="Images/Projects.jpg">
356
357            <p>
358              <ol>
359                <li>A is in the default project (ie CMT)</li>
360                <li>P1 defines the project P1</li>
361                <li>P2 defines the project P2</li>
362                <li>B and F directly and respectively connect to one project</li>
363                <li>C, D and E transitively connect to project P1</li>
364                <li>G is inside project P1 (rather than P2) since it is the <i>first</i> definition</li>
365              </ol>
366            </p>
367          </li>
368
369          <li>When one enters the requirements of a package, the
370          context project is always empty (ie. reset to the default
371          project)</li>
372
373          <li>The first "project" statement met along the use chain
374          defines the context project</li>
375
376          <li>When leaving a requirements, the context project is
377          persistent unless another one was already specified</li>
378
379          <li>Tags and patterns defined in the default project (ie. in
380          CMT) are visible in all projects</li>
381
382          <li>A package gets its tag associations and patterns from
383          its context project (and from the default project too)</li>
384
385          <li>Tag associations and patterns from other projects are
386          not visible nor active <i>by default</i></li>
387
388          <li>
389            A pattern or a tag defined in a project may be applied
390            even is the context project is different through the
391            following syntax:
392          <blockquote>
393            <pre>
394apply_pattern &lt;project name&gt;.&lt;pattern name&gt;
395apply_tag &lt;project name&gt;.&lt;tag name&gt;
396            </pre>
397          </blockquote>
398          </li>
399
400          <li>Every project is associated with a new standard tag macro
401
402          <blockquote>
403            <pre>
404&lt;project&gt;tag
405            </pre>
406          </blockquote>
407
408             And a new environment variable (with the same semantics as CMTCONFIG)
409
410          <blockquote>
411            <pre>
412&lt;PROJECT&gt;CONFIG
413            </pre>
414          </blockquote>
415
416             The project macro acts as the default value for all
417             $(&lt;package&gt;_tag) macros, and the project
418             configuration variable is the default for the project
419             macro. Ie. the following <i>defaults</i> settings are
420             considered (for any project and package) unless
421             explicitly specified through usual environment variables
422             or macro settings:
423
424          <blockquote>
425            <pre>
426&lt;PROJECT&gt;CONFIG=${CMTCONFIG}
427&lt;project&gt;tag=${&lt;PROJECT&gt;CONFIG}
428&lt;package&gt;_tag=$(&lt;project&gt;tag)
429            </pre>
430          </blockquote>
431
432          </li>
433
434          <li>
435             Primary tags are defined by CMT:
436
437             <ol>
438               <li>All values of <i>uname</i></li>
439               <li>Compilers (gcc, egcs, CC, cxx, KAI, VC, ...)</li>
440               <li>Compiler versions</li>
441               <li>Main build options (debug, optimized, profiled, ...)</li>
442             </ol>
443
444             Therefore all projects can be affected when a primary tag is activated.
445          </li>
446
447        </ul>
448
449<!-- Next item:
450
451      <br>
452      <hr>
453      <li><i><a name=""></a></i></li>
454
455-->
456
457      </ol>
458    </blockquote>
459
460    <hr>
Note: See TracBrowser for help on using the repository browser.