# Release notes

> Notation
> - New features
> - Bug fixes
> - Internal management

- v1r18p20041101
  - Suppress the completely unused makefile strategy
  - Really apply the project specific setup strategy to control the generation of ROOT or CONFIG env. variables.
  - Change default build strategy to `without_installarea`
  - ${CMTROOT} is no longer an automatic part of the CMTPATH. Nor the current package automatically defines an entry in the CMTPATH search list. However a feature partly compensates this evolution: the current project (i.e. the current package area, where the developer stands) is autmatically detected when its project file exists (i.e. when its cmt/project.cmt file exists). For instance, this suppresses the need to set CMTPATH when working in one single project.
  - The general cmt command parsing mechanism has been revisited and now "actions" are considered as extended cmt commands and no longer need the "cmt do <action>" syntax. One can directly use "cmt <action>" when the action does not conflict with internal cmt commands.
  - Command line arguments are transmitted to "actions" now through the new standard "cmt_args" macro
  - Really force the settings of all Env. variables before running internal cmmands through broadcast, run or do commands.
  - The "cmt run" command transmits all its arguments to the launched action
  - Revisit the production of dependency files, to consider the changes made to the configuration in general in addition to the usual source changes. This consists in generating one stamp file per source, touched when its contents change rather than when recomputing the dependencies.
  - Better protections for CMTPATH entries
  - Major internal restructuring of the CMT package. Internal sources are now in ../source, ../src only contains publicly exported configuration files, fragments are in ../mgr/fragments. This is for constructing a really autonomous binary kit for CMT (eg for Fink) (without needing to export two kits)
  - Now produce the last revision date of the CMT documentation. Insert the complete version tag rather than just the base version tag.
  - Suppress the systematic production of bundles on Darwin machines. This must now be done explicitly.
  - The algorithm for commpressing paths with ../ patterns now takes into account the presence of ${xxx} expressions that cannot be reduced. It also better handle various patterns that used to produce failures.
  - A global checking of the configuration is performed first when running Make
  - Incompatible major ids in the version numbers are now managed like the minor id, ie. the decision is taken in a similar way. The usual error message is displayed but this is no longer fatal, and a decision is taken
- v1r16p20040901
  - Introduce the support of SLC3 (Scientific Linux) platforms
  - Trigger the reconstruction of the dependency makefile fragment from a change in the <package>_setup.make, ie from any change in tags, uses or CMTPATHs
  - `CMTBIN` now follows a new convention on Unix `uname`-`uname -m` to differentiate among Linux platforms.
  - Introduce a new -strict option to the cmt expand model to support model files freely formatted. This implied securing the user defined model elements by the `cmts` or `cmtv` name space keywords. `cmts:xxx` indicates a scalar modelling element `xxx` meant to be expanded only once. `cmtv:yyy` indicates a vector modelling element `yyy` meant to be expanded once per item in the vector of values.
  - Better management of temporary file generation. Now support the standard TMPDIR environment variable to redirect temporary locations.
  - Apply the new GPL-like licence officially provided by CNRS-CEA-INRIA
  - Use stderr instead of stdout to display error and warning messages. Mainly to better expose messages in the source setup operations
  - Protect against source files not found (avoid infinite loops in make)
  - Better management of the build strategy on installation area to generate various automatic macros or sets (installarea_linkopts, PATH, LD_LIBRARY_PATH, etc...)
  - Revisit the package scan algorithm to improve the detection of directory structure of packages as well as their version tags.
  - Compress the path definitions (ie compress the ../xxx patterns) and use the compressed paths everywhere
- v1r16p20040701
  - Better generation of .def files for DATA
  - fix a bug that impacted on the order of compatible use requests with different wilcarded specifications
- v1r16p20040527
  - Generate the `target_${CONSTITUENT}` tag to trigger configuration control per target. This feature is only activated when the new `-target_tag` option is specified to a constituent. Specific tag makefiles are then generated for those targets. This tag is activated either when `make <target>` or `cmt do <action>` is run.
  - Add a section on package semantics in the documentation
  - The `apply_tag` keyword now accepts macro expansion for its argument.
  - Add the support for Enterprise Linux
  - Create automatic tags from `cmt_hardware` `cmt_system_version` and `cmt_compiler_version`
  - Add a filtering script to keep 3 digits instead of 2
  - Start the implementation of a centralized log message facility
  - Implement a `READONLY` mode to Makefiles to generate all intermediate files in `/tmp/CMT_*` rather than in `../cmt`
  - Associate a dedicated project with CMTHOME and CMTUSERCONTEXT to manage strategies
  - Set the macro `shlibsuffix` for Win32
  - Use /bin/pwd instead of the raw pwd in various CMT scripts for Unix
  - Fix misunderstanding of of version specification of the form v1r2p (ie without a trailing number)
  - Explicitly close the scope sections at the end of requirements files
