Thrift (Thrift IDL and RPC tool)

Mark Slee (mcslee@facebook.com)
Marc Kwiatkowski (marc@facebook.com)
Aditya Agarwal (aditya@facebook.com)

Thrift is distributed under the Thrift open source software license.
Please see the included LICENSE file.

Introduction
============

Thrift is a lightweight, language-independent software stack with an
associated code generation mechanism for RPC. Thrift provides clean
abstractions for data transport, data serialization, and application
level processing. The code generation system takes a simple definition
language as its input and generates code across programming languages that
uses the abstracted stack to build interoperable RPC clients and servers.

For more details on Thrift's design and implementation, take a gander at
the Thrift whitepaper included in this distribution or at the README files
in a particular subdirectory of interest.

Heirarchy
=========

thrift/

  compiler/
    Contains the Thrift compiler, implemented in C++.

  lib/
    Contains the Thrift software library implementation, subdivided by
    language of implementation.

    cpp/
    java/
    php/
    py/
    ruby/

  test/

    Contains sample Thrift files and test code across the target programming
    languages.


Requirements
============

Thrift requires boost shared pointers from boost-1.33.1 or greater, see:
http://www.boost.org/libs/smart_ptr/smart_ptr.htm

Some portions of Thrift also depend upon libevent, see:
http://monkey.org/~provos/libevent/

These libraries are open source and may be freely obtained, but they are not
provided as a part of this distribution.

Resources
=========

More information about Thrift can be obtained on the Thrift webpage at:

     http://developers.facebook.com/thrift

Acknowledgments
===============

Thrift was inspired by pillar, a lightweight RPC tool written by Adam D'Angelo

INSTALLATION
============

If you are building from the first time out of the source repository, you will
need to generate the configure scripts.  From the top directory, do:

	./bootstrap.sh

Once the configure scripts are generated, thrift can be configured.
From the top directory, do:

	./configure

You may need to specify the location of the boost files explicitly.
If you installed boost in /usr/local, you would run configure as follows:

	./configure --with-boost=/usr/local

Note that by default the thrift C++ library is typically built with debugging
symbols included. If you want to customize these options you should use the
CXXFLAGS option in configure, as such:

        ./configure CXXFLAGS='-g -O2'
        ./configure CFLAGS='-g -O2'
        ./configure CPPFLAGS='-g -O2'

Run ./configure --help to see other configuration options

Make thrift 

	make

From the top directory, become superuser and do:

	make install
