/77up

Various core libraries and utilities open sourced by Room77

Primary LanguageC++MIT LicenseMIT

Various core libraries and utilities open sourced by Room77.

This directory, except third_party, contains open sourced code under a
permissive MIT license. Some of the code is copyrighted by Optrip Inc, some by
Room77 Inc, and some by individual authors. Irrespective of the copyright owner,
the intention (except third_party) is to publish the code under a permissive MIT
or BSD like open source license.

The third_party directory contains open source code used by some of the Room77
codebase. They may have their own licenses which may be more restrictive than
the MIT license (e.g. GPL). The rest of the documentation, unless explicitly
stated otherwise, refers to code open sourced by Room77 excluding anything under
the third_party directory.

You can use, modify, redistribute the software as you see fit. The software is
made available as is without any guarantees or warranties. Optrip, Room77 or
individual authors are not responsible for any damages you may incur as a result
of using this code or a subset of it. It is your responsibility to check the
code for correctness and suitability before use.

The software is shared with the hopes that it will be useful to others. If you
find any bugs or made improvements or if you just want to let us know your
experience with it, we would love to hear from you.

You would need a recent compiler with decent C++11 support (e.g. gcc 4.8+,
clang 3.5+). Most code should work with gcc. Some are tested with clang as well.

Some of the libraries / components are fairly independent and can easily be
compiled or added to other codebases. Some of the components have more
dependencies that are not as trivial to decouple. We tried to streamline the
dependencies for most useful components when practical.

Some of the code depend on external libraries (e.g. icu, zlib, leveldb, etc.).
In order to compile and use them, you would need to install the appropriate
libraries. In most Linux distributions, you may already have packages for them.

A good portion of the tests use googletest / googlemock which are not included
as part of this package. We added convenience scripts under third_party/google/*
you can use to fetch and incorporate them if you desire. Some of the tests and a
small subset of libraries will not compile without them.

Internally we use our own flash build system to build packages. We intent to
open source this tool as well, but it will take time to remove internal
dependencies and generalize it. RULES files you may see in various directories
are used within flash and they are fairly intuitive. It should be relatively
straightforward to see the dependencies and translate the RULES entries manually
to your favorite build systems for the libraries you care about. RULES files are
provided as examples for now.

We provided a subset of Uygar's ruleless build system (that he plans to open
source in the future when more mature). All the code, provided that you have the
necessary libraries, compiler versions and tools installed, should compile with
that. It is known to work with g++ 4.8 and gnu make. Just call make at the root
directory to build everything that can be built with the available libraries.

See ./auto_build --help for example usage and options.

The quality of the code from our perspective varies from fine to good to great.
Some of the code is using new C++11 features with arguably better APIs and
practices. Some of the code is fairly old. If we were to write them from scratch
today with enough time in our hands, end results may probably look quite
different for some. For some, we are fairly happy with.

While choosing what to include in this package, we generally asked ourselves the
following questions:

- Is the component potentially useful to others?
- Is the component high enough quality? Would potential users rather modify them
  to suit their needs or start from scratch?
- Is the component fairly independent?
- Do we have enough time / man power to clean it up and make it available?

If you have any comments or feedback, please let us know. We are open to
receiving improvements and patches but we need to weigh general usefulness and
complexity of integration.

-- Uygar Oztekin (oztekin@room77.com), and Room77 engineering team. Dec 2013.