mib2c-update
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:7k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #!/bin/bash
  2. #
  3. # $Id: mib2c-update,v 1.10.2.2 2005/02/25 22:03:18 rstory Exp $
  4. #
  5. # script to merge custom code into updated mib2c code
  6. #
  7. #----- example .mib2c-updaterc -----
  8. #UPDATE_OID=ipAddressTable
  9. #UPDATE_CONF=mib2c.mfd.conf
  10. #UPDATE_MIB2C_OPTS=
  11. #UPDATE_NOPROBE=1
  12. #----- example .mib2c-updaterc -----
  13. #----------------------------------------------------------------------
  14. #
  15. # defaults
  16. #
  17. UPDATE_CURR=$PWD
  18. UPDATE_ORIG=$PWD/.orig
  19. UPDATE_NEW=$PWD/.new
  20. UPDATE_MERGED=$PWD/.merged
  21. UPDATE_BACKUP=$PWD/.backup
  22. UPDATE_PATCH=$PWD/.patch
  23. #
  24. # number of diff context lines / patch fuzz factor
  25. #
  26. FUZZ=5
  27. #----------------------------------------------------------------------
  28. #
  29. debug()
  30. {
  31.     if [ $UPDATE_DEBUG -ge 1 ]; then
  32.         echo $1
  33.     fi
  34. }
  35. error()
  36. {
  37.     echo "ERROR: $@" > /dev/stderr
  38. }
  39. die()
  40. {
  41.     error "$@"
  42.     exit 99
  43. }
  44. safecd()
  45. {
  46.     cd $1
  47.     if [ $? -ne 0 ]; then
  48.         die "changing to directory $1 from $PWD failed!"
  49.     fi
  50. }
  51. safecp()
  52. {
  53.     cp $@
  54.     if [ $? -ne 0 ]; then
  55.         die "'cp $@' failed!"
  56.     fi
  57. }
  58. #----------------------------------------------------------------------
  59. #
  60. check_setup()
  61. {
  62.     rc=1
  63.     for d in $UPDATE_ORIG $UPDATE_NEW $UPDATE_MERGED $UPDATE_PATCH $UPDATE_BACKUP $UPDATE_BACKUP/curr $UPDATE_BACKUP/orig
  64.     do
  65.         if [ ! -d $d ]; then
  66.             echo "Creating missing directory $d"
  67.             mkdir -p $d
  68.             if [ $? -ne 0 ]; then
  69.                 error "Could not create directory $d"
  70.                 rc=0
  71.             fi
  72.         fi
  73.     done
  74.     if [ -z "$UPDATE_OID" ]; then
  75.         error "Environment variable missing! Set UPDATE_OID in .mib2c-updaterc"
  76.         rc=0
  77.     fi
  78.     if [ -z "$UPDATE_CONF" ]; then
  79.         error "Environment variable missing! Set UPDATE_CONF in .mib2c-updaterc"
  80.         rc=0
  81.     fi
  82. #    if [ -z "$UPDATE_" ]; then
  83. #        error "Environment variable missing! Set UPDATE_ in .mib2c-updaterc"
  84. #        rc=0
  85. #    fi
  86.     if [[ $rc -eq 0 && $UPDATE_NOPROBE -ne 1 ]]; then
  87.         mib2c -c unknown  > /dev/null 2>&1
  88.         if [ $? -eq 0 ]; then
  89.             error "WARNING: mib2c returns 0 on error conditions!"
  90.             rc=0
  91.         fi
  92.     fi
  93.     return $rc
  94. }
  95. #----------------------------------------------------------------------
  96. #
  97. do_diff()
  98. {
  99.     # u | c unified | context
  100.     # r     recursive
  101.     # b     ignore blank lines
  102.     # w     ignore white space
  103.     # p     Show which C function each change is in.
  104.     # d     smaller changes
  105.     #    --exclude='*Makefile' --unidirectional-new-file
  106.     safecd $1
  107.     diff -U $FUZZ -p -b -w --show-c-function -I "$Id:" 
  108.         --exclude='default-*' --exclude='*.orig' --exclude='*.rej' 
  109.         --exclude='*~' --exclude='*.bak' --exclude='.*' --exclude="#*" 
  110.         --exclude="*.deps" 
  111.         --exclude='*.o' --exclude='*.lo' --exclude='*.a' --exclude='*.la' 
  112.         --new-file . $2 > $3
  113.     local rc=$?
  114.     if [ $rc -eq 0 ]; then
  115.         rm -f $3
  116.     fi
  117.     safecd -
  118.     return $rc
  119. }
  120. #----------------------------------------------------------------------
  121. #
  122. do_cp()
  123. {
  124.     src=$1
  125.     dest=$2
  126.     if [ ! -d $dest ]; then
  127.         die "dest $dest is not a directory"
  128.     fi
  129.     if [ ! -d $src ]; then
  130.         die "src $src is not a directory"
  131.     fi
  132.     safecd $src
  133.     files=`ls *$UPDATE_OID* 2>/dev/null| egrep "(file|onf|m2d|txt|.c|.h)$"`
  134.     if [ -z "$files" ]; then
  135.        echo "   no files to copy from $src"
  136.     else
  137.        safecp $files $dest
  138.        if [ $? -ne 0 ]; then
  139.            die "error while copying files from $src to $dest in $PWD"
  140.        fi
  141.     fi
  142.     safecd -
  143. }
  144. #----------------------------------------------------------------------
  145. #
  146. save_diff()
  147. {
  148.     echo "Creating patch for your custom code"
  149.     cnt=`ls $UPDATE_CURR/*$UPDATE_OID* 2>/dev/null | egrep "(file|onf|m2d|txt|.c|.h)$" | grep -v "^default-" | wc -l`
  150.     if [ $cnt -eq 0 ]; then
  151.         echo "   no custom code!"
  152.         return
  153.     fi
  154.     do_diff $UPDATE_ORIG/ $UPDATE_CURR/ $UPDATE_PATCH/custom.$UPDATE_DATE
  155.     if [ $? -eq 0 ]; then
  156.         echo "   no custom code changes found."
  157.     fi
  158. }
  159. #----------------------------------------------------------------------
  160. #
  161. gen_code()
  162. {
  163.     files=`ls default-* 2>/dev/null `
  164.     if [ ! -z "$files" ]; then
  165.        safecp $files $UPDATE_NEW/
  166.     fi
  167.     safecd $UPDATE_NEW
  168.     files=`ls *$UPDATE_OID* 2>/dev/null | grep -v "^default-"`
  169.     if [ ! -z "$files" ]; then
  170.        rm -f $files > /dev/null 2>&1 
  171.     fi
  172.     echo "mib2c $@ -c $UPDATE_CONF $UPDATE_MIB2C_OPTS $UPDATE_OID"
  173.     mib2c $@ -c $UPDATE_CONF $UPDATE_MIB2C_OPTS $UPDATE_OID
  174.     if [ $? -ne 0 ]; then
  175.         die "bad rc $rc from mib2 while generation new code."
  176.     fi
  177.     safecd -
  178. }
  179. #----------------------------------------------------------------------
  180. #
  181. check_new()
  182. {
  183.     echo "Checking for updates to generated code"
  184.     do_diff $UPDATE_ORIG/ $UPDATE_NEW/ $UPDATE_PATCH/generated.$UPDATE_DATE
  185.     if [ $? -eq 0 ]; then
  186.         echo "Generated code has not changed."
  187.         safecd $UPDATE_PATCH
  188.         files=`ls *.$UPDATE_DATE 2>/dev/null `
  189.         if [ ! -z "$files" ]; then
  190.            rm $files
  191.         fi
  192.         exit 0
  193.     fi
  194. }
  195. #----------------------------------------------------------------------
  196. #
  197. merge_code()
  198. {
  199.     files=`ls $UPDATE_MERGED/* 2>/dev/null `
  200.     if [ ! -z "$files" ]; then
  201.        rm $UPDATE_MERGED/*
  202.     fi
  203.     do_cp $UPDATE_NEW $UPDATE_MERGED
  204.     if [ -f $UPDATE_PATCH/custom.$UPDATE_DATE ]; then
  205.        touch .M2C-UPDATE-MERGE-FAILED
  206.        echo "Patching new generated code"
  207.        patch -F $FUZZ -N -d $UPDATE_MERGED -p1 -i $UPDATE_PATCH/custom.$UPDATE_DATE
  208.        if [ $? -ne 0 ]; then
  209.            error "Could not apply custom code patch to new generated code"
  210.            die   "You must fix the problem in $UPDATE_MERGED, and then re-run mib2c-update."
  211.        fi
  212.        rm .M2C-UPDATE-MERGE-FAILED
  213.     fi
  214. }
  215. copy_merged()
  216. {
  217.     echo "Backing up current code to $UPDATE_BACKUP/curr"
  218.     do_cp $UPDATE_CURR $UPDATE_BACKUP/curr/
  219.     echo "Copying merged code to $UPDATE_CURR"
  220.     do_cp $UPDATE_MERGED $UPDATE_CURR/
  221.     echo "Backing up original code to $UPDATE_BACKUP/orig"
  222.     do_cp $UPDATE_ORIG $UPDATE_BACKUP/orig/
  223.     echo "Copying new code to $UPDATE_ORIG"
  224.     do_cp $UPDATE_NEW $UPDATE_ORIG/
  225. }
  226. #----------------------------------------------------------------------
  227. UPDATE_NOPROBE=0
  228. if [ -f $HOME/.mib2c-updaterc ]; then
  229.     . $HOME/.mib2c-updaterc
  230. fi
  231. if [ -f .mib2c-updaterc ]; then
  232.     . .mib2c-updaterc
  233. fi
  234. check_setup
  235. if [ $? -ne 1 ]; then
  236.     exit 1
  237. fi
  238. UPDATE_DATE=`date "+%F_%I.%M"`
  239. echo "Starting regneration of $UPDATE_OID using $UPDATE_CONF at $UPDATE_DATE"
  240. if [ -f .M2C-UPDATE-MERGE-FAILED ]; then
  241.     echo "It appears that the last run of mib2c-update was not able to merge"
  242.     echo "your changes automatically. Do you want to:"
  243.     echo
  244.     while : ; do
  245.         echo "[c)opy merged files to $UPDATE_CURR]"
  246.         echo "[r)e-run from scratch]"
  247.         echo "[q)uit]"
  248.         echo "(c|r|q) ?"
  249.         read ans
  250.         if [ "x$ans" == "xr" ]; then
  251.             rm .M2C-UPDATE-MERGE-FAILED
  252.             break
  253.         elif [ "x$ans" == "xc" ]; then
  254.             echo "Have you have manually merged all the"
  255.             echo "changes into the merged directory?"
  256.             echo "(y|n)"
  257.             read ans
  258.             if [ "x$ans" != "xy" ]; then
  259.                 echo "Ok. Try again after you've done that."
  260.                 exit 1
  261.             fi
  262.             rm .M2C-UPDATE-MERGE-FAILED
  263.             copy_merged
  264.             exit 0
  265.         fi
  266.     done
  267. fi
  268. save_diff
  269. gen_code $@
  270. check_new
  271. merge_code
  272. copy_merged