Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
options = init_config(args=args)
self.assertEqual(install_path(), os.path.join(os.getenv('HOME'), '.local', 'easybuild', 'software')) # default
self.assertEqual(source_paths(), [testpath2]) # via command line
self.assertEqual(build_path(), testpath1) # via config file
testpath3 = os.path.join(self.tmpdir, 'testTHREE')
os.environ['EASYBUILD_SOURCEPATH'] = testpath2
args = [
'--debug',
'--installpath', testpath3,
]
options = init_config(args=args)
self.assertEqual(source_paths(), [testpath2]) # via environment variable $EASYBUILD_SOURCEPATHS
self.assertEqual(install_path(), os.path.join(testpath3, 'software')) # via command line
self.assertEqual(build_path(), testpath1) # via config file
# with a list of provided source paths, only the first source path is created automagically
new_sourcepath = os.path.join(self.tmpdir, 'not', 'there', 'yet')
os.environ['EASYBUILD_SOURCEPATH'] = "%s:/foo:/bar" % new_sourcepath
self.assertFalse(os.path.exists(new_sourcepath))
init_config()
self.assertTrue(os.path.exists(new_sourcepath))
del os.environ['EASYBUILD_CONFIGFILES']
subdir_software = 'eb-soft'
args = [
'--configfiles', config_file, # force empty config file
'--installpath', install,
]
os.environ['EASYBUILD_PREFIX'] = prefix
os.environ['EASYBUILD_SUBDIR_SOFTWARE'] = subdir_software
installpath_modules = tempfile.mkdtemp(prefix='installpath-modules')
os.environ['EASYBUILD_INSTALLPATH_MODULES'] = installpath_modules
options = init_config(args=args)
self.assertEqual(build_path(), os.path.join(prefix, 'build'))
self.assertEqual(install_path(), os.path.join(install, subdir_software))
self.assertEqual(install_path('mod'), installpath_modules)
# subdir options *must* be relative (to --installpath)
installpath_software = tempfile.mkdtemp(prefix='installpath-software')
os.environ['EASYBUILD_SUBDIR_SOFTWARE'] = installpath_software
error_regex = r"Found problems validating the options.*'subdir_software' must specify a \*relative\* path"
self.assertErrorRegex(EasyBuildError, error_regex, init_config)
del os.environ['EASYBUILD_PREFIX']
del os.environ['EASYBUILD_SUBDIR_SOFTWARE']
# resolved value that uses USER constant
self.assertEqual(options.robot_paths[3], os.path.join('/tmp', os.getenv('USER')))
# first path in DEFAULT_ROBOT_PATHS
self.assertEqual(options.robot_paths[4], os.path.join(tmpdir, 'easybuild', 'easyconfigs'))
testpath3 = os.path.join(self.tmpdir, 'testTHREE')
os.environ['EASYBUILD_SOURCEPATH'] = testpath2
args = [
'--debug',
'--installpath', testpath3,
]
options = init_config(args=args)
self.assertEqual(source_paths(), [testpath2]) # via environment variable $EASYBUILD_SOURCEPATHS
self.assertEqual(install_path(), os.path.join(testpath3, 'software')) # via command line
self.assertEqual(install_path('mod'), installpath_modules), # via config file
self.assertEqual(build_path(), testpath1) # via config file
del os.environ['EASYBUILD_CONFIGFILES']
sys.path[:] = orig_sys_path
# check mixed command line/env var configuration
prefix = os.path.join(self.tmpdir, 'test3')
install = os.path.join(self.tmpdir, 'test4', 'install')
subdir_software = 'eb-soft'
args = [
'--config', config_file, # force empty oldstyle config file
'--installpath', install,
]
os.environ['EASYBUILD_PREFIX'] = prefix
os.environ['EASYBUILD_SUBDIR_SOFTWARE'] = subdir_software
options = init_config(args=args)
self.assertEqual(build_path(), os.path.join(prefix, 'build'))
self.assertEqual(install_path(), os.path.join(install, subdir_software))
del os.environ['EASYBUILD_PREFIX']
del os.environ['EASYBUILD_SUBDIR_SOFTWARE']
eb = EasyBlock(EasyConfig(self.eb_file))
eb.installdir = config.install_path()
# no $MODULEPATH extensions for default module naming scheme (EasyBuildMNS)
self.assertEqual(eb.make_module_extend_modpath(), '')
usermodsdir = 'my/own/modules'
modclasses = ['compiler', 'tools']
os.environ['EASYBUILD_MODULE_NAMING_SCHEME'] = 'CategorizedHMNS'
build_options = {
'subdir_user_modules': usermodsdir,
'valid_module_classes': modclasses,
'suffix_modules_path': 'funky',
}
init_config(build_options=build_options)
eb = EasyBlock(EasyConfig(self.eb_file))
eb.installdir = config.install_path()
txt = eb.make_module_extend_modpath()
if get_module_syntax() == 'Tcl':
regexs = [r'^module use ".*/modules/funky/Compiler/pi/3.14/%s"$' % c for c in modclasses]
home = r'\$::env\(HOME\)'
fj_usermodsdir = 'file join "%s" "funky" "Compiler/pi/3.14"' % usermodsdir
regexs.extend([
# extension for user modules is guarded
r'if { \[ file isdirectory \[ file join %s \[ %s \] \] \] } {$' % (home, fj_usermodsdir),
# no per-moduleclass extension for user modules
r'^\s+module use \[ file join %s \[ %s \] \]$' % (home, fj_usermodsdir),
])
elif get_module_syntax() == 'Lua':
regexs = [r'^prepend_path\("MODULEPATH", ".*/modules/funky/Compiler/pi/3.14/%s"\)$' % c for c in modclasses]
home = r'os.getenv\("HOME"\)'
pj_usermodsdir = 'pathJoin\("%s", "funky", "Compiler/pi/3.14"\)' % usermodsdir
def gen_installdir(self):
"""
Generate the name of the installation directory.
"""
basepath = install_path()
if basepath:
self.install_subdir = ActiveMNS().det_install_subdir(self.cfg)
self.installdir = os.path.join(os.path.abspath(basepath), self.install_subdir)
self.log.info("Software install dir set to %s" % self.installdir)
mod_basepath = install_path('mod')
mod_path_suffix = build_option('suffix_modules_path')
self.installdir_mod = os.path.join(os.path.abspath(mod_basepath), mod_path_suffix)
self.log.info("Module install dir set to %s" % self.installdir_mod)
else:
raise EasyBuildError("Can't set installation directory")
modname = tcdep['short_mod_name']
dry_run_msg("module load %s [SIMULATED]" % modname, silent=silent)
# 'use '$EBROOTNAME' as value for dep install prefix (looks nice in dry run output)
deproot = '$%s' % get_software_root_env_var_name(tcdep['name'])
self._simulated_load_dependency_module(tcdep['name'], tcdep['version'], {'prefix': deproot})
dry_run_msg("module load %s [SIMULATED]" % tc_mod, silent=silent)
# use name of $EBROOT* env var as value for $EBROOT* env var (results in sensible dry run output)
tcroot = '$%s' % get_software_root_env_var_name(self.name)
self._simulated_load_dependency_module(self.name, self.version, {'prefix': tcroot})
else:
# make sure toolchain is available using short module name by running 'module use' on module path subdir
if self.init_modpaths:
mod_path_suffix = build_option('suffix_modules_path')
for modpath in self.init_modpaths:
self.modules_tool.prepend_module_path(os.path.join(install_path('mod'), mod_path_suffix, modpath))
# load modules for all dependencies
self.log.debug("Loading module for toolchain: %s", tc_mod)
trace_msg("loading toolchain module: " + tc_mod)
self.modules_tool.load([tc_mod])
# append toolchain module to list of modules
self.modules.append(tc_mod)
def get_modules_path(self, fake=False, mod_path_suffix=None):
"""Return path to directory where module files should be generated in."""
mod_path = install_path('mod')
if fake:
self.log.debug("Fake mode: using %s (instead of %s)" % (self.fake_mod_path, mod_path))
mod_path = self.fake_mod_path
if mod_path_suffix is None:
mod_path_suffix = build_option('suffix_modules_path')
return os.path.join(mod_path, mod_path_suffix)
easyconfigs.extend(processEasyconfig(ec_file, log, blocks, validate=validate_easyconfigs))
except IOError, err:
log.error("Processing easyconfigs in path %s failed: %s" % (path, err))
# before building starts, take snapshot of environment (watch out -t option!)
origEnviron = copy.deepcopy(os.environ)
os.chdir(os.environ['PWD'])
# skip modules that are already installed unless forced
if not options.force:
m = Modules()
easyconfigs, check_easyconfigs = [], easyconfigs
for ec in check_easyconfigs:
module = ec['module']
mod = "%s (version %s)" % (module[0], module[1])
modspath = mk_module_path(curr_module_paths() + [os.path.join(config.install_path("mod"), 'all')])
if m.exists(module[0], module[1], modspath):
msg = "%s is already installed (module found in %s), skipping " % (mod, modspath)
print_msg(msg, log)
log.info(msg)
else:
log.debug("%s is not installed yet, so retaining it" % mod)
easyconfigs.append(ec)
# determine an order that will allow all specs in the set to build
if len(easyconfigs) > 0:
print_msg("resolving dependencies ...", log)
# force all dependencies to be retained and validation to be skipped for building dep graph
force = retain_all_deps and not validate_easyconfigs
orderedSpecs = resolveDependencies(easyconfigs, options.robot, log, force=force)
else:
print_msg("No easyconfigs left to be built.", log)