Diff for /embedaddon/confuse/support/ylwrap between versions 1.1 and 1.1.1.2

version 1.1, 2017/01/24 14:48:56 version 1.1.1.2, 2021/03/17 00:49:17
Line 1 Line 1
 #! /bin/sh  #! /bin/sh
 # ylwrap - wrapper for lex/yacc invocations.  # ylwrap - wrapper for lex/yacc invocations.
   
scriptversion=2009-04-28.21; # UTCscriptversion=2018-03-07.03; # UTC
   
# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,# Copyright (C) 1996-2018 Free Software Foundation, Inc.
# 2007, 2009 Free Software Foundation, Inc. 
 #  #
 # Written by Tom Tromey <tromey@cygnus.com>.  # Written by Tom Tromey <tromey@cygnus.com>.
 #  #
Line 19  scriptversion=2009-04-28.21; # UTC Line 18  scriptversion=2009-04-28.21; # UTC
 # GNU General Public License for more details.  # GNU General Public License for more details.
 #  #
 # You should have received a copy of the GNU General Public License  # You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.# along with this program.  If not, see <https://www.gnu.org/licenses/>.
   
 # As a special exception to the GNU General Public License, if you  # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a  # distribute this file as part of a program that contains a
Line 30  scriptversion=2009-04-28.21; # UTC Line 29  scriptversion=2009-04-28.21; # UTC
 # bugs to <bug-automake@gnu.org> or send patches to  # bugs to <bug-automake@gnu.org> or send patches to
 # <automake-patches@gnu.org>.  # <automake-patches@gnu.org>.
   
   get_dirname ()
   {
     case $1 in
       */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
       # Otherwise,  we want the empty string (not ".").
     esac
   }
   
   # guard FILE
   # ----------
   # The CPP macro used to guard inclusion of FILE.
   guard ()
   {
     printf '%s\n' "$1"                                                    \
       | sed                                                               \
           -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'   \
           -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'                        \
           -e 's/__*/_/g'
   }
   
   # quote_for_sed [STRING]
   # ----------------------
   # Return STRING (or stdin) quoted to be used as a sed pattern.
   quote_for_sed ()
   {
     case $# in
       0) cat;;
       1) printf '%s\n' "$1";;
     esac \
       | sed -e 's|[][\\.*]|\\&|g'
   }
   
 case "$1" in  case "$1" in
   '')    '')
    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2    echo "$0: No files given.  Try '$0 --help' for more information." 1>&2
     exit 1      exit 1
     ;;      ;;
   --basedir)    --basedir)
Line 65  esac Line 96  esac
   
   
 # The input.  # The input.
input="$1"input=$1
 shift  shift
case "$input" in# We'll later need for a correct munging of "#line" directives.
 input_sub_rx=`get_dirname "$input" | quote_for_sed`
 case $input in
   [\\/]* | ?:[\\/]*)    [\\/]* | ?:[\\/]*)
     # Absolute path; do nothing.      # Absolute path; do nothing.
     ;;      ;;
   *)    *)
     # Relative path.  Make it absolute.      # Relative path.  Make it absolute.
    input="`pwd`/$input"    input=`pwd`/$input
     ;;      ;;
 esac  esac
   input_rx=`get_dirname "$input" | quote_for_sed`
   
pairlist=# Since DOS filename conventions don't allow two dots,
while test "$#" -ne 0; do# the DOS version of Bison writes out y_tab.c instead of y.tab.c
  if test "$1" = "--"; then# and y_tab.h instead of y.tab.h. Test to see if this is the case.
 y_tab_nodot=false
 if test -f y_tab.c || test -f y_tab.h; then
   y_tab_nodot=true
 fi
 
 # The parser itself, the first file, is the destination of the .y.c
 # rule in the Makefile.
 parser=$1
 
 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for
 # instance, we rename #include "y.tab.h" into #include "parse.h"
 # during the conversion from y.tab.c to parse.c.
 sed_fix_filenames=
 
 # Also rename header guards, as Bison 2.7 for instance uses its header
 # guard in its implementation file.
 sed_fix_header_guards=
 
 while test $# -ne 0; do
   if test x"$1" = x"--"; then
     shift      shift
     break      break
   fi    fi
  pairlist="$pairlist $1"  from=$1
   # Handle y_tab.c and y_tab.h output by DOS
   if $y_tab_nodot; then
     case $from in
       "y.tab.c") from=y_tab.c;;
       "y.tab.h") from=y_tab.h;;
     esac
   fi
   shift    shift
     to=$1
     shift
     sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
     sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
 done  done
   
 # The program to run.  # The program to run.
prog="$1"prog=$1
 shift  shift
 # Make any relative path in $prog absolute.  # Make any relative path in $prog absolute.
case "$prog" incase $prog in
   [\\/]* | ?:[\\/]*) ;;    [\\/]* | ?:[\\/]*) ;;
  *[\\/]*) prog="`pwd`/$prog" ;;  *[\\/]*) prog=`pwd`/$prog ;;
 esac  esac
   
 # FIXME: add hostname here for parallel makes that run commands on  
 # other machines.  But that might take us over the 14-char limit.  
 dirname=ylwrap$$  dirname=ylwrap$$
trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
 trap "ret=129; $do_exit" 1
 trap "ret=130; $do_exit" 2
 trap "ret=141; $do_exit" 13
 trap "ret=143; $do_exit" 15
 mkdir $dirname || exit 1  mkdir $dirname || exit 1
   
 cd $dirname  cd $dirname
Line 111  esac Line 178  esac
 ret=$?  ret=$?
   
 if test $ret -eq 0; then  if test $ret -eq 0; then
  set X $pairlist  for from in *
  shift  do
  first=yes    to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
  # Since DOS filename conventions don't allow two dots, 
  # the DOS version of Bison writes out y_tab.c instead of y.tab.c 
  # and y_tab.h instead of y.tab.h. Test to see if this is the case. 
  y_tab_nodot="no" 
  if test -f y_tab.c || test -f y_tab.h; then 
    y_tab_nodot="yes" 
  fi 
 
  # The directory holding the input. 
  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'` 
  # Quote $INPUT_DIR so we can use it in a regexp. 
  # FIXME: really we should care about more than `.' and `\'. 
  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'` 
 
  while test "$#" -ne 0; do 
    from="$1" 
    # Handle y_tab.c and y_tab.h output by DOS 
    if test $y_tab_nodot = "yes"; then 
      if test $from = "y.tab.c"; then 
        from="y_tab.c" 
      else 
        if test $from = "y.tab.h"; then 
          from="y_tab.h" 
        fi 
      fi 
    fi 
     if test -f "$from"; then      if test -f "$from"; then
       # If $2 is an absolute path name, then just use that,        # If $2 is an absolute path name, then just use that,
      # otherwise prepend `../'.      # otherwise prepend '../'.
      case "$2" in      case $to in
        [\\/]* | ?:[\\/]*) target="$2";;        [\\/]* | ?:[\\/]*) target=$to;;
        *) target="../$2";;        *) target=../$to;;
       esac        esac
   
      # We do not want to overwrite a header file if it hasn't      # Do not overwrite unchanged header files to avoid useless
      # changed.  This avoid useless recompilations.  However the      # recompilations.  Always update the parser itself: it is the
      # parser itself (the first file) should always be updated,      # destination of the .y.c rule in the Makefile.  Divert the
      # because it is the destination of the .y.c rule in the      # output of all other files to a temporary file so we can
      # Makefile.  Divert the output of all other files to a temporary      # compare them to existing versions.
      # file so we can compare them to existing versions.      if test $from != $parser; then
      if test $first = no; then        realtarget=$target
        realtarget="$target"        target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
        target="tmp-`echo $target | sed s/.*[\\/]//g`" 
       fi        fi
       # Edit out `#line' or `#' directives.  
       #  
       # We don't want the resulting debug information to point at  
       # an absolute srcdir; it is better for it to just mention the  
       # .y file with no path.  
       #  
       # We want to use the real output file name, not yy.lex.c for  
       # instance.  
       #  
       # We want the include guards to be adjusted too.  
       FROM=`echo "$from" | sed \  
             -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\  
             -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`  
       TARGET=`echo "$2" | sed \  
             -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\  
             -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`  
   
      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \      # Munge "#line" or "#" directives.  Don't let the resulting
          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?      # debug information point at an absolute srcdir.  Use the real
       # output file name, not yy.lex.c for instance.  Adjust the
       # include guards too.
       sed -e "/^#/!b"                           \
           -e "s|$input_rx|$input_sub_rx|"       \
           -e "$sed_fix_filenames"               \
           -e "$sed_fix_header_guards"           \
         "$from" >"$target" || ret=$?
   
      # Check whether header files must be updated.      # Check whether files must be updated.
      if test $first = no; then      if test "$from" != "$parser"; then
        if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then        if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
          echo "$2" is unchanged          echo "$to is unchanged"
          rm -f "$target"          rm -f "$target"
        else        else
          echo updating "$2"          echo "updating $to"
           mv -f "$target" "$realtarget"            mv -f "$target" "$realtarget"
         fi          fi
       fi        fi
     else      else
      # A missing file is only an error for the first file.  This      # A missing file is only an error for the parser.  This is a
      # is a blatant hack to let us support using "yacc -d".  If -d      # blatant hack to let us support using "yacc -d".  If -d is not
      # is not specified, we don't want an error when the header      # specified, don't fail when the header file is "missing".
      # file is "missing".      if test "$from" = "$parser"; then
      if test $first = yes; then 
         ret=1          ret=1
       fi        fi
     fi      fi
     shift  
     shift  
     first=no  
   done    done
 else  
   ret=$?  
 fi  fi
   
 # Remove the directory.  # Remove the directory.
Line 214  exit $ret Line 239  exit $ret
 # Local Variables:  # Local Variables:
 # mode: shell-script  # mode: shell-script
 # sh-indentation: 2  # sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp)# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="  # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"  # time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"# time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"  # time-stamp-end: "; # UTC"
 # End:  # End:

Removed from v.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>