Blame config/ylwrap

Packit Service 50ad14
#! /bin/sh
Packit Service 50ad14
# ylwrap - wrapper for lex/yacc invocations.
Packit Service 50ad14
Packit Service 50ad14
scriptversion=2009-04-28.21; # UTC
Packit Service 50ad14
Packit Service 50ad14
# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
Packit Service 50ad14
# 2007, 2009 Free Software Foundation, Inc.
Packit Service 50ad14
#
Packit Service 50ad14
# Written by Tom Tromey <tromey@cygnus.com>.
Packit Service 50ad14
#
Packit Service 50ad14
# This program is free software; you can redistribute it and/or modify
Packit Service 50ad14
# it under the terms of the GNU General Public License as published by
Packit Service 50ad14
# the Free Software Foundation; either version 2, or (at your option)
Packit Service 50ad14
# any later version.
Packit Service 50ad14
#
Packit Service 50ad14
# This program is distributed in the hope that it will be useful,
Packit Service 50ad14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 50ad14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 50ad14
# GNU General Public License for more details.
Packit Service 50ad14
#
Packit Service 50ad14
# You should have received a copy of the GNU General Public License
Packit Service 50ad14
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit Service 50ad14
Packit Service 50ad14
# As a special exception to the GNU General Public License, if you
Packit Service 50ad14
# distribute this file as part of a program that contains a
Packit Service 50ad14
# configuration script generated by Autoconf, you may include it under
Packit Service 50ad14
# the same distribution terms that you use for the rest of that program.
Packit Service 50ad14
Packit Service 50ad14
# This file is maintained in Automake, please report
Packit Service 50ad14
# bugs to <bug-automake@gnu.org> or send patches to
Packit Service 50ad14
# <automake-patches@gnu.org>.
Packit Service 50ad14
Packit Service 50ad14
case "$1" in
Packit Service 50ad14
  '')
Packit Service 50ad14
    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
Packit Service 50ad14
    exit 1
Packit Service 50ad14
    ;;
Packit Service 50ad14
  --basedir)
Packit Service 50ad14
    basedir=$2
Packit Service 50ad14
    shift 2
Packit Service 50ad14
    ;;
Packit Service 50ad14
  -h|--h*)
Packit Service 50ad14
    cat <<\EOF
Packit Service 50ad14
Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
Packit Service 50ad14
Packit Service 50ad14
Wrapper for lex/yacc invocations, renaming files as desired.
Packit Service 50ad14
Packit Service 50ad14
  INPUT is the input file
Packit Service 50ad14
  OUTPUT is one file PROG generates
Packit Service 50ad14
  DESIRED is the file we actually want instead of OUTPUT
Packit Service 50ad14
  PROGRAM is program to run
Packit Service 50ad14
  ARGS are passed to PROG
Packit Service 50ad14
Packit Service 50ad14
Any number of OUTPUT,DESIRED pairs may be used.
Packit Service 50ad14
Packit Service 50ad14
Report bugs to <bug-automake@gnu.org>.
Packit Service 50ad14
EOF
Packit Service 50ad14
    exit $?
Packit Service 50ad14
    ;;
Packit Service 50ad14
  -v|--v*)
Packit Service 50ad14
    echo "ylwrap $scriptversion"
Packit Service 50ad14
    exit $?
Packit Service 50ad14
    ;;
Packit Service 50ad14
esac
Packit Service 50ad14
Packit Service 50ad14
Packit Service 50ad14
# The input.
Packit Service 50ad14
input="$1"
Packit Service 50ad14
shift
Packit Service 50ad14
case "$input" in
Packit Service 50ad14
  [\\/]* | ?:[\\/]*)
Packit Service 50ad14
    # Absolute path; do nothing.
Packit Service 50ad14
    ;;
Packit Service 50ad14
  *)
Packit Service 50ad14
    # Relative path.  Make it absolute.
