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.
