autoPatchelfHook: add patchelfFlags option

This may be useful. Eventually. Maybe.
This commit is contained in:
K900 2023-09-21 18:49:49 +03:00
parent c3c657409a
commit 10cb2bd443
2 changed files with 17 additions and 7 deletions

View File

@ -174,7 +174,7 @@ class Dependency:
found: bool = False # Whether it was found somewhere found: bool = False # Whether it was found somewhere
def auto_patchelf_file(path: Path, runtime_deps: list[Path], append_rpaths: List[Path] = []) -> list[Dependency]: def auto_patchelf_file(path: Path, runtime_deps: list[Path], append_rpaths: List[Path] = [], extra_args: List[str] = []) -> list[Dependency]:
try: try:
with open_elf(path) as elf: with open_elf(path) as elf:
@ -213,7 +213,7 @@ def auto_patchelf_file(path: Path, runtime_deps: list[Path], append_rpaths: List
if file_is_dynamic_executable: if file_is_dynamic_executable:
print("setting interpreter of", path) print("setting interpreter of", path)
subprocess.run( subprocess.run(
["patchelf", "--set-interpreter", interpreter_path.as_posix(), path.as_posix()], ["patchelf", "--set-interpreter", interpreter_path.as_posix(), path.as_posix()] + extra_args,
check=True) check=True)
rpath += runtime_deps rpath += runtime_deps
@ -250,7 +250,7 @@ def auto_patchelf_file(path: Path, runtime_deps: list[Path], append_rpaths: List
if rpath: if rpath:
print("setting RPATH to:", rpath_str) print("setting RPATH to:", rpath_str)
subprocess.run( subprocess.run(
["patchelf", "--set-rpath", rpath_str, path.as_posix()], ["patchelf", "--set-rpath", rpath_str, path.as_posix()] + extra_args,
check=True) check=True)
return dependencies return dependencies
@ -262,7 +262,8 @@ def auto_patchelf(
runtime_deps: List[Path], runtime_deps: List[Path],
recursive: bool = True, recursive: bool = True,
ignore_missing: List[str] = [], ignore_missing: List[str] = [],
append_rpaths: List[Path] = []) -> None: append_rpaths: List[Path] = [],
extra_args: List[str] = []) -> None:
if not paths_to_patch: if not paths_to_patch:
sys.exit("No paths to patch, stopping.") sys.exit("No paths to patch, stopping.")
@ -275,7 +276,7 @@ def auto_patchelf(
dependencies = [] dependencies = []
for path in chain.from_iterable(glob(p, '*', recursive) for p in paths_to_patch): for path in chain.from_iterable(glob(p, '*', recursive) for p in paths_to_patch):
if not path.is_symlink() and path.is_file(): if not path.is_symlink() and path.is_file():
dependencies += auto_patchelf_file(path, runtime_deps, append_rpaths) dependencies += auto_patchelf_file(path, runtime_deps, append_rpaths, extra_args)
missing = [dep for dep in dependencies if not dep.found] missing = [dep for dep in dependencies if not dep.found]
@ -333,6 +334,12 @@ def main() -> None:
type=Path, type=Path,
help="Paths to append to all runtime paths unconditionally", help="Paths to append to all runtime paths unconditionally",
) )
parser.add_argument(
"--extra-args",
nargs="*",
type=str,
help="Extra arguments to pass to patchelf"
)
print("automatically fixing dependencies for ELF files") print("automatically fixing dependencies for ELF files")
args = parser.parse_args() args = parser.parse_args()
@ -344,7 +351,8 @@ def main() -> None:
args.runtime_dependencies, args.runtime_dependencies,
args.recursive, args.recursive,
args.ignore_missing, args.ignore_missing,
append_rpaths=args.append_rpaths) append_rpaths=args.append_rpaths,
extra_args=args.extra_args)
interpreter_path: Path = None # type: ignore interpreter_path: Path = None # type: ignore

View File

@ -63,6 +63,7 @@ autoPatchelf() {
local appendRunpathsArray=($appendRunpaths) local appendRunpathsArray=($appendRunpaths)
local runtimeDependenciesArray=($runtimeDependencies) local runtimeDependenciesArray=($runtimeDependencies)
local patchelfFlagsArray=($patchelfFlags)
@pythonInterpreter@ @autoPatchelfScript@ \ @pythonInterpreter@ @autoPatchelfScript@ \
${norecurse:+--no-recurse} \ ${norecurse:+--no-recurse} \
--ignore-missing "${ignoreMissingDepsArray[@]}" \ --ignore-missing "${ignoreMissingDepsArray[@]}" \
@ -70,7 +71,8 @@ autoPatchelf() {
--libs "${autoPatchelfLibs[@]}" \ --libs "${autoPatchelfLibs[@]}" \
"${extraAutoPatchelfLibs[@]}" \ "${extraAutoPatchelfLibs[@]}" \
--runtime-dependencies "${runtimeDependenciesArray[@]/%//lib}" \ --runtime-dependencies "${runtimeDependenciesArray[@]/%//lib}" \
--append-rpaths "${appendRunpathsArray[@]}" --append-rpaths "${appendRunpathsArray[@]}" \
--extra-args "${patchelfFlagsArray[@]}"
} }
# XXX: This should ultimately use fixupOutputHooks but we currently don't have # XXX: This should ultimately use fixupOutputHooks but we currently don't have