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.