diff --git a/easybuild/easyblocks/generic/bundle.py b/easybuild/easyblocks/generic/bundle.py index 3c8c93e77d9..3d0d28221f5 100644 --- a/easybuild/easyblocks/generic/bundle.py +++ b/easybuild/easyblocks/generic/bundle.py @@ -31,6 +31,7 @@ @author: Pieter De Baets (Ghent University) @author: Jens Timmerman (Ghent University) """ +import copy import os import easybuild.tools.environment as env @@ -86,6 +87,18 @@ def __init__(self, *args, **kwargs): cfg = self.cfg.copy() + easyblock = comp_specs.get('easyblock') or self.cfg['default_easyblock'] + if easyblock is None: + raise EasyBuildError("No easyblock specified for component %s v%s", cfg['name'], cfg['version']) + elif easyblock == 'Bundle': + raise EasyBuildError("The Bundle easyblock can not be used to install components in a bundle") + + cfg.easyblock = get_easyblock_class(easyblock, name=cfg['name']) + + # make sure that extra easyconfig parameters are known, so they can be set + extra_opts = cfg.easyblock.extra_options() + cfg.extend_params(copy.deepcopy(extra_opts)) + cfg['name'] = comp_name cfg['version'] = comp_version cfg.generate_template_values() @@ -162,21 +175,19 @@ def install_step(self): """Install components, if specified.""" comp_cnt = len(self.cfg['components']) for idx, cfg in enumerate(self.comp_cfgs): - easyblock = cfg.get('easyblock') or self.cfg['default_easyblock'] - if easyblock is None: - raise EasyBuildError("No easyblock specified for component %s v%s", cfg['name'], cfg['version']) - elif easyblock == 'Bundle': - raise EasyBuildError("The '%s' easyblock can not be used to install components in a bundle", easyblock) print_msg("installing bundle component %s v%s (%d/%d)..." % (cfg['name'], cfg['version'], idx+1, comp_cnt)) - self.log.info("Installing component %s v%s using easyblock %s", cfg['name'], cfg['version'], easyblock) + self.log.info("Installing component %s v%s using easyblock %s", cfg['name'], cfg['version'], cfg.easyblock) - comp = get_easyblock_class(easyblock, name=cfg['name'])(cfg) + comp = cfg.easyblock(cfg) # 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() + # figure out correct start directory comp.guess_start_dir() diff --git a/easybuild/easyblocks/generic/pythonpackage.py b/easybuild/easyblocks/generic/pythonpackage.py index faaa6efeb9b..e1b26a4bca9 100644 --- a/easybuild/easyblocks/generic/pythonpackage.py +++ b/easybuild/easyblocks/generic/pythonpackage.py @@ -404,6 +404,9 @@ def prepare_step(self, *args, **kwargs): def configure_step(self): """Configure Python package build/install.""" + if self.python_cmd is None: + self.prepare_python() + if self.sitecfg is not None: # used by some extensions, like numpy, to find certain libs