Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.Sign up
GitHub is where the world builds software
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
Introduction: ~~~~~~~~~~~~~ The Erlang Plus Interface library (EPI) is a tool set of C++ classes to easily build applications in C++ what comunicates with Erlang. The intention of the library is to cover the holes that EI library offers: - An object oriented implementation - A simple API - Extensibility - Abstraction of comunication mechanism - Simplified management of incoming messages (mailboxes) EPI is realased under the LGPL license. For details please see the file "COPYING" distributed with EPI source code. EPI works in a similar manner than jinterface the library for java http://www.erlang.se/doc/doc-5.0.1/lib/jinterface-1.2/doc/. It have some differences: - All comunication is done throw MailBoxes, no matters if you use self or auto managed nodes. - Epi abstracts the comunication mechanism, and you can extend it with new mechanism (using ErlangTransport interface and ErlangTransportFactory) NOTE: EPI is an alpha version and is probably full of bugs. Where can I get it? ~~~~~~~~~~~~~~~~~~~ EPI is hosted at http://code.google.com/p/epi Requirements: ~~~~~~~~~~~~~ In order to build EPI you need the following software: - Scons (www.scons.org) - g++ (tested with version 3.3) And the following libraries: Either OpenThreads or boost library is required: - OpenThreads library. http://openthreads.sourceforge.net/ I highly recomend get the sources from cvs: cvs -d :pserver:email@example.com:/cvs/OpenThreads login cvs -d :pserver:firstname.lastname@example.org:/cvs/OpenThreads co OpenThreadsUpdate - boost library (version 1.35.0 or above) http://boost.org - LibCWD for debug messages. Not needed if debug is disabled. http://libcwd.sourceforge.net/ - EI library (tested with version 3.5) Configure and Building: ~~~~~~~~~~~~~~~~~~~~~~~ First configure epi creating the file epi-X.X.X/custom.py with the following content: -- 8< ------ 8< ------ 8< ------ 8< ------ 8< ------ 8< -- # EI Library path EI_INC='/path/to/erl_interface/include/' EI_LIB='/path/to/erl_interface/lib/' # Openthreads path OPENTHREADS_INC='/path/to/openthreads/include/' OPENTHREADS_LIB='/path/to/openthreads/lib' # Libcwd path LIBCWD_INC = '/path/to/libcwd/inc' LIBCWD_LIB = '/path/to/libcwd/inc' # debug build y/n debug = 1 -- 8< ------ 8< ------ 8< ------ 8< ------ 8< ------ 8< -- if any path is unnecesary (libraries are installed), you can not set this variables or set them to 0. Once configured, simply execute: $ scons After build, headers will be located in epi-X.X.X/include and libraries in epi-X.X.X/lib. Other targets are: $ scons doc $ scons check $ scons sample 'scons -h' for more info. You can set configuration options in command line: $ scons EI_INC='/path/to/erl_interface/include/' \ EI_LIB='/path/to/erl_interface/lib/' \ OPENTHREADS_INC='/path/to/openthreads/include/' Installing: ~~~~~~~~~~~ Actually the library can't be installed. Using the library: ~~~~~~~~~~~~~~~~~~ Actually the library is not installed, so you must include the headers from the epi-X.X.X/include directory. To use the EPI library simply include the "epi.hpp" file in your code. Actually epi is a static library, and must be staticly linked. You must link the ei and openthreads library too: $ gcc mynode.cpp -I/path/to/epi/include -L/path/to/epi/lib -lepi -lei -lopenthreads Documentation: ~~~~~~~~~~~~~~ Documentation can be generated using Doxygen - http://www.doxygen.org. Just exec: $ scons doc and the documentation will be generated in docs/ directory. Language Issues: ~~~~~~~~~~~~~~~~ I known, and I'm sorry, my english is poor. I have to study a lot more. Anyway I tried to document all the library code and specially all the public interfaces. I think that is much better a comment like: /** This function return pointer which must be deleted */ void *f(); than: void *f(); is not? ;) Bugs, comments, language corrections and other feedback: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can send them all to email@example.com. Feedback is really appreciated. I'm specially insterested in C++ coding suggestions (This is my first C++ project). Language corrections in documentation are also appreciated, and everyone can colaborate. You can submit bug reports at http://code.google.com/p/epi/issues/list Contact: ~~~~~~~~ I can be contacted at: firstname.lastname@example.org