Add build script for windows package
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sun, 17 Nov 2013 15:37:29 +0000 (17:37 +0200)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sun, 29 Dec 2013 18:26:57 +0000 (20:26 +0200)
generator/nanopb_generator.py
generator/proto/Makefile
tools/make_windows_package.sh [new file with mode: 0644]

index 0002409..86c554a 100755 (executable)
@@ -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)
index fea99a9..ee1390a 100644 (file)
@@ -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 (file)
index 0000000..c3a050a
--- /dev/null
@@ -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/
+