Luke Granger-Brown
57725ef3ec
git-subtree-dir: third_party/nixpkgs git-subtree-split: 76612b17c0ce71689921ca12d9ffdc9c23ce40b2
34 lines
1.1 KiB
Diff
34 lines
1.1 KiB
Diff
diff --git a/src/portable/install.rs b/src/portable/install.rs
|
|
index 15944e4..f873349 100644
|
|
--- a/src/portable/install.rs
|
|
+++ b/src/portable/install.rs
|
|
@@ -134,8 +134,16 @@ fn unpack_package(cache_file: &Path, target_dir: &Path) -> anyhow::Result<()> {
|
|
for entry in arch.entries()? {
|
|
let mut entry = entry?;
|
|
let path = entry.path()?;
|
|
+ let is_inside_bin = {
|
|
+ let mut path_iter = path.iter();
|
|
+ path_iter.next(); // discards first folder
|
|
+ path_iter.as_path().starts_with("bin")
|
|
+ };
|
|
if let Some(path) = build_path(&target_dir, &path)? {
|
|
- entry.unpack(path)?;
|
|
+ entry.unpack(&path)?;
|
|
+ if is_inside_bin {
|
|
+ nix_patchelf_if_needed(&path);
|
|
+ }
|
|
}
|
|
}
|
|
bar.finish_and_clear();
|
|
@@ -222,3 +230,11 @@ pub fn package(pkg_info: &PackageInfo) -> anyhow::Result<InstallInfo> {
|
|
|
|
Ok(info)
|
|
}
|
|
+
|
|
+fn nix_patchelf_if_needed(dest_path: &Path) {
|
|
+ let _ = ::std::process::Command::new("@patchelf@/bin/patchelf")
|
|
+ .arg("--set-interpreter")
|
|
+ .arg("@dynamicLinker@")
|
|
+ .arg(dest_path)
|
|
+ .output();
|
|
+}
|