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

SQL Server

开发平台:

Unix_Linux

  1. #! /bin/sh
  2. # conf-templ :  This script is an auxilary part of configure.
  3. #               It is called by 'configure' and does 
  4. #               configure templates pre & post -processing. 
  5. # This file is a part of GNU SQL Server
  6. #
  7. # Copyright (c) 1996, Free Software Foundation, Inc
  8. # Developed at the Institute of System Programming
  9. # This file is written by Michael Kimelman
  10. # Outlines:
  11. #
  12. #   First pass (create) finds templates to configure at RCS and source
  13. #   tree. Than it edits makefiles templates, if it's required. 
  14. #   Edited copies collected at ./templates. Finally it generates a 
  15. #   list of dependencies to configure and postconfigure settings.
  16. #
  17. #   Next pass (postconfigure) deletes temporary configuration 
  18. #   information and, in the case of RCS distribution, create links 
  19. #   of RCS and makefiles' templates to all created subdirectories
  20. #
  21. # Contacts: gss@ispras.ru
  22. #
  23. #set -x
  24. # Constants declaration  --------------------------
  25. # templates working directory
  26. template_dir=templates
  27. # postconfigure file name
  28. postconfig=postconf
  29. # postconfigure file name
  30. errlog=log
  31. # common makefiles header 
  32. make_hd=Makefile_h
  33. # -------------------------------------------------
  34. # distribution source tree ------------------------
  35. srcdir=`echo $0 | sed 's/etc[/]conf-templ$//g' | sed 's/[/]$//g' `
  36. if [ x$srcdir = x ]; then 
  37.   srcdir="."
  38. fi
  39. localtree=`pwd`
  40. cd $srcdir
  41. srcdir=`pwd`
  42. cd $localtree
  43. # -------------------------------------------------
  44. # checking echo options
  45. if (echo "testingc"; echo 1,2,3) | grep c >/dev/null; then
  46.   # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
  47.   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
  48.     ac_n= ac_c='
  49. ' ac_t=' '
  50.   else
  51.     ac_n=-n ac_c= ac_t=
  52.   fi
  53. else
  54.   ac_n= ac_c='c' ac_t=
  55. fi
  56. ##--------------------  proc_conf -----------------------------------
  57. proc_file () ## args: RCS/plain
  58. {
  59. # dir  -- destination directory; ddir -- the same but '/' replaced by '.'
  60. # sfn  -- file name root of template file.
  61. # fn   -- configurable file: ${dir}/${sfn}
  62. # tfn  -- template file name ${dir}/${sfn}.in
  63. # pfn  -- template file name in a plane structure ${sfn}.${dir}.in
  64. #         this is synonym for tfn at template directory 
  65.   ## check for duplication
  66.   echo $ac_n "Checking template for $dir/$sfn... $ac_c"  1>&2
  67.   if [ "${ddir}" = "." ] ; then
  68.     pfn=${sfn}.in
  69.     dir1=""
  70.     dir="."
  71.   else
  72.     pfn=${sfn}.${ddir}.in 
  73.     dir1="${dir}/"
  74.   fi
  75.   if [ -f ${pfn}.stamp ]; then
  76.     echo " see above."  1>&2
  77.     return
  78.   fi
  79.   ## find original configuration template
  80.   if [ $1 = RCS ] ; then                                 ## we process RCS based files
  81.     if [ ! -f ${pfn} ]; then co -q ${pfn}; fi            ## extract it, if required
  82.     origin=${template_dir}/${pfn}                        ## and set to org. name
  83.     forigin=${localtree}/${origin}                       ## and to full name
  84.   elif [ -f ${srcdir}/${dir1}${sfn}.in ]; then           ## if it exists in 'srcdir' tree
  85.     origin=""                                            ## and set to org. name
  86.     forigin=${srcdir}/${dir1}${sfn}.in                   ## and to full name
  87.   else 
  88.     echo "Configuration file has not been found             "  | tee ${errlog} 1>&2
  89.     echo "we have checked: RCS/${pfn},v                     "  | tee ${errlog} 1>&2
  90.     echo "                 ${srcdir}/${dir1}${sfn}.in       "  | tee ${errlog} 1>&2
  91.     exit 1
  92.   fi
  93.   echo "fix_dir $sfn $dir ${forigin} " >>${postconfig}
  94.   ## process previously parsed file
  95.   if [ "x${sed_cmd}" = "x" -o ${sfn} != Makefile ]; then ## nothing to edit
  96.     if [ x$origin = x ]; then 
  97.       deps="${dir1}${sfn}"
  98.       origin=$deps.in
  99.     else
  100.       deps="${dir1}${sfn}:${origin}"
  101.     fi
  102.   else ## Makefiles have to be edited here
  103.     if [ "x${make_includes}" = "x##include" ] ; then
  104.       ## we have to implement make includes by hand
  105.       cat ${make_hd}.src.in        > $$
  106.       cat ${forigin}            >> $$
  107.       if [ ${useRCS} = yes ] ; then
  108.         cat RCS/makefile.dep    >> $$
  109.       fi
  110.       sed "${sed_cmd}" $$        > ${pfn}.__
  111.       rm -f $$
  112.     else
  113.       sed "${sed_cmd}" $forigin  > ${pfn}.__
  114.     fi
  115.     origin="${template_dir}/${pfn}.__"
  116.     deps="${dir1}${sfn}:${origin}"
  117.   fi
  118.   echo "$deps" >> deps.$ddir
  119.   date > ${pfn}.stamp
  120.   echo " "$origin" "  1>&2
  121. }
  122. ##--------------------------------------------------------------------
  123. ##  MAIN program -----------------------------------------------------
  124. ##  first of all check if we was pointed to the true srcdir directory
  125. if [ ! -f ${srcdir}/README -o `grep -i 'gss' ${srcdir}/README | wc -l` -lt 1 ];  then 
  126.   echo "$0: gss does not mentioned in '$srcdir' directory"  | tee ${errlog} 1>&2
  127.   exit 1
  128. fi
  129. ##  Check local directory. is it proper place to run? We have to be at the
  130. ##  top directory of distribution building tree
  131. if [ `pwd` != ${srcdir} ] ; then  ##  '--srcdir' compilation 
  132.   if [ -f ${srcdir}/Makefile ] ; then 
  133.     echo "$0: source tree contains it's own compilation tree '--srcdir' compilaiton is not allowed" | tee ${errlog} 1>&2
  134.     exit 1
  135.   fi
  136. fi
  137.   
  138. case $1 in
  139.   test)
  140.        $0 create "ln -s" make "include"
  141.        echo ------------------------------------------
  142.        echo ------------------------------------------
  143.        cat ${template_dir}/${errlog} 
  144.        echo ------------------------------------------
  145.        echo ------------------------------------------
  146.        ${template_dir}/${postconfig}
  147.        echo ------------------------------------------
  148.        echo ------------------------------------------
  149.        ;;
  150.   create)
  151.        LN_S=$2
  152.        make=$3
  153.        make_includes=$4
  154.        if [ ! -d ${template_dir} ]; then
  155.           mkdir ${template_dir}
  156.        fi
  157.        cd ${template_dir}
  158.        ## make sure there is no temporary files
  159.        rm -f deps.* *.in.stamp
  160.        if [ -f ${errlog} ]; then rm -f ${errlog}; fi
  161.        if [ -f ${postconfig} ]; then rm -f ${postconfig}; fi
  162.        ## -------------------------------------
  163.        
  164.        ##    Check for RCS existence, and if exist 
  165.        ##    extract to ${template_dir} all configuration files
  166.        if test -d ${srcdir}/RCS  ; then ## try to link RCS
  167.          if [ ! -d RCS ]; then
  168.            [ -r RCS ] || rm -f RCS
  169.            ${LN_S} ${srcdir}/RCS RCS
  170.          fi
  171.          # check out in advance header, required by future 'include'-related editing.
  172.          if [ ! -f ${make_hd}.src.in ]; then co  ${make_hd}.src.in ; fi
  173.          if [ ! -f ../config.h.in ]; then 
  174.            co config.h.in
  175.            mv -f config.h.in ..
  176.          fi
  177.          useRCS=yes
  178.        else ## if there is no RCS
  179.          useRCS=no
  180.        fi
  181.        ## prepare sed command to fix makefiles 'include' entries
  182.        if [ "x${make_includes}" != "xinclude" ] ; then
  183.          sed_cmd="${sed_cmd}s/^include /${make_includes} /g;"
  184.          if [ ! -f ${make_hd}.src.in ]; then
  185.            ${LN_S}  ${srcdir}/src/${make_hd}.in ${make_hd}.src.in
  186.          fi
  187.        fi
  188.        if [ $srcdir != $localtree ]; then
  189.          if [ "x${sed_cmd}" != "x" ]; then
  190.            echo "Error: we need to edit makefiles for $make                     "  | tee ${errlog} 1>&2
  191.            echo "configuration in another directory is not allowed for this case"  | tee ${errlog} 1>&2
  192.            exit 1
  193.          fi
  194.          if [ $useRCS = yes ]; then
  195.            echo "Error: It is NOT possible yet to configure in another directory"  | tee ${errlog} 1>&2
  196.            echo "       for RCS base archive                                    "  | tee ${errlog} 1>&2
  197.            exit 1
  198.          fi
  199.        fi
  200.        ## cool filter command
  201.        if [ "x${sed_cmd}" != "x" ]; then ## sed command not empty
  202.          filt_cmd="sed '${sed_cmd}'"
  203.        else
  204.          filt_cmd="cat "
  205.        fi
  206.        ## prepare postconfiguration script header
  207.        echo '#! /bin/sh                                   '  >${postconfig}
  208.        echo "# this file is generated automatically by $0 " >>${postconfig}
  209.        echo "# DON'T EDIT THIS FILE                       " >>${postconfig}
  210.        echo "#                                            " >>${postconfig}
  211.        echo "                                             " >>${postconfig}
  212.        echo "                                             " >>${postconfig}
  213.        echo "LN_S="${LN_S}"                             " >>${postconfig}
  214.        if [ $useRCS = yes ]; then 
  215.          echo "RCS=${srcdir}/RCS                          " >>${postconfig}
  216.        else
  217.          echo "RCS=absent                                 " >>${postconfig}
  218.        fi
  219.        echo 'topdir=`pwd`                                 ' >>${postconfig}
  220.        echo "                                             " >>${postconfig}
  221.        echo "#-------------------------------------------#" >>${postconfig}
  222.        echo 'fix_dir () {                                 ' >>${postconfig}
  223.        echo '  sfn=$1     ## configurable file            ' >>${postconfig}
  224.        echo '  dir=$2     ## target subdirectory          ' >>${postconfig}
  225.        echo '  tfn=$3     ## original template destination' >>${postconfig}
  226.        echo '                                             ' >>${postconfig}
  227.        echo ' ( # go to sub shell                         ' >>${postconfig}
  228.        echo '   ## cd to target directory                 ' >>${postconfig}
  229.        echo '   cd $dir ## cd to target directory         ' >>${postconfig}
  230.        echo '   if [ ! -r ${sfn}.in ]; then               ' >>${postconfig}
  231.        echo '     ${LN_S} $tfn ${sfn}.in                  ' >>${postconfig}
  232.        echo '   fi                                        ' >>${postconfig}
  233.        echo '   if [ ${RCS} != absent -a ! -d RCS  ]; then' >>${postconfig}
  234.        echo '     [ -r RCS ] || rm -f RCS                 ' >>${postconfig}
  235.        echo '     ${LN_S} ${RCS} RCS                      ' >>${postconfig}
  236.        echo '   fi                                        ' >>${postconfig}
  237.        echo " )                                           " >>${postconfig}
  238.        echo "                                             " >>${postconfig}
  239.        echo "}                                            " >>${postconfig}
  240.        echo "#-------------------------------------------#" >>${postconfig}
  241.        echo "                                             " >>${postconfig}
  242.        chmod a+x ${postconfig}
  243.        ## Finding and processing configure templates
  244.        ## Check RCS
  245.        if [ $useRCS = yes ] ; then
  246.          confs=`( cd RCS; ls *.in,v | 
  247.                   sed 's/^([^.]*)[.](.*)[.]in[,]v$/2 1/g;s/^([^.]*)[.]in[,]v$/. 1/g' )`
  248.          while [ "x$confs" != x ]; do 
  249.            set $confs
  250.            ddir=$1 ; sfn=$2 ; shift 2
  251.            confs=$*
  252.            if [ $sfn = configure -o $sfn = config.h ]; then continue; fi
  253.            dir=`echo $ddir | tr '.' '/'`
  254.            proc_file RCS
  255.          done
  256.        fi
  257.        # now grab templates from everywhere else
  258.        confs=` (
  259.           cd ${srcdir};
  260.           find . -name '*.in' -type f -print | 
  261.           sed 's/^(.*)[/]([^/]*)[.]in/1 2 /g;s/^[.][/]//g'  
  262.        ) `
  263.        while [ "x$confs" != x ]; do 
  264.          set $confs
  265.          dir=$1; sfn=$2; shift 2
  266.          confs=$*
  267.          if [ $dir = ${template_dir} ]; then continue; fi
  268.          ## avoid processing configure & config.h -- it's not our business
  269.          if [ $sfn = configure -o $sfn = config.h -o $sfn = stamp-h ]; then continue; fi
  270.          ddir=`echo $dir | tr '/' '.'`
  271.          proc_file plain
  272.        done
  273.        ## output sorted dependencies file list
  274.        for deps in ` ls deps.* | sort ` ; do
  275.          cat $deps
  276.          rm -f $deps
  277.        done
  278.        rm -f *.in.stamp
  279.        ## 
  280.        if [ $srcdir != $localtree ] ; then
  281.          echo "#-------------------------------------------#" >>${postconfig}
  282.          echo "                                             " >>${postconfig}
  283.          echo "if [ ! -r $localtree/test/makefile.dep ];then" >>${postconfig}
  284.          echo "${LN_S} $srcdir/test/makefile.dep $localtree/test/makefile.dep  " >>${postconfig}
  285.          echo "fi                                           " >>${postconfig}
  286.          echo "#-------------------------------------------#" >>${postconfig}
  287.          echo "                                             " >>${postconfig}
  288.        fi
  289.        ;; 
  290.        
  291.   postconfigure)
  292.        ## put links to RCS and makefiles template into the target directories
  293.        if [ -d ${template_dir} ] ; then  
  294.          [ ! -f  ${template_dir}/${postconfig} ] || ${template_dir}/${postconfig}
  295.          (
  296.            cd ${template_dir}
  297.            if [ `ls -1 | wc -l` -eq 1 -a -h RCS ]; then 
  298.              rm RCS;
  299.            fi
  300.          ) 
  301.          if [ `ls -1 ${template_dir} | wc -l` -eq 0 ]; then
  302.            rmdir ${template_dir}
  303.          fi
  304.        fi
  305.        ;;
  306.   clean)
  307.        if [ -d ${template_dir} ] ; then  
  308.          (
  309.            cd ${template_dir}
  310.            rm -f log *.in.stamp *.in.__ ${postconfig}
  311.            if [ `ls -1 | wc -l` -eq 1 -a -h RCS ]; then 
  312.              rm RCS;
  313.            fi
  314.          )
  315.          if [ `ls -1 ${template_dir} | wc -l` -eq 0 ]; then
  316.            rmdir ${template_dir}
  317.          fi
  318.        fi
  319.        ;;
  320.   *)
  321.        echo $0: incorrect parameters "$*" 
  322.        exit 1
  323.        ;;
  324. esac
  325. exit 0