# preserve a packages libraries
-pkgname=$1
+verbose=0
+all=0
+script=0
+check=0
-pacman -Qlq "$1" | while read file; do
+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)
+ soname=$(zpm soname $file)
if [ $? -eq 0 ] && [ -n "$soname" ]; then
dir=$(dirname "$file")
- mkdir -p $dir/preserve
- ln -f $file "$dir/preserve/"
+ 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