aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xgenerator/nanopb_generator.py23
-rw-r--r--generator/proto/Makefile9
-rw-r--r--tools/make_windows_package.sh33
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/
+