Source code for infra.packages.pyelftools

import os
from typing import Iterator

from ..context import Context
from ..package import Package
from ..util import run
from .python import Python


[docs]class PyElfTools(Package): """ :identifier: pyelftools-<version> :param version: version to download :param python_version: which Python version to install the package for """ def __init__(self, version: str, python_version: str): self.version = version self.python = Python(python_version) def ident(self) -> str: return "pyelftools-" + self.version def dependencies(self) -> Iterator[Package]: yield self.python def fetch(self, ctx: Context) -> None: run( ctx, [ "git", "clone", "--branch", "v" + self.version, "https://github.com/eliben/pyelftools.git", "src", ], ) def build(self, ctx: Context) -> None: os.chdir("src") run(ctx, [self.python.binary(), "setup.py", "build"]) def install(self, ctx: Context) -> None: os.chdir("src") run( ctx, [ self.python.binary(), "setup.py", "install", "--skip-build", "--prefix=" + self.path(ctx, "install"), ], ) def install_env(self, ctx: Context) -> None: relpath = f"install/lib/python{self.python.version}/site-packages" abspath = self.path(ctx, relpath) syspypath = os.getenv("PYTHONPATH", "").split(":") pypath = ctx.runenv.setdefault("PYTHONPATH", syspypath) assert isinstance(pypath, list) pypath.insert(0, abspath) def is_fetched(self, ctx: Context) -> bool: return os.path.exists("src") def is_built(self, ctx: Context) -> bool: return os.path.exists("src/build") def is_installed(self, ctx: Context) -> bool: return os.path.exists( f"install/lib/{self.python.binary()}/site-packages/elftools" )