Changeset 111 in flair-dev
- Timestamp:
- Feb 4, 2020, 3:55:19 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tags/latest/scripts/distribution_specific_hack.sh
r110 r111 1 #check required version of a lib in host graphic lib (ie i965) 2 #return 1 if robomap3 version is not sufficient 3 function check_required_lib_ver () { 4 DRIVER_LIB=$1 5 PATTERN=$2 6 LIB=$3 7 8 #get the highest required version of $PATTERN 9 VER_REQUIRED=$(objdump -T $DRIVER_LIB | grep $PATTERN | sed -e 's/.*'$PATTERN'_\(.*\) .*/\1/' | sort -uV | tail -1) 10 #get currently used $LIB 11 LIB_PROVIDED=$(ldd $EXEC | grep $LIB | sed -e 's/.*=> \(.*\) (.*/\1/') 12 #get the highest version of $PATTERN supported by the $LIB 13 VER_PROVIDED=$(objdump -T $LIB_PROVIDED | grep ".*"$PATTERN"_[0-9.]*$" | sed -e 's/.*'$PATTERN'_\(.*\)/\1/' | sort -V | tail -1) 14 if [ $(echo -e "$VER_PROVIDED\n$VER_REQUIRED" | sort -V | tail -n1) != $VER_PROVIDED ]; then 15 echo "We must use the local system $LIB" 16 return 1 17 fi 18 } 19 1 20 if [ -f /etc/lsb-release ]; then 2 21 . /etc/lsb-release … … 15 34 fi 16 35 17 #special actions if we use 3D 18 ldd $EXEC | grep "libGL.so" > /dev/null 19 if [ $? -eq 0 ]; then 36 fi 37 38 #special actions if we use 3D 39 ldd $EXEC | grep "libGL.so" > /dev/null 40 if [ $? -eq 0 ]; then 20 41 #allow root access to the X server 21 42 xhost si:localuser:root 22 43 23 #Mesa DRI driver may need a lib stdc++more recent than robomap3's44 #Mesa DRI driver may need a lib more recent than robomap3's 24 45 ldconfig -p | grep mesa > /dev/null 25 46 if [ $? -eq 0 ]; then 26 read DRI_CARD_MAJOR DRI_CARD_MINOR < <(stat -c '%t %T' /dev/dri/card0) 27 DRIVER=$(cat /sys/dev/char/$((16#$DRI_CARD_MAJOR)):$((16#$DRI_CARD_MINOR))/device/uevent | grep DRIVER | cut -d= -f2) 28 echo "Mesa DRI driver is $DRIVER" 29 DRIVER_LIB=$(LIBGL_DEBUG=verbose glxinfo 2>&1 | grep "\.so" | tail -n 1 | grep -o '/.*\.so') 30 #get the highest required version of CXXABI 31 CXXABI_REQUIRED=$(objdump -T $DRIVER_LIB | grep CXXABI | sed -e 's/.*CXXABI_\(.*\) .*/\1/' | sort -uV | tail -1) 32 #get currently used libstdc++ 33 LIBSTDCXX_PROVIDED=$(ldd $EXEC | grep libstdc++ | sed -e 's/.*=> \(.*\) (.*/\1/') 34 #get the highest version of CXXABI supported by the libstdc++ 35 CXXABI_PROVIDED=$(objdump -T $LIBSTDCXX_PROVIDED | grep ".*CXXABI_[0-9.]*$" | sed -e 's/.*CXXABI_\(.*\)/\1/' | sort -V | tail -1) 36 if [ $(echo -e "$CXXABI_PROVIDED\n$CXXABI_REQUIRED" | sort -V | tail -n1) != $CXXABI_PROVIDED ]; then 37 echo "We must use the local system libstdc++" 38 export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 39 fi 47 read DRI_CARD_MAJOR DRI_CARD_MINOR < <(stat -c '%t %T' /dev/dri/card0) 48 DRIVER=$(cat /sys/dev/char/$((16#$DRI_CARD_MAJOR)):$((16#$DRI_CARD_MINOR))/device/uevent | grep DRIVER | cut -d= -f2) 49 echo "Mesa DRI driver is $DRIVER" 50 DRIVER_LIB=$(LIBGL_DEBUG=verbose glxinfo 2>&1 | grep "\.so" | tail -n 1 | grep -o '/.*\.so') 51 52 #todo: make a list, find a complete one! 53 check_required_lib_ver $DRIVER_LIB GLIBC libm.so.6 54 if [ "$?" = "1" ]; then 55 ADDED_LIBS=$(ldconfig -p | grep libm.so.6 | grep libc6,x86-64 | cut -d'>' -f2) 56 fi 57 58 check_required_lib_ver $DRIVER_LIB CXXABI libstdc++.so.6 59 if [ "$?" = "1" ]; then 60 ADDED_LIBS="$ADDED_LIBS:$(ldconfig -p | grep libstdc++.so.6 | grep libc6,x86-64 | cut -d'>' -f2)" 61 fi 62 #remove whitespace 63 #add libs to LD_PRELOAD if version robomap3 version is not sufficient 64 export LD_PRELOAD="$(echo -e "${ADDED_LIBS}" | tr -d '[:space:]')" 40 65 fi 41 fi42 66 fi 43 67 68 69
Note:
See TracChangeset
for help on using the changeset viewer.