fix linter bundle-linux.sh

pull/1859/head
Patryk Sondej 2 years ago committed by Disconnect3d
parent 2e423a165f
commit f5f518fa69

@ -15,164 +15,164 @@ binary="$2"
relative_bin_to_lib=$(echo -n "$bin_dir" | sed 's|[^/]*|..|g')
clean_path() {
echo -n "$1" | sed 's#//*#/#g'
echo -n "$1" | sed 's#//*#/#g'
}
printNeeded() {
print-needed-elf "$1" | grep '/nix/store/'
print-needed-elf "$1" | grep '/nix/store/'
}
finalizeBin() {
nuke-refs "$1"
nuke-refs "$1"
}
relpathPathPrint() {
relative-path "$1" "$2"
relative-path "$1" "$2"
}
bundleLib() {
local file="$1"
local install_dir="$out/$2"
mkdir -p $install_dir
local file="$1"
local install_dir="$out/$2"
mkdir -p $install_dir
local real_file
real_file=$(realpath "$file")
local real_file
real_file=$(realpath "$file")
local file_name
file_name=$(basename "$file")
local file_name
file_name=$(basename "$file")
local real_file_name
real_file_name=$(basename "$real_file")
local real_file_name
real_file_name=$(basename "$real_file")
local copied_file
copied_file="$install_dir/$real_file_name"
local copied_file
copied_file="$install_dir/$real_file_name"
local already_bundled="1"
if [ ! -f "$copied_file" ]; then
already_bundled="0"
cp "$real_file" "$copied_file"
chmod +w "$copied_file"
fi
local already_bundled="1"
if [ ! -f "$copied_file" ]; then
already_bundled="0"
cp "$real_file" "$copied_file"
chmod +w "$copied_file"
fi
if [ "$file_name" != "$real_file_name" ] && [ ! -f "$install_dir/$file_name" ]; then
(cd "$install_dir" && ln -sf "$real_file_name" "$file_name")
chmod +w "$install_dir/$file_name"
fi
if [ "$file_name" != "$real_file_name" ] && [ ! -f "$install_dir/$file_name" ]; then
(cd "$install_dir" && ln -sf "$real_file_name" "$file_name")
chmod +w "$install_dir/$file_name"
fi
if [ "$already_bundled" = "1" ]; then
return
fi
if [ "$already_bundled" = "1" ]; then
return
fi
echo "Bundling $real_file to $install_dir"
echo "Bundling $real_file to $install_dir"
local linked_libs
linked_libs=$(printNeeded "$real_file" || true)
for linked_lib in $linked_libs; do
bundleLib "$linked_lib" "lib"
done
local linked_libs
linked_libs=$(printNeeded "$real_file" || true)
for linked_lib in $linked_libs; do
bundleLib "$linked_lib" "lib"
done
if [ -n "$linked_libs" ]; then
relative_any_to_lib=$(relpathPathPrint "$out/$lib_dir" "$copied_file")
rpath=$(clean_path "\$ORIGIN/$relative_any_to_lib/$lib_dir")
patchelf --set-rpath "$rpath" "$copied_file"
fi
if [ -n "$linked_libs" ]; then
relative_any_to_lib=$(relpathPathPrint "$out/$lib_dir" "$copied_file")
rpath=$(clean_path "\$ORIGIN/$relative_any_to_lib/$lib_dir")
patchelf --set-rpath "$rpath" "$copied_file"
fi
finalizeBin "$copied_file"
finalizeBin "$copied_file"
}
bundleExe() {
local exe="$1"
local interpreter="$2"
local exe_name
exe_name=$(basename "$exe")
local copied_exe="$out/$exe_dir/$exe_name"
cp "$exe" "$copied_exe"
chmod +w "$copied_exe"
local rpath
rpath=$(clean_path "\$ORIGIN/$relative_bin_to_lib/$lib_dir")
patchelf --set-interpreter "$(basename "$interpreter")" --set-rpath "$rpath" "$copied_exe"
finalizeBin "$copied_exe"
bundleLib "$interpreter" "lib"
local linked_libs
linked_libs=$(printNeeded "$exe" || true)
for linked_lib in $linked_libs; do
bundleLib "$linked_lib" "lib"
done
# shellcheck disable=SC2016
printf '#!/bin/sh
local exe="$1"
local interpreter="$2"
local exe_name
exe_name=$(basename "$exe")
local copied_exe="$out/$exe_dir/$exe_name"
cp "$exe" "$copied_exe"
chmod +w "$copied_exe"
local rpath
rpath=$(clean_path "\$ORIGIN/$relative_bin_to_lib/$lib_dir")
patchelf --set-interpreter "$(basename "$interpreter")" --set-rpath "$rpath" "$copied_exe"
finalizeBin "$copied_exe"
bundleLib "$interpreter" "lib"
local linked_libs
linked_libs=$(printNeeded "$exe" || true)
for linked_lib in $linked_libs; do
bundleLib "$linked_lib" "lib"
done
# shellcheck disable=SC2016
printf '#!/bin/sh
set -eu
dir="$(cd -- "$(dirname "$(dirname "$(realpath "$0")")")" >/dev/null 2>&1 ; pwd -P)"
exec "$dir"/%s "$dir"/%s "$@"' \
"'$lib_dir/$(basename "$interpreter")'" \
"'$exe_dir/$exe_name'" \
> "$out/$bin_dir/$exe_name"
chmod +x "$out/$bin_dir/$exe_name"
"'$lib_dir/$(basename "$interpreter")'" \
"'$exe_dir/$exe_name'" \
> "$out/$bin_dir/$exe_name"
chmod +x "$out/$bin_dir/$exe_name"
}
remove_prefix() {
local full_path="$1"
local dynamic_prefix="$2"
echo "${full_path#$dynamic_prefix}"
local full_path="$1"
local dynamic_prefix="$2"
echo "${full_path#$dynamic_prefix}"
}
bundleCustom() {
local from_dir="$1"
local to_dir="$out/$2"
local files
files=$(find -L "$from_dir" -type f -regex '.*\(\.py\|\.pth\|\.asm\|__doc__\)$' || true)
local real_file_dir
local real_file_name
local install_dir
local install_path
for real_file in $files; do
real_file_dir=$(dirname "$(remove_prefix "$real_file" "$from_dir")")
real_file_name=$(basename "$real_file")
install_dir="$to_dir/$real_file_dir"
install_path="$install_dir/$real_file_name"
mkdir -p $install_dir
echo "Copy $real_file to $install_dir"
# TODO: check symlink like in bundleLib
if [ ! -f "$install_path" ]; then
cp "$real_file" "$install_path"
chmod +w "$install_path"
fi
done
local from_dir="$1"
local to_dir="$out/$2"
local files
files=$(find -L "$from_dir" -type f -regex '.*\(\.py\|\.pth\|\.asm\|__doc__\)$' || true)
local real_file_dir
local real_file_name
local install_dir
local install_path
for real_file in $files; do
real_file_dir=$(dirname "$(remove_prefix "$real_file" "$from_dir")")
real_file_name=$(basename "$real_file")
install_dir="$to_dir/$real_file_dir"
install_path="$install_dir/$real_file_name"
mkdir -p $install_dir
echo "Copy $real_file to $install_dir"
# TODO: check symlink like in bundleLib
if [ ! -f "$install_path" ]; then
cp "$real_file" "$install_path"
chmod +w "$install_path"
fi
done
}
bundleDirLib() {
local from_dir="$1"
local linked_libs_root
local path_dir
local linked_libs
local from_dir="$1"
local linked_libs_root
local path_dir
local linked_libs
bundleCustom "$from_dir" "lib"
bundleCustom "$from_dir" "lib"
linked_libs_root=$(find -L "$from_dir" -type f -regex '.*\.so\(\..*\|$\)' || true)
for linked_lib_root in $linked_libs_root; do
path_dir=$(dirname "$(remove_prefix "$linked_lib_root" "$from_dir")")
linked_libs_root=$(find -L "$from_dir" -type f -regex '.*\.so\(\..*\|$\)' || true)
for linked_lib_root in $linked_libs_root; do
path_dir=$(dirname "$(remove_prefix "$linked_lib_root" "$from_dir")")
bundleLib "$linked_lib_root" "lib/$path_dir"
bundleLib "$linked_lib_root" "lib/$path_dir"
linked_libs=$(printNeeded "$linked_lib_root" || true)
for linked_lib in $linked_libs; do
bundleLib "$linked_lib" "lib"
linked_libs=$(printNeeded "$linked_lib_root" || true)
for linked_lib in $linked_libs; do
bundleLib "$linked_lib" "lib"
done
done
done
}
exe_interpreter=$(patchelf --print-interpreter "$binary" 2>/dev/null || true)
exe_interpreter=$(patchelf --print-interpreter "$binary" 2> /dev/null || true)
if [ -n "$exe_interpreter" ]; then
mkdir -p "$out/$exe_dir" "$out/$bin_dir" "$out/$lib_dir"
bundleExe "$binary" "$exe_interpreter"
mkdir -p "$out/$exe_dir" "$out/$bin_dir" "$out/$lib_dir"
bundleExe "$binary" "$exe_interpreter"
else
mkdir -p "$out/$exe_dir" "$out/$bin_dir" "$out/$lib_dir"
bundleDirLib "$binary"
mkdir -p "$out/$exe_dir" "$out/$bin_dir" "$out/$lib_dir"
bundleDirLib "$binary"
fi

Loading…
Cancel
Save