Guest User

Untitled

a guest
Sep 22nd, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.80 KB | None | 0 0
  1. #
  2. # (c) Eduard Bloch <blade@debian.org>, 2003-...
  3. #
  4. # generic methods for module-assistant controled packages
  5. # to be sourced or copied as example code
  6.  
  7. # autodetecting values. They may be overriden including parent.
  8.  
  9. guess_source=${MA_SOURCE_PKG:-`basename $0`}
  10. export guess_source
  11.  
  12. guess_package=${guess_source%-src}
  13. guess_package=${guess_package%-source}
  14. guess_package=${guess_package%-modules}
  15. guess_package=${guess_package%-driver}
  16. guess_package=${guess_package%-kernel}
  17. export guess_package
  18.  
  19. topdir=${MOD_TOPDIR:-/usr/src}
  20. aptget=${MA_APTCMD:-apt-get}
  21.  
  22. if test -n "$MA_DEBUG" ; then
  23.    set -x
  24. fi
  25.  
  26. if [ "$TARBALL" ] ; then
  27.    tarball="$TARBALL"
  28. else
  29.    for suf in .tar.bz2 .tar.gz .tgz ; do
  30.       for presuf in "" -module -modules -driver -drivers -source -src -kernel-source -kernel-src ; do
  31.          if [ -r "$MOD_SRCDIR" -a -e "$MOD_SRCDIR/$guess_package$presuf$suf" ] ; then
  32.             tarball=$MOD_SRCDIR/$guess_package$presuf$suf
  33.             break 2;
  34.          fi
  35.          if [ -e /usr/src/$guess_package$presuf$suf ] ; then
  36.             tarball=/usr/src/$guess_package$presuf$suf
  37.             break 2;
  38.          fi
  39.       done
  40.    done
  41. fi
  42.  
  43. MODULE_LOC=${MODULE_LOC:-/usr/src/modules}
  44. builddir_base=${BUILDDIR:-$MODULE_LOC/$guess_package}
  45. pkgprefix=${PKGPREFIX:-$guess_package} # target base name something like sl-modules
  46. sourcepkg=${SOURCEPKG:-$guess_source} # installed package that provides the source
  47.  
  48. MA_VARDIR=${MA_VARDIR:-/var/cache/modass}
  49.  
  50. if [ `id -u` != 0 ] ; then
  51.     if test -n "$ROOT_CMD" ; then
  52.         :
  53.     else
  54.         if which fakeroot >/dev/null 2>&1 ; then
  55.             ROOT_CMD=fakeroot
  56.         else
  57.             clear
  58.             echo
  59.             echo Warning, you are not root and fakeroot is not installed
  60.             sleep 3
  61.         fi
  62.     fi
  63. fi
  64.  
  65. # and better not export ROOT_CMD, the targets in debian/rules do not
  66. # need to run fakeroot inside fakeroot
  67.  
  68. action () {
  69.    if [ "$VERBOSE" ] ; then
  70.       echo " $@" >&2
  71.       "$@"
  72.    elif [ "$DRYRUN" ] ; then
  73.       echo " $@" >&2
  74.    else
  75.       "$@"
  76.    fi
  77. }
  78.  
  79. locate_dir () {
  80.    for suf in "" -module -modules -driver -drivers -source -src -kernel-source -kernel-src -module-source -module-src -kernel; do
  81.       if [ -d "$builddir_base$suf/" ] ; then
  82.          builddir=$builddir_base$suf
  83.          return 0;
  84.       fi
  85.    done
  86.    return 1;
  87. }
  88.  
  89. locate_dir
  90.  
  91. update () {
  92.    export sourcepkg
  93.    #   action $dpkg -s $sourcepkg  2>/dev/null | grep ^Version: | cut -f2 -d\  > \
  94.    #   $MA_VARDIR/cache/$pkgprefix.cur_version|| rm $MA_VARDIR/cache/$pkgprefix.cur_version
  95.  
  96.    if test -e $MA_VARDIR/$sourcepkg.apt_policy ; then
  97.       newinfo=`cat $MA_VARDIR/$sourcepkg.apt_policy`
  98.    else
  99.       newinfo=`LANG=C apt-cache policy $sourcepkg 2>/dev/null`
  100.    fi
  101.    IFS=''
  102.    if test "$newinfo" ; then
  103.       export newinfo
  104.       echo -n $newinfo |tr -s " " | grep Candidate: | cut -f3 -d\  | tr -d '\n' > \
  105.       $MA_VARDIR/$sourcepkg.avail_version
  106.       instvers=$(echo -n $newinfo |tr -s " " | grep Installed: | cut -f3  -d\  | tr -d '\n')
  107.       if [ "$instvers" = "(none)" ] ; then
  108.          rm -f $MA_VARDIR/$sourcepkg.cur_version
  109.       else
  110.          echo -n $instvers > $MA_VARDIR/$sourcepkg.cur_version
  111.       fi
  112.    else
  113.       rm -f $MA_VARDIR/$sourcepkg.avail_version $MA_VARDIR/$sourcepkg.cur_version
  114.    fi
  115. }
  116.  
  117. cur_version() {
  118.    cat $MA_VARDIR/$sourcepkg.cur_version 2>/dev/null
  119. }
  120.  
  121. avail_version() {
  122.    cat $MA_VARDIR/$sourcepkg.avail_version
  123. }
  124.  
  125. build() {
  126.    shift
  127.    eval `echo "$@" | tr ' ' '\n' | grep "KVERS\|KSRC\|KDREV"` 2>&1
  128.    logfile=$MA_VARDIR/$sourcepkg.buildlog.$KVERS.`date +%s`
  129.    flag=$MA_VARDIR/$sourcepkg.flag.$KVERS.`date +%s`
  130.    export KVERS KDREV KSRC MA_VARDIR logfile flag
  131.  
  132.    ( echo Build log starting, file: $logfile ;
  133.      echo Date: `date -R` ;
  134.      echo ;
  135.    ) > $logfile
  136.  
  137.    if test -z "$builddir" || ! test -d $builddir ; then
  138.       if ! unpack || ! locate_dir ; then
  139.          echo "Source not found. Run: module-assistant auto-install" | tee $logfile
  140.          exit 1;
  141.       fi
  142.    fi
  143.    cd $builddir || exit 1
  144.  
  145.    action $ROOT_CMD debian/rules kdist_clean | tee $logfile || true
  146.  
  147.    # bash cannot evaluate the return codes of the command in pipe, so
  148.    # make this groovy workaround. I have tried flag process and tail
  149.    # constructs, they all suck
  150.  
  151.    ( touch $flag && action $ROOT_CMD debian/rules "$@" 2>&1 || rm $flag
  152.    )  | tee -a $logfile
  153.  
  154.    # if flag has survived, okay, otherwise sth. failed
  155.    if test -f $flag ; then
  156.        file=`action $ROOT_CMD debian/rules echo-debfile 2>/dev/null`
  157.        if test -n "$file" && test -r "$file" ; then
  158.            echo "$file" >> $MA_VARDIR/$sourcepkg.buildstate.$KVERS
  159.        else
  160.            perl -mCwd -pe 'if (/^dpkg-deb/) { s,\.deb.*\n,.deb,; s,.*\p{Zs}[^\w./]+,,; s,//,/,g; $_=Cwd::abs_path($_)."\n";} else {undef $_}' $logfile >> $MA_VARDIR/$sourcepkg.buildstate.$KVERS
  161.        fi
  162.       # extra stuff
  163.       begin=`ls -l --time-style=+%s $flag | tr -s ' ' | cut -f6 -d\ `
  164.       echo Build time: $(expr $(date +%s) - $begin) seconds >> $logfile
  165.       rm -f $flag
  166.    else
  167.       tput smso ; echo BUILD FAILED! ;
  168.       tput rmso ; echo See $logfile for details.
  169.       exit 1;
  170.    fi
  171. }
  172.  
  173. lastpkg() {
  174. # assume that KVERS is in the environment
  175.    action tail -n1 $MA_VARDIR/$sourcepkg.buildstate.$KVERS 2>/dev/null
  176. }
  177.  
  178. unpack() {
  179.  
  180.    if test -n "$MA_NOTUNP" ; then return 0 ; fi
  181.  
  182.    cd $topdir || exit 1
  183. #   test -r $target || return 1
  184.    if test -e "$tarball" ; then
  185.       if ! test -r "$tarball" ; then
  186.          echo "Could not read $tarball!"
  187.          exit 1
  188.       fi
  189.    else
  190.       echo "The source tarball could not be found!"
  191.       echo "Package $sourcepkg not installed?"
  192.       echo "Running \"m-a -f get $sourcepkg\" may help."
  193.       exit 1
  194.   fi
  195.   echo Extracting the package tarball, $tarball, please wait...
  196.   if [ ${tarball%gz} != $tarball ] ; then
  197.       action tar --gzip -x -f $tarball
  198.   elif [ ${tarball%bz2} != $tarball ] ; then
  199.       action action tar --bzip2 -x -f $tarball
  200.   else
  201.       echo Unknown compression method, $tarball
  202.       exit 1
  203.   fi
  204. }
  205.  
  206. download() {
  207.    action $ROOT_CMD $aptget $REINSTALL install $sourcepkg
  208. }
  209.  
  210. # wipes the builddir
  211. clean() {
  212.    rm -rf $builddir
  213. }
  214.    
  215. purge() {
  216.    action rm -f `cat $MA_VARDIR/$sourcepkg.buildstate.*`
  217.    action rm -rf $builddir $MA_VARDIR/$sourcepkg.*
  218. }
  219.  
  220. installed() {
  221. #   action test "`cat $MA_VARDIR/$pkgprefix.cur_version` 2>/dev/null"
  222. #   exit $?
  223.   test -s $MA_VARDIR/$sourcepkg.cur_version && test -e $tarball
  224.   exit $?
  225. }
  226.  
  227. prefix() {
  228.    echo $pkgprefix
  229. }
  230.  
  231. echodebfile() {
  232.    eval `echo "$@" | tr ' ' '\n' | grep "KVERS\|KDREV\|KSRC"`
  233.    logfile=$MA_VARDIR/$sourcepkg.buildlog.$KVERS.`date +%s`
  234.    export KVERS KDREV KSRC MA_VARDIR
  235.    cd $builddir 2>/dev/null || exit 1
  236.    $ROOT_CMD debian/rules echo-debfile 2>/dev/null
  237. }
Add Comment
Please, Sign In to add comment