A wrapper is the range EasyBuild will not write¶
A wrapper or .modulerc is the range EasyBuild will not write. The pin in the file stays exact.¶
A wrapper is the range EasyBuild will not write.¶
A wrapper is the range EasyBuild will not write in a recipe. The pin law in RecipeReader is still true.¶
Questions
What does a
ModuleRCeasyconfig install, if it installs no files?When is a wrapping-dependency the honest answer, and when is it a lie about a pin?
What does
-Dprint in EasyBuild 5 if-ris not also passed?
What you will be able to do
Read a
ModuleRCeasyconfig and say which module name a user loads, and which module actually provides the files.Tell a wrapping-dependency from a version pin, and say which one A pin is for one generation still forbids in a recipe.
Predict what
eb pkg.eb -Dlists in EasyBuild 5, versuseb pkg.eb -Dr.
Before this page
A pin is for one generation: a dependency version is a pin. This page is the site-side escape.
The robot:
-Dis how a plan is read. EasyBuild 5 changed what that flag implies.
A pin covers one generation.
It stays applicable to an easyconfig.
dependencies list does not contain >=1.14.6.
The site already provides HDF5 1.14.6.
Many recipes require 1.14.5.
Rebuilding those recipes is the pin that matches what was built.
An alternative approach uses wrapping.
Wrapping resides outside the requesting recipe.
ModuleRC writes a.modulerc and nothing else¶
The generic ModuleRC easyblock inherits from EasyBlock.
The configure, build and install steps are empty.
It writes a software-specific .modulerc.
module load HDF5/1.14.5-gompi-2025a
HDF5 1.14.6 loads when the site declares the newer module as a compatible replacement.
The extra parameter is check_version, default True; the requested version must be a prefix of the dependency version.
Version 1.14.5 may wrap 1.14.5.1.
Version 1.14.5 may not wrap 1.15.0 under the default check.
This does not create a range in the asking recipe.
The asking recipe still names 1.14.5.
The site’s module tree responds with a different module.
The robot resolving a build still looks for an easyconfig of the pinned version unless wrapping-dependencies is also configured for the build.
wrapping-dependencies is a configuration setting¶
The wrapping-dependencies setting in EasyBuild lists installations that may satisfy a request for an older version at runtime.
It also applies at resolve time when configured.
A site uses this to declare that a particular HDF5 version is close enough without editing many files.
The same mechanism can be used to misrepresent compatibility when version 1.15 is not considered close enough.
The book separates these two facts intentionally.
An easyconfig author does not specify a version range.
A site operator may apply a wrap.
A pin is for one generation’s “no operator, no caret, no tilde” refers to the file.
This page addresses the directory tree from which the file is loaded.
A wrap that causes a build to resolve against a different HDF5 than the pinned version is a finding rather than a convenience.
That binary has not been tested with that module.
The per-architecture claim of what “installed” means applies one level higher.
A wrap is a distinct installation.
EB-Wrap-1 — Pin, wrap, or rebuild
Three situations. Name the mechanism, and say what a user
module load of the old name actually gets.
A recipe lists
('HDF5', '1.14.5'). The site has only 1.14.6. AModuleRCeasyconfig is installed withcheck_version = True.The same recipe, no
ModuleRC, wrapping-dependencies off.The site wants every recipe that named 1.14.5 to build against 1.14.6 from now on.
Solution
ModuleRC.module load HDF5/1.14.5-...resolves to the 1.14.6 module.14.5 is a prefix of 1.14.6. The recipe file is unchanged.The robot does not resolve the build. No 1.14.5 exists module and no wrap.
module loadof the old name fails.That is a rebuild, or a wrapping-dependencies configuration that the site accepts as a lie about the pin. The recipe cannot spell that. Changing the pin in the easyconfig and rebuilding is the claim that will survive a move to another site.
EasyBuild 5: -D no longer implies -r¶
Before EasyBuild 5.0, --dry-run and -D automatically set --robot.
eb GROMACS-2025.2-foss-2025a.eb -D
A full resolved plan was obtained.
In version 5.0 that implication was removed.
The same command now dry‑runs the named file only.
Dependencies are not walked unless -r is also passed:
eb GROMACS-2025.2-foss-2025a.eb -Dr
The robot’s recordings already use -r -D.
Both letters appear to request recursive operation (‑r) and debug output (‑D).
A reader who omits -r will not obtain recursive behavior.
The other dry‑run is --extended-dry-run / -x.
It prints the build procedure.
That printout does not replace -Dr.
The printed procedure may differ from the real run whenever an EasyBlock branches on files that a dry‑run never unpacks.
EB-Dry-1 — What -D prints
EasyBuild 5.4.0, a robot tree that contains the full foss-2025a GROMACS closure. Two commands:
A. eb GROMACS-2025.2-foss-2025a.eb -D
B. eb GROMACS-2025.2-foss-2025a.eb -Dr
What does each print?
Which one is the plan The robot told the reader to read before a non-trivial build?
A colleague says “
-Dalready retains every dependency.” In which EasyBuild generation was that true?
Solution
A prints an overview of the named easyconfig. It does not walk the robot. B prints the resolved closure, short paths.
That is the plan.
EasyBuild 4. In 5.0 the implication was dropped. The colleague is quoting a default that is no longer true.
What to remember
An easyconfig still cannot write a range. A
ModuleRC.modulercis how a site answers an old name with a newer module.check_versiondefaultTruerequires the requested version to be a prefix of the wrapped one.In EasyBuild 5,
-Ddoes not imply-r. The plan is-Dr.