diff options
-rwxr-xr-x | generator/nanopb_generator.py | 23 | ||||
-rw-r--r-- | generator/proto/Makefile | 9 | ||||
-rw-r--r-- | tools/make_windows_package.sh | 33 |
3 files changed, 46 insertions, 19 deletions
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py index 0002409b..86c554a2 100755 --- a/generator/nanopb_generator.py +++ b/generator/nanopb_generator.py @@ -4,7 +4,7 @@ nanopb_version = "nanopb-0.2.5-dev" try: - import google.protobuf.descriptor_pb2 as descriptor + import google, distutils.util # bbfreeze seems to need these import google.protobuf.text_format as text_format except: print @@ -15,18 +15,8 @@ except: print raise -try: - import proto.nanopb_pb2 as nanopb_pb2 -except: - print - print "***************************************************************" - print "*** Could not import the precompiled nanopb_pb2.py. ***" - print "*** Run 'make' in the 'generator' folder to update the file.***" - print "***************************************************************" - print - raise - - +import proto.nanopb_pb2 as nanopb_pb2 +import proto.descriptor_pb2 as descriptor @@ -1025,6 +1015,13 @@ def main_cli(): def main_plugin(): '''Main function when invoked as a protoc plugin.''' + import sys + if sys.platform == "win32": + import os, msvcrt + # Set stdin and stdout to binary mode + msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY) + msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) + import proto.plugin_pb2 as plugin_pb2 data = sys.stdin.read() request = plugin_pb2.CodeGeneratorRequest.FromString(data) diff --git a/generator/proto/Makefile b/generator/proto/Makefile index fea99a9c..ee1390a5 100644 --- a/generator/proto/Makefile +++ b/generator/proto/Makefile @@ -1,7 +1,4 @@ -all: nanopb_pb2.py plugin_pb2.py +all: nanopb_pb2.py plugin_pb2.py descriptor_pb2.py -nanopb_pb2.py: nanopb.proto - protoc --python_out=. nanopb.proto - -plugin_pb2.py: plugin.proto - protoc --python_out=. plugin.proto +%_pb2.py: %.proto + protoc --python_out=. $< diff --git a/tools/make_windows_package.sh b/tools/make_windows_package.sh new file mode 100644 index 00000000..c3a050a9 --- /dev/null +++ b/tools/make_windows_package.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Run this script in the top nanopb directory to create a binary package +# for Windows users. This script is designed to run under MingW/MSYS bash + +set -e +set -x + +VERSION=`git describe --always` +DEST=dist/$VERSION + +rm -rf $DEST +mkdir -p $DEST + +# Export the files from newest commit +git archive HEAD | tar x -C $DEST + +# Rebuild the Python .proto files +make -BC $DEST/generator/proto + +# Make the nanopb generator available as a protoc plugin +cp $DEST/generator/nanopb_generator.py $DEST/generator/protoc-gen-nanopb.py + +# Package the Python libraries +( cd $DEST/generator; bbfreeze nanopb_generator.py protoc-gen-nanopb.py ) +mv $DEST/generator/dist $DEST/generator-bin + +# Remove temp file +rm $DEST/generator/protoc-gen-nanopb.py + +# Package the protoc compiler +cp `which protoc`.exe $DEST/generator-bin/ + |