def get_modulefile_path(package_name): """Generate the modulefile path from module name""" s = Shelf() if package_name not in s.installed_packages: raise Exception('Package {} not installed'.format(package_name)) package = s.find_package(package_name) name = package.name version = package.version return os.path.join(settings.module_dir, name, version)
def install_package(package_name): """Given a package name, determine package dependencies, install if necessary and then install the package.""" print 'Installing {0}'.format(package_name) # Generate build environment build_env = BuildEnvironment() current_shelf = Shelf() setup_own_gcc(current_shelf, build_env) package_blueprint = load_blueprint_by_name(package_name) dependencies = package_blueprint.direct_dependencies missing_dependencies = set(dependencies) - set( current_shelf.installed_packages) for dependency in missing_dependencies: install_package(dependency) for dependency in dependencies: package = current_shelf.find_package(dependency) package.update_env_manager(build_env) yaml_builder = builder_by_name_yaml(package_name, load_dependencies=False) try: extra_CPPFLAGS = yaml_builder.env_manager.extra_CPPFLAGS except AttributeError: extra_CPPFLAGS = '' build_env.extra_CPPFLAGS = extra_CPPFLAGS yaml_builder.env_manager = build_env yaml_builder.env_manager.update_CPPFLAGS() yaml_builder.env_manager.update_LDFLAGS() yaml_builder.process_all_stages() yaml_builder.yaml_rep['environment_flags'] = build_env.my_env yaml_rep = yaml.dump(yaml_builder.yaml_rep, default_flow_style=False) receipt_path = os.path.join(yaml_builder.shelf_dir, settings.receipt_file) with open(receipt_path, 'w') as f: f.write(yaml_rep)
def generate_modulefile_text(package_name): """Given an installed package, generate the modulefile text necessary to activate that package.""" s = Shelf() if package_name not in s.installed_packages: raise Exception('Package {} not installed'.format(package_name)) tloader = FileSystemLoader(settings.template_dir) tenv = Environment(loader=tloader) t = tenv.get_template(settings.module_template) package = s.find_package(package_name) return t.render(package=package)
def load_templated_yaml_rep(name, all_packages=None): name = name.lower() tloader = FileSystemLoader(settings.yaml_dir) tenv = Environment(loader=tloader) blueprint_name = name + settings.yaml_ext t = tenv.get_template(blueprint_name) s = Shelf() if all_packages is None: all_packages = s.installed_packages loaded_packages = {name: s.find_package(name) for name in all_packages} t_rendered = t.render(packages=loaded_packages) return yaml.load(t_rendered)
class Stack(object): def __init__(self, shelf=None): self.env_manager = EnvManager() self.included_components = {} if shelf == None: self.shelf = Shelf() def add_by_name(self, name, add_dependencies=False): """Add a component from a (string) name.""" if name in self.included_components: return package = self.shelf.find_package(name) self.included_components[name] = package package.update_stack(self) if add_dependencies: for dependency in package.direct_dependencies: self.add_by_name(dependency) def add_component(self, component): if component.name in self.included_components: return self.included_components[component.name] = component component.update_stack(self) for dependency in component.direct_dependencies: c_dep = load_component_by_name(dependency) self.add_component(c_dep) def shell(self): self.env_manager.shell() def __repr__(self): return "<Stack: {}>".format(','.join(self.included_components))