/exmpp

Erlang XMPP library

Primary LanguageErlang

Exmpp is an Erlang application which provides the modules to ease the
development of an XMPP/Jabber server or client.

== Table of contents ==

    I. How to build and install
        1. Requirements
        2. Build and install
        3. Building examples
        4. Using an alternate Erlang environment
        5. Using another C compiler
        6. Creating Autotools files

I. How to build and install
===========================

1. Requirements
---------------

    o  Erlang/OTP (REQUIRED)
       A full Erlang environment is recommended but only ERTS and
       erl_interface are required.
           . Minimum version:           R12B-5

    o  C compiler (REQUIRED)
       Exmpp contains Erlang port drivers which are written in C.
       Tested C compilers include:
           . GNU Compiler Collection (gcc)
           . Intel C++ Compiler (icc)
           . GCC frontend for LLVM (llvm-gcc)
           . Microsoft Visual C++ (cl)
       C compilers known not to work:
           . clang frontend for LLVM (ccc)

    o  XML parsing library (REQUIRED)
       Tested libraries are:
           . Expat: recommended. Tested: 2.0.1
           . LibXML2: only experimental support.

    o  OpenSSL (optional)
       It's the only TLS engine supported for now.
           . Tested version:            0.9.8e

    o  zlib (optional)
       It's the only compression engine supported for now.
           . Tested version:            1.2.3

    o  eunit (optional)
       To be able to use the testsuite, this Erlang application is required.
           . Tested version:            2.0

2. Build and install
--------------------

Exmpp uses the Autotools. Therefore the process is quite common:

    $ ./configure
    $ make
    $ sudo make install

Building outside of the source directory is supported:

    $ mkdir exmpp-build
    $ cd exmpp-build
    exmpp-build$ /path/to/exmpp-src/configure
    exmpp-build$ make
    exmpp-build$ sudo make install

By default, Exmpp is installed in Erlang lib directory. You may select
another directory with the --prefix argument to the configure script:

    $ ./configure --prefix=/install/exmpp/here

Exmpp will be installed in "/install/exmpp/here/exmpp-$VERSION".

3. Building examples
--------------------

You can find example code in the "examples" directory.

These modules may be built for you with the --enable-examples configure
argument:

    $ ./configure --enable-examples

For now, they're not installed.

4. Using an alternate Erlang environment
----------------------------------------

If Erlang cannot be found by the configure script of if you prefer to
use a specific Erlang environment, you may indicate an alternate Erlang
root directory with the --with-erlang argument:

    $ ./configure --with-erlang=/path/to/alternate/erlang

Another way is to set the following configure variables:

    $ ./configure ERL=/path/to/bin/erl ERLC=/path/to/bin/ERLC \
      ESCRIPT=/path/to/bin/escript

5. Using another C compiler
---------------------------

You may specify another C compiler to use at configure time. For
instance, to use GCC frontend for LLVM:

    $ ./configure CC=llvm-gcc
    $ make

6. Creating Autotools files
---------------------------

If you work on a Subversion checkout, you'll have to generate some files
such as the configure script and Makefile.in. For this, you'll have to
install the following autotools:
    o  autoconf 2.60 or higher (read below for 2.62 and 2.63)
    o  automake 1.9 or later
    o  libtool 1.5 or later

To generate the files, run:

    $ autoreconf -vif

After that, you can use the standard procedure:

    $ ./configure
    $ make

WARNING: Erlang support in old autoconf 2.62 and 2.63 was broken! If you
must stick to these versions, you must apply the following patch to
'erlang.m4' in 'share/autoconf-2.62/autoconf' (patch taken from official
autoconf GIT repository):

----8<----
--- erlang.m4-broken	2009-01-14 17:54:41.000000000 +0100
+++ erlang.m4	2009-01-14 16:51:57.000000000 +0100
@@ -124,7 +124,7 @@
 m4_define([AC_LANG(Erlang)],
 [ac_ext=erl
 ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
-ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD ; echo "#!/bin/sh" > conftest$ac_exeext ; AS_ECHO(["\"$ERL\" -run conftest start -run init stop -noshell"]) >> conftest$ac_exeext ; chmod +x conftest$ac_exeext'
+ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD ; echo "[#]!/bin/sh" > conftest$ac_exeext ; AS_ECHO(["\"$ERL\" -run conftest start -run init stop -noshell"]) >> conftest$ac_exeext ; chmod +x conftest$ac_exeext'
 ])
 
 
----8<----

After applying the patch, you must run the following commands:

    $ cd [...]/share/autoconf-2.62/autoconf
    $ autom4te --language=autoconf --freeze --output=autoconf.m4f