
See the NOTICE file for licensing information.

--------------------------------
Building the Apache UIMA C++ SDK
--------------------------------

The Apache UIMA C++ SDK has been built and tested in 32-bit mode
on Linux systems with gcc version 3.4.6 and on Windows 
using MSVC version 8. 64-bit builds have only been tested on Linux with gcc 4.3.2

64-bit builds have only been tested on Linux with gcc 4.1.0.


Setting up the build environment:
---------------------------------
UIMACPP has dependencies on APR, ICU, Xerces-C and ActiveMQ-cpp
libraries.  

On Windows dependent libraries must be specified with the
environmental parameters APR_HOME, ICU_HOME, XERCES_HOME and
ACTIVEMQ_HOME.  For now, the ActiveMQ CPP dependency is optional; if not
specified the UIMA-AS compatible service wrapper deployCppService will
fail to build.

On Linux, system install of dependencies - APR, ICU, XERCES, ACTIVEMQ 
will be used if minimum version requirements are met.  They may also
be specified with the environmental parameters APR_HOME, ICU_HOME, XERCES_HOME and
ACTIVEMQ_HOME.  The ActiveMQ CPP library is required.

There is also a dependency on JNI headers from a Java JDK. The build
looks for these headers in the directory specified by JAVA_INCLUDE.
A typical setting for JAVA_INCLUDE on Linux or Windows would be
$JAVA_HOME/include; on MacOSX jni.h and the other headers will be in a
"Headers" directory.

On Unix, dependent headers are expected under $dependent_HOME/include and
dependent libraries under $dependent_HOME/lib.

The build of dependent libraries on Windows is less consistent.
APR libraries are expected in %APR_HOME%\Release. ActiveMQ libraries 
are in %ACTIVEMQ_HOME%\vs2005-build\ReleaseDLL (or DebugDLL) and 
ActiveMQ headers are expected in %ACTIVEMQ_HOME%\src\main.

On Windows, buildsdk command tries to copy the msvc*.dll runtime libs from
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT
To override the location for MSCV redistributable libraries, use MSVCRT_HOME.


Building, testing and packaging on Linux:
-----------------------------------------
Set up your environment as described above. The following instructions
assume you have unpacked the source into $HOME/uimacpp-2.X.Y.

1 Create the GNU automake scripts:
  Note: This step is only done when building from an SVN extract;
        it should be skipped when building from a source tarball.
        The prebuild step requires relatively up-to-date GNU tools
        GNU automake v1.9.6, autoconf v2.59 and libtool v1.5.24.
  cd root of an SVN extract
  ./autogen.sh

2 Build the UIMA shared library and test routines:
  cd root of the SVN extract  
  ./configure --with-jdk=$JAVA_HOME/include --with-apr=$APR_HOME --with-icu=$ICU_HOME --with-xerces=$XERCES_HOME --with-activemq=$ACTIVEMQ_HOME
  make
  DESTDIR=`pwd` make install

3 Build and run the test suite:
  From root of the SVN extract  
  make check

4 Build the SDK tree:
  Requires environmental parameters to be set for ICU_HOME, XERCES_HOME, APR_HOME, and ACTIVEMQ_HOME.
  From root of the SVN extract  
  make sdk ARGS=target_dir
  This will build the documentation.
  Note: The documentation build requires Doxygen 1.3.6 or later.

5 Package the SDK tarball:
  cd target_dir/..
  tar czf uimacpp-2.X.Y-bin.tgz uimacpp

6 Build source tarball:
  From root of the SVN extract  
  make dist


Building, testing and packaging on Windows:
-----------------------------
Set up your environment as described above. The following instructions
assume you have unpacked the source into \uimacpp-2.X.Y.

1 Build the UIMA C++ framework in both release and debug:
  cd \uimacpp-2.X.Y\src
  winmake /build release
  winmake /build debug

2 Build and run the test suite:
  cd \uimacpp-2.X.Y\src\test
  devenv test.sln /build release
  fvt

3 Build the documentation:
  Note: The documentation build requires Doxygen 1.3.6 or later.
  cd \uimacpp-2.X.Y\docs
  builddocs

4 Build the SDK tree:
  set MSVCRT_HOME to the directory with the msvc*.dll files required.
  cd \uimacpp-2.X.Y
  buildsdk target_dir

5 Package the SDK zipfile by creating a compressed folder of 
  target_dir\uimacpp into uimacpp-2.X.Y-bin.zip


Building, testing and packaging on Mac OSX:
-------------------------------------------
Except for one problem with APR, building is the same here as on Linux.
For the Intel-based Mac OSX machines we have tested with, the APR function
to dynamically load shared libraries does not respect DYLD_LIBRARY_PATH.

A fix is to patch dso/unix/dso.c as follows:

26a27,31
>#if defined(DSO_USE_DYLD)
>#define DSO_USE_DLFCN
>#undef DSO_USE_DYLD
>#endif
>


Building the dependencies: APR, ICU, Xersec-c and Activemq-cpp
--------------------------------------------------------------

Download and build information for these libraries are at:
  APR      - http://apr.apache.org/
  ICU      - http://www.icu-project.org/
  XERCES   - http://xml.apache.org/xerces-c/
  ACTIVEMQ - http://activemq.apache.org/cms/download.html

ACTIVEMQ CPP library version 3.2 or higher is required to support the ActiveMQ failover protocol
and to support multi-byte payload data.
ACTIVEMQ CPP 3.2 and higher has a dependency on APR at version 1.3.8 or higher.

For UNIX users that cannot or do not want to install these at
system root, specify DESTDIR for the install step. For example,
after building APR, install using:

  DESTDIR=`pwd` make install

On Windows, the only activemq-cpp targets needed by uimacpp are ReleaseDLL and DebugDLL,
 e.g. devenv vs2008-build/vs2008-activemq.vcproj /build ReleaseDLL

Also, the APR library can be built by launching libapr.dsp or by following the
instructions in Makefile.win.


UIMA C++ Release Compatibility
-------------------------------

There  a two distinct features of UIMA C++ to consider when dealing with release compatibility:

- The framework dynamically loads annotators which are user code. The annotators make calls to UIMA C++ APIs 
   and are built with some version of the SDK. A possible scenario is for an application to run annotators that 
   were built with different  releases of UIMA C++ SDK.
-  The SDK depends on ICU, XERCES, APR and ACTIVEMQ-CPP and a release is built with a particular version of these.  
   Binary compatibility therefore depends on the compatibility of these underlying libraries.  In particular,  
   ICU and XERCES encode the major and minor release numbers in the APIs which restricts binary compatibility across 
   releases of these libraries.   An application running UIMA C++ is restricted to running one version of the ICU library 
   in a process and all annotators and underlying libraries must use the same ICU version.
   
We do not enforce binary compatility when doing a release.

Installing UIMACPP SDK as a system-wide shared library is discouraged since we do not
have support for parallel versions.  The include directory does not have version number and
there cannot be multiple versions of executable runAECpp and deployCppService.