NAME | SYNOPSIS | DESCRIPTION | OPTIONS | GENERATION OPTIONS | CONFIGURATION FILES | COMMANDS | RESTRICTIONS | ATTRIBUTES | SEE ALSO
mkmerge is a host utility.
The mkmerge utility is used to merge several sub-trees of a spilt source tree into a target merged tree.
Source directories within the split tree can be populated with special files, named merge.rf (for merge rule files), which provide a number of directives for mkmerge, such as when and where to merge these directories and their subdirectories.
The mkmerge utility can be viewed as a recursive combination of cp, ln, mv and rm.
The default option for the merge uses absolute symbolic links. It is also possible to use relative symbolic links, hard links or copies.
During a merge, directories are examined recursively and merge.rf files analyzed. If no problems are encountered, , the real merge begins: directories, links and files are created as specified in the various merge.rf files found.
A merge.rf file is composed of lines that are evaluated one at a time. A status is associated with this file. This status evolves as the file is analyzed. Depending on its value at the end of the merge.rf file, the current directory will be merged or pruned. A merge.rf file may contain commands to describe how the current directory should be merged, where it will go, and when it will be merged. The MKMERGE_IGNORE environment variable can be used to specify a list of file suffixes that should be ignored during the merge process.
Leave true files untouched. The default is to overwrite files in the target directory.
Make copies instead of links. The default is to use symbolic links between the target directory and the source directories. This option causes mkmerge to copy files. Files are always exported (see the export command) with symbolic links.
Define a generation option. A generation option can take the form VAR or VAR=VALUE. These options can be tested in merge.rf files. The VALUE field may contain anything, but note that there are four values that have specific meanings. These are: "on" and "yes". These mean that VAR is set but has no value attributed to it. "off" and "no" mean that VAR is not set.
Same as the -d option
Read a master configuration file. Master configuration files contain option definitions, and target and source directories setting. Note that mkmerge is easier to use with a configuration file. Configuration files and command-line options accumulate: it is possible to use several configuration files in a command.
Display a help message.
Display a short description of the merge.rf language.
Continue after conflict. A conflict occurs when several files are to be linked to a single target file. See the command priority for a description of conflict resolution. By default, when a conflict occurs, mkmerge reports it and continues.
Stop after conflict. If this option is specified, mkmerge aborts in the case of conflicts.
Make hard links instead of symbolic links. Files are always exported (see export command) with symbolic links.
Do nothing. This flag is useful when testing merge.rf files.
Make relative symbolic links instead of absolute ones. Use this option when the path to the split tree depends on the point of view (for example, ClearCase or NFS). By default, future revisions of mkmerge will use relative links.
Specify a source directory.
Specify a target directory.
Set verbosity flags (default: cehg):
Display arguments
Display conflicts
Display directories created
Execute echo commands
Display information about groups
Display information about hidden files
Display links created
Display merge.rf status
Display low priority files
Display statistics
Display unused options
Reset verbosity flags.
For mkmerge, a generation option is an entity that may have a value. Generation options are set using the -d option or within a configuration file, and tested in merge.rf files. Every generation option except tree can only have a single value. The values of tree are the base names of the source directories.
A master configuration file is composed of several sections. Each section begins with "[sectname]" where sectname is the name of the section.
The mkmerge utility only uses the content of the [profile] section. The [profile] section is the default section; it defines the generation options.
The [profile] section contains lines of the form var=value which are equivalent to the command line option "-d var=value". Three values of var have specific meanings: include, merge_dir and tree. include=config_file is equivalent to the option "-f config_file" merge_dir=dir is equivalent to the option "-t dir" tree=dir is equivalent to the option "-s dir"
This section describes the commands which may be included within merge.rf files.
Each line beginning with a # is a comment. A command line has the following syntax:
command_name parameter-1 ... parameter-n
The status value can be one of three values: UNDEFINED (at the beginning of the file), TRUE or FALSE.
If the status is not FALSE (if it is either UNDEFINED or TRUE) at the end of the file, the directory will be merged.
There is a concept of current source directory and current target directory. In general, files in the current source directory will be merged in the current target directory. The current source directory and the current target directory are modified when mkmerge enters a new sub-directory. The current target directory can also be modified using the "move" command.
Available commands are:
define, echo, else, endif, error, exit, export, exportas, group, hide, if, ignore, import, module, move, option, priority, rename, run, subdirs and then.
These commands are divided into two groups: commands that can modify the status whatever it value, and commands that are executed only if the status is UNDEFINED or TRUE.
The following commands can be used to modify the status whatever its value:
This command allows the flags passed to mkmerge to be tested. If every result is true, the status will be set to TRUE. Otherwise, it will be set to FALSE if the status was UNDEFINED at the beginning of the file. After an "if" command, the status mechanism allows you to write logical or conditions using consecutive if statements. Tests can be defined as follows:
True if the flag var is set
True if the flag var is set and its value is val.
True if the flag var is not set
True if the flag var is not set or if its value is not val.
If the status if FALSE, then it is changed to TRUE. If the status if TRUE, it is changed to FALSE. If the status is UNDEFINED, it remains unchanged.
Terminate an if block
The following commands are executed only if the status is UNDEFINED or TRUE.
Adds the line flag to the defines.lst file located at the root of the merged tree. These flags will be used to set the DEFLIST variable of all make files, thus defining the default preprocessor flags list used for the compilation of any source file.
Adds the line flag=val to the options.lst file located at the root of the merged tree. These options are passed to all make files.
Displays a message. For best results, do not enclose messages between quotes.
Displays error_message and aborts the merge process.
Exits the current merge.rf and sets the status to FALSE; the current directory will not be merged and any sub-directories will be pruned.
Creates a symbolic link from the file path/file (path is relative to the root of the merged tree) to the file named file in the current directory. The file does not need to be created prior to using this command, it may be a file generated during system production.
This command will create a symbolic link from the file linkname (linkname is relative to the root of the merged tree) to the file named file in the current directory. The file does not need to be created prior to using this command, it may be a file generated during system production.
Adds file to the groupname group. A group is a set of files. Groups can be imported and exported. Groups are often used to import files whose names are not known into the current directory.
Causes files in the current directory and its sub-directories not to be merged. Unlike exit,hide does not stop the analysis of the current merge.rf. Hidden files can be imported.
Tells mkmerge not to merge file into the current directory. If file is a directory, it will not be entered. This command is often used in conjunction with the rename command.
Merges file into the current directory. The file must be either a relative path name or a group name.
Writes information to the file modules.lst. If rule is empty, the current target directory is added to the list of directories which are considered to belong to the modname feature.
If rule is not empty, the status of modname will be set to on when rules is true. The rule command has the same syntax as the if command.
Modifies the location of the current target directory. The path variable points to the current target directory.
Changes the priority of the current directory. Each file has a priority to be used when conflicts arise due to an attempt to merge several files at the same location on the merged tree. In such cases, the file with the higher priority will be merged. If two or more files have equal priority, mkmerge reports the conflict and doesn't merge the conflicting files. The priority command is used to increase the priority of the current directory and its sub-directories. If the n parameter is a signed value (+n or -n), the value is added to or subtracted from the current priority. Otherwise, the current priority is set to the value of the parameter. The priority of a file is calculated by taking the number of merge.rf files found from the root to the current directory, adding the priority of the current directory, and multiplying by 256.
Tells mkmerge to merge a file named file to a file named newname.
Saves the current target directory. Once the merge has been performed, mkmerge will spawn a shell that will execute command from the saved directory.
Adds dirname to the list of sub-directories that should be entered. By default, mkmerge enters all sub-directories; however, if the subdirs command has been used, only the sub-directories specified will be searched.
The ignore command does not work with groups.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | DESCRIPTION | OPTIONS | GENERATION OPTIONS | CONFIGURATION FILES | COMMANDS | RESTRICTIONS | ATTRIBUTES | SEE ALSO