def runTest(self): """ test easyconfig templating """ eb = EasyConfig(self.eb_file, validate=False, valid_stops=self.all_stops) eb.validate() eb._generate_template_values() self.assertEqual(eb['description'], "test easyconfig PI") const_dict = dict([(x[0], x[1]) for x in easyconfig.TEMPLATE_CONSTANTS]) self.assertEqual(eb['sources'][0], const_dict['SOURCE_TAR_GZ'] % self.inp) self.assertEqual(eb['sources'][1][0], const_dict['SOURCELOWER_TAR_GZ'] % self.inp) self.assertEqual(eb['sources'][1][1], 'tar xfvz %s') self.assertEqual(eb['source_urls'][0], const_dict['GOOGLECODE_SOURCE'] % self.inp) # test the escaping insanity here (ie all the crap we allow in easyconfigs) eb['description'] = "test easyconfig % %% %s% %%% %(name)s %%(name)s %%%(name)s %%%%(name)s" self.assertEqual(eb['description'], "test easyconfig % %% %s% %%% PI %(name)s %PI %%(name)s")
def process_easyconfig(path, onlyBlocks=None, regtest_online=False, validate=True): """ Process easyconfig, returning some information for each block """ blocks = retrieve_blocks_in_spec(path, onlyBlocks) easyconfigs = [] for spec in blocks: # process for dependencies and real installversionname # - use mod? __init__ and importCfg are ignored. log.debug("Processing easyconfig %s" % spec) # create easyconfig try: all_stops = [x[0] for x in EasyBlock.get_steps()] ec = EasyConfig(spec, validate=validate, valid_module_classes=module_classes(), valid_stops=all_stops) 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 = { 'spec': spec, 'module': (ec.name, ec.get_installversion()), 'dependencies': [] } if len(blocks) > 1: easyconfig['originalSpec'] = path for d in ec.dependencies(): dep = (d['name'], d['tc']) log.debug("Adding dependency %s for app %s." % (dep, name)) easyconfig['dependencies'].append(dep) if ec.toolchain.name != 'dummy': dep = (ec.toolchain.name, ec.toolchain.version) 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['unresolvedDependencies'] = copy.copy(easyconfig['dependencies']) easyconfigs.append(easyconfig)
def runTest(self): """ test other validations beside mandatory variables """ eb = EasyConfig(self.eb_file, validate=False, valid_stops=self.all_stops) self.assertErrorRegex(EasyBuildError, r"\w* provided '\w*' is not valid", eb.validate) eb['stop'] = 'patch' # this should now not crash eb.validate() eb['osdependencies'] = ['non-existent-dep'] self.assertErrorRegex(EasyBuildError, "OS dependencies were not found", eb.validate) # dummy toolchain, installversion == version self.assertEqual(eb.get_installversion(), "3.14") os.chmod(self.eb_file, 0000) self.assertErrorRegex(EasyBuildError, "Unexpected IOError", EasyConfig, self.eb_file) os.chmod(self.eb_file, 0755) self.contents += "\nsyntax_error'" self.setUp() self.assertErrorRegex(EasyBuildError, "SyntaxError", EasyConfig, self.eb_file)
def runTest(self): ver = "1.2.3" verpref = "myprefix" versuff = "mysuffix" tcname = "mytc" tcver = "4.1.2" extra_patches = ['t5.patch', 't6.patch'] homepage = "http://www.justatest.com" tweaks = { 'version': ver, 'versionprefix': verpref, 'versionsuffix': versuff, 'toolchain_version': tcver, 'patches': extra_patches } tweak(self.eb_file, self.tweaked_fn, tweaks) eb = EasyConfig(self.tweaked_fn, valid_stops=self.all_stops) self.assertEqual(eb['version'], ver) self.assertEqual(eb['versionprefix'], verpref) self.assertEqual(eb['versionsuffix'], versuff) self.assertEqual(eb['toolchain']['version'], tcver) self.assertEqual(eb['patches'], extra_patches + self.patches) eb = EasyConfig(self.eb_file, valid_stops=self.all_stops) # eb['toolchain']['version'] = tcver does not work as expected with templating enabled eb.enable_templating = False eb['version'] = ver eb['toolchain']['version'] = tcver eb.enable_templating = True eb.dump(self.eb_file) tweaks = { 'toolchain_name': tcname, 'patches': extra_patches[0:1], 'homepage': homepage, 'foo': "bar" } tweak(self.eb_file, self.tweaked_fn, tweaks) eb = EasyConfig(self.tweaked_fn, valid_stops=self.all_stops) self.assertEqual(eb['toolchain']['name'], tcname) self.assertEqual(eb['toolchain']['version'], tcver) self.assertEqual(eb['patches'], extra_patches[0:1] + self.patches) self.assertEqual(eb['version'], ver) self.assertEqual(eb['homepage'], homepage)
def runTest(self): """ test all possible ways of specifying dependencies """ eb = EasyConfig(self.eb_file, valid_stops=self.all_stops) # 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['tc'], '1.1-GCC-4.6.3') self.assertEqual(second['tc'], '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['tc'], '1.1-GCC-4.6.3') self.assertEqual(second['tc'], '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)
names = [] # fs.walk yields the same results as os.walk, so should be interchangable # same for fs.join and os.path.join for root, subfolders, files in walk(options.path): if '.git' in subfolders: log.info("found .git subfolder, ignoring it") subfolders.remove('.git') for file_ in files: file_ = join(root,file_) file_ = read(file_) try: ec = EasyConfig(file_, validate=False) log.info("found valid easyconfig %s" % ec) if not ec.name in names: log.info("found new software package %s" % ec) # check if an easyblock exists module = easyblock.get_class(None, name=ec.name).__module__.split('.')[-1] if module != "configuremake": ec.easyblock = module else: ec.easyblock = None configs.append(ec) names.append(ec.name) except Exception, e: log.warning("faulty easyconfig %s" % file) log.debug(e)