diff options
author | Daniel Robbins <drobbins@funtoo.org> | 2011-05-22 14:33:50 -0600 |
---|---|---|
committer | Daniel Robbins <drobbins@funtoo.org> | 2011-05-22 14:33:50 -0600 |
commit | fb71ec77e2d092d2b58ec417d2bc3f56d72f833b (patch) | |
tree | 7334afda92679fdd5399fe48e06ae116f82037a1 | |
parent | adding dynagrab.sh - for grabbing shared libraries required for binaries (diff) | |
download | genkernel-fb71ec77e2d092d2b58ec417d2bc3f56d72f833b.tar.gz genkernel-fb71ec77e2d092d2b58ec417d2bc3f56d72f833b.tar.bz2 genkernel-fb71ec77e2d092d2b58ec417d2bc3f56d72f833b.zip |
improved, working dynagrab
-rwxr-xr-x | dynagrab.sh | 65 |
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 |