Packit Service 50ad14
    input="`pwd`/$input"
Packit Service 50ad14
    ;;
Packit Service 50ad14
esac
Packit Service 50ad14
Packit Service 50ad14
pairlist=
Packit Service 50ad14
while test "$#" -ne 0; do
Packit Service 50ad14
  if test "$1" = "--"; then
Packit Service 50ad14
    shift
Packit Service 50ad14
    break
Packit Service 50ad14
  fi
Packit Service 50ad14
  pairlist="$pairlist $1"
Packit Service 50ad14
  shift
Packit Service 50ad14
done
Packit Service 50ad14
Packit Service 50ad14
# The program to run.
Packit Service 50ad14
prog="$1"
Packit Service 50ad14
shift
Packit Service 50ad14
# Make any relative path in $prog absolute.
Packit Service 50ad14
case "$prog" in
Packit Service 50ad14
  [\\/]* | ?:[\\/]*) ;;
Packit Service 50ad14
  *[\\/]*) prog="`pwd`/$prog" ;;
Packit Service 50ad14
esac
Packit Service 50ad14
Packit Service 50ad14
# FIXME: add hostname here for parallel makes that run commands on
Packit Service 50ad14
# other machines.  But that might take us over the 14-char limit.
Packit Service 50ad14
dirname=ylwrap$$
Packit Service 50ad14
trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
Packit Service 50ad14
mkdir $dirname || exit 1
Packit Service 50ad14
Packit Service 50ad14
cd $dirname
Packit Service 50ad14
Packit Service 50ad14
case $# in
Packit Service 50ad14
  0) "$prog" "$input" ;;
Packit Service 50ad14
  *) "$prog" "$@" "$input" ;;
Packit Service 50ad14
esac
Packit Service 50ad14
ret=$?
Packit Service 50ad14
Packit Service 50ad14
if test $ret -eq 0; then
Packit Service 50ad14
  set X $pairlist
Packit Service 50ad14
  shift
Packit Service 50ad14
  first=yes
Packit Service 50ad14
  # Since DOS filename conventions don't allow two dots,
Packit Service 50ad14
  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
Packit Service 50ad14
  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
Packit Service 50ad14
  y_tab_nodot="no"
Packit Service 50ad14
  if test -f y_tab.c || test -f y_tab.h; then
Packit Service 50ad14
    y_tab_nodot="yes"
Packit Service 50ad14
  fi
Packit Service 50ad14
Packit Service 50ad14
  # The directory holding the input.
Packit Service 50ad14
  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
Packit Service 50ad14
  # Quote $INPUT_DIR so we can use it in a regexp.
Packit Service 50ad14
  # FIXME: really we should care about more than `.' and `\'.
Packit Service 50ad14
  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
Packit Service 50ad14
Packit Service 50ad14
  while test "$#" -ne 0; do
Packit Service 50ad14
    from="$1"
Packit Service 50ad14
    # Handle y_tab.c and y_tab.h output by DOS
Packit Service 50ad14
    if test $y_tab_nodot = "yes"; then
Packit Service 50ad14
      if test $from = "y.tab.c"; then
Packit Service 50ad14
    	from="y_tab.c"
Packit Service 50ad14
      else
Packit Service 50ad14
    	if test $from = "y.tab.h"; then
Packit Service 50ad14
    	  from="y_tab.h"
Packit Service 50ad14
    	fi
Packit Service 50ad14
      fi
Packit Service 50ad14
    fi
Packit Service 50ad14
    if test -f "$from"; then
Packit Service 50ad14
      # If $2 is an absolute path name, then just use that,
Packit Service 50ad14
      # otherwise prepend `../'.
Packit Service 50ad14
      case "$2" in
Packit Service 50ad14
    	[\\/]* | ?:[\\/]*) target="$2";;
Packit Service 50ad14
    	*) target="../$2";;
Packit Service 50ad14
      esac
