# CMTDownload

You can download the sources of the version v1r8 of CMT or prebuilt binaries for some plateforms :

DEC-alpha (OSF1 V4.0 878 alpha - cxx)
Linux-i686 (Linux 2.2.13 i686 - g++)
i386_linux22 (Linux 2.2.13 i686 - g++)
hp9000s735 (HP-UX B.10.20 A 9000/735 - aCC)
hp9000s780 (HP-UX B.10.20 A 9000/780 - aCC)
Sun (SunOS papou1 5.7 Generic sun4u sparc SUNW,Ultra-4)
VisualC (NT4.0 - Visual C++)
LynxOS-PowerPC (LynxOS 2.5.1 PowerPC - g++)

# The changes for this version

## New features

1. ### append, prepend and remove are available for sets as well

   It is now possible to specify set_append, set_prepend and set_remove similarly to the macro equivalents. One should be aware with this respect that appending and prepending strings to set definitions is done without any separator (as for macros but conversely to what happens for paths where a path separator is assumed). Therefore extensions to sets should explicitly include for instance space characters when required.

2. ### Order of clean targets

   The default clean target is now triggering the set of <constituent>clean targets but in the reverse order of the specification order. This is to account for intermediate source file generation.

   Therefore if the three constituents A, B and C are declared, requesting a gmake clean would launch Cclean, Bclean and Aclean in that order.

   This new feature applies to groups through the <group>clean target.

3. ### Cleaning old makefile fragments using cmt config

   The cmt config command now cleans up all previous makefile fragments, ie. files suffixed with .make or .nmake (possibly generated using other versions of CMT).

4. ### Generation of expanded setup scripts

   It is possible to produce tag-specific expanded versions of the setup scripts (taking the form <tag>.[c]sh) through the specialized `make` targets csh and sh. The resulting scripts only contain environment variable and alias assignments, and the calls to the setup scripts declared in the requirements.

5. ### New command to list the include_dirs specifications

   The cmt show include_dirs command displays the current specification for include_dirs.

6. ### New command to list the pattern names

   The cmt show pattern names command displays names of all patterns (needed for shell completion mechanisms).

7. ### Search path automatically induced by current working area improved

   The search path addition (to CMTPATH) induced by the current package is now the higher parent directory which is not itself a CMT package. Therefore if one works in a package A which is located within another package B in our current development area, then the path addition will consider the development area rather than the context of the B package.

   This used to puzzle the -local option of the cmt broadcast command.

8. ### New generic facility for generating documents

   The new command `cmt expand model "<model text>"` provides a new generic facility for generating documents from a templated textual model. This facility introduces a (very primitive) support of XML syntax combined with the already existing and well known concepts or features of CMT that are:

   - make fragments
   - macro expansion
   .

   The model to be expanded may be as simple as a normal text (possible containing CMT macros enclosed as usual between `$(...)`, `${...}` or `%...%`), in which case this text is simply echoed (after the proper macro expansion according to their current definition available through the `cmt show macros` command), eg;

       > cmt expand model 'The current cppflags is $(cppflags)'
       The current cppflags is -KPIC -features=no%anachronisms -O3

   But in addition to this trivial expansion mechanism, the text may also include XML-like constructs enclosed in `<.../>`. In this case, the construct is expected to take the following format:

       <fragment-name variable=value variable=value .../>

   and will be interpreted as follows:

   - fragment-name is the name of a CMT (make) fragment, declared as usual in one of the requirements files, using the `make_fragment` keyword. This fragment will be expanded along the model text, after expansion of its internal variables.
   - variable=value assigns a value to a variable, meant to be expanded when the associated fragment is expanded. Several such variable assignments may be expressed in the XML-like construct
   - A fragment specified in the XML construct, may itself contain other similar XML construct. They will be recursively expanded.

   Associated with this new facility, a new document type named `generator`, provides its default minimal support in Makefiles. When used in a requirements file it must be customized therough the two following parameters:

   - `model=model-text` : gives the model text to be expanded.
   - `out=output-file-name` : gives the output file name to be generated

## Internal changes or bug fixing

1. The missing source files produced missing make fragments for documents (this had been already fixed for applications and libraries in previous releases). Now the make fragment is correctly instanciated although the corresponding source file is not available at generation time.

   This implies that the responsibility of detecting a missing file (or a mistyped source file name) is assigned to the build procedure rather than to CMT.

2. The make fragment containing the macro expansions (ie. <tag>.[n]make) is now unconditionally re-generated at each gmake session. The former behaviour was somewhat unspecified.

3. Completion for tcsh and zsh have been improved

4. Bug in Pattern::add : overridden patterns were not cleared

5. The cmt config command was not recursively getting the used packages (this was required to properly define all patterns)

6. The strategy for detecting and showing the syntax errors in the parser command line is more explicit and less aggressive.

7. The symbolic links to shared libraries now considers $(<package>_tag) rather than $(CMTCONFIG)

8. A new source file `cmt_model.cxx [.h]` has been added to handle the new model expansion facility.

9. The shared library builder script for Windows (`cmt_make_shlib.bat`) is protected against missing static library (which is the source for creating a shared library).

   The mechanism used to create such a shared library (on Windows) requires to define all exported symbols. Two scenarios are possible:

   - If the options provided (typically using the `${CONSTITUENT}_shlibflags` macro) includes a file named `*_dll.obj` then this module is expected to specify by any means those exported symbols.
   - Otherwise, a CMT feature `cmt build windefs` is able to create a `*.def` file containing the export definitions for all public symbols available in the original static library.

10. Two new queries have been added to the `CmtSystem` class:
    - `bool has_device (const cmt_string& path)`. It checks whether a file path begins with a Windows device specification.
    - `void get_cvs_root (cmt_string& cvsroot)` gets the current definition of the `CVSROOT` environment variable. This value is also queried from the `Software\CMT` registry key on Windows, when not found from the environment variable.

11. In `cmt_pattern.cxx`, the XML pattern `<.../>` is now protected against confusion with CMT patterns `<...[^/]>`

12. The internal buffers in `cmt_awk.cxx` have been expanded. In addition, a (warning) message is echoed when the buffers are exhausted (which should not happen in normal situations)

13. In `cmt_fragment` class, all copy functions have been replicated to fill in a `cmt_string` buffer rather than sending to standard output.

14. In `cmt_generator.cxx`, the `PACKAGE` variable (assigned to the current package name) is now provided to all Visual fragments (ie. for building dsp and dsw files)

15. In `cmt_cvs.cxx`, manage the file separator by `CmtSystem::file_separator ()` (to le cmt cvs actions operate in a Windows environment).

16. In `fragments/nmake/library` use `$(tag)` instead of `Win32Debug`

Last modified: Fri May 11 15:10:38 MET DST 2001