diff options
author | Jan Tattermusch <jtattermusch@users.noreply.github.com> | 2015-04-17 14:15:52 -0700 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@users.noreply.github.com> | 2015-04-17 14:15:52 -0700 |
commit | 01c8c35ca3d3424a9473dd22ea2456933b3e8d36 (patch) | |
tree | de582cb9ef3e449f24015dec09f80e998806b26a /csharp/mono | |
parent | 813d6d652d8091e9365bfbd01efb5f2ee8bdfbce (diff) | |
parent | 1eab56aee8dddcb656db67d9fb87a8cc6a2ac112 (diff) | |
download | protobuf-01c8c35ca3d3424a9473dd22ea2456933b3e8d36.tar.gz protobuf-01c8c35ca3d3424a9473dd22ea2456933b3e8d36.tar.bz2 protobuf-01c8c35ca3d3424a9473dd22ea2456933b3e8d36.zip |
Merge pull request #2 from jtattermusch/csharp_protobuf_imported
Pulling protobuf-csharp-port into csharp/ directory
Diffstat (limited to 'csharp/mono')
-rwxr-xr-x | csharp/mono/buildall.sh | 37 | ||||
-rwxr-xr-x | csharp/mono/generatesource.sh | 29 | ||||
-rw-r--r-- | csharp/mono/readme.txt | 91 |
3 files changed, 157 insertions, 0 deletions
diff --git a/csharp/mono/buildall.sh b/csharp/mono/buildall.sh new file mode 100755 index 00000000..bdd0490b --- /dev/null +++ b/csharp/mono/buildall.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Adjust these to reflect the location of NUnit in your system, +# and how you want NUnit to run +NUNIT=~/protobuf/NUnit-2.5.0.9122/bin/net-2.0/nunit-console.exe +NUNIT_OPTIONS=-noshadow + +# The rest should be okay. + +SRC=../src +LIB=../lib +KEYFILE=../keys/Google.ProtocolBuffers.snk + +rm -rf bin +mkdir bin + +# Running the unit tests requires the dependencies are +# in the bin directory too +cp -f $LIB/{Rhino.Mocks.dll,nunit.framework.dll} bin + +echo Building main library +gmcs -target:library -out:bin/Google.ProtocolBuffers.dll `find $SRC/ProtocolBuffers -name '*.cs'` -keyfile:$KEYFILE + +echo Building main library tests +gmcs -target:library -out:bin/Google.ProtocolBuffers.Test.dll `find $SRC/ProtocolBuffers.Test -name '*.cs'` -keyfile:$KEYFILE -r:bin/Google.ProtocolBuffers.dll -r:$LIB/nunit.framework.dll -r:$LIB/Rhino.Mocks.dll + +echo Running main library tests +mono $NUNIT bin/Google.ProtocolBuffers.Test.dll $NUNIT_OPTIONS + +echo Building ProtoGen +gmcs -target:exe -out:bin/ProtoGen.exe `find $SRC/ProtoGen -name '*.cs'` -keyfile:$KEYFILE -r:bin/Google.ProtocolBuffers.dll + +echo Building ProtoGen tests +gmcs -target:library -out:bin/Google.ProtocolBuffers.ProtoGen.Test.dll `find $SRC/ProtoGen.Test -name '*.cs'` -keyfile:$KEYFILE -r:bin/Google.ProtocolBuffers.dll -r:$LIB/nunit.framework.dll -r:bin/ProtoGen.exe + +echo Running ProtoGen tests +mono $NUNIT bin/Google.ProtocolBuffers.ProtoGen.Test.dll $NUNIT_OPTIONS diff --git a/csharp/mono/generatesource.sh b/csharp/mono/generatesource.sh new file mode 100755 index 00000000..218449e2 --- /dev/null +++ b/csharp/mono/generatesource.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +echo Compiling protobufs +rm -rf tmp +mkdir tmp +PROTOS_DIR=../protos + +./protoc --proto_path=$PROTOS_DIR --descriptor_set_out=tmp/compiled.pb \ + $PROTOS_DIR/google/protobuf/descriptor.proto \ + $PROTOS_DIR/google/protobuf/csharp_options.proto \ + $PROTOS_DIR/google/protobuf/unittest.proto \ + $PROTOS_DIR/google/protobuf/unittest_csharp_options.proto \ + $PROTOS_DIR/google/protobuf/unittest_custom_options.proto \ + $PROTOS_DIR/google/protobuf/unittest_embed_optimize_for.proto \ + $PROTOS_DIR/google/protobuf/unittest_import.proto \ + $PROTOS_DIR/google/protobuf/unittest_mset.proto \ + $PROTOS_DIR/google/protobuf/unittest_optimize_for.proto \ + $PROTOS_DIR/tutorial/addressbook.proto + +cd tmp +echo Generating new source +mono ../bin/ProtoGen.exe compiled.pb + +echo Copying source into place +cp DescriptorProtoFile.cs CSharpOptions.cs ../../src/ProtocolBuffers/DescriptorProtos +cp UnitTest*.cs ../../src/ProtocolBuffers.Test/TestProtos +cp AddressBookProtos.cs ../../src/AddressBook +cd .. +rm -rf tmp diff --git a/csharp/mono/readme.txt b/csharp/mono/readme.txt new file mode 100644 index 00000000..ad873a58 --- /dev/null +++ b/csharp/mono/readme.txt @@ -0,0 +1,91 @@ +Getting started with Protocol Buffers on Mono +--------------------------------------------- + +Prerequisites: + +o Mono 2.4 or higher. Earlier versions of Mono had too + many issues with the weird and wonderful generic type + relationships in Protocol Buffers. (Even Mono 2.4 *did* + have a few compile-time problems, but I've worked round them.) + +o Some sort of Linux/Unix system + You can try running with Bash on Windows via MINGW32 or + something similar, but you're on your own :) It's easier + to build and test everything with .NET if you're on + Windows. + +o The native Protocol Buffers build for your system. + Get it from http://code.google.com/p/protobuf/ + After building it, copy the executable protoc + file into this directory. + +o The NUnit binaries from http://nunit.org + I generally just download the latest version, which + may not be the one which goes with nunit.framework.dll + in ../lib, but I've never found this to be a problem. + +Building the code with current sources +-------------------------------------- + +1) Edit buildall.sh to tell it where to find nunit-console.exe + (and possibly change other options) + +2) Run buildall.sh from this directory. It should build the + main library code + tests and ProtoGen code + tests, running + each set of tests after building it. + +Note that currently one test is ignored in ServiceTest.cs. This +made the Mono VM blow up - I suspect it's some interaction with +Rhino which doesn't quite work on Mono 2.4. If you want to see a +truly nasty stack trace, just comment out the Ignore attribute in +ServiceTest.cs and rerun. + +The binaries will be produced in a bin directory under this one. The +build currently starts from scratch each time, cleaning out the bin +directory first. Once I've decided on a full NAnt or xbuild +strategy, I'll do something a little cleaner. + +Rebuilding sources for generated code +------------------------------------- + +1) Build the current code first. The bootstrapping issue is why + the generated source code is in the source repository :) See + the steps above. + +2) Run generatesource.sh from this directory. This will create a + temporary directory, compile the .proto files into a binary + format, then run ProtoGen to generate .cs files from the binary + format. It will copy these files to the right places in the tree, + and finally delete the temporary directory. + +3) Rebuild to test that your newly generated sources work. (Optionally + regenerate as well, and hash the generated files to check that + the new build generates the same code as the old build :) + +Running the code +---------------- + +Once you've built the binaries, you should be able to use them just +as if you'd built them with .NET. (And indeed, you should be able to +use binaries built with .NET as if you'd built them with Mono :) + +See the getting started guide for more information: +http://code.google.com/p/protobuf-csharp-port/wiki/GettingStarted + +FAQ (Frequently Anticipated Questions) +-------------------------------------- + +Q) This build process sucks! Why aren't you doing X, Y, Z? +A) My Mono skills are limited. My NAnt skills are limited. My + MSBuild/xbuild skils are limited. My shell script skills are + limited. Any help is *very* welcome! + +Q) Why doesn't it build ProtoBench etc? +A) This is a first initial "release" I'll add more bits to + the build script. I'll be interested to see the results + of benchmarking it on Mono :) + +Any further questions or suggestions? Please email skeet@pobox.com +or leave a request at +http://code.google.com/p/protobuf-csharp-port/issues/list + |