preserve
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:2k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. #! /bin/sh
  2. # preserve:  tool to resolve abscence of external tools
  3. #
  4. # This file is part of GNU SQL Server
  5. # processing of preserved files 
  6. # usage: preserve save/restore case file 
  7. # where case is : 
  8. # --bison
  9. # --flex
  10. # --rpcgen [incdir] 
  11. # --custom="extension list_of_derivative_extensions"
  12. #
  13. # Contacts: gss@ispras.ru
  14. #
  15. #set -xv
  16. if [ $1 = save ] ; then
  17.   preserve=yes
  18. else
  19.   preserve=no
  20. fi
  21. fn=$3
  22. case "$2" in
  23.  --bison) 
  24.     extension="y"
  25.     subst_list=".c .h"
  26.     ;;
  27.  --flex) 
  28.     extension="l"
  29.     subst_list=".c"
  30.     ;;
  31.  --rpcgen) 
  32.     extension="x"
  33.     subst_list=".h _svc.c _clnt.c _xdr.c"
  34.     if [ $preserve = 'no' ]; then ## simulate rpcgen
  35.       incdir=$fn
  36.       fn=$4
  37.     fi
  38.     ;;
  39.  --custom=*)
  40.     set `echo $2 | sed 's/--custom=//g'`
  41.     extension=$1;  shift;  subst_list=$*
  42.     ;;
  43.  *)
  44.     echo preserve: incorrect parameters
  45.     exit 1
  46.     ;;
  47. esac
  48. fn_root=`echo $fn | sed "s/[.]${extension}//g"`
  49. for tail in $subst_list ; do
  50.   cfn=${fn_root}${tail}
  51.   if [ $preserve = 'no' ] ; then
  52.     ## file.preserve has to be in distribution
  53.     if [ ! -f ${cfn}.preserve ] ; then
  54.       echo "cant find file $cfn"
  55.       exit 1
  56.     fi 
  57.     cp -p ${cfn}.preserve ${cfn}
  58.     if [ $extension = "x" -a $tail = ".h" ] ; then ## rpcgen header
  59.       `echo $0 | sed 's/preserve$/move-if-change/1'` mv ${cfn} ${incdir}/${cfn}
  60.     fi
  61.   else # let's preserve file
  62.     if [ -f ${cfn}.preserve -a `ls -t ${cfn}.preserve ${fn} | head -1` = ${cfn}.preserve ]; then
  63.       echo "$cfn has already preserved"
  64.     elif [ -f ${cfn} ] ; then
  65.       cat ${cfn} | sed 's/#line.*$//g' > ${cfn}.preserve
  66.       if [ $extension = "l" ] ; then
  67.         echo "int yywrap() { return 1; }" >>${cfn}.preserve
  68.       fi
  69.     elif [ $extension = "x" -a $tail = ".h" ] ; then
  70.       ## it's possible in the case of rpcgen generated header file
  71.       fn_only=`echo $fn_root | sed "s/[^/]*[/]//g"`
  72.       cat `find . -name ${fn_only}${tail} -print | head -1` | sed "s/#line.*$//g" >${cfn}.preserve
  73.     else
  74.       echo "can't preserve file $cfn"
  75.     fi
  76.   fi
  77. done