old-cross-binutils/sim/common/gentvals.sh
Mike Frysinger 248d23e82b sim: gennltvals.sh: handle split out newlib source tree
Since newlib no longer shares the same repo as binutils/gdb, we have to go
searching further afield to locate the sources.  We still look at the top
level for newlib, but if that is not found, we also try up one dir outside
of this source tree.  It sucks, but better than the status quo (no workie).
2015-04-21 03:10:16 -04:00

74 lines
1.3 KiB
Bash
Executable file

#!/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