Packit Service 50ad14
Packit Service 50ad14
      # We do not want to overwrite a header file if it hasn't
Packit Service 50ad14
      # changed.  This avoid useless recompilations.  However the
Packit Service 50ad14
      # parser itself (the first file) should always be updated,
Packit Service 50ad14
      # because it is the destination of the .y.c rule in the
Packit Service 50ad14
      # Makefile.  Divert the output of all other files to a temporary
Packit Service 50ad14
      # file so we can compare them to existing versions.
Packit Service 50ad14
      if test $first = no; then
Packit Service 50ad14
	realtarget="$target"
Packit Service 50ad14
	target="tmp-`echo $target | sed s/.*[\\/]//g`"
Packit Service 50ad14
      fi
Packit Service 50ad14
      # Edit out `#line' or `#' directives.
Packit Service 50ad14
      #
Packit Service 50ad14
      # We don't want the resulting debug information to point at
Packit Service 50ad14
      # an absolute srcdir; it is better for it to just mention the
Packit Service 50ad14
      # .y file with no path.
Packit Service 50ad14
      #
Packit Service 50ad14
      # We want to use the real output file name, not yy.lex.c for
Packit Service 50ad14
      # instance.
Packit Service 50ad14
      #
Packit Service 50ad14
      # We want the include guards to be adjusted too.
Packit Service 50ad14
      FROM=`echo "$from" | sed \
Packit Service 50ad14
            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
Packit Service 50ad14
            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
Packit Service 50ad14
      TARGET=`echo "$2" | sed \
Packit Service 50ad14
            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
Packit Service 50ad14
            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
Packit Service 50ad14
Packit Service 50ad14
      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
Packit Service 50ad14
          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
Packit Service 50ad14
Packit Service 50ad14
      # Check whether header files must be updated.
Packit Service 50ad14
      if test $first = no; then
Packit Service 50ad14
	if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
Packit Service 50ad14
	  echo "$2" is unchanged
Packit Service 50ad14
	  rm -f "$target"
Packit Service 50ad14
	else
Packit Service 50ad14
          echo updating "$2"
Packit Service 50ad14
          mv -f "$target" "$realtarget"
Packit Service 50ad14
        fi
Packit Service 50ad14
      fi
Packit Service 50ad14
    else
Packit Service 50ad14
      # A missing file is only an error for the first file.  This
Packit Service 50ad14
      # is a blatant hack to let us support using "yacc -d".  If -d
Packit Service 50ad14
      # is not specified, we don't want an error when the header
Packit Service 50ad14
      # file is "missing".
Packit Service 50ad14
      if test $first = yes; then
Packit Service 50ad14
        ret=1
Packit Service 50ad14
      fi
Packit Service 50ad14
    fi
Packit Service 50ad14
    shift
Packit Service 50ad14
    shift
Packit Service 50ad14
    first=no
Packit Service 50ad14
  done
Packit Service 50ad14
else
Packit Service 50ad14
  ret=$?
Packit Service 50ad14
fi
Packit Service 50ad14
Packit Service 50ad14
# Remove the directory.
Packit Service 50ad14
cd ..
Packit Service 50ad14
rm -rf $dirname
Packit Service 50ad14
Packit Service 50ad14
exit $ret
Packit Service 50ad14
Packit Service 50ad14
# Local Variables:
Packit Service 50ad14
# mode: shell-script
Packit Service 50ad14
# sh-indentation: 2
Packit Service 50ad14
# eval: (add-hook 'write-file-hooks 'time-stamp)
Packit Service 50ad14
# time-stamp-start: "scriptversion="
Packit Service 50ad14
# time-stamp-format: "%:y-%02m-%02d.%02H"
Packit Service 50ad14
# time-stamp-time-zone: "UTC"
Packit Service 50ad14
# time-stamp-end: "; # UTC"
Packit Service 50ad14
# End: