binutils-gdb/sim/common/gentvals.sh

75 lines
1.3 KiB
Bash

#!/bin/sh
# Usage: gentvals.sh target type dir files pattern cpp
target=$1
type=$2
dir=$3
# FIXME: Would be nice to process #include's in these files.
files=$4
pattern=$5
cpp=$6
# FIXME: need trap to remove tmp files.
rm -f tmpvals.list tmpvals.uniq
for f in $files
do
if test -f $dir/$f ; then
grep "#define[ ]$pattern" $dir/$f | sed -e "s/^.*#define[ ]\($pattern\)[ ]*\([^ ][^ ]*\).*$/\1/" >> tmpvals.list
fi
done
sort <tmpvals.list | uniq >tmpvals.uniq
rm -f tmpvals.h
for f in $files
do
if test -f $dir/$f ; then
echo "#include <$f>" >>tmpvals.h
fi
done
cat tmpvals.uniq |
while read sym
do
echo "#ifdef $sym" >>tmpvals.h
echo 'DEFVAL { "'$sym'", '$sym ' },' >>tmpvals.h
echo "#endif" >>tmpvals.h
done
if test -z "$target"
then
echo "#ifdef ${type}_defs"
else
echo "#ifdef NL_TARGET_$target"
echo "#ifdef ${type}_defs"
fi
for f in $files
do
if test -f $dir/$f ; then
echo "/* from $f */"
fi
done
if test -z "$target"
then
echo "/* begin $type target macros */"
else
echo "/* begin $target $type target macros */"
fi
$cpp -I$dir tmpvals.h | grep DEFVAL | sed -e 's/DEFVAL//' -e 's/ / /'
if test -z "$target"
then
echo "/* end $type target macros */"
echo "#endif"
else
echo "/* end $target $type target macros */"
echo "#endif"
echo "#endif"
fi
rm -f tmpvals.list tmpvals.uniq tmpvals.h