1.2. Building on Unix systems

1.2.1. Prerequisites

For building Wolframe on Unix systems you need at least the following software:

Depending on the features you want to use you also may need the following software:

  • The OpenSSL library 0.9.7 or newer, for encryption and authentication, http://www.openssl.org

  • The Sqlite database library, version 3.5.0 or newer, for storing user data and authentication data in a Sqlite database, http://sqlite.org

  • The PostgreSQL database client library, version 8.1 or newer, for storing user data and authentication data in a PostgreSQL database, http://postgresql.org

  • The Oracle OCI client library, version 11.2 or newer, for storing user data and authentication data in an Oracle database, http://www.oracle.com

  • The libxml2 library, version 2.7.6 or newer, for filtering XML data, http://xmlsoft.org/

  • The libxslt library, version 1.1.26 or newer, for the transformation of XML data, http://xmlsoft.org/

  • Python 3, version 3.3.0 or newer, for writting applications in Python, https://www.python.org

  • The libhpdf library, version 2.2.1 or newer, for PDF generation and printing, http://libharu.org/

  • The FreeImage package, version 3.15.4 or newer, for image manipulation, http://freeimage.sourceforge.net

  • The ICU library, version 3.5 or newer, for text normalization and conversion, http://site.icu-project.org

  • A PAM library, for instance Linux PAM, version 1.0.4 or newer, for authentication via PAM, http://www.linux-pam.org

  • The Cyrus SASL library, version 2.1.22 or newer, for authentication via SASL, http://cyrusimap.org/

For testing the Wolframe software you need:

  • Expect 5.40 or newer, for running the Expect tests, http://expect.sourceforge.net/

  • A working telnet

  • A PostgreSQL or Oracle database when you want to run the database tests

For building the documentation and manpages you need:

For building the wolfclient you need:

1.2.2. Basic build instructions

Wolframe is built and installed by simply calling:

	make
	make install
			

The makefiles understand the standard GNU targets like 'clean', 'distclean', 'test', 'install', 'uninstall', etc. Also the standard installation variables 'DESTDIR' and 'prefix' are understood. The whole list of options can be seen with:

	make help
			

There is no configure. Porting to platforms and distributions is done in the makefiles. For most platforms we provide reasonable default values in makefiles/gmake/platform.mk.

Optional features are enabled by using 'WITH_XXX' variables when calling make, e. g. to enable SSL support you call make like this:

	make WITH_SSL=1
			

Additional variables can be set when 3rdParty software is not in the standard location, for instance:

	make BOOST_DIR=/usr/local/boost-1.55.0
			

You can check how your software will be build with:

	make config
			

If you get a 'NOT SUPPLIED ON THIS PLATFORM' you have to provide the variables explicitly as mentioned above in the example with 'BOOST_DIR'.

A complete build may look like this:

	make WITH_SSL=1 WITH_EXPECT=1 WITH_PAM=1 WITH_SASL=1 \
		WITH_SYSTEM_SQLITE3=1 WITH_PGSQL=1 WITH_ORACLE=1 \
		WITH_LUA=1 WITH_LIBXML2=1 WITH_LIBXSLT=1 \
		WITH_LOCAL_LIBHPDF=1 WITH_ICU=1 WITH_LOCAL_FREEIMAGE=1 \
		WITH_PYTHON=1 WITH_CJSON=1 WITH_TEXTWOLF=1 \
		CC=gcc CXX=g++ CCFLAGS='-Werror' CXXFLAGS='-Werror' \
		clean all test install
			

1.2.3. GCC compiler

Compilation with GNU gcc is the default on all Unix platforms. It corresponds to the call:

	make CC=gcc CXX=g++
			

Per default all reasonable warnings are enabled. To add your own flags you can set 'CFLAGS' or 'CXXFLAGS' respectively for instance to turn compiler warnings into fatal errors with:

	make CFLAGS='-Werror' CXXFLAGS='-Werror'
			

or

	make CFLAGS='-g -O0' CXXFLAGS='-g -O0'
			

to turn off optimization and to enable debug information.

Certain embedded 3rdParty software may choose to have it's own flags for compilation, you can't override those in the make invocation.

1.2.4. clang compiler

Compilation with clang is possible, only set the correct compiler variables:

	make CC=clang CXX=clang++
			

Also here you can set 'CFLAGS' and 'CXXFLAGS' at will.

1.2.5. Intel compiler

Compilation with the Intel C compiler is done with:

	source /opt/intel/bin/iccvars.csh intel64 
	make CC=icc CXX=icpc
			

(where '/opt/intel/bin/icc' is the location of the Intel compiler).

Also here you can set 'CFLAGS' and 'CXXFLAGS' at will.

When running the tests or any binaries you have to make sure that 'LD_LIBRARY_PATH' is set correctly (the example is for csh/tcsh, Intel 64-bit):

	setenv LD_LIBRARY_PATH $PROD_DIR/lib/intel64
			

1.2.6. Using ccache and distcc

