Thrift Code Compiler

License
=======

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

Thrift Code Compiler
====================

This compiler takes thrift files as input and generates output code across
various programming languages. To build and install it, do this:

  ./bootstrap.sh
  ./configure
  make
  sudo make install

It requires some form of LEX and YACC to be installed, which should be
picked up by autoconf.

Not much else to report here. You'll have to look at the code to get your
questions answered. Or just run the executable after you build and take
a look at the usage message.
