For building Wolframe on Unix systems you need at least the following software:
A recent C/C++ compiler, the following ones are known to work:
gcc 4.1.x or newer, http://gcc.gnu.org
clang 3.4 or newer, http://clang.llvm.org
Intel Compiler ICC 14.0 or newer, http://software.intel.com/en-us/c-compilers
GNU make 3.81 or newer (but preferably 3.82 or newer) from https://www.gnu.org/software/make/
Boost 1.48.0 or newer from http://www.boost.org
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:
Doxygen for developer documentation, http://www.doxygen.org
Docbook 4.5 or newer and the XSL toolchain, http://www.docbook.org
The FOP PDF generator for documentation in PDF format, http://xmlgraphics.apache.org/fop/
Dia for conversion of SVG images, http://live.gnome.org/Dia
For building the wolfclient you need:
Qt 4.6.x or later, or Qt 5, http://qt-project.org/
For secure communication between the wolfclient and the Wolframe server you need the OpenSSL library 0.9.7 or newer, http://www.openssl.org
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
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.
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.
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
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.
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.
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.
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'.
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
Boost (http://www.boost.org) is the only library which is absolutely required in order to build Wolframe.
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
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.
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.
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.
You need the 'boost-devel' package. This package contains also the boost-locale and ICU backend.
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.
The official Boost packages are not recent enough. Build your own Boost version here.
You need the 'boost' and 'boost-libs' packages. The official Boost packages contains support for boost-locale and the ICU backend.
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.
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
.
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..
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!
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)!
You need the 'openssl-devel' package.
FreeBSD contains all necessary SSL libraries per default, you don't have to install any special packages.
NetBSD contains all necessary SSL libraries per default, you don't have to install any special packages.
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.
The official Sqlite package is too old, use the embedded version of Sqlite with 'WITH_SYSTEM_SQLITE3=1'.
You need the 'sqlite-devel' package.
You need the 'libsqlite3-dev' package.
For running the Sqlite3 database tests you also need the 'sqlite3' package.
You need the 'sqlite3-devel' package.
For running the Sqlite3 database tests you also need the 'sqlite3' package.
You need the 'CSWlibsqlite3-0' and the 'CSWlibsqlite3-dev' packages.
For running the Sqlite3 database tests you also need the 'CSWsqlite3' package.
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
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
.
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'.
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.
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.
You need the 'postgresql93-client' package.
For testing you also need the 'postgresql93-server' package.
You need the 'postgresql92-client' package.
For testing you also need the 'postgresql92-server' package.
You need the 'postgresql92-client' package.
For testing you also need the 'postgresql92-server' package.
You need the 'CSWpostgresql-dev' package.
For testing you also need the 'CSWpostgresql91-server' package.
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
.
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'.
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'.
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'.
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'.
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
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).
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
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.
You need the 'libxml2-devel' and 'libxslt-devel' packages.
You need the 'libxml2-dev' and 'libxslt1-dev ' packages.
You need the 'libxml2-devel' and 'libxslt-devel' packages.
You need the 'libxml2' and the 'libxslt' packages. Both packages are part of the 'l' package series.
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.
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
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
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.
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.
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.
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
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.
You need the 'zlib-devel' and 'libpng-devel' packages to build libhpdf.
On Fedora you can also try to use the 'libhpdf-devel' package.
You need the 'zlib1g-dev' and 'libpng12-dev' packages to build libhpdf.
You can also try to use the 'libhpdf-dev' package.
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.
You need the 'zlib' and 'libpng' packages to build libhpdf.
You can also try to use the 'libharu' package.
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.
Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.
You need the 'png' package for this.
Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.
You need the 'png' and the 'zlib' packages for this.
Build the embedded version of libhpdf with 'WITH_LOCAL_LIBHPDF=1'.
You need the 'CSWlibz-dev' package for this.
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.
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.
You need the 'zlib-devel' and 'libpng-devel' packages to build FreeImage.
You may also try to use 'freeimage-devel' package.
You need the 'zlib1g-dev' and 'libpng12-dev' packages to build FreeImage.
You can also try to use the 'libfreeimage-devel' package.
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.
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.
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.
Build the embedded version of FreeImage with 'WITH_LOCAL_FREEIMAGE=1'. You need the 'png' and the 'zlib' packages for this.
Build the embedded version of FreeImage with 'WITH_LOCAL_FREEIMAGE=1'.
You need the 'CSWlibz-dev' package for this.
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
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
Boost is too old, build your own Boost locale and ICU support.
You need the 'boost-devel' package. The official Boost packages have support for Boost locale and the ICU backend.
The official Boost packages are not recent enough. Build your own Boost version with ICU support here.
You need the 'boost-devel' package. The official Boost packages have support for Boost locale and the ICU backend.
You need the 'boost-libs' package. The official Boost package have support for Boost locale and the ICU backend.
The official Boost package contains support for boost-locale and the ICU backend. This package is part of the 'l' package series.
The official Boost packages have a boost-locale library which has support for the ICU backend per default.
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.
Note: The Boost locale and ICU support is currently broken, see also https://github.com/Wolframe/Wolframe/issues/59.
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..
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!
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.
'gettext' and 'libintl' are nowadays part of the GNU C library on Linux. No special provisions are necessary.
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
You need the 'pam-devel' package.
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
You need the 'cyrus-sasl-devel' package.
You need the 'libsasl2-dev' package.
For running the SASL tests you also need the 'sasl2-bin' package.
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
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
You need the 'expect' and the 'telnet' packages.
You need the 'expect' and 'telnet' packages. Those packages are part of the 'tcl' respectively the 'n' package series.
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
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'.
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'.
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).
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'.
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'.
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.
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
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.
Wolframe supports the standard targets 'dist', 'dist-Z', 'dist-gz' and 'dist-bz2' to create a tarball containg all the necessary sources.
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.
The official Qt 4 package is too old, build your own Qt library.
For Qt 5 compile your own version of the library.
For Qt 4 you need the 'qt4-devel' package.
For Qt 5 compile your own version of the library.
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'.
For Qt 4 you need the 'libqt4-dev' package.
For Qt 5 compile your own version of the library.
For Qt 4 you need the 'libqt4-dev' package.
For Qt 5 compile your own version of the library.
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'.
For Qt 4 you need the 'libqt4-devel' package.
For Qt 5 compile your own version of the library.
For Qt 4 you need the 'libqt4-devel' package.
For Qt 5 you need the following packages: 'libqt5-qtbase-devel', 'libqt5-qttools-devel'.
For Qt 4 you need the 'qt4' package.
For Qt 5 you need the 'qt5-base' and the 'qt5-tools' package.
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.
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.
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'.
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.
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.
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.
Copyright © 2014 - Project Wolframe - All Rights Reserved