diff options
author | David Baudens <baudens@mandriva.com> | 2001-08-24 16:01:50 +0000 |
---|---|---|
committer | David Baudens <baudens@mandriva.com> | 2001-08-24 16:01:50 +0000 |
commit | 9b64641b1acbc08d6ebc7628f6b68fc14475b3b6 (patch) | |
tree | 2e6ac90a2b7f8fc797c0ea1f00b74e73dac4f1c6 /krozat/admin/ylwrap | |
parent | f8142913107a30d330380d68acf7d8e2f074f9f2 (diff) | |
download | common-data-9b64641b1acbc08d6ebc7628f6b68fc14475b3b6.tar common-data-9b64641b1acbc08d6ebc7628f6b68fc14475b3b6.tar.gz common-data-9b64641b1acbc08d6ebc7628f6b68fc14475b3b6.tar.bz2 common-data-9b64641b1acbc08d6ebc7628f6b68fc14475b3b6.tar.xz common-data-9b64641b1acbc08d6ebc7628f6b68fc14475b3b6.zip |
A new part of Krozat (in honour of our dear Chef ;)
Diffstat (limited to 'krozat/admin/ylwrap')
-rwxr-xr-x | krozat/admin/ylwrap | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/krozat/admin/ylwrap b/krozat/admin/ylwrap new file mode 100755 index 0000000..8aa0314 --- /dev/null +++ b/krozat/admin/ylwrap @@ -0,0 +1,142 @@ +#! /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 INPUT [OUTPUT DESIRED]... -- [ARGS]... +# * PROGRAM is program to run. +# * 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 + +# The input. +input="$1" +shift +case "$input" in + /* | [A-Za-z]:*) + # Absolute path; do nothing. + ;; + *) + # Relative path. Make it absolute. Why? Because otherwise any + # debugging info in the generated file will point to the wrong + # place. This is really gross. + input="`pwd`/$input" + ;; +esac + +# We don't want to use the absolute path if the input in the current +# directory like when making a tar ball. +input_base=`echo $input | sed -e 's|.*/||'` +if test -f $input_base && cmp $input_base $input >/dev/null 2>&1; then + input=$input_base +fi + +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 +case "$input" in + /* | [A-Za-z]:*) + # Absolute path; do nothing. + ;; + *) + # Make a symbolic link, hard link or hardcopy. + ln -s ../"$input" . > /dev/null 2>&1 || ln ../"$input" . > /dev/null 2>&1 || cp ../"$input" . + ;; +esac +$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 + mv "$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 |