autoPatchelfHook: add patchelfFlags
option
This may be useful. Eventually. Maybe.
This commit is contained in:
parent
c3c657409a
commit
10cb2bd443
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user