def runTest(self): """ test all possible ways of specifying dependencies """ eb = EasyBlock(self.eb_file) # should include builddependencies self.assertEqual(len(eb.dependencies()), 4) self.assertEqual(len(eb.builddependencies()), 2) first = eb.dependencies()[0] second = eb.dependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(first['tk'], '1.1-GCC-4.6.3') self.assertEqual(second['tk'], '2.2-GCC-4.6.3') # same tests for builddependencies first = eb.builddependencies()[0] second = eb.builddependencies()[1] self.assertEqual(first['name'], "first") self.assertEqual(second['name'], "second") self.assertEqual(first['version'], "1.1") self.assertEqual(second['version'], "2.2") self.assertEqual(first['tk'], '1.1-GCC-4.6.3') self.assertEqual(second['tk'], '2.2-GCC-4.6.3') eb['dependencies'] = ["wrong type"] self.assertErrorRegex(EasyBuildError, "wrong type from unsupported type", eb.dependencies) eb['dependencies'] = [()] self.assertErrorRegex(EasyBuildError, "without name", eb.dependencies) eb['dependencies'] = [{'name': "test"}] self.assertErrorRegex(EasyBuildError, "without version", eb.dependencies)
def processEasyconfig(path, log, onlyBlocks=None, regtest_online=False): """ Process easyconfig, returning some information for each block """ blocks = retrieveBlocksInSpec(path, log, onlyBlocks) packages = [] for spec in blocks: ## Process for dependencies and real installversionname ## - use mod? __init__ and importCfg are ignored. log.debug("Processing easyconfig %s" % spec) try: eb = EasyBlock(spec) except EasyBuildError, err: msg = "Failed to process easyconfig %s:\n%s" % (spec, err.msg) log.exception(msg) name = eb["name"] ## this app will appear as following module in the list package = {"spec": spec, "module": (eb.name(), eb.installversion()), "dependencies": []} if len(blocks) > 1: package["originalSpec"] = path for d in eb.dependencies(): dep = (d["name"], d["tk"]) log.debug("Adding dependency %s for app %s." % (dep, name)) package["dependencies"].append(dep) if eb.toolkit_name() != "dummy": dep = (eb.toolkit_name(), eb.toolkit_version()) log.debug("Adding toolkit %s as dependency for app %s." % (dep, name)) package["dependencies"].append(dep) del eb # this is used by the parallel builder package["unresolvedDependencies"] = copy.copy(package["dependencies"]) # ensure the pathname is equal to the module base_name, ext = os.path.splitext(os.path.basename(spec)) module_name = "-".join(package["module"]) if base_name.lower() != module_name.lower(): log.error("easyconfig file: %s does not contain module %s" % (spec, module_name)) packages.append(package)