| 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 |
| |