def process_easyconfig(path, build_specs=None, validate=True): """ Process easyconfig, returning some information for each block @param path: path to easyconfig file @param build_specs: dictionary specifying build specifications (e.g. version, toolchain, ...) @param validate: whether or not to perform validation """ blocks = retrieve_blocks_in_spec(path, build_option('only_blocks')) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname _log.debug("Processing easyconfig %s" % spec) # create easyconfig try: ec = EasyConfig(spec, build_specs=build_specs, validate=validate) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) _log.exception(msg) name = ec['name'] # this app will appear as following module in the list easyconfig = { 'ec': ec, 'spec': spec, 'module': det_full_module_name(ec), 'dependencies': [], 'builddependencies': [], } if len(blocks) > 1: easyconfig['original_spec'] = path # add build dependencies for dep in ec.builddependencies(): _log.debug("Adding build dependency %s for app %s." % (dep, name)) easyconfig['builddependencies'].append(dep) # add dependencies (including build dependencies) for dep in ec.dependencies(): _log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) # add toolchain as dependency too if ec.toolchain.name != DUMMY_TOOLCHAIN_NAME: dep = ec.toolchain.as_dict() _log.debug("Adding toolchain %s as dependency for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) del ec # this is used by the parallel builder easyconfig['unresolved_deps'] = copy.deepcopy( easyconfig['dependencies']) easyconfigs.append(easyconfig)
def process_easyconfig(path, build_specs=None, validate=True): """ Process easyconfig, returning some information for each block @param path: path to easyconfig file @param build_specs: dictionary specifying build specifications (e.g. version, toolchain, ...) @param validate: whether or not to perform validation """ blocks = retrieve_blocks_in_spec(path, build_option('only_blocks')) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname _log.debug("Processing easyconfig %s" % spec) # create easyconfig try: ec = EasyConfig(spec, build_specs=build_specs, validate=validate) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) _log.exception(msg) name = ec['name'] # this app will appear as following module in the list easyconfig = { 'ec': ec, 'spec': spec, 'module': det_full_module_name(ec), 'dependencies': [], 'builddependencies': [], } if len(blocks) > 1: easyconfig['original_spec'] = path # add build dependencies for dep in ec.builddependencies(): _log.debug("Adding build dependency %s for app %s." % (dep, name)) easyconfig['builddependencies'].append(dep) # add dependencies (including build dependencies) for dep in ec.dependencies(): _log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) # add toolchain as dependency too if ec.toolchain.name != DUMMY_TOOLCHAIN_NAME: dep = ec.toolchain.as_dict() _log.debug("Adding toolchain %s as dependency for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) del ec # this is used by the parallel builder easyconfig['unresolved_deps'] = copy.deepcopy(easyconfig['dependencies']) easyconfigs.append(easyconfig)
def process_easyconfig(path, build_specs=None, validate=True, parse_only=False): """ Process easyconfig, returning some information for each block @param path: path to easyconfig file @param build_specs: dictionary specifying build specifications (e.g. version, toolchain, ...) @param validate: whether or not to perform validation """ blocks = retrieve_blocks_in_spec(path, build_option('only_blocks')) # only cache when no build specifications are involved (since those can't be part of a dict key) cache_key = None if build_specs is None: cache_key = (path, validate, parse_only) if cache_key in _easyconfigs_cache: return copy.deepcopy(_easyconfigs_cache[cache_key]) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname _log.debug("Processing easyconfig %s" % spec) # create easyconfig try: ec = EasyConfig(spec, build_specs=build_specs, validate=validate) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) _log.exception(msg) name = ec['name'] easyconfig = { 'ec': ec, } easyconfigs.append(easyconfig) if not parse_only: # also determine list of dependencies, module name (unless only parsed easyconfigs are requested) easyconfig.update({ 'spec': spec, 'short_mod_name': ec.short_mod_name, 'full_mod_name': ec.full_mod_name, 'dependencies': [], 'builddependencies': [], }) if len(blocks) > 1: easyconfig['original_spec'] = path # add build dependencies for dep in ec.builddependencies(): _log.debug("Adding build dependency %s for app %s." % (dep, name)) easyconfig['builddependencies'].append(dep) # add dependencies (including build dependencies) for dep in ec.dependencies(): _log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) # add toolchain as dependency too if ec.toolchain.name != DUMMY_TOOLCHAIN_NAME: dep = ec.toolchain.as_dict() _log.debug("Adding toolchain %s as dependency for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) # this is used by the parallel builder easyconfig['unresolved_deps'] = copy.deepcopy(easyconfig['dependencies'])