From a46a4a848d3aa72df78c8a8af7e3dbaeb2c3be43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Tue, 6 Jan 2026 14:02:34 +0100 Subject: [PATCH 1/4] transfer dependencies in Bundle easyblock and fix sanity check for module only --- easybuild/easyblocks/generic/bundle.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 19efc0678da..de2ad67bd2e 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -263,6 +263,19 @@ def check_checksums(self): return checksum_issues + def prepare_step(self): + """ + Pre-configure step. + At this point, dependencies are known. So transfer them to all components. + """ + super().prepare_step(self) + comp_cnt = len(self.cfg['components']) + for idx, (cfg, comp) in enumerate(self.comp_instances): + comp.toolchain.dependencies = self.toolchain.dependencies + # check if sanity checks are enabled for the component + if self.cfg['sanity_check_all_components'] or comp.name in self.cfg['sanity_check_components']: + self.comp_cfgs_sanity_check.append(comp) + def patch_step(self): """Patch step must be a no-op for bundle, since there are no top-level sources/patches.""" pass @@ -361,10 +374,6 @@ def install_step(self): # location of first unpacked source is used to determine where to apply patch(es) comp.src[-1]['finalpath'] = comp.cfg['start_dir'] - # check if sanity checks are enabled for the component - if self.cfg['sanity_check_all_components'] or comp.name in self.cfg['sanity_check_components']: - self.comp_cfgs_sanity_check.append(comp) - self._install_component(comp) if comp.make_module_req_guess.__qualname__ != 'EasyBlock.make_module_req_guess': From 3742f0fb8f91aabc704c423e438d145557d18234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Tue, 6 Jan 2026 14:04:32 +0100 Subject: [PATCH 2/4] fix style in Bundle easyblock --- easybuild/easyblocks/generic/bundle.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index de2ad67bd2e..f4d85c82d20 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -269,8 +269,7 @@ def prepare_step(self): At this point, dependencies are known. So transfer them to all components. """ super().prepare_step(self) - comp_cnt = len(self.cfg['components']) - for idx, (cfg, comp) in enumerate(self.comp_instances): + for _, comp in self.comp_instances: comp.toolchain.dependencies = self.toolchain.dependencies # check if sanity checks are enabled for the component if self.cfg['sanity_check_all_components'] or comp.name in self.cfg['sanity_check_components']: From b0b62fc339fb625e80560477f7e9805930ad8ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Tue, 6 Jan 2026 14:11:58 +0100 Subject: [PATCH 3/4] fix missing kwargs for patch_step in Bundle easyblock --- easybuild/easyblocks/generic/bundle.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index f4d85c82d20..6c332f9b4c1 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -263,12 +263,12 @@ def check_checksums(self): return checksum_issues - def prepare_step(self): + def prepare_step(self, *args, **kwargs): """ Pre-configure step. At this point, dependencies are known. So transfer them to all components. """ - super().prepare_step(self) + super().prepare_step(self, *args, **kwargs) for _, comp in self.comp_instances: comp.toolchain.dependencies = self.toolchain.dependencies # check if sanity checks are enabled for the component From 5010c6f01aaf225daa823e80b1428fb1440ea576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Andr=C3=A9=20Reuter?= Date: Mon, 12 Jan 2026 18:00:17 +0100 Subject: [PATCH 4/4] set builddirs and sanity check even earlier in bundle easyblock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan André Reuter --- easybuild/easyblocks/generic/bundle.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 6c332f9b4c1..021f1e9c250 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -241,7 +241,18 @@ def __init__(self, *args, **kwargs): # Patch step is skipped so adding postinstall patches of components here is harmless self.cfg.update('patches', comp_postinstall_patches) - self.comp_instances.append((comp_cfg, comp_cfg.easyblock(comp_cfg, logfile=self.logfile))) + # instantiate the component to transfer further information + comp_instance = comp_cfg.easyblock(comp_cfg, logfile=self.logfile) + + # correct build/install dirs + comp_instance.builddir = self.builddir + comp_instance.install_subdir, comp_instance.installdir = self.install_subdir, self.installdir + + # check if sanity checks are enabled for the component + if self.cfg['sanity_check_all_components'] or comp_cfg['name'] in self.cfg['sanity_check_components']: + self.comp_cfgs_sanity_check.append(comp_instance) + # lastly, add it to the list of components we'll deal with later + self.comp_instances.append((comp_cfg, comp_instance)) self.cfg.update('checksums', checksums_patches + orig_checksums) @@ -271,9 +282,6 @@ def prepare_step(self, *args, **kwargs): super().prepare_step(self, *args, **kwargs) for _, comp in self.comp_instances: comp.toolchain.dependencies = self.toolchain.dependencies - # check if sanity checks are enabled for the component - if self.cfg['sanity_check_all_components'] or comp.name in self.cfg['sanity_check_components']: - self.comp_cfgs_sanity_check.append(comp) def patch_step(self): """Patch step must be a no-op for bundle, since there are no top-level sources/patches.""" @@ -331,10 +339,6 @@ def install_step(self): (comp.name, comp.version, idx + 1, comp_cnt)) self.log.info("Installing component %s v%s using easyblock %s", comp.name, comp.version, cfg.easyblock) - # correct build/install dirs - comp.builddir = self.builddir - comp.install_subdir, comp.installdir = self.install_subdir, self.installdir - # make sure we can build in parallel comp.set_parallel()