Avro C++ README.txt

The C++ port is thus far incomplete.  Currently, it contains:

 - Serializer/Parser- objects for writing/reading raw binary.

 - xxxSchema- objects for composing schemas.

 - ValidSchema- a schema object that has been converted to a parse tree
   (with some sanity checks). 

 - ValidSchema.toJson() writes the schema as a json object.

 - ValidatingSerializer/ValidatingParser- check that reads/writes
   match the expected schema type (more expensive than the raw
   serializer/parser but they detect errors, and allow dynamic
   discovery of parsed data/attributes).

 - Compiler (compileJsonSchema())- converts a Json string schema to a
   ValidSchema.

 - Code Generation (experimental) - given a schema it generates C++
   objects of the same data types, and the code to serialize and parse
   it.

What's missing: Rpc containers are not yet implemented. Documentation is sparse.

INSTRUCTIONS

Pre-requisites:

To compile requires boost headers, and the boost regex library. Optionally, it requires Snappy compression library. If Snappy is available, it builds support for Snappy compression and skips it otherwise. (Please see your OS-specific instructions on how to install Boost and Snappy for your OS).

To build one requires cmake 2.6 or later.

To generate a Makefile under Unix, MacOS (using GNU) or Cygwin use:

mkdir build
cd build
cmake -G "Unix Makefiles" ..

If it doesn't work, either you are missing some packages (boost, flex or bison),
or you need to help configure locate them.

If the Makefile is configured correctly, then you can make and run tests:

    make
    ctest

To install

    make package

and then untar the generated .tar.gz file.

To build and test on MacOS (using Xcode)

mkdir build.mac
cd build.mac
cmake -G Xcode

xcodebuild -configuration Release
ctest -C Release

If debug version is required, replace 'Release' above with 'Debug'.

Note: The LICENSE and NOTICE files in the lang/c++ source directory are used to
build the binary distribution. The LICENSE and NOTICE information for the Avro
C++ source distribution is in the root directory.
