]> pd.if.org Git - zpackage/blobdiff - zpm-getlibs
large commit of C work
[zpackage] / zpm-getlibs
diff --git a/zpm-getlibs b/zpm-getlibs
new file mode 100755 (executable)
index 0000000..1e7fefc
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+# list a files libraries
+
+LD_TRACE_LOADED_OBJECTS=1  /lib/ld-linux-x86-64.so.2 
+
+verbose=0
+all=0
+script=0
+check=0
+
+while getopts avs arg; do
+       case $arg in
+               a) all=1;;
+               v) verbose=1;;
+       c) check=1;;
+       s) script=1;;
+       ?) printf 'usage: zpm-preserve [-av] <pkgname>\n'
+               exit 1
+               ;;
+       esac
+done
+
+pkgname="$1"
+
+pacman -Qlq "$pkgname" | while read file; do
+       if [ ! -f "$file" ]; then continue; fi
+       base=$(basename "$file")
+       if [ $all -eq 0 ] && [ "$base" = "${base#lib}" ]; then continue; fi
+
+       if [ $check -eq 1 ]; then
+               elftype -e "$file"
+               rv=$?
+               if [ $rv -ne 0 ]; then continue; fi
+               for lib in $(zpm getlibs $file | grep preserve); do
+                       echo $pkgname $file $lib
+               done
+               continue
+       fi
+
+       soname=$(soname $file)
+       if [ $? -eq 0 ] && [ -n "$soname" ]; then
+               dir=$(dirname "$file")
+               if [ "$script" -ne 0 ]; then
+                       printf 'mkdir -p "%s"\n' "$dir/preserve"
+                       printf 'ln -f "%s" "%s"\n' "$file" "$dir/preserve/"
+               else
+                       mkdir -p "$dir/preserve"
+                       if [ "$verbose" -gt 0 ]; then
+                               printf '# preserving %s\n' "$file"
+                       fi
+                       ln -f "$file" "$dir/preserve/"
+               fi
+       fi
+done