- v1r16
  - Offer an [x]emacs mode for editing requirements files
  - Permit macro expressions in the `tag` statement
  - Possibility to specify additional `mount_filters` in `.cmtrc`
  - Introduce new regexp-based remove operations for symbols `macro_remove_regexp`, `set_remove_regexp` and `path_remove_regexp`
  - Add `-n` and `-v` options to `cmt cvs` commands to support simulation and verbose modes
  - Ensure that the `constituents` macro is always private
  - Introduce support for projects associated with package areas, i.e. one project per item in `CMTPATH`. Possibility to setup strategies per project. Project definitions stored in a new `cmt/project.cmt` top level file. New `<package>_project` standard macro. And associated pattern templates.
  - Make `CMTINSTALLAREA` a macro instead of a set
  - Suppress dependency computation when the `make QUICK=1` option is used
  - New action concept to support simplified shell action definition. Action is an extension of the generic symbol mechanism (like macros), thus defining an action uses the same syntax as macros. Actions are triggered with `make` or `cmt do`
  - public and private section can be ended by a new keyword `end_public` `end_private`. Ending keywords switch back to the previous scope active before the most recent opening keyword
  - Can use a pattern name as a plain CMT keyword. I.e. the `apply_pattern` keyword is optional except to resolve ambiguities
  - Generate part of the standard macros before reading the requirements file
  - Lots of internal optimisations checked with `valgrind` and `gprof`
  - Only set non empty environment variables
  - Fix bad definition of `<PACKAGE>VERSION`
  - Add dependency to all stamps file to trigger rebuild of shared libraries
  - Add dependency to all requirements file to trigger rebuild of applications
  - Suppress install area cleanup action from cmt config and cmt setup
  - Improved syntax checking on constituents
  - Fix construction of paths when symlinks exist along pwd
  - Added various protections for bad pattern syntaxes
- v1r14p20031120
  - Add a new standard macro $(<group>_dependencies)to specify global dependencies for a group
  - Add support for bundles on Darwin platforms
  - Consider symlinked paths in CMTPATH entries
  - Always setup cmtpath patterns even if the current installation area is undefined
  - Provide a generic pacman manifest file for CMT. All instances of the "<version>" pattern need to be substituted by the effective version of CMT to make it a real pacman file as follows:

        sed -e 's#[<]version[>]#'`cmt -quiet version`'#g' $CMTROOT/mgr/CMT.pacman

- v1r14p20031027
  - Fix a bug in the bootstrap mechanism to define CMTINSTALLAREA
- v1r14p20031022
  - Add the possibility to specify exclusion files when installing directories in Installation Area (on windows only)
  - Fix a bug : CMTINSTALLAREA symbol has to be defined before all other symbols in set_standard_macros
  - Few fixes on nmake flavour of install area mechanisms
  - Generate <package>_cmtpath and <package>_offset also for current package
  - Fix warning messages that confuse csh when environment variables are not defined
- v1r14p20031014
  - Fix a problem in broadcast operation for handling return status 2 (caused to unexpectedly break the loop in some cases)
  - Force auto_imports to On when context is unspecified (internal)
  - Stop trying to make use of PWD
  - Fix a bug in internal incomplete expansion of macros
  - Fix a bug in consistency checks of PWD vs CMTINSTALLAREA
  - Convert $(cmtpath) and $(offset) macros to $(package_cmtpath) and $(package_offset)
  - Add dependency list for constituent makefile similar to the constituent target (force the same build order)
  - Fix a bug in use graph internal management
  - Fix setup script calling mechanism in no_version style
  - Add a -k=<regexp> argument for selection patterns of constituent sources.
  - Support wildcarded suffixes (*.*) in constituent sources
  - Standardize the output format of show uses (make it reliable for user scripts)
- v1r14p20030811
  - Trailing slashes on offset specification in use statement were causing troubles. Now they are properly handled.
  - The broadcast pattern as well as the standard macro <cmtpath> is now renamed <package_cmtpath> to avoid confusion with the CMTPATH variable on Windows.
  - Make use of ${PWD} when available to acquire the value for "cmt show pwd"
  - Add or refresh tuning for CYGWIN and for LynxOS
  - Work around a limitation of some old version of the C++ compiler on LynxOS
  - Improve the display of incompatible use specifications.
  - Dynamically create the CMTDownload.html web page to really reflect what is available when installing the CMT release on the primary CMT web site.
  - Setup.bat scripts on DOS are now relocatable wrt heterogeneous file systems (AFS, DFS, etc...)
- v1r14p20030620
  - introduce a generic "Unix" tag for all Unix platforms. Both Linux, HP-UX, LynxOS, alpha, ... do validate Unix
  - hide the make_fragments declaration in private sections. This was not true previously. A make_fragment declaration installed in a private section will now be hidden to clients.
  - convert ${} into $() syntax for tag makefiles on Windows. This actually reverts to a feature of an old CMT version which had disappeared. This was causing a problem since the ${} syntax is not understood by nmake
  - add a command "cmt show use_paths <target>" to display all possible paths to the target package. This is useful to understand how a given package is reached, for instance when it is desired to cut the use relationship and make it private somewhere in the graph.
  - add a command "cmt show cycles" to display circular dependencies in the use graph.
  - provide a binary RPM for CMT itself (only for redhat 7.2 distribution). It is downloadable from the usual Download page and provide a complete installation of CMT (including make fragments, binary, etc..). It is a relocatable RPM (install it using the --relocate option). (See the install WEB page for complete notice)
  - Add an extended script to retrieve information about Linux version (cmt_linux_version.sh). It supports Redhat, Debian, Suse. It is used to compute the cmt_system_version macro (contributions from Clark McGrew and Wim Lavrijsen)
  - The setup scripts for Windows now use %TEMP% instead of %HOMEDRIVE%%HOMEPATH% to store temporary files (contributions from Pere Mato and Florence Ranjard)
  - Add the --public and --private global options for cmt commands, to control whether the use graph traverses or not the private sections:

        > cmt --public ...

    only sees public uses (default behavior for most commands but not for cmt broadcast and cmt show uses which traverse the private sub graphs)

        > cmt --private ...

    forces the traversal of private subgraphs. This is already the default behavior for cmt show uses and for cmt broadcast, but can now be applied to any CMT command.
  - A global pattern specifying private sections did not really generate private definitions