# Release notes

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

- v1r20p20070208
  - Disable the creation of `<project>_ROOT/CONFIG` variables for the PACKAGE_POLICY_FOR_`<project>` virtual package
- v1r20
  - Add support for the -import=PkgA,PkgB,... syntax:

        library Lalib   *.cpp -import=A,C

  - Extend the project syntax to support macros/tags. E.g.:

                project Project

                author garonne

                use P1 v1.*

                container container v1

                # Policy definitions used by all packages belonging to this project
                tag ATLAS

                macro use_build_strategy "without_installarea" \
                           ATLAS "with_installarea"

                macro use_setup_strategy "no_root" \
                               ATLAS "root"

                macro use_structure_strategy "with_version_directory" \
                               ATLAS "without_version_directory"

                build_strategy     $(use_build_strategy)
                setup_strategy     $(use_setup_strategy)
                structure_strategy $(use_structure_strategy)
                ...

  - Extend the strategy syntax for supporting variable, e.g.:

                macro use_strategy "without_installarea" \
                           ATLAS "with_installarea"

                build_strategy $(use_strategy)

  - Enable the package selection by native_version requirements:

        use foo -native_version=2.0

    To activate this feature, it is necessary to execute the `cmt config` in all packages to create for each eligible package a `cmt/native_version.cmt` file generated from the `<package>_native_version macro` and used for the package selection.
  - Add macros $(${GROUP}_pre_constituents), $(${GROUP}_post_constituents) for ordering targets executed by default during make execution.
  - Correct problems with the cxx pre-compiler parser for dealing with continuation character, space, etc. This problem created in some case the missing dependencies problem with previous releases (Thanks to Scott Snyder, see bug report).
  - Fix bugs with `-no_auto_imports`.
  - Return status code when executing make by the `"cmt make"` action name.
  - Correct the fact that a `"apply_tag"` protected by a private section is exported in all the client packages.
- v1r19
  - Add support for wildcarded project dependencies which Allow CMTPROJECTPATH overrides, e.g.: use project v*.
  - Support for the author keyword at the project level and the corresponding command is `cmt show project_author` to obtain it from command line.
  - Extend the strategy syntax for supporting variable, e.g.:

                macro use_strategy "without_installarea" \
                           ATLAS "with_installarea"

                build_strategy $(use_strategy)

  - Add a option to bypass the `cmt config` step after the cvs checkout: `cmt co -no_config ...`.
  - Add a new traversal mode for the cmtpath_pattern: `cmtpath_pattern_revert`. This is for constructing macro from current project to projects used (Atlas's request).
  - Disable warning about tags,e.g. CMTSITE. To re-enable them you should use cmt with the `-warnings` option.
  - Introduce the pre-compiler __APPLE__ macro for removing compilation warnings.
- v1r18p20061003
  - Correct problem with long word during compilation which reach make limit(Atlas's request).
- v1r18p20060606
  - Add a touch functionnality, e.g. `cvs co -t package`, during cvs checkout, this is mainly due that cvs keeps the file timestamps so that build tools, i.d. make, can not recognize it as "new". The "best" default behaviour is for it to set the filestamp to the checkout time.
  - Add the support on Linux/make for creating separate directory for libraries/constituents. To be Atlas compliant, this strategy is not built by default you should called explicitely the STRUCTURED_OUTPUT option, e.g. `make STRUCTURED_OUTPUT=1`. For more informations see the following Bug report.
  - Supress the n repeated entries in the CMTPATH after the first found occurence.
  - Add the cvs `"-f"` option which force cvs to ignore the user .cvsrc file during cvs command execution. It appears to create problem with the cmtcvs plugin and empty directories within cvs.
  - Translate symlinks for the `cmt show packages` command.
  - Bring a better support for the cmt checkout operation to bypass cvs weird behaviours, e.g. chekout localy a directory whithout any files inside creates nothing.
  - Correct problems when checkouting successively the same package with a different tag in the `without version directory`mode.
  - Compute the project of the package when expanding the template to fix packages with offset .
- v1r18p20051101
  - Add a new standard macro definition `$(q)` to hold a double quote. This is useful to define symbol values that contin doublequotes so as they are not filtered out by CMT. Typical usage is to cope with paths containing spaces on Windows. Various fixes have been done to improve the support of spaces in paths
  - The `pacman` source file for CMT now includes a constraint on the version of Pacman.
  - Added a mechanism to filter out bad items in a PATH symbol. This was causing troubles at `source setup` time
  - Added a protection against old protocols in the CVS pluggin
  - Better support of release-less projects on Windows
  - Added a protection against single level directories in CMTPATH
  - Added a protection against unexisting makefile fragments when running the `clean` target.
  - The definition of standard macros was not properly set when using the `cmt broadcast` command. Thus environment variables where badly preset.
  - Improve the automatic preparation of CMT releases
  - The internal `Makefile` structure has been cleaned up to remove obsolete internal targets (leading to confusing behavours in some cases)
- v1r18p20050901
  - Package creation (either from the `cmt create` or the `cmt co` commands is affected by the specification of the structuring style or of the structuring strategy.
  - Introduce a new strategy structure_strategy with only one value with/out_version_directory. This is mostly useful when installed in a project file to condition the behaviour of package creation afterwards
  - Support dependency building using external tools such as cpp -M. Fix the cmt_build_des.sh wrapper script to properly format the command output.
  - Perform the cmt checkout onto a project even if the basic directory structure of the project is already in place.
  - When no current project is defined the strategies are taken from the top project (eg obtained from the CMTPATH)
  - The include_dirs statement can now be hidden in a private section.
  - The include_dirs statement now accepts a macro reference as its value
  - Fix incorrect generation of XXXROOT and XXXCONFIG environment variables according to strategies
  - Protect against missing un/install targets
  - Fix a typo in cmt_uninstall_action.bat resulting in bad management of make cleanup on Windows
  - When creating a parent-less project, link it to exisiting top project(s) and upgrade strategies accordingly. Avoid confusions when mixing explicit CMTPATH, CMTPROJECTPATH and project files
  - Don't apply include_dirs when their expanded value is empty (avoid killing -I"")
  - Reset CMTPATH to empty when filling in CMTPATH from projects (avoid confusions and dupplications)
  - Fix a bug in dependency builder that missed some statements after a single line C++ comment
  - Cleanup unneeded duplicate path separators
  - Fix a bug in standard macro generation for projects
- v1r18p20050501
  - Fill in a pacman cache for CMT using pacman3 syntax. The Pacman package name is CMT.
  - Extend the recursive checkout mechanism to projects. The recursivity covers the use relationships between projects and propagates to packges of a project when the container package is specified in the project file.
  - Add the cvssubprojects query command to retrieve subprojects at a CVS repository level
  - Add a container statement in project file. The syntax is like use statements. It indicates that a container-like package exists in the project. This is useful for recursive checkout operations.
  - Migrate to a new version of the CVS pluggin. Now the protocol level is explicitly referenced when sending CVS requests via the pluggin. The new protocol gives the nature of the CVS module: is it a project or a package. The protocol level is specified in a dedicated macro in the CMT requirements file.
  - Fix the production of shared libraries on CYGWIN
  - Fix ambiguities between physical paths and logical paths in PATH variables management
  - Fix arg counting bugs in cvstags and cvssubpackages commands
- v1r18p20050401
  - Introduce a new bug reporting system: Trac
  - Accept HEAD or head as a valid version tag for packages
  - The path of CMT is removed from CMTPATH. Packages aside CMT are no longer reachable by default
  - Major restructuring of the project management and package localisation. The most important parameter becomes the search path CMTPROJECTPATH for projects. Then CMTPATH is deduced from the effective list of used projects. Project files and the dependency graph described by the project use statement becomes a central mechanism.
  - Introduce the management of releases for projects. Release must exactly match
  - Install a mechanism to detect unused tags from arguments or CMTSITE. This is performed during the setup generation
  - Source code management tansfered to SVN
  - Restructure the strategy management to make it fully generic.
  - Fix poor management of unknown commands
  - Suppress the export action for alias in setup.sh
  - Fix a problem in TMPDIR management with multi directory level
  - Fix a problem in cmt show packages
  - Fix bad parsing of various cmt commands
  - Fix an internal bug causing misfunction in the -import parameter of constituents.
  - Fix fragment for action to improve argument transmission
  - Fix pdb files for Visual about debug mode
- v1r18p20041201
  - 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