core-lightning/tools/mockup.sh
Rusty Russell 8a829ba9cb update-mocks: move mock generation into tools/, fix and generalize.
update-mocks was broken, since it assumed the daemon/ directory.

We now use "make" directly to build the test file and harvest errors,
and are more robust if it simply doesn't compile (ie. fails, but no
linker errors).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2017-09-03 02:01:54 +02:00

40 lines
1.1 KiB
Bash
Executable File

#! /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
WHERE=$(grep -nH "^[a-z0-9_ ]* [*]*$SYMBOL(" */*.h )
if [ x"$WHERE" != x ]; then
STUB='\n{ fprintf(stderr, "'$SYMBOL' called!\\n"); abort(); }'
else
WHERE=$(grep -nH "^extern \(const \)\?struct [a-zA-Z0-9_]* $SYMBOL;$" daemon/*.h)
if [ x"$WHERE" != x ]; then
STUB=';'
else
echo "/* Could not find declaration for $SYMBOL */"
continue
fi
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/,/ UNNEEDED,/g' | sed 's/\([a-z0-9A-Z*_]* [a-z0-9A-Z*_]*\));/\1 UNNEEDED);/' | sed "s/;\$/$STUB/" | sed 's/\s*$//'
done