aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Robbins <drobbins@funtoo.org>2011-05-22 14:33:50 -0600
committerDaniel Robbins <drobbins@funtoo.org>2011-05-22 14:33:50 -0600
commitfb71ec77e2d092d2b58ec417d2bc3f56d72f833b (patch)
tree7334afda92679fdd5399fe48e06ae116f82037a1
parentadding dynagrab.sh - for grabbing shared libraries required for binaries (diff)
downloadgenkernel-fb71ec77e2d092d2b58ec417d2bc3f56d72f833b.tar.gz
genkernel-fb71ec77e2d092d2b58ec417d2bc3f56d72f833b.tar.bz2
genkernel-fb71ec77e2d092d2b58ec417d2bc3f56d72f833b.zip
improved, working dynagrab
-rwxr-xr-xdynagrab.sh65
1 files changed, 42 insertions, 23 deletions
diff --git a/dynagrab.sh b/dynagrab.sh
index ea4c4e56..53152bec 100755
--- a/dynagrab.sh
+++ b/dynagrab.sh
@@ -3,33 +3,52 @@
linky() {
out=$1
shift
- case $1 in
- */ld-linux*.so.2)
- if [ ! -e $out/$1 ]; then
- echo "cp $1 $out"
- return
- fi
- ;;
- esac
- lib=$3
- while [ 1 ]
- do
- if [ -L $lib ]; then
- realfile=$(readlink $lib)
- echo "ln -sf $realfile $out/${lib##*/}"
- lib=$(readlink -f $lib)
- else
- echo "cp $lib $out"
- break
- fi
- done
+ if [ "$*" = "statically linked" ]
+ then
+ echo "static"
+ return
+ elif [ "$*" = "not a dynamic executable" ]
+ then
+ echo "static"
+ return
+ elif [ "${1:0:1}" == "/" ]
+ then
+ libsrcpath="$1"
+ elif [ "${3:0:1}" == "(" ]
+ then
+ # no target
+ return
+ else
+ libsrcpath=$3
+ fi
+ libname=${libsrcpath##*/}
+ libnewpath=$out/${libname}
+ #echo "libsrcpath $libsrcpath"
+ #echo "libname $libname"
+ #echo "libnewpath $libnewpath"
+ if [ -L $libsrcpath ]; then
+ linkdest=$(readlink $libsrcpath)
+ #[ ! -L $libnewpath ] &&
+ echo "ln -sf $linkdest $libnewpath"
+ else
+ #[ ! -e $libnewpath ] &&
+ echo "cp $libsrcpath $libnewpath"
+ dynagrab $libsrcpath $out
+ fi
}
dynagrab() {
- ldd $1 | grep -v 'linux-vdso\.so\.1' | while read line; do
+ ldd $1 | while read line; do
linky $2 $line
done
}
-# grab all shared libs required by binary $1 and copy to destination directory $2:
-dynagrab $1 $2
+binarygrab() {
+ [ ! -e $2/bin ] && echo "install -d $2/bin"
+ [ ! -e $2/lib ] && echo "install -d $2/lib"
+ echo "cp $1 $2/bin"
+ dynagrab $1 $2/lib
+}
+
+# grab all shared libs required by binary $1 and copy to destination chroot/initramfs root $2:
+binarygrab $1 $2