source: flair-dev/tags/latest/scripts/distribution_specific_hack.sh @ 111

Last change on this file since 111 was 111, checked in by Sanahuja Guillaume, 9 months ago

up for libgl

File size: 2.4 KB
Line 
1#check required version of a lib in host graphic lib (ie i965)
2#return 1 if robomap3 version is not sufficient
3function 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
20if [ -f /etc/lsb-release ]; then
21  . /etc/lsb-release
22fi
23
24if [ _$DISTRIB_ID = _Ubuntu ]; then
25  #tested on Ubuntu 17.10
26  #we must run as root
27  if [ $EUID -ne 0 ]; then
28    exec sudo -E $0 $*
29  fi
30
31  #we must run in root cgroup to escape possible restrictions on scheduling
32  if [ -d /sys/fs/cgroup/cpu ]; then
33    echo $$ > /sys/fs/cgroup/cpu/tasks
34  fi
35
36fi
37
38#special actions if we use 3D
39ldd $EXEC | grep "libGL.so" > /dev/null
40if [ $? -eq 0 ]; then
41    #allow root access to the X server
42    xhost si:localuser:root
43
44    #Mesa DRI driver may need a lib more recent than robomap3's
45    ldconfig -p | grep mesa > /dev/null
46    if [ $? -eq 0 ]; then
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:]')"
65    fi
66fi
67
68
69
Note: See TracBrowser for help on using the repository browser.