diff --git a/tools/build_protobuf b/tools/build_protobuf index 02c328f33..b216407c6 100755 --- a/tools/build_protobuf +++ b/tools/build_protobuf @@ -3,30 +3,46 @@ set -e cd "$(dirname "$0")" +# set up paths +INDEX="__init__.py" GENPATH="../trezorlib/messages" -INDEX="$GENPATH/__init__.py" PROTO_PATH="../vendor/trezor-common/protob" PROTO_FILES="types messages" -PB2_OUT="pb2" -rm -f "$GENPATH/[A-Z]*.py" -mkdir -p "$GENPATH" +# set up temporary directory & cleanup +TMPDIR=$(mktemp -d) +function cleanup { + rm -r $TMPDIR +} +trap cleanup EXIT -cat > "$INDEX" << EOF +# set up pb2 outdir +PB2_OUT="$TMPDIR/pb2" +mkdir -p "$PB2_OUT" + +# compile .proto files to python2 modules using google protobuf library +for file in $PROTO_FILES; do + protoc --python_out="$PB2_OUT" -I/usr/include -I"$PROTO_PATH" "$PROTO_PATH/$file.proto" +done + +# create index (__init__.py) +cat > "$TMPDIR/$INDEX" << EOF # Automatically generated by pb2py EOF -mkdir -p "$PB2_OUT" - +# convert google protobuf library to trezor's internal format for file in $PROTO_FILES; do - # Compile .proto files to python2 modules using google protobuf library - protoc --python_out="$PB2_OUT" -I/usr/include -I"$PROTO_PATH" "$PROTO_PATH/$file.proto" + ./pb2py -P "trezorlib.protobuf" -p "$PB2_OUT" -l "$TMPDIR/$INDEX" "$file" "$TMPDIR" done -for file in $PROTO_FILES; do - # Convert google protobuf library to trezor's internal format - ./pb2py -P "trezorlib.protobuf" -p "$PB2_OUT" -l "$INDEX" "$file" "$GENPATH" -done +# ensure $GENPATH exists and is empty of messages +mkdir -p "$GENPATH" +# only remove messages - there could possibly be other files not starting with capital letter +rm -f "$GENPATH"/[A-Z]*.py -rm -rf "$PB2_OUT" +# move generated files to the destination +# (this assumes $INDEX is *.py, otherwise we'd have to add $INDEX separately) +mv "$TMPDIR"/*.py "$GENPATH" + +# the exit trap handles removing the tmp directory