def all_hook_modules(): modules = [] for name in list_modules(spack.paths.hooks_path): mod_name = __name__ + '.' + name path = os.path.join(spack.paths.hooks_path, name) + ".py" mod = simp.load_source(mod_name, path) modules.append(mod) return modules
def class_for_compiler_name(compiler_name): """Given a compiler module name, get the corresponding Compiler class.""" assert(supported(compiler_name)) file_path = os.path.join(spack.paths.compilers_path, compiler_name + ".py") compiler_mod = simp.load_source(_imported_compilers_module, file_path) cls = getattr(compiler_mod, mod_to_class(compiler_name)) # make a note of the name in the module so we can get to it easily. cls.name = compiler_name return cls
def all_hook_modules(): modules = [] for name in list_modules(spack.paths.hooks_path): mod_name = __name__ + '.' + name path = os.path.join(spack.paths.hooks_path, name) + ".py" mod = simp.load_source(mod_name, path) if name == 'write_install_manifest': last_mod = mod else: modules.append(mod) # put `write_install_manifest` as the last hook to run modules.append(last_mod) return modules
def class_for_compiler_name(compiler_name): """Given a compiler module name, get the corresponding Compiler class.""" assert (supported(compiler_name)) # Hack to be able to call the compiler `apple-clang` while still # using a valid python name for the module module_name = compiler_name if compiler_name == 'apple-clang': module_name = compiler_name.replace('-', '_') file_path = os.path.join(spack.paths.compilers_path, module_name + ".py") compiler_mod = simp.load_source(_imported_compilers_module, file_path) cls = getattr(compiler_mod, mod_to_class(compiler_name)) # make a note of the name in the module so we can get to it easily. cls.name = compiler_name return cls
def _get_pkg_module(self, pkg_name): """Create a module for a particular package. This caches the module within this Repo *instance*. It does *not* add it to ``sys.modules``. So, you can construct multiple Repos for testing and ensure that the module will be loaded once per repo. """ if pkg_name not in self._modules: file_path = self.filename_for_package_name(pkg_name) if not os.path.exists(file_path): raise UnknownPackageError(pkg_name, self) if not os.path.isfile(file_path): tty.die("Something's wrong. '%s' is not a file!" % file_path) if not os.access(file_path, os.R_OK): tty.die("Cannot read '%s'!" % file_path) # e.g., spack.pkg.builtin.mpich fullname = "%s.%s" % (self.full_namespace, pkg_name) try: module = simp.load_source(fullname, file_path, prepend=_package_prepend) except SyntaxError as e: # SyntaxError strips the path from the filename so we need to # manually construct the error message in order to give the # user the correct package.py where the syntax error is located raise SyntaxError('invalid syntax in {0:}, line {1:}'.format( file_path, e.lineno)) module.__package__ = self.full_namespace module.__loader__ = self self._modules[pkg_name] = module return self._modules[pkg_name]
def _get_pkg_module(self, pkg_name): """Create a module for a particular package. This caches the module within this Repo *instance*. It does *not* add it to ``sys.modules``. So, you can construct multiple Repos for testing and ensure that the module will be loaded once per repo. """ if pkg_name not in self._modules: file_path = self.filename_for_package_name(pkg_name) if not os.path.exists(file_path): raise UnknownPackageError(pkg_name, self) if not os.path.isfile(file_path): tty.die("Something's wrong. '%s' is not a file!" % file_path) if not os.access(file_path, os.R_OK): tty.die("Cannot read '%s'!" % file_path) # e.g., spack.pkg.builtin.mpich fullname = "%s.%s" % (self.full_namespace, pkg_name) try: module = simp.load_source(fullname, file_path, prepend=_package_prepend) except SyntaxError as e: # SyntaxError strips the path from the filename so we need to # manually construct the error message in order to give the # user the correct package.py where the syntax error is located raise SyntaxError('invalid syntax in {0:}, line {1:}' ''.format(file_path, e.lineno)) module.__package__ = self.full_namespace module.__loader__ = self self._modules[pkg_name] = module return self._modules[pkg_name]