Edit

kc3-lang/automake/ylwrap

Branch :

  • Show log

    Commit

  • Author : Tom Tromey
    Date : 2001-05-09 03:10:05
    Hash : adf4c603
    Message : For PR automake/29: * ylwrap: Handle arguments to program. Remove old code that tried to avoid absolute paths and add new code to do it in all cases. Removed ancient logic that tried to deal with relative path. * tests/Makefile.am (TESTS): Added yacc4.test. * tests/yacc4.test: New file.

  • ylwrap
  • #! /bin/sh
    # ylwrap - wrapper for lex/yacc invocations.
    # Copyright 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
    # Written by Tom Tromey <tromey@cygnus.com>.
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2, or (at your option)
    # any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    
    # Usage:
    #     ylwrap PROGRAM [ARGS] INPUT [OUTPUT DESIRED]... -- [ARGS]...
    # * PROGRAM is program to run; options can follow but must start with `-'.
    # * INPUT is the input file
    # * OUTPUT is file PROG generates
    # * DESIRED is file we actually want
    # * ARGS are passed to PROG
    # Any number of OUTPUT,DESIRED pairs may be used.
    
    # The program to run.
    prog="$1"
    shift
    # Make any relative path in $prog absolute.
    case "$prog" in
     /* | [A-Za-z]:*) ;;
     */*) prog="`pwd`/$prog" ;;
    esac
    
    # We also have to accept options here and append them to the program.
    # Why?  Suppose YACC is set to `bison -y'.  Clearly nobody uses
    # ylwrap, or this would have been discovered earlier!
    while :; do
       case "$1" in
        -*)
           prog="$prog $1"
           shift
           ;;
        *)
           break
           ;;
       esac
    done
    
    # The input.
    input="$1"
    shift
    case "$input" in
     /* | [A-Za-z]:*)
        # Absolute path; do nothing.
        ;;
     *)
        # Relative path.  Make it absolute.
        input="`pwd`/$input"
        ;;
    esac
    
    # The directory holding the input.
    input_dir="`echo $input | sed -e 's,/[^/]*$,,'`"
    
    pairlist=
    while test "$#" -ne 0; do
       if test "$1" = "--"; then
          shift
          break
       fi
       pairlist="$pairlist $1"
       shift
    done
    
    # 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$$
    trap "cd `pwd`; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
    mkdir $dirname || exit 1
    
    cd $dirname
    
    $prog ${1+"$@"} "$input"
    status=$?
    
    if test $status -eq 0; then
       set X $pairlist
       shift
       first=yes
       # 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
    
       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 $2 is an absolute path name, then just use that,
             # otherwise prepend `../'.
             case "$2" in
    	   /* | [A-Za-z]:*) target="$2";;
    	   *) target="../$2";;
    	 esac
    
    	 # 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.
    	 sed -e "/^#/ s,$input_dir,," "$from" > "$target" || status=$?
          else
    	 # A missing file is only an error for the first file.  This
    	 # is a blatant hack to let us support using "yacc -d".  If -d
    	 # is not specified, we don't want an error when the header
    	 # file is "missing".
    	 if test $first = yes; then
    	    status=1
    	 fi
          fi
          shift
          shift
          first=no
       done
    else
       status=$?
    fi
    
    # Remove the directory.
    cd ..
    rm -rf $dirname
    
    exit $status