FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Fedora User

 
 
LinkBack Thread Tools
 
Old 12-15-2007, 04:39 AM
Bill Nottingham
 
Default Add buildinstall.functions (DSO dependency finding)

120 0 scripts/buildinstall.functions
--
1.5.3.7

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 
Old 12-15-2007, 04:43 AM
Bill Nottingham
 
Default Add buildinstall.functions (DSO dependency finding)

---
scripts/buildinstall.functions | 120 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 120 insertions(+), 0 deletions(-)

diff --git a/scripts/buildinstall.functions b/scripts/buildinstall.functions
new file mode 100755
index 0000000..fcc4e46
--- /dev/null
+++ b/scripts/buildinstall.functions
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+# pulled right out of mkinitrd....
+DSO_DEPS=""
+LDSO=""
+get_dso_deps() {
+ root="$1" ; shift
+ bin="$1" ; shift
+ DSO_DEPS=""
+
+ declare -a FILES
+ declare -a NAMES
+
+ # this is a hack, but the only better way requires binutils or elfutils
+ # be installed. i.e., we need readelf to find the interpretter.
+ if [ -z "$LDSO" ]; then
+ for ldso in $root/lib*/ld*.so* ; do
+ [ -L $ldso ] && continue
+ [ -x $ldso ] || continue
+ $ldso --verify $bin >/dev/null 2>&1 || continue
+ LDSO=$(echo $ldso |sed -e "s,$root,,")
+ done
+ fi
+
+ # I still hate shell.
+ declare -i n=0
+ while read NAME I0 FILE ADDR I1 ; do
+ [ "$FILE" == "not" ] && FILE="$FILE $ADDR"
+ NAMES[$n]="$NAME"
+ FILES[$n]="$FILE"
+ let n++
+ done << EOF
+ $(chroot $root env LD_TRACE_PRELINKING=1 LD_WARN=
+ LD_TRACE_LOADED_OBJECTS=1 $LDSO $bin)
+EOF
+
+ [ ${#FILES[*]} -eq 0 ] && return 1
+
+ # we don't want the name of the binary in the list
+ if [ "${FILES[0]}" == "$bin" ]; then
+ FILES[0]=""
+ NAMES[0]=""
+ [ ${#FILES[*]} -eq 1 ] && return 1
+ fi
+
+ declare -i n=0
+ while [ $n -lt ${#FILES[*]} ]; do
+ FILE="${FILES[$n]}"
+ if [ "$FILE" == "not found" ]; then
+ cat 1>&2 <<EOF
+There are missing files on your system. The dynamic object $bin
+requires ${NAMES[$n]} n order to properly function. mkinitrd cannot continue.
+EOF
+ exit 1
+ fi
+ case "$FILE" in
+ /lib*)
+ TLIBDIR=`echo "$FILE" | sed 's,(/lib[^/]*)/.*$,1,'`
+ BASE=`basename "$FILE"`
+ # Prefer nosegneg libs over direct segment accesses on i686.
+ if [ -f "$TLIBDIR/i686/nosegneg/$BASE" ]; then
+ FILE="$TLIBDIR/i686/nosegneg/$BASE"
+ # Otherwise, prefer base libraries rather than their optimized
+ # variants.
+ elif [ -f "$TLIBDIR/$BASE" ]; then
+ FILE="$TLIBDIR/$BASE"
+ fi
+ ;;
+ esac
+ dynamic="yes"
+ let n++
+ done
+
+ DSO_DEPS="${FILES[@]}"
+
+ for l in $(chroot $root find /lib* -maxdepth 1 -type l -name ld*.so*); do
+ [ "$(chroot $root readlink -f $l)" == "$LDSO" ] && DSO_DEPS="$DSO_DEPS $l"
+ done
+
+ [ -n "$DEBUG" ] && echo "DSO_DEPS for $bin are $DSO_DEPS"
+}
+
+instFile() {
+ FILE=$1
+ DESTROOT=$2
+
+ [ -n "$DEBUG" ] && echo "Installing $FILE"
+ if [ -e $DESTROOT/$FILE -o -L $DESTROOT/$FILE ]; then
+ return
+ elif [ ! -d $DESTROOT/`dirname $FILE` ]; then
+ mkdir -p $DESTROOT/`dirname $FILE`
+ fi
+ if [ -L $FILE ]; then
+ cp -al $FILE $DESTROOT/`dirname $FILE`
+ instFile ./`dirname $FILE`/`readlink $FILE` $DESTROOT
+ return
+ else
+ cp -aL $FILE $DESTROOT/`dirname $FILE`
+ fi
+
+ file $FILE | grep -q ": ELF" && {
+ get_dso_deps $(pwd) "$FILE"
+ local DEPS="$DSO_DEPS"
+ for x in $DEPS ; do
+ instFile ./$x $DESTROOT
+ done
+ }
+}
+
+instDir() {
+ DIR=$1
+ DESTROOT=$2
+
+ [ -n "$DEBUG" ] && echo "Installing $DIR"
+ if [ -d $DESTROOT/$DIR -o -h $DESTROOT/$DIR ]; then
+ return
+ fi
+ cp -a --parents $DIR $DESTROOT/
+}
+
--
1.5.3.7

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 

Thread Tools




All times are GMT. The time now is 10:10 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org