Module Specifications
Module specifications are central to many commands in sumo. They provide a powerful way to specify what modules and what versions to use.
A module specification is a string with a certain format. “Module specifications” means a list of these strings.
Sources of module specifications
Module specifications can come from three sources (not taking into account commands that read files):
The configuration file
This is a JSON file that contains settings for some or all of the commandline options. Modules are stored here with the key “module” as a list of strings.
The command line option “-m” or “–module”
The argument of this commandline option is a string that is a single module specification or a whitespace separated list of module specifications. In order to give more than one module specification you can also use this option more than once.
Arguments to a command
Some commands may be followed by arguments that must be module specifications.
Combining all module specifications
There are two possibilities, how module specifications from these three sources are combined:
Override mode
Each new set of module specifications overrides the previous one in this order:
- configuration file 
- command line options 
- command arguments 
Append mode
When command line option:
-A module
is given, module specifications from all three sources are combined into a single list in this order:
- configuration file 
- command line options 
- command arguments 
Processing the list
This list is then processed in order to get a list of module specifications where each module is mentioned just once. The order of modules is the same as they were given in the sources.
If a module is specified more than once the last specification overwrites the first one. Here is an example:
A_Module:Version1 B_Module:Version2 A_Module:Version3
becomes:
A_Module:Version3 B_Module:Version2
The format of a module specification
Module versions
A module can be specified in these forms:
| schema | meaning | 
|---|---|
| modulename | modulename | 
| modulename:versionspec | modulename and version | 
A versionspec defines the version the module should have.
Here are some examples:
| module specification | meaning | 
|---|---|
| ALARM | modulename “ALARM”, version not specified | 
| ALARM:R3-9 | modulename “ALARM”, version “R3-9” | 
| ALARM:-R3-9 | modulename “ALARM”, version “R3-9” or below | 
| ALARM:+R3-9 | modulename “ALARM”, version “R3-9” or above | 
Commands
These are commands for the merging process. Commands always start with a colon “:”, arguments to commands must be separated by colons. A command has this form:
:command{arguments}
where arguments is a colon separated list of arguments. Here are some examples how a command looks like:
| command | remark | 
|---|---|
| :clear | command “clear” which has no arguments | 
| :load:myfile | command “load” with argument “myfile” | 
Here are the known commands:
clear
This command clears the list of module specifications so far. For example this module specifications list:
module1 module2 :clear module3 module4
becomes:
module3 module4
rm
This command removes single module from the list. For example this module specifications list:
module1 module2 module3 :rm:module2
becomes:
module1 module3
load
This command loads module specifications from a JSON file. It must be followed by the name of the file. The JSON file must contain a key “module” which is a list of strings. These are then inserted at the place in the list where the command was found.
If for example file “mymodules” has this content:
{
    "module": [
        "AGILENT-SUPPORT:R0-11",
        "AGILENT:R2-3",
}
The module specification:
ASYN:R4-17-2 :load:mymodules EK:R2-2
becomes after merging:
ASYN:R4-17-2 AGILENT-SUPPORT:R0-11 AGILENT:R2-3 EK:R2-2
build
This command takes all module specifications from a build and inserts them in the llist of module specifications. It must be followed by the name of the build, the buildtag.
If for example, build “MLS-01” contains the modules “AGILENT-SUPPORT:R0-11” and “AGILENT:R2-3”, the module specification:
ASYN:R4-17-2 :build:MLS-01 EK:R2-2
becomes after merging:
ASYN:R4-17-2 AGILENT-SUPPORT:R0-11 AGILENT:R2-3 EK:R2-2