You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
#! /bin/sh
|
|
|
|
if [ $# -eq 0 ]; then
|
|
# With no args, read stdin to scrape compiler output.
|
|
set -- $(while read LINE; do
|
|
case "$LINE" in
|
|
*undefined\ reference\ to*)
|
|
LINE=${LINE#*undefined reference to \`}
|
|
echo ${LINE%\'*}
|
|
;;
|
|
*)
|
|
continue
|
|
;;
|
|
esac; done | sort -u)
|
|
fi
|
|
|
|
for SYMBOL; do
|
|
# If there are multiple declarations, pick first (eg. common/memleak.h
|
|
# has notleak_ as a declaration, and then an inline).
|
|
WHERE=$(grep -nH "^[a-zA-Z0-9_ (),]* [*]*$SYMBOL(" */*.h | head -n1)
|
|
if [ x"$WHERE" != x ]; then
|
|
STUB='\n{ fprintf(stderr, "'$SYMBOL' called!\\n"); abort(); }'
|
|
else
|
|
echo "/* Could not find declaration for $SYMBOL */"
|
|
continue
|
|
fi
|
|
|
|
echo "/* Generated stub for $SYMBOL */"
|
|
FILE=${WHERE%%:*}
|
|
FILE_AND_LINE=${WHERE%:*}
|
|
LINE=${FILE_AND_LINE#*:}
|
|
END=$(tail -n +$LINE < $FILE | grep -n ';$');
|
|
NUM=${END%%:*}
|
|
|
|
tail -n +$LINE < $FILE | head -n $NUM | sed 's/^extern *//' | sed 's/PRINTF_FMT([^)]*)//' | sed 's/NORETURN//g' | sed 's/,/ UNNEEDED,/g' | sed 's/\([a-z0-9A-Z*_]* [a-z0-9A-Z*_]*\));/\1 UNNEEDED);/' | sed "s/;\$/$STUB/" | sed 's/\s*$//'
|
|
done
|
|
|