1#!/bin/sh 2 3YACC="$1" 4SRC="$2" 5DEST="$3" 6 7dir=`dirname $SRC` 8file=`basename $SRC` 9base=`basename $SRC .y` 10if [ -z "$YACC" ]; then 11 # if $DEST is more recent than $SRC, we can just touch 12 # otherwise we touch but print out warnings 13 if [ -r $DEST ]; then 14 if [ x`find $SRC -newer $DEST -print` = x$SRC ]; then 15 echo "warning: yacc not found - cannot generate $SRC => $DEST" >&2 16 echo "warning: yacc not found - only updating the timestamp of $DEST" >&2 17 fi 18 touch $DEST; 19 exit; 20 fi 21 echo "error: yacc not found - cannot generate $SRC => $DEST" >&2 22 exit 1; 23fi 24# if $DEST is more recent than $SRC, we can just touch 25if [ -r $DEST ]; then 26 if [ x`find $SRC -newer $DEST -print` != x$SRC ]; then 27 touch $DEST; 28 exit; 29 fi 30fi 31TOP=`pwd` 32echo "info: running $YACC -d $file" 33if cd $dir && $YACC -d $file; then 34 if [ -r y.tab.h -a -r y.tab.c ];then 35 echo "info: move y.tab.h to $base.h" 36 sed -e "/^#/!b" -e "s|y\.tab\.h|$SRC|" -e "s|\"$base.y|\"$SRC|" y.tab.h > $base.h 37 echo "info: move y.tab.c to $base.c" 38 sed -e "s|y\.tab\.c|$SRC|" -e "s|\"$base.y|\"$SRC|" y.tab.c > $base.c 39 rm -f y.tab.c y.tab.h 40 elif [ ! -r $base.h -a ! -r $base.c]; then 41 echo "$base.h nor $base.c generated." 42 exit 1 43 fi 44fi 45cd $TOP 46