- Control the verbosity of Make
by setting the following Make variables (in order of precedence):
VERBOSE - print CMT messages and echo Make commands
QUIET - print CMT messages (default)
ECHO - echo Make commands
SILENT - no CMT messages or Make commands echoing
NOTE: In order to have user provided CMT documents (makefile fragments) controlled
by these switches, the CMT document author
- will not prefix command lines with @ (or prefix with macro $(silent))
- will print messages (if any) starting a separate command line with macro $(echo)
(see, e. g., mgr/fragments/tex)
- Control the prefix of the CMT messages
via the Make variable CMTMSGPREFIX (default value: #CMT--->)
- Correct the passing of (N)Make options for recursive (N)Make invocations
- Ensure CVS operations are retried in case of failure
- Optimise a number of internally used scripts by reducing the number of processes (used a patch from KELEMEN Peter)
- Correct the handling of the -with_version_directory
and -without_version_directory command line options
- Ensure the dependencies are re-calculated
whenever the included files are changed (the problem pointed out by Marco)
- Improve the handling of symlinks in the paths
- Do not rebuild any *.make files when Make variable QUICK is defined
This may be used to save time when developing a package code without changing configuration or source files dependencies
- Make use of the structuring style, when
configuring a package without a version.cmt file, to allow the use
of digits in package names of such packages structured without
a version directory. Improve diagnostic messages for this case
- Allow simultaneous/parallel builds for multiple binary tags
(used suggestions from Pere, Stefan, and Andrea):
- build all the makefiles in the binary tag directory
- implement a locking mechanism
The mechanism is in effect for CMT documents if
macros lock_command, unlock_command are set to non-empty strings (default).
Then, command ${lock_command} ${CONSTITUENT}${lock_suffix} is run by CMT to create the lock file in the package cmt directory
before the document ${CONSTITUENT} is built,
and command ${unlock_command} ${CONSTITUENT}${lock_suffix} is run by CMT to remove the lock file
after the document ${CONSTITUENT} is built.
The assumption is that while CMT applications, and libraries for different binary tags deal with different files,
documents for different binary tags may deal with (e. g., build, install)
the same files (e. g., header files). The locking mechanism is to ensure the documents are done one at a time
- Implement an optional header file filter mechanism to replace
header files matching a pattern with a stamp file when calculating files dependencies
The mechanism is in effect if there is a package which
- sets macro <package>_header_file_filter (to a regular expression)
- sets macro <package>_header_file_stamp to a path of an existing file
or file $(PACKAGE_ROOT)/cmt/cmt_header_file.stamp exists.
Then, each header file whose path matches one of the regular expressions (if several packages activate the mechanism)
is replaced with the corresponding stamp file in the dependency calculation and
its dependencies are not examined. This may reduce the dependencies calculation time significantly.
Example:
macro Boost_header_file_filter $(Boost_home)/include/boost-$(Boost_file_version)
macro Boost_header_file_stamp $(Boost_home)/include/boost-$(Boost_file_version)/boost/any.hpp
The dependencies of the source files including Boost header files will only include the any.hpp file path.