Ccache (http://ccache.samba.org/) and DistCC (https://code.google.com/p/distcc/) can be used to cache respectively distribute the compilation of Wolframe.

Call make as follows:

	make CC='ccache gcc' CXX='ccache g++'
			

or

	make CC='distcc gcc' CXX='distcc g++'
			

If you want to use ccache and distcc in parallel, use the following commands:

	export DISTCC_HOSTS='server1 server2 server3'
	export CCACHE_PREFIX=distcc
	make CC='ccache gcc' CXX='ccache g++'
			

When using 'clang' with 'ccache' set the following environment variable too (on Linux only, on FreeBSD 10 the ccache with clang combination runs out of the box):

	export CCACHE_CPP2=1
				

The same applies for some versions of 'icc' (for instance 14.0.2 20140120). You get spurious errors when you don't set 'CCACHE_CPP2'!

Note:: distcc is not very helpfull as most time is spent currently in dependency calculation and in the C++ preprocessing. If you want to use the pump mode of distcc you will experience a lot of errors in the pre-computed header files mainly due to boost.

1.2.7. Platform-specific build instructions

FreeBSD

You need GNU make, BSD make doesn't work. You have to install the 'gmake' package.

FreeBSD 8, 9 and 10 are supported.

Note: As of FreeBSD 10 it's recommended to use the 'pkgng' package management tool to install binary prerequsites.

Note: Since FreeBSD 10 clang is the default compiler and no longer gcc.

NetBSD

You need GNU make, BSD make doesn't work. You have to install the 'gmake' package.

NetBSD 6 is supported, NetBSD 5 not.

Packages are installed with 'pkgin' into the directory /usr/pkg. Make sure /usr/pkg/bin is part of your PATH.

OpenIndiana 151a8

The official gcc is too old to build Boost. The Forte compiler is not free and has big problems to compile modern C++ code. So we must use the CSW/gcc/C++ toolchain for Wolframe.

Install the CSW toolchain (http://www.opencsw.org) and basic development tools:

	pkgadd -d http://get.opencsw.org/now
	pkgutil --install CSWgcc4core CSWgcc4g++ CSWgmake					
					

You also need some system files:

	pkg install pkg:/system/header
	pkg install pkg:/developer/library/lint
	pkg install system/library/math/header-math
					

Make sure /opt/csw/bin is part of your PATH.

Install packages with 'pkgutil --install'.

Solaris 10

We only build for SPARC and Solaris 10 currently.

You may have to install a 'SFWgtar' or 'CSWgtar' in order to unpack the sources. Make sure to rename them to 'gtar' to avoid collisions with the standard 'tar'!

The official gcc is too old to build Boost. The Forte compiler is not free and has big problems to compile modern C++ code. So we must use the CSW/gcc/C++ toolchain for Wolframe.

Install the CSW toolchain (http://www.opencsw.org) and basic development tools:

	pkgadd -d http://get.opencsw.org/now
	pkgutil --install CSWgcc4core CSWgcc4g++ CSWgmake					
					

Make sure the build environment is always set as follows:

PATH=/opt/csw/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/csw/sbin:/usr/sbin:/sbin
export PATH
					

Install official packages with 'pkgadd -d' and CSW packages with 'pkgutil --install'.

Building Wolframe is more complex as on other platforms, so we provide this working example invocation of make:

	LD_RUN_PATH=/opt/csw/lib:/opt/csw/postgresql/lib \
	OPENSSL_DIR=/opt/csw PGSQL_DIR=/opt/csw/postgresql \
	LIBLT_DIR=/usr BOOST_DIR=/opt/csw/boost-1.55.0 \
		WITH_EXPECT=1 WITH_SSL=1 WITH_SYSTEM_SQLITE3=1 WITH_PGSQL=1 WITH_LUA=1 \
		WITH_LIBXML2=1 WITH_LIBXSLT=1 WITH_PAM=1 WITH_SASL=1 WITH_LOCAL_LIBHPDF=1 \
		WITH_ICU=1 ICU_DIR=/opt/csw/icu4c-49.1.2 \
		WITH_LOCAL_FREEIMAGE=1 \
		WITH_PYTHON=1 \
		gmake \
			CC=gcc CXX=g++ CFLAGS=-mcpu=v9 CXXFLAGS=-mcpu=v9
					

1.2.8. Boost

Boost (http://www.boost.org) is the only library which is absolutely required in order to build Wolframe.

Build your own version of Boost

The following Boost libraries are required for building Wolframe:

	./bootstrap.sh --prefix=/usr/local/boost-1.55.0 \
		--with-libraries=thread,filesystem,system,program_options,date_time
	./bjam install
			

If you want to build the ICU normalization module (WITH_ICU=1) you will have to build 'boost-locale' with ICU support and you have to enable the 'regex' and the 'locale' boost libraries too:

	./bootstrap.sh --prefix=/usr/local/boost-1.55.0 \
		--with-libraries=thread,filesystem,system,program_options,date_time,regex,locale
	./bjam install
			

The location of the Boost library can be set when building Wolframe as follows:

	make BOOST_DIR=/usr/local/boost-1.55.0
			

RedHat, Fedora, CentOS, Scientific Linux and similar Linux distributions

RedHat/Centos/Scientific Linux 5 and similar Linux distributions

The official Boost packages are not recent enough. Build your own Boost version here.

If you want ICU support you will also need the 'libicu-devel' package.

RedHat 6

The official Boost packages are not recent enough. Build your own Boost version here.

If you want ICU support you will also need the 'libicu-devel' package.

We currently build the official packages without ICU support. The reason is that there is no 'libicu-devel' package available for RHEL6 on OBS (see http://permalink.gmane.org/gmane.linux.suse.opensuse.buildservice/17779).

Get a Redhat developer license to get the 'libicu-devel' package or build your own libicu library and build your own Boost library with boost-locale and ICU support.

Centos/Scientific Linux 6 and similar Linux distributions

The official Boost packages are not recent enough. Build your own Boost version here.

If you want ICU support you will also need the 'libicu-devel' package.

RedHat/Centos/Scientific Linux 7 and similar Linux distributions

You need the 'boost-devel' package. This package contains also the boost-locale and ICU backend.

Fedora and similar Linux distributions

You need the 'boost-devel' package. This package contains also the boost-locale and ICU backend.

Debian, Ubuntu and similar Linux distributions

Debian 6

The official Boost packages are not recent enough. Build your own Boost version here.

Debian 7

You need the following packages: 'libboost-dev', 'libboost-program-options-dev', 'libboost-filesystem-dev', 'libboost-thread-dev', 'libboost-random-dev'.

If you want ICU support you will also need the 'libboost-locale-dev' package.

Ubuntu 10.04.1 LTS, Ubuntu 12.04

The official Boost packages are not recent enough. Build your own Boost version here.

Ubuntu 13.10 and 14.04

You need the following packages: 'libboost-dev', 'libboost-program-options-dev', 'libboost-filesystem-dev', 'libboost-thread-dev', 'libboost-random-dev'.

If you want ICU support you will also need the 'libboost-locale-dev' package.

openSUSE, SLES and similar Linux distributions

OpenSuSE 12.3, 13.1

You need the 'boost-devel' package.

SLES 11 SP1, SP2 and SP3

The official Boost packages are not recent enough. Build your own Boost version here.

ArchLinux

You need the 'boost' and 'boost-libs' packages. The official Boost packages contains support for boost-locale and the ICU backend.

Slackware

You need the 'boost' package. This package is part of the 'l' package series. The official Boost package contains support for boost-locale and the ICU backend.

FreeBSD 10

You need the 'boost-libs' package.

FreeBSD 8 and 9

You need the 'boost-libs' package.

Some boost header files are broken when compiling with gcc, for patches see packaging/patches/FreeBSD. They can be applied to the ports directory before rebuilding Boost or directly to the installed header files in /usr/local/include/boost.

NetBSD

You need the 'boost-libs' package.

OpenIndiana 151a8

We don't use the CSW boost packages.

As long you don't need ICU support you can build Boost as follows:

First apply all patches found in packaging/patches/Solaris/1.55.0.

Then build boost with:

	./bootstrap.sh --prefix=/opt/csw/boost-1.55.0 \
		--with-libraries=thread,filesystem,system,program_options,date_time
	./b2 -a -d2 install
					

Note: The only tested version for now is version 1.55.0! Other versions of Boost may work or not work..

Solaris 10

We don't use the CSW boost packages.

As long you don't need ICU support you can build Boost as follows:

Patch the correct architecture (V8 is not really supported, but V8 is also very old) and gcc version in tools/build/v2/user-config.jam:

	using gcc : 4.8.2 : g++ : <compileflags>-mcpu=v9 ; 
					

Then build boost with:

	./bootstrap.sh --prefix=/opt/csw/boost-1.55.0 \
		--with-libraries=thread,filesystem,system,program_options,date_time
	./b2 -a -d2 install
					

Note: The only tested version for now is version 1.55.0! Other versions of Boost may work or not:

Do not use boost 1.48.0, it breaks in the threading header files with newer gcc versions (4.8.x) and runs only with old gcc versions (4.6.x).

Do not use boost 1.49.0, it has a missing function 'fchmodat' causing building of libboost_filesystem to fail!

Boost 1.50.0 thru 1.54.0 have never been tested with Wolframe, so don't use those!

1.2.9. Secure Socket Layer (SSL)

The Wolframe protocol can be secured with SSL. You have to specify the following when building:

	make WITH_SSL=1
			

Currently only OpenSSL (http://www.openssl.org) is supported. The location of the library can be overloaded with:

	make WITH_SSL=1 OPENSSL_DIR=/usr/local/openssl-1.0.1g
			

Use the most recent version of the OpenSSL library available for you platform.

Note: Be carefull to use the 0.9.8, 1.0.0 or 1.0.1g or newer versions, but not the versions 1.0.1 through 1.0.1f (Heartbleed bug)!

RedHat, Fedora, CentOS, Scientific Linux and similar Linux distributions

You need the 'openssl-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'libssl-dev' package.

openSUSE, SLES and similar Linux distributions

You need the 'openssl-devel' package.

ArchLinux

You need the 'openssl' package.

Slackware

You need the 'openssl' package. This package is part of the 'n' package series.

FreeBSD

FreeBSD contains all necessary SSL libraries per default, you don't have to install any special packages.

NetBSD

NetBSD contains all necessary SSL libraries per default, you don't have to install any special packages.

OpenIndiana 151a8

You need the 'CSWlibssl-dev' package.

Solaris 10

You need the 'libssl_dev' package.

1.2.10. SQLite database support

Wolframe can use an Sqlite3 database (http://sqlite.org) as backend for data storage and for authentication and autorization.

You enable the building of a loadable Sqlite3 database module with:

	make WITH_SYSTEM_SQLITE3=1
			

If you don't have a recent Sqlite version on your system you can also build the module against the embedded version:

	make WITH_LOCAL_SQLITE3=1
			

The location of the Sqlite library can be overloaded with:

	make WITH_SYSTEM_SQLITE3=1 SQLITE3_DIR=/usr/local/sqlite-3.4.3
			

You can also override all compilation and linking flags of Sqlite separately:

	make WITH_SYSTEM_SQLITE3=1 \
		SQLITE3_INCLUDE_DIR=/usr/local/sqlite-3.4.3/include \
		SQLITE3_LIB_DIR= /usr/local/sqlite-3.4.3/lib \
		SQLITE3_LIBS=-lsqlite3
			

When building with 'WITH_SYSTEM_SQLITE3' it is enough to install the correct development library.

RedHat/Centos/Scientific Linux 5 and similar Linux distributions

The official Sqlite package is too old, use the embedded version of Sqlite with 'WITH_SYSTEM_SQLITE3=1'.

RedHat/Centos/Scientific Linux 6 and 7, Fedora and similar Linux distributions

You need the 'sqlite-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'libsqlite3-dev' package.

For running the Sqlite3 database tests you also need the 'sqlite3' package.

openSUSE, SLES and similar Linux distributions

You need the 'sqlite3-devel' package.

For running the Sqlite3 database tests you also need the 'sqlite3' package.

ArchLinux

You need the 'sqlite' package.

Slackware

You need the 'sqlite' package. This package is part of the 'ap' package series.

FreeBSD

You need the 'sqlite3' package.

NetBSD

You need the 'sqlite3' package.

OpenIndiana 151a8

You need the 'CSWlibsqlite3-0' and the 'CSWlibsqlite3-dev' packages.

For running the Sqlite3 database tests you also need the 'CSWsqlite3' package.

Solaris 10

You need the 'CSWlibsqlite3-0' and the 'CSWlibsqlite3-dev' packages.

For running the Sqlite3 database tests you also need the 'CSWsqlite3' package.

1.2.11. PostgreSQL database support

Wolframe can use a PostgreSQL database (http://postgresql.org) as backend for data storage and for authentication and autorization.

You enable the building of a loadable PostgreSQL database module with:

	make WITH_PGSQL=1
			

The location of the PostgreSQL library can be overloaded with:

	make WITH_PGSQL=1 PGSQL_DIR=/usr/local/postgresql-9.1.3
			

You can also override all compilation and linking flags of PostgreSQL separately:

	make WITH_PGSQL=1 \
		PGSQL_INCLUDE_DIR=/usr/local/postgresql-9.1.3/include \
		PGSQL_LIB_DIR=/usr/local/postgresql-9.1.3/lib \
		PGSQL_LIBS=-lpq
			

RedHat, Fedora, CentOS, Scientific Linux and similar Linux distributions

You need the 'postgresql-devel' package.

For Centos/RHEL/SciLi 5 you can choose between the 'postgresql-devel'package (which is version 8.1) or the 'postgresql84-devel' package. The 8.4 version is recommended over 8.1.

For running the Postgresql tests you need a fully functional 'postgresql-server' with a db user 'wolfusr' (password: 'wolfpwd') owning a database called 'wolframe'.

Setting up a test user in PostgreSQL on version 7 of Centos/RHEL/SciLi and Fedora is done with:

	postgresql-setup initdb
	systemctl start postgresql.service
	systemctl enable postgresql.service
					

change the authentication method from 'ident' to 'md5' in pg_hba.conf.

Debian, Ubuntu and similar Linux distributions

You need the 'libpq-dev' package.

For running the PostgreSQL database tests you also need the 'postgresql-client' package.

You also need a fully functional PostgreSQL server, package 'postgresql'.

openSUSE, SLES and similar Linux distributions

You need the 'postgresql-devel' package.

ArchLinux

You need the 'postgresql-libs' package.

If you want to test you also have to set up the PostgreSQL server which comes in the 'postgresql' package.

Slackware

A PostgreSQL package is not available on Slackware, build your own one with:

	./configure --prefix=/usr/local/pgsql
	make
	make install
	groupadd -g 990 postgres
	useradd -g postgres -u 990 postgres
	mkdir /usr/local/pgsql/var
	chown -R postgres:users /usr/local/pgsql/var
	su postgres
	/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/var
	exit
	cat > /etc/rc.d/rc.postgresql
	#!/bin/sh

	case "$1" in
		start)
			su -l postgres -s /bin/sh -c "/usr/local/pgsql/bin/pg_ctl  -D /usr/local/pgsql/var -p /usr/local/pgsql/bin/postmaster start  > /dev/null 2>&1" < /dev/null
			;;
		stop)
			kill `ps -efa | grep postmaster | grep -v grep | awk '{print $2}'`
			;;
		*)
			echo $"Usage: $0 {start|stop}"
			exit 1
	esac

	exit 0
	(ctrl-D)
	chmod 0775 /etc/rc.d/rc.postgresql 
	usermod -d /usr/local/pgsql postgres
					

Compile Wolframe now with:

	make WITH_PGSQL=1 \
		PGSQL_DIR=/usr/local/pgsql
					

Alternatively you can of course also build the 'postgresql' package with the help of SlackBuilds.

FreeBSD 10

You need the 'postgresql93-client' package.

For testing you also need the 'postgresql93-server' package.

FreeBSD 8 and 9

You need the 'postgresql92-client' package.

For testing you also need the 'postgresql92-server' package.

NetBSD

You need the 'postgresql92-client' package.

For testing you also need the 'postgresql92-server' package.

OpenIndiana 151a8

You need the 'CSWpostgresql-dev' package.

For testing you also need the 'CSWpostgresql91-server' package.

Solaris 10

You need the 'CSWpostgresql-dev' package.

For testing you also need the 'CSWpostgresql91-server' package.

1.2.12. Oracle database support

Wolframe can use a Oracle database (http://www.oracle.com) as backend for data storage and for authentication and autorization.

Import note: Make sure you have all the licenses to develop with Oracle and to install an Oracle database! The Wolframe team doesn't take any responsability if licenses are violated!

You enable the building of a loadable Oracle database module with:

	make WITH_ORACLE=1
			

The location of the Oracle instantclient library can be overloaded with:

	make WITH_ORACLE=1 ORACLE_DIR=/opt/oracle/instantclient_11_2
			

You can also override all compilation and linking flags of Oracle separately:

	make WITH_ORACLE=1 \
		ORACLE_INCLUDE_DIR=/usr/lib/oracle/11_2/client64 \
		ORACLE_LIB_DIR=/usr/lib/oracle/11_2/client64 \
		ORACLE_LIBS=-lclntsh
			

If you want to run the tests for Oracle you'll have to set up an Oracle database. Then install the 'wolframe' database and the 'wolfusr' database user. Sql example files can be found in contrib/database/oracle.

RedHat, Fedora, CentOS, Scientific Linux and similar Linux distributions

For building the Oracle database module you have to download the RPM packages oracle-instantclient12.1-basic-12.1.0.1.0-1.i386.rpm and oracle-instantclient12.1-devel-12.1.0.1.0-1.i386.rpm. You can of course also install the zipfiles and install those.

From the system repositories you'll need the 'libaio' package.

If you want to use the 'sqlplus' command line tool for manual testing you also have to install the package oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.i386.rpm. If you want a history in sqlplus it's highly recommended that you install a command line history wrapper like for instance 'rlwrap'.

Debian, Ubuntu and similar Linux distributions

For building the Oracle database module you have to download the RPM packages oracle-instantclient12.1-basic-12.1.0.1.0-1.i386.rpm and oracle-instantclient12.1-devel-12.1.0.1.0-1.i386.rpm.

To install those RPM files you'll need the 'alien' tool. You can of course also install the zipfiles and install those.

From the system repositories you'll need the 'libaio1' package.

If you want to use the 'sqlplus' command line tool for manual testing you also have to install the package oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.i386.rpm. If you want a history in sqlplus it's highly recommended that you install a command line history wrapper like for instance 'rlwrap'.

openSUSE, SLES and similar Linux distributions

For building the Oracle database module you have to download the RPM packages oracle-instantclient12.1-basic-12.1.0.1.0-1.i386.rpm and oracle-instantclient12.1-devel-12.1.0.1.0-1.i386.rpm. You can of course also install the zipfiles and install those.

From the system repositories you'll need the 'libaio1' package.

If you want to use the 'sqlplus' command line tool for manual testing you also have to install the package oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.i386.rpm. If you want a history in sqlplus it's highly recommended that you install a command line history wrapper like for instance 'rlwrap'.

ArchLinux

You need the two packages 'oracle-instantclient-basic' and 'oracle-instantclient-sdk'.

Have a look at https://wiki.archlinux.org/index.php/Oracle_client on how to install the Oracle packages. Basically you have two options: either you use the 'oracle' pacman repository or you download the Oracle packages by hand and run the build scripts from AUR.

If you want to use the 'sqlplus' command line tool for manual testing you also have to install the package 'oracle-instantclient-sqlplus'. If you want a history in sqlplus it's highly recommended that you install a command line history wrapper like for instance 'rlwrap'.

Slackware

Simply download the zipfiles and install them to a directory, let's say '/opt/oracle/instantclient_12_1':

	mkdir -p /opt/oracle
	cd /opt/oracle
	unzip instantclient-basic-linux.x64-12.1.0.1.0.zip
	unzip instantclient-sdk-linux.x64-12.1.0.1.0.zip
					

Add the following line to /etc/ld.so.conf and reload the cached shared libraries:

	echo "/opt/oracle/instantclient_12_1" >> /etc/ld.so.conf
	ldconfig
					

Call 'make' with:

	make WITH_ORACLE=1 ORACLE_DIR=/opt/oracle/instantclient_12_1
					

FreeBSD

There are no plans for an Oracle module on FreeBSD.

NetBSD

There are no plans for an Oracle module on NetBSD.

OpenIndiana 151a8

There are no plans for an Oracle module on OpenIndiana.

Solaris 10

For building the Oracle database module you need the two packages 'oracle-instantclient-basic', 'oracle-instantclient-sdk' (both 11.2 and 12.1 are ok, 12.1 needs a higher patchlevel of the SUNW C library though).

Unpack the ZIPs for instance to '/opt/oracle/instantclient_11_2' and build set ORACLE_DIR accordingly (together with WITH_ORACLE=1).

1.2.13. XML filtering support with libxml2 and libxslt

Wolframe can use libxml2 and libxslt (http://xmlsoft.org/) for filtering and the conversion of XML data.

You can build only filtering with libxml2. But if you enable libxslt filtering you also have to enable libxml2 filtering.

You enable the building of a loadable libxml2/libxslt filtering module with:

	make WITH_LIBXML2=1 WITH_LIBXSLT=1
			

The location of those two libraries can be overloaded with:

	make WITH_LIBXML2=1 WITH_LIBXSLT=1 \
		LIBXML2_DIR=/usr/local/libxml2-2.9.1 \
		LIBXSLT_DIR=/usr/local/libxslt-1.1.28
			

You can also override all compilation and linking flags of libxml2 and libxslt separately:

	make WITH_LIBXML2=1 WITH_LIBXSLT=1 \
		LIBXML2_INCLUDE_DIR=/usr/local/libxml2-2.9.1/include \
		LIBXML2_LIB_DIR=/usr/local/libxml2-2.9.1/lib \
		LIBXML2_LIBS=-lxml2 \
		LIBXSLT_INCLUDE_DIR=/usr/local/libxslt-1.1.28/include \
		LIBXSLT_LIB_DIR=/usr/local/libxslt-1.1.28/lib \
		LIBXSLT_LIBS=-lxslt
			

RedHat/Centos/Scientific Linux 5 and similar Linux distributions

The official libxml2 and libxslt package is too old, compile your own versions. Make sure your own libxslt version uses the libxml2 version you compiled and not the system one!

If you don't need working iconv support for non-UTF8 character sets you may also try to use the provided packages 'libxml2-devel' and 'libxslt-devel' but we cannot recommend this.

RedHat/Centos/Scientific Linux 6 and 7, Fedora and similar Linux distributions

You need the 'libxml2-devel' and 'libxslt-devel' packages.

Debian, Ubuntu and similar Linux distributions

You need the 'libxml2-dev' and 'libxslt1-dev ' packages.

openSUSE, SLES and similar Linux distributions

You need the 'libxml2-devel' and 'libxslt-devel' packages.

ArchLinux

You need the 'libxml2' and 'libxslt' packages.

Slackware

You need the 'libxml2' and the 'libxslt' packages. Both packages are part of the 'l' package series.

FreeBSD

You need the 'libxml2' and 'libxslt' packages.

NetBSD

You need the 'libxml2' and 'libxslt' packages.

OpenIndiana 151a8

You need the 'CSWlibxml2-dev' and 'CSWlibxslt-dev' packages.

Solaris 10

Both standard packages 'SUNWlxml' and 'SUNWlxsl' are too old, we use the two CSW packages 'CSWlibxml2-dev' and 'CSWlibxslt-dev'.

1.2.14. XML filtering support with Textwolf

Wolframe can use Textwolf (http://textwolf.net) for filtering and the conversion of XML data.

The textwolf library is embedded in the subdirectory 3rdParty/textwolf.

You enable the building of a loadable Textwolf filtering module with:

	make WITH_TEXTWOLF=1
			

Note: If you plan to run tests when building the Wolframe you should enable Textwolf as many tests rely on it's presence.

1.2.15. JSON filtering support with cJSON

Wolframe can use cJSON (http://sourceforge.net/projects/cjson/) for filtering and the conversion of JSON data.

The cjson library is embedded in the subdirectory 3rdParty/libcjson.

You enable the building of a loadable cJSON filtering module with:

	make WITH_CJSON=1
			

1.2.16. Scripting support with Lua

Wolframe can be scripted with Lua (http://www.lua.org).

The Lua interpreter is embedded in the subdirectory 3rdParty/lua.

You enable the building of a loadable Lua scripting module with:

	make WITH_LUA=1
			

1.2.17. Scripting support with Python

Wolframe can be scripted with Python (https://www.python.org).

The module supports only version 3 of the Python interpreter, version 2 is not supported.

You enable the building of a loadable Python scripting module with:

	make WITH_PYTHON=1
			

The location of the Python library can be overloaded with:

	make WITH_PYTHON=1 \
		PYTHON_DIR=/usr/local/Python-3.3.5
			

You can also override all compilation and linking flags of the Python library separately:

	make WITH_PYTHON=1 \
		PYTHON_CFLAGS=-I/usr/include/python3.3m -I/usr/include/python3.3m \
		PYTHON_LDFLAGS=-lpthread -Xlink -export-dynamic \
		PYTHON_LIBS=-lpython3.3m
			

Normally you should not change those flags by hand and rely on the results of the 'python-config' script.

RedHat/Centos/Scientific Linux 5, 6 and 7 and similar Linux distributions

There are no official Python packages for version 3 of Python. Build your own version of Python. Make sure the location of 'python3-config' is in your path.

Fedora and similar Linux distributions

You need the 'python3-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'python3-dev' package.

openSUSE, SLES and similar Linux distributions

You need the 'python3-devel' package.

ArchLinux

You need the 'python' package.

Slackware

On Slackware you have to build your own version of Python with:

	./configure --enable-shared
	make
	make install
					

Alternatively you can of course also build the 'python3' package with the help of SlackBuilds.

FreeBSD 10

You need the 'python33' package.

FreeBSD 8 and 9

Build the BSD ports package for 'python33'. There is no binary Python 3 package.

NetBSD

You need the 'python33' package.

OpenIndiana 151a8

We cannot use 'CSWpython31-dev' because it's build with the Forte compiler.

We build our own Python 3 with:

	./configure --prefix=/opt/csw/python-3.3.2/ --enable-shared
	gmake
	gmake install
					

Solaris 10

We cannot use 'CSWpython31-dev' because it's build with the Forte compiler.

We build our own Python 3 with:

	./configure --prefix=/opt/csw/python-3.3.2/ --enable-shared
	gmake
	gmake install
					

1.2.18. Printing support with libhpdf

Wolframe can print with libhpdf (http://libharu.org/, also called libharu).

You enable the building of a loadable libhpdf printing module with:

	make WITH_SYSTEM_LIBHPDF=1
			

You can also link against the embedded version of libhpdf in '3rdParty/libhpdf' instead of the one of the Linux distribution:

	make WITH_LOCAL_LIBHPDF=1
			

The location of the libhpdf library can be overloaded with:

	make WITH_SYSTEM_LIBPHDF=1 \
		LIBHPDF_DIR=/usr/local/libharu-2.2.1
			

You can also override all compilation and linking flags of the libhpdf library separately:

	make WITH_SYSTEM_LIBPHDF=1 \
		LIBHPDF_INCLUDE_DIR=/usr/local/libharu-2.2.1/include \
		LIBHPDF_LIB_DIR=/usr/local/libharu-2.2.1/lib \
		LIBHPDF_LIBS=-lhpdf
			

Though most Linux distributions have a 'libhpdf' package we recommend to use the embedded version 2.3.0RC2 as this version contains many patches.

RedHat/Centos/Scientific Linux, Fedora and similar Linux distributions

You need the 'zlib-devel' and 'libpng-devel' packages to build libhpdf.

On Fedora you can also try to use the 'libhpdf-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'zlib1g-dev' and 'libpng12-dev' packages to build libhpdf.

You can also try to use the 'libhpdf-dev' package.

openSUSE, SLES and similar Linux distributions

You need the 'zlib-devel' and 'libpng12-devel' or 'libpng15-devel' packages to build libhpdf.

You can also try to use the 'libhpdf-devel' package.

ArchLinux

You need the 'zlib' and 'libpng' packages to build libhpdf.

You can also try to use the 'libharu' package.

Slackware

On Slackware you have to build your own version of libhpdf. You need the 'zlib' and 'libpng' packages.

Both packages are part of the 'l' package series.

FreeBSD 10

You need the 'libharu' package.

FreeBSD 8 and 9

Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.

You need the 'png' package for this.

NetBSD

Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.

You need the 'png' and the 'zlib' packages for this.

OpenIndiana 151a8

Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.

You need the 'CSWlibz-dev' package for this.

Solaris 10

Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.

You need the 'CSWlibz-dev' package for this.

'SUNWzlib' is missing 64-bit support so don't use it!

1.2.19. Image processing with FreeImage

Wolframe can manipulate various image formats with the help of the FreeImage project (http://freeimage.sourceforge.net).

You enable the building of a loadable FreeImage processing module with:

	make WITH_SYSTEM_FREEIMAGE=1
			

You can also link against the embedded version of FreeImage in '3rdParty/freeimage' instead of the one of the Linux distribution:

	make WITH_LOCAL_FREEIMAGE=1
			

The location of the FreeImage package can be overloaded with:

	make WITH_SYSTEM_FREEIMAGE=1 \
		FREEIMAGE_DIR=/usr/local/FreeImage-3.15.4
			

You can also override all compilation and linking flags of the FreeImage package separately:

	make WITH_SYSTEM_FREEIMAGE=1 \
		FREEIMAGE_INCLUDE_DIR=/usr/local/FreeImage-3.15.4/include \
		FREEIMAGE_LIB_DIR=/usr/local/FreeImage-3.15.4/lib \
		FREEIMAGE_LIBS=-lfreeimage \
		FREEIMAGEPLUS_INCLUDE_DIR=/usr/local/FreeImage-3.15.4/include \
		FREEIMAGEPLUS_LIB_DIR=/usr/local/FreeImage-3.15.4/lib \
		FREEIMAGEPLUS_LIBS=-lfreeimageplus
			

Though there are FreeImage packages on most Linux distributions you may still want to use the locally embedded version.

RedHat/Centos/Scientific Linux and similar Linux distributions

There are FreeImage packages, but they are usually quite old. Better build you own version if FreeImage.

You need the 'zlib-devel' and 'libpng-devel' packages to build FreeImage.

Fedora and similar Linux distributions

You need the 'zlib-devel' and 'libpng-devel' packages to build FreeImage.

You may also try to use 'freeimage-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'zlib1g-dev' and 'libpng12-dev' packages to build FreeImage.

You can also try to use the 'libfreeimage-devel' package.

openSUSE, SLES and similar Linux distributions

You need the 'zlib-devel' and 'libpng12-devel' or 'libpng15-devel' packages to build FreeImage.

You can also try to use the 'freeimage-devel' package.

ArchLinux

You need the 'freeimage' package.

Slackware

On Slackware you have to build your own version of FreeImage. You need the 'zlib' and 'libpng' packages. Both packages are part of the 'l' package series.

Alternatively you can of course also build the 'FreeImage' package with the help of SlackBuilds.

FreeBSD 10

You need the 'freeimage' package.

FreeBSD 8 and 9

Build the embedded version of FreeImage with 'WITH_LOCAL_FREEIMAGE=1'.

You need the 'png' package for this.

There is a FreeImage port but it doesn't build the libfreeimageplus library we need.

Note: FreeImage doesn't build on 32-bit currently because gcc doesn't support some 64-bit constants on FreeBSD.

NetBSD

Build the embedded version of FreeImage with 'WITH_LOCAL_FREEIMAGE=1'. You need the 'png' and the 'zlib' packages for this.

OpenIndiana 151a8

Build the embedded version of FreeImage with 'WITH_LOCAL_FREEIMAGE=1'.

You need the 'CSWlibz-dev' package for this.

Solaris 10

Build the embedded version of FreeImage with 'WITH_LOCAL_FREEIMAGE=1'.

You need the 'CSWlibz-dev' package for this.

'SUNWzlib' is missing 64-bit support so don't use it!

1.2.20. zlib and libpng

Libhpdf needs the zlib and libpng libraries.

The location of the zlib and libpng package can be overloaded with:

	make \
		LIBZ_DIR=/usr/local/zlib-1.2.8 \
		LIBPNG_DIR=/usr/local/libpng-1.6.10
			

You can also override all compilation and linking flags of the zlib and libpng packages separately:

	make \
		LIBZ_INCLUDE_DIR=/usr/local/zlib-1.2.8/include \
		LIBZ_LIB_DIR=/usr/local/zlib-1.2.8/lib \
		LIBZ_LIBS=-lz \
		LIBPNG_INCLUDE_DIR=/usr/local/libpng-1.6.10/include \
		LIBPNG_LIB_DIR=/usr/local/libpng-1.6.10/libs \
		LIBPNG_LIBS=-lpng
			

1.2.21. Support for ICU

Wolframe can use the International Components for Unicode (ICU, http://site.icu-project.org) library for text normalization and conversion.

For this to work you need the ICU library itself (ICU4C, at least version 3.6) and the 'boost-locale' library has to have the ICU backend enabled. This is not the case in all Linux distributions.

Note: The Wolframe server doesn't depend directly on the ICU library, only the ICU normalization module does!

You enable the building of a loadable ICU normalization module with:

	make WITH_ICU=1
			

The location of the ICU library can be overloaded with:

	make WITH_ICU=1 \
		ICU_DIR=/usr/local/icu4c-52_1
			

You can also override all compilation and linking flags of the ICU library separately:

	make WITH_ICU=1 \
		ICU_INCLUDE_DIR=/usr/local/icu4c-52_1/include \
		ICU_LIB_DIR=/usr/local/icu4c-52_1/lib \
		ICU_LIBS=-licuuc -licudata -licui18n
			

RedHat/Centos/Scientific Linux, Fedora and similar Linux distributions

Boost is too old, build your own Boost locale and ICU support.

Fedora and similar Linux distributions

You need the 'boost-devel' package. The official Boost packages have support for Boost locale and the ICU backend.

Debian, Ubuntu and similar Linux distributions

Debian 6

The official Boost packages are too old, build your own Boost locale and ICU support.

Debian 7

You need 'libboost-locale-dev' package.

Ubuntu 10.04.1 LTS, Ubuntu 12.04

The official Boost packages are not recent enough. Build your own Boost version with ICU support here.

Ubuntu 13.10 and 14.04

You need 'libboost-locale-dev' package.

openSUSE, SLES and similar Linux distributions

OpenSuSE 12.3, 13.1

You need the 'boost-devel' package. The official Boost packages have support for Boost locale and the ICU backend.

SLES 11 SP1, SP2 and SP3

The official Boost packages are not recent enough and lack ICU support. Build your own Boost with ICU support here.

ArchLinux

You need the 'boost-libs' package. The official Boost package have support for Boost locale and the ICU backend.

Slackware

The official Boost package contains support for boost-locale and the ICU backend. This package is part of the 'l' package series.

FreeBSD 10

The official Boost packages have a boost-locale library which has support for the ICU backend per default.

FreeBSD 8 and 9

The official Boost packages don't contain a boost-locale with ICU backend.

Build Boost in this case with the patched from packaging/patches/FreeBSD applied.

You also need the 'icu' package in this case.

NetBSD

Note: The Boost locale and ICU support is currently broken, see also https://github.com/Wolframe/Wolframe/issues/59.

OpenIndiana 151a8

You cannot use the 'SUNWicud/SUNWicu' and 'CSWlibicu_dev' packages as they are both linked with the Forte C++ compiler. You have to compile your own version compiled with the gcc compiler from CSW:

	gtar zxf icu4c-51_2-src.tgz
					

apply the solaris XOPEN patch (packaging/patches/Solaris/icu4c-1.51.2/icu_source_common_uposixdefs_h.patch), then build ICU with:

	cd icu/source
	./runConfigureICU Solaris/GCC --prefix=/opt/csw/icu4c-51.2
	gmake
	gmake install
					

Then build Boost as follows:

First apply all patches found in packaging/patches/Solaris/1.55.0.

Then build boost with:

	./bootstrap.sh --prefix=/opt/csw/boost-1.55.0 \
		--with-icu=/opt/csw/icu4c-51.2 \
		--with-libraries=thread,filesystem,system,program_options,date_time,regex,locale
	./b2 -a -sICU_PATH=/opt/csw/icu4c-51.2 -d2 install
					

Note: The only tested version for now is version 1.55.0! Other versions of Boost may work or not work..

Solaris 10

We don't use the CSW boost packages.

You cannot use the 'SUNWicud/SUNWicu' and 'CSWlibicu_dev' packages as they are both linked with the Forte C++ compiler. You have to compile your own version compiled with the gcc compiler from CSW:

	gtar zxf icu4c-49_1_2-src.tgz
					

apply the solaris icu_source_configure patch (packaging/patches/Solaris/icu4c-1.49.2/icu_source_configure.patch), then build ICU with:

	cd icu/source
	./runConfigureICU Solaris/GCC --prefix=/opt/csw/icu4c-49.1.2
	gmake
	gmake install
					

In Boost patch the correct architecture (V8 is not really supported, but V8 is also very old) and gcc version in tools/build/v2/user-config.jam:

	using gcc : 4.8.2 : g++ : <compileflags>-mcpu=v9 ; 
					

Apply all Boost compilation patches from 'packaging/patches/Solaris/boost-1.55.0' now.

Then build boost with:

	./bootstrap.sh --prefix=/opt/csw/boost-1.55.0 \
		--with-libraries=thread,filesystem,system,program_options,date_time,regex,locale \
		--with-icu=/opt/csw/icu4c-49.1.2
	./b2 -a -sICU_PATH=/opt/csw/icu4c-49.1.2 -d2 install
					

Note: The only tested version for now is version 1.55.0! Other versions of Boost may work or not:

Do not use boost 1.48.0, it breaks in the threading header files with newer gcc versions (4.8.x) and runs only with old gcc versions (4.6.x).

Do not use boost 1.49.0, it has a missing function 'fchmodat' causing building of libboost_filesystem to fail!

Boost 1.50.0 thru 1.54.0 have never been tested with Wolframe, so don't use those!

1.2.22. Internationalization support with gettext

Wolframe has internationalization support with the help of the gettext mechanism.

You can disable NLS support completly with:

	make ENABLE_NLS=0
			

Per default it is enabled.

Linux distributions

'gettext' and 'libintl' are nowadays part of the GNU C library on Linux. No special provisions are necessary.

FreeBSD

You need the 'gettext' package.

NetBSD

'gettext' and 'libintl' are installed by default.

OpenIndiana 151a8

You need the 'CSWggettext-dev' package.

Solaris 10

You need the 'CSWggettext-dev' package.

1.2.23. Authentication support with PAM

Wolframe can authenticate users with PAM.

You enable the building of a loadable PAM authentication module with:

	make WITH_PAM=1
			

The location of the PAM library can be overloaded with:

	make WITH_PAM=1 \
		PAM_DIR=/usr/local/pam-1.1.8
			

You can also override all compilation and linking flags of the PAM library separately:

	make WITH_PAM=1 \
		PAM_INCLUDE_DIR=/usr/local/pam-1.1.8/include \
		PAM_LIB_DIR=/usr/local/pam-1.1.8/lib \
		PAM_LIBS=-lpam
			

RedHat/Centos/Scientific Linux, Fedora and similar Linux distributions

You need the 'pam-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'libpam0g-dev' package.

openSUSE, SLES and similar Linux distributions

You need the 'pam-devel' package.

ArchLinux

You need the 'pam' package.

Slackware

On Slackware there is no official PAM package. You have to build 'linux-pam' on your own.

FreeBSD

Note: We currently don't support PAM on FreeBSD.

NetBSD

Note: We currently don't support PAM on NetBSD.

OpenIndiana 151a8

PAM support is available out of the box just specify 'WITH_PAM=1'.

Solaris 10

PAM support is available out of the box just specify 'WITH_PAM=1'.

1.2.24. Authentication support with SASL

Wolframe can authenticate users with the Cyrus SASL library (http://cyrusimap.org/).

Note: GNU SASL is currently not supported.

You enable the building of a loadable SASL authentication module with:

	make WITH_SASL=1
			

The location of the Cyrus SASL library can be overloaded with:

	make WITH_SASL=1 \
		SASL_DIR=/usr/local/cyrus-sasl-2.1.26
			

You can also override all compilation and linking flags of the Cyrus SASL library separately:

	make WITH_SASL=1 \
		SASL_INCLUDE_DIR=/usr/local/cyrus-sasl-2.1.26/include \
		SASL_LIB_DIR=/usr/local/cyrus-sasl-2.1.26/lib \
		SASL_LIBS=-lsasl2
			

RedHat/Centos/Scientific Linux, Fedora and similar Linux distributions

You need the 'cyrus-sasl-devel' package.

Debian, Ubuntu and similar Linux distributions

You need the 'libsasl2-dev' package.

For running the SASL tests you also need the 'sasl2-bin' package.

openSUSE, SLES and similar Linux distributions

You need the 'cyrus-sasl-devel' package.

ArchLinux

You need the 'libsasl' package.

Slackware

You need the 'cyrus-sasl' package. This package is part of the 'n' package series.

FreeBSD

You need the 'cyrus-sasl' package.

NetBSD

You need the 'cyrus-sasl' package.

OpenIndiana 151a8

You need the 'CSWsasl' and 'CSWsasl-dev' packages.

Solaris 10

You need the 'CSWsasl' and 'CSWsasl-dev' packages.

1.2.25. Testing Wolframe

Wolframe has tests written in Google gtest (https://code.google.com/p/googletest/).

Tests are run with:

	make test
			

Some tests run for a long time (regression and stress tests). They are not run per default when calling 'make test', but you have to call:

	make longtest
			

Sometimes you only want to build the test programs but not to run them (for instance when cross-compiling). Then you can set the 'RUN_TESTS' variable as follows:

	make test RUN_TESTS=0
			

1.2.26. Testing with Expect

Some more complex tests are written with Expect (http://expect.sourceforge.net/).

You enable testing with Expect with:

	make WITH_EXPECT=1
			

The location of the Expect interpreter can be overloaded with:

	make WITH_EXPECT=1 \
		EXPECT=/usr/local/bin/expect
			

RedHat/Centos/Scientific Linux, Fedora and similar Linux distributions

You need the 'expect' and the 'telnet' packages.

Debian, Ubuntu and similar Linux distributions

You need the 'expect' and the 'telnet' packages.

openSUSE, SLES and similar Linux distributions

You need the 'expect' and the 'telnet' packages.

ArchLinux

You need the 'expect' and 'inetutils' packages.

Slackware

You need the 'expect' and 'telnet' packages. Those packages are part of the 'tcl' respectively the 'n' package series.

FreeBSD

You need the 'expect' package.

NetBSD

You need the 'tcl-expect' package.

OpenIndiana 151a8

You need the 'CSWexpect' package.

Solaris 10

You need the 'CSWexpect' package.

1.2.27. Building the documentation

The documentation including the man pages is written using DocBook (http://www.docbook.org).

Developer documentation is generated with Doxygen (http://www.doxygen.org).

All documentation is built in the 'docs' subdirectory:

	cd docs
	make doc
			

Note: The various tools are not able to produce the same results on all platforms. Your experience in the quality of the generated artifacts may vary. Generally, the newer the tools, the better.

The validity of the XML of the documenation can be checked with:

	cd docs
	make check
			

RedHat/Centos/Scientific Linux and similar Linux distributions

You need the 'libxslt', 'doxygen' and 'docbook-style-xsl' packages (from EPEL).

When generating PDFs you need the 'fop' package.

When rebuilding the SVG images of the documentation you also need 'dia'.

Fedora and similar Linux distributions

You need the 'libxslt', 'doxygen' and 'docbook-style-xsl' packages.

When generating PDFs you need the 'fop' package.

When rebuilding the SVG images of the documentation you also need 'dia'.

Debian, Ubuntu and similar Linux distributions

You need the 'xsltproc', 'doxygen' and 'docbook-xsl' packages.

When generating PDFs you need the 'fop' package.

When rebuilding the SVG images of the documentation you also need 'dia'.

For checking the validity of various XML files you need 'libxml2-utils' (for xmllint).

openSUSE, SLES and similar Linux distributions

You need the 'libxslt', 'doxygen' and 'docbook-style-xsl' packages.

When generating PDFs you need the 'fop' package.

When rebuilding the SVG images of the documentation you also need 'dia'.

ArchLinux

You need the 'libxslt', 'doxygen' and 'docbook-xsl' packages.

When generating PDFs you need the 'fop' package. Newest versions run only with the SVN version of 'java-xmlgraphics-commons'. Install the package 'java-xmlgraphics-commons-svn' from the AUR.

When rebuilding the SVG images of the documentation you also need 'dia'.

Slackware

You need the 'libxslt' and 'doxygen' packages. Those packages part of the 'l', 'd' package series. DocBook you have to install on your own.

When generating PDFs you have to install 'fop' on your own.

When rebuilding the SVG images of the documentation you also need 'dia' which you will have to build on your own. Alternatively you can of course also build the 'dia' package with the help of SlackBuilds.

FreeBSD

We never tried to build the documentation on FreeBSD so far.

NetBSD

We never tried to build the documentation on NetBSD so far.

1.2.28. Installation

The makefiles provide a 'install' and an 'uninstall' target to install and uninstall the software.

The 'DESTDIR' and 'prefix' parameters are useful for packagers to reroute the destination of the installation.

For instance:

	make DESTDIR=/var/tmp prefix=/usr/local/wolframe-0.0.3
 install
			

installs the software in:

	/var/tmp/usr/local/wolframe-0.0.3
/sbin/wolframed
	/var/tmp/usr/local/wolframe-0.0.3
/etc/wolframe/wolframe.conf
	...
			

The 'DEFAULT_MODULE_LOAD_DIR' parameter can be used by packagers to set the load directory for loadable modules. For instance a Redhat SPEC file will contain a line like:

	make DEFAULT_MODULE_LOAD_DIR=%{_libdir}/wolframe/modules
		        

1.2.29. Manual dependency generation

Usually dependencies are automatically recomputed and stored in files with extension '.d'.

On some platforms and with some older versions of GNU make you can run into problems, especially if you build the software in parallel. For this case you can force the computation of depencies in a special make step as follows:

	make depend
	make -j 4
				

Additionally the make system understands 'MAKEDEPEND', so you can provide you own dependency generator at need.

Especially useful is

	make MAKEPEDS=/bin/true depend
	make -j 4
				

to avoid dependency management at all, for instance for one-time builds in continuous integration, where the generation of working dependencies can take a long time and is of no use.

1.2.30. Creating source tarballs

Wolframe supports the standard targets 'dist', 'dist-Z', 'dist-gz' and 'dist-bz2' to create a tarball containg all the necessary sources.

1.2.31. Building the wolfclient

The wolfclient is a Qt-based client for the Wolframe server.

You build it with:

	qmake -config debug -recursive
	make
	make install
	

respectively for a release version:

	qmake -config release -recursive
	make
	make install
	

Note: qmake is on some platforms called qmake-qt4 or qmake-qt5 and may be installed in non-standard locations.

Note: Use gmake instead of make on FreeBSD, NetBSD and Solaris.

You can run the unit tests of the client with:

	make test
	

Note:For the tests to run you need an installed X server and have to set the DISPLAY variable correctly.

You can disable the building of SSL-enabled code if you remove the 'WITH_SSL=1' definition in the 'DEFINES' directive in libqtwolfclient/libqtwolfclient.pro.

You need the Qt libarary of the Unix system you are building on. The following list gives Linux distribution respectively Unix specific instructions and lists the required packages.

You can use the Qt 4 or 5 version to build the client.

RedHat/Centos/Scientific Linux 5 and similar Linux distributions

The official Qt 4 package is too old, build your own Qt library.

For Qt 5 compile your own version of the library.

RedHat/Centos/Scientific Linux 6 and 7 or similar Linux distributions

For Qt 4 you need the 'qt4-devel' package.

For Qt 5 compile your own version of the library.

Fedora 19 and 20 and similar distributions

For Qt 4 you need the 'qt4-devel' package.

For Qt 5 you need the following packages: 'qt5-qtbase-devel', 'qt5-qttools-devel', 'qt5-qttools-static'.

Debian 6 and 7

For Qt 4 you need the 'libqt4-dev' package.

For Qt 5 compile your own version of the library.

Ubuntu 10.04.1 and 12.04

For Qt 4 you need the 'libqt4-dev' package.

For Qt 5 compile your own version of the library.

Ubuntu 13.10 and 14.04

For Qt 4 you need the 'libqt4-dev' package.

For Qt 5 you need the following packages: 'qt5-qmake', 'libqt5designer5', 'qtbase5-dev', 'qttools5-dev', 'qttools5-dev-tools'.

openSUSE 12.3, SLES and similar Linux distributions

For Qt 4 you need the 'libqt4-devel' package.

For Qt 5 compile your own version of the library.

openSUSE 13.1

For Qt 4 you need the 'libqt4-devel' package.

For Qt 5 you need the following packages: 'libqt5-qtbase-devel', 'libqt5-qttools-devel'.

ArchLinux

For Qt 4 you need the 'qt4' package.

For Qt 5 you need the 'qt5-base' and the 'qt5-tools' package.

Slackware

For Qt 4 you need the 'qt' package. This package is part of the 'l' package series.

For Qt 5 compile your own version of the library.

FreeBSD 8 and 9

For Qt 4 you need the following packages: 'qt4-gui', 'qt4-moc', 'qt4-network', 'qt4-designer', 'qt4-rcc', 'qt4-uic', 'qt4-qmake', 'qt4-linguist'.

For Qt 5 compile your own version of the library.

FreeBSD 10

For Qt 4 you need the following packages: 'qt4-gui', 'qt4-moc', 'qt4-network', 'qt4-designer', 'qt4-rcc', 'qt4-uic', 'qt4-qmake', 'qt4-linguist'.

For Qt 5 you need the following packages: 'qt5-gui', 'qt5-network', 'qt5-widgets', 'qt5-designer', 'qt5-concurrent', 'qt5-uitools', 'qt5-buildtools', 'qt5-qmake', 'qt5-linguisttools'.

NetBSD

For Qt 4 you need the 'qt4' package.

Make sure /usr/pkg/qt4/bin and /usr/pkg/bin are part of the path.

Also set 'QTDIR' to /usr/pkg/qt4.

Build the wolfclient with:

	qmake -config debug -recursive
		

respectively

	qmake -config release -recursive
		

Before compiling apply the following patch command to the generated makefiles:

	find . -name Makefile -exec sh -c \
		"sed 's/libtool --silent/libtool --silent --tag=CXX/g' {} > x && mv x {}" \;
		

Now build normally with:

	gmake
	gmake install
		

To run the wolfclient you have currently to set 'LD_LIBRARY_PATH' to /usr/X11R7/lib.

Using Qt 5 for wolfclient is untested.

OpenIndiana 151a8

For Qt 4 you need the 'CSWqt4-dev' package (at least version '4.8.5,REV=2013.11.26').

Using Qt 5 for wolfclient is untested.

Solaris 10

For Qt 4 you need the 'CSWqt4-dev' package (at least version '4.8.5,REV=2013.11.26').

Before compiling apply the following patch command to the generated makefiles:

	for i in `find . -name Makefile`; do \
		sed 's|-Wl,-rpath|-Wl,-R|g' $i > /tmp/x; mv -f /tmp/x $i; \
	done
		

This is because we should use /usr/css/bin/ld as linker and this one unterstands only '-R' and not '-rpath'.

Now build normally with:

	gmake
	gmake install
		

Using Qt 5 for wolfclient is untested.