Since EasyBuild v3.7.0 a special-purpose generic easyblock named
ModuleRC is available,
which can be used to generate a (software-specific)
(as opposed to generating an actual module file).
For compatibility with the different modules tools supported by EasyBuild (see Modules tool (
.modulerc file is always generated in Tcl syntax (for now), regardless of the module syntax
that is used for module files. Only Lmod 7.8 (or later) supports
in Lua syntax.
ModuleRC easyblock supports including
module-version in the generated
which defines a so-called "symbolic version".
This can be used to install a "wrapper" for a particular module, which can be useful in the context
of dependencies. For example, it can be used to avoid depending on a specific version of
a particular software package by specifying the dependency only on the
<major>.<minor> version instead
(i.e., without including the "subminor" version, which usually corresponds to a bugfix release).
One particular example where this is employed is for
Java. Since the
2018b generation of
the Common toolchains, we use a wrapper for
Java/1.8), rather than
depending on a specific version (e.g.,
# specify dependency on Java/1.8 "wrapper", rather than a specific Java version dependencies = [('Java', '1.8', '', SYSTEM)]
This has a couple of advantages:
- it helps with avoiding version conflicts on the
Javadependency used by two (or more) otherwise independent module files;
- it allows to perform an in-place update of the
Javawrapper to a more recent
Java(bugfix) release in the blink of an eye, since it only involves re-generating a
.modulercfile (as opposed to performing actual installation and generating a module file); in addition, it doesn't require updating/re-generating existing module files that depend on the
Javawrapper (since the version of the wrapper does not change)
ModuleRC is a generic easyblock , it can also be employed to install module "wrappers" for dependencies