1.3. Building on Windows systems (the NMAKE way)

This is the Unix-style compilation using the Visual Studio Command Line Window and NMAKE. This is the preferred way currently.

1.3.1. Prerequisites

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

  • Visual Studio C++ 2008 or newer (cl.exe, rc.exe, link.exe and nmake.exe)

  • Platform SDK 6.0a or newer

  • mc.exe may be missing in your path (for instance in Visual Studio 2008 it was not bundled), usually it is available as part of the Platform SDK, copy it somewhere into the path

  • 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:

For testing the Wolframe software you need:

For building Windows packages you need:

For building the documentation and manpages you need:

For building the wolfclient you need:

1.3.2. Basic build instructions

Wolframe can be build in a Visual Studio command line (or better a Platform SDK command line) using the following command:

	nmake /nologo /f Makefile.W32
			

You can check the compilation mode with:

	setenv
			

The makefiles understand the standard GNU targets like 'clean', 'distclean', 'test', etc. The whole list of options can be seen with:

	nmake /nologo /f Makefile.W32 help
			

Configuration is all done in a file called config.mk. Examples can be found in the makefiles/nmake directory.

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

	nmake /nologo /f Makefile.W32 WITH_SSL=1
			

On Windows you would rather change the 'OPENSSL_DIR' variable in the config.mk, for instance:

	OPENSSL_DIR = C:\OpenSSL\Win32
			

A complete build may look like this:

	nmake /nologo /f Makefile.W32 WITH_SSL=1 WITH_EXPECT=1 WITH_LUA=1 ^
		WITH_SQLITE3=1 WITH_PGSQL=1 WITH_ORACLE=1 ^
		WITH_LIBXML2=1 WITH_LIBXSLT=1 ^
		WITH_LIBHPDF=1 WITH_EXAMPLES=1 WITH_ICU=1 WITH_FREEIMAGE=1 ^
		WITH_PYTHON=1 WITH_CJSON=1 WITH_TEXTWOLF=1 ^
		clean all test
			

We currently have no dependency system for the NMAKE build system, so be careful when to use 'clean' to rebuild parts of the system.

This way of building the system is mainly useful for automatized systems and for packaging.

1.3.3. Using ccache and distcc

Ccache (http://ccache.samba.org/) can be used to cache the compilation of Wolframe also on Windows.

You need then ccache.exe binary with MSVC support from http://cgit.freedesktop.org/libreoffice/contrib/dev-tools/tree/ccache-msvc. You also need the Cygwin runtime from http://cygwin.org. Install the ccache.exe binary into c:\cygwin\bin.

Set the 'CC' and 'CXX' variables in makefiles\nmake\config.mk as follows:

	CC=C:\cygwin\bin\ccache.exe cl
	CXX=C:\cygwin\bin\ccache.exe cl
			

Set the following variable in the shell you use to compile Wolframe:

	Set CYGWIN=nodosfilewarning
				

1.3.4. Boost

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

Use prebuild version of Boost

http://boost.teeks99.com provides pre-compiled packages of Boost. You can install the library into for instance C:\boost\boost_1_55_0 and set the 'BOOST_XXX' variables in makefiles\nmake\config.mk as follows:

	BOOST_DIR = C:\Boost\boost_1_55
	BOOST_INCLUDE_DIR = $(BOOST_DIR)
	BOOST_LDFLAGS = /LIBPATH:$(BOOST_DIR)\lib32-msvc-10.0
	BOOST_VC_VER = vc100
	BOOST_MT = -mt
					

Rename the directory C:\Boost\boost_1_55_0\libs to C:\Boost\boost_1_55_0\boost.

Note: Those pre-built packages don't have support for the ICU backend in boost-locale. If you need ICU support and enable it with 'WITH_ICU=1' you will have to build your own version of Boost from the sources.

Build your own version of Boost

The following Boost libraries are required for building Wolframe:

	bootstrap
	.\b2 --prefix=C:\boost\boost_1_55 ^
		--with-thread --with-filesystem --with-system --with-program_options ^
		--with-date_time ^
		architecture=x86 address-model=64 toolset=msvc ^
		install
					

Set 'architecture', 'address-mode' and 'toolset' fitting your platform.

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
	.\b2 --prefix=C:\boost\boost_1_55 ^
		--with-thread --with-filesystem --with-system --with-program_options ^
		--with-date_time --with-locale --with-regex ^
		-sICU_PATH="C:\icu4c-52_1-win32-debug" ^
		architecture=x86 address-model=64 toolset=msvc ^
		install
					

Set the "BOOST_XXX" variables in makefiles\nmake\config.mk as follows:

	BOOST_DIR = C:\Boost\boost_1_55
	BOOST_INCLUDE_DIR = $(BOOST_DIR)
	BOOST_LDFLAGS = /LIBPATH:$(BOOST_DIR)\lib32-msvc-10.0
	BOOST_VC_VER = vc100
	BOOST_MT = -mt
					

1.3.5. Secure Socket Layer (SSL)

The Wolframe protocol can be secured with SSL. Currently only OpenSSL (http://www.openssl.org) is supported.

Note: No matter whether you use the precompiled version or if you build OpenSSL on your own use the 0.9.8, 1.0.0 or 1.0.1g versions, but not the version 1.0.1 through 1.0.1f (Heartbleed bug)!

Use prebuild version of OpenSSL

You can get a prebuilt version of OpenSSL from http://www.slproweb.com/products/Win32OpenSSL.html. Despite the name you get also 64-bit versions there.

Install the developer version (for instance Win32OpenSSL-1_0_1g.exe) for instance to C:\OpenSSL-Win32.

Do not copy the OpenSSL binaries to the Windows system directory, copy them to the Bin subdirectory of the OpenSSL installation directory!

Set the "BOOST_XXX" variables in makefiles\nmake\config.mk as follows:

	OPENSSL_DIR = C:\OpenSSL-Win32
					

Build your own version of OpenSSL

You need the community edition of ActivePerl from http://www.activestate.com/activeperl/. Install it for instance to C:\Perl.

You will also need NASM to assemble certain parts of OpenSSL. You can get a Windows NASM from http://www.nasm.us/. Install it for instance to C:\nasm.

Make sure the Perl interpreter and the NASM assembler are part of the path in the shell you want to build OpenSSL:

	Set PATH=%PATH%;C:\Perl\bin;C:\nasm
					

Get the source package openssl-1.0.1g.tar.gz of OpenSSL from http://www.openssl.org.

Configure the package with:

	perl Configure debug-VC-WIN32 \
		--prefix="C:\openssl-1.0.1g-win32-debug"
					

for a debug version, respectively with:

	perl Configure VC-WIN32 \
		--prefix="C:\openssl-1.0.1g-win32-release"
					

for a release version.

Note: Make sure there prefix you choose has no spaces in it!

Prepare OpenSSL for NASM support with:

	ms\do_nasm.bat
					

Build and install OpenSSL now with:

	nmake /f ms\ntdll.mak
	nmake /f ms\ntdll.mak install
					

More build information is available in INSTALL.W32 and INSTALL.W64 of the OpenSSL package itself.

1.3.6. SQLite database support

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

The Sqlite3 library is embedded in the subdirectory 3rdParty/sqlite3.

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

	nmake /nologo /f Makefile.W32 WITH_SQLITE3=1
			

1.3.7. PostgreSQL database support

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

Use prebuild version of PostgreSQL

Download the Windows installer from EnterpriseDB (you reach the download link via http://postgresql.org).

You will have to set some variables in makefiles\nmake\config.mk as follows:

	PGSQL_DIR = C:\Program Files\PostgreSQL\9.3
	PGDLL_WITH_I18N = 1
					

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

	nmake /nologo /f Makefile.W32 WITH_PGSQL=1
				

Build your own version of PostgreSQL

You need the community edition of ActivePerl from http://www.activestate.com/activeperl/. Install it for instance to C:\Perl.

Make sure the Perl interpreter is part of the path in the shell you want to build PostgreSQL:

	Set PATH=%PATH%;C:\Perl\bin
					

Get the source package postgresql-9.3.4.tar.gz of PostgreSQL from http://www.opstgresql.org.

Configure the package in the config.pl file which you create as follows:

	cd src\tools\msvc
	copy config_default.pl config.pl
					

Adapt config.pl to your needs. We actually don't want to build the full server just the client PostgreSQL library, so specifying the location of OpenSSL is enough:

	openssl=>"C:\\openssl-1.0.1g-win32-debug"
					

Note: Those must be two backslashes!

If you built your own version of OpenSSL before you will be missing some linking libraries in the right places. So copy them with:

	mkdir C:\openssl-1.0.1g-win32-debug\lib\VC
	copy C:\openssl-1.0.1g-win32-debug\lib\libeay32.lib ^
		C:\openssl-1.0.1g-win32-debug\lib\VC\libeay32MDd.lib
	copy C:\openssl-1.0.1g-win32-debug\lib\ssleay32.lib ^
		C:\openssl-1.0.1g-win32-debug\lib\VC\ssleay32MDd.lib
					

respectively if you built the release version:

	mkdir C:\openssl-1.0.1g-win32-release\lib\VC
	copy C:\openssl-1.0.1g-win32-release\lib\libeay32.lib ^
		C:\openssl-1.0.1g-win32-release\lib\VC\libeay32MD.lib
	copy C:\openssl-1.0.1g-win32-release\lib\ssleay32.lib ^
		C:\openssl-1.0.1g-win32-release\lib\VC\ssleay32MD.lib
					

Build the libpq library now with:

	build DEBUG libpq
					

respectively if you prefer a release version:

	build RELEASE libpq
					

Note: You may have to touch preproc.c and preproc.h if 'build' wants to start 'bison' and you don't have 'bison' installed.

Install the PostgreSQL client library for instance to C:\PostgreSQL-9.3.4-win32-debug with:

	install C:\PostgreSQL-9.3.4-win32-debug
					

Note: Unless you were able to build the whole PostgreSQL the 'install' script will fail. In this case copy the essential files to for instance C:\PostgreSQL-9.3.4-win32-debug with:

	mkdir C:\PostgreSQL-9.3.4\include
	mkdir C:\PostgreSQL-9.3.4\lib
	copy Debug\libpq\libpq.dll C:\PostgreSQL-9.3.4\lib
	copy Debug\libpq\libpq.lib C:\PostgreSQL-9.3.4\lib
	copy src\interfaces\libpq\libpq-fe.h C:\PostgreSQL-9.3.4\include
	copy src\include\postgres_ext.h C:\PostgreSQL-9.3.4\include
	copy src\include\pg_config_ext.h C:\PostgreSQL-9.3.4\include
					

Note: If you disable OpenSSL (for instance for debugging), you have to touch sslinfo.sql in contrib/sslinfo. The same applies for uuid-ossp.sql and pgxml.sql.in.

Note: If you want to build PostgrSQL with gettext/libint or zlib support you have to build those libraries first, or get them from http://gnuwin32.sourceforge.net/packages.html.

1.3.8. 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 have to download the two packages instantclient-basic-nt-12.1.0.1.0.zip and instantclient-sdk-nt-12.1.0.1.0.zip and install them to for instance C:\Oracle\instantclient_12_1.

You will have to set the 'ORACLE_DIR' variable in makefiles\nmake\config.mk as follows:

	ORACLE_DIR = C:\Oracle\instantclient_12_1
				

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

	nmake /nologo /f Makefile.W32 WITH_ORACLE=1
			

1.3.9. 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.

Use prebuild versions of libxml2 and libxslt

Download the Windows ZIP files libxml2-2.7.8.win32.zip, iconv-1.9.2.win32.zip and libxslt-1.1.26.win32.zip from http://ftp.zlatkovic.com/libxml/). Unpack them for instance to: C:\libxml2-2.7.8.win32, C:\iconv-1.9.2.win32 and C:\libxslt-1.1.26.win32.

You will have to set the following variables in makefiles\nmake\config.mk:

	ZLIB_DIR = C:\zlib-1.2.5.win32
	ICONV_DIR = C:\iconv-1.9.2.win32
	LIBXML2_DIR = C:\libxml2-2.7.8.win32
	LIBXSLT_DIR = C:\libxslt-1.1.26.win32
					

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

	nmake /nologo /f Makefile.W32 WITH_LIBXML2=1 WITH_LIBXSLT=1
				

Build your own version of LibXML2

For libxml2 to support character sets you need a working iconv library. We currently use win-iconv-0.0.6.zip from http://code.google.com/p/win-iconv/.

Build iconv.dll with the supplied makefile from packaging\patches\Windows\win-iconv\Makefile.msvc and install the results to for instance C:\win-iconv-0.0.6-win32-debug with:

	nmake /nologo /f Makefile.msvc DEBUG=1
	mkdir C:\win-iconv-0.0.6-win32-debug
	mkdir C:\win-iconv-0.0.6-win32-debug\include
	mkdir C:\win-iconv-0.0.6-win32-debug\lib
	mkdir C:\win-iconv-0.0.6-win32-debug\bin
	copy iconv.h C:\win-iconv-0.0.6-win32-release\include
	copy iconv.lib C:\win-iconv-0.0.6-win32-debug\lib
	copy iconv.dll C:\win-iconv-0.0.6-win32-debug\bin
					

respectively if you want to build a release version:

	nmake /nologo /f Makefile.msvc
	mkdir C:\win-iconv-0.0.6-win32-release
	mkdir C:\win-iconv-0.0.6-win32-release\include
	mkdir C:\win-iconv-0.0.6-win32-release\lib
	mkdir C:\win-iconv-0.0.6-win32-release\bin
	copy iconv.h C:\win-iconv-0.0.6-win32-release\include
	copy iconv.lib C:\win-iconv-0.0.6-win32-release\lib
	copy iconv.dll C:\win-iconv-0.0.6-win32-release\bin
					

Adapt the 'ICONV_DIR' variable in makefiles\nmake\config.mk as follows:

	ICONV_DIR = C:\win-iconv-0.0.6-win32-debug
					

Get the source package libxml2-2.9.1.tar.gz from ftp://xmlsoft.org/libxml2/.

Configure libxml2, make it use the 'win-iconv' library:

	cd win32
	cscript configure.js compiler=msvc
		prefix="C:\libxml2-2.9.1-win32-release"
		lib="C:\win-iconv-0.0.6-win32-release\lib"
		include="C:\win-iconv-0.0.6-win32-release\include"
		zlib=no iconv=yes vcmanifest=yes
					

For a debug version you have to change 'debug' to 'release' in the paths and to add 'debug=yes' and 'cruntime=/MDd':

	cd win32
	cscript configure.js compiler=msvc
		prefix="C:\libxml2-2.9.1-win32-debug"
		lib="C:\win-iconv-0.0.6-win32-debug\lib"
		include="C:\win-iconv-0.0.6-win32-debug\include"
		zlib=no iconv=yes vcmanifest=yes
		debug=yes cruntime=/MDd
					

Note: Try to avoid spaces in the installation prefix, if you really need some spaces then you will have to fix them after running the configure.js script by hand in the config.msvc file:

	PREFIX="C:\libxml2-2.9.1 win32 debug"
					

Finally build and install libxml2 with:

	nmake /nologo /f Makefile.msvc all
	nmake /nologo /f Makefile.msvc install
					

Adapt the 'LIBXML2_DIR' variable in makefiles\nmake\config.mk as follows:

	LIBXML2_DIR = C:\libxml2-2.9.1-win32-debug
					

Build your own version of LibXSLT

Get the source package libxslt-1.1.28.tar.gz from ftp://xmlsoft.org/libxslt/.

Configure libxslt, make it use the 'win-iconv' and the 'libxml2' library compiled above:

	cd win32
	cscript configure.js compiler=msvc
		prefix="C:\libxslt-1.1.28-win32-release"
		lib="C:\libxml2-2.9.1-win32-release\lib;C:\win-iconv-0.0.6-win32-release\lib"
		include="C:\libxml2-2.9.1-win32-release\include\libxml2;C:\win-iconv-0.0.6-win32-release\include"
		zlib=no iconv=yes vcmanifest=yes
					

For a debug version you have to change 'debug' to 'release' in the paths and to add 'debug=yes' and 'cruntime=/MDd':

	cd win32
	cscript configure.js compiler=msvc
		prefix="C:\libxslt-1.1.28-win32-debug"
		lib="C:\libxml2-2.9.1-win32-debug\lib;C:\win-iconv-0.0.6-win32-debug\lib"
		include="C:\libxml2-2.9.1-win32-debug\include;C:\win-iconv-0.0.6-win32-debug\include"
		zlib=no iconv=yes vcmanifest=yes
		debug=yes cruntime=/MDd
					

Note: Try to avoid spaces in the installation prefix, if you really need some spaces then you will have to fix them after running the configure.js script by hand in the config.msvc file:

	PREFIX="C:\libxslt-1.1.28 win32 debug"
					

Finally build and install libxslt with:

	nmake /nologo /f Makefile.msvc all
	nmake /nologo /f Makefile.msvc install
					

Adapt the 'LIBXSLT_DIR' variable in makefiles\nmake\config.mk as follows:

	LIBXSLT_DIR = C:\libxslt-1.1.28-win32-debug
					

The DLLs end up in the wrong directory, move them from 'lib' to 'bin':

	cd C:\libxslt-1.1.28-win32-debug
	move lib\*.dll bin\.
					

1.3.10. 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:

	nmake /nologo /f Makefile.W32 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.3.11. 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:

	nmake /nologo /f Makefile.W32 WITH_CJSON=1
			

1.3.12. 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:

	nmake /nologo /f Makefile.W32 WITH_LUA=1
			

1.3.13. 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.

Use prebuild version of Python

Download the official Python 3 Installer for Windows from http://python.org).

You will have to set the 'PYTHON_XXX' variables in makefiles\nmake\config.mk as follows:

	PYTHON_DIR = C:\Python34
	PYTHON_VERSION = 34
	PYTHON_MAJOR_VERSION = 3
	PYTHON_LIB_DIR = $(PYTHON_DIR)\libs
	PYTHON_DLL_DIR = $(PYTHON_DIR)\DLLs
					

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

	nmake /nologo /f Makefile.W32 WITH_PYTHON=1
				

Note: The binary installation packages from http://python.org) do not contain debug versions of the library. If you want to build a debugging version of Wolframe you have to build your own version of Python.

Build you own version of Python

You have to get the sources of Python3 called Python-3.4.0.tar from http://python.org. Unpack it for instance to C:\Python-3.4.0.

Open the solution file PCBuild\pcbuild.sln. Build the desired version. Read also PCBuild\readme.txt.

Copy the resulting python34_d.lib on top of the downloaded binary vesion in for instance C:\Python34\libs and python34_d.dll to C:\Python34\DLLs.

You will have to set the 'PYTHON_XXX' variables in makefiles\nmake\config.mk as follows:

	PYTHON_DIR = C:\Python34
	PYTHON_VERSION = 34
	PYTHON_MAJOR_VERSION = 3
	PYTHON_LIB_DIR = $(PYTHON_DIR)\libs
	PYTHON_DLL_DIR = $(PYTHON_DIR)\DLLs
					

1.3.14. Printing support with libhpdf

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

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

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

	nmake /nologo /f Makefile.W32 WITH_LIBHPDF=1
			

1.3.15. Image processing with FreeImage

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

The FreeImage package is embedded in the subdirectory 3rdParty/freeimage.

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

	nmake /nologo /f Makefile.W32 WITH_SYSTEM_FREEIMAGE=1
			

1.3.16. zlib and libpng

Libhpdf needs the zlib and libpng libraries.

The libpng and zlib libraries are embedded in the subdirectory 3rdParty/zlib and 3rdParty/libpng.

1.3.17. Support for ICU

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

Use prebuild version of ICU

You can take the pre-build ZIP-files from http://site.icu-project.org, called somthing like icu4c-52_1-Win32-msvc10.zip and unpack them in for instance C:\icu4c-52_1_1-Win32-msvc10.

You will have to set the 'ICU_XXX' variables in makefiles\nmake\config.mk as follows:

	ICU_LIB_VERSION = 52
	ICU_DIR = C:\icu4c-52_1-Win32-msvc10\icu
					

You also have to build your own version of Boost, meaning the 'boost-locale' library has to be built with ICU support enabled and you have to enable the 'regex' and the 'locale' boost libraries too:

	bootstrap
	.\b2 --prefix=C:\boost\boost_1_55 ^
		--with-thread --with-filesystem --with-system --with-program_options ^
		--with-date_time --with-locale --with-regex ^
		-sICU_PATH="C:\icu4c-52_1-win32-debug" ^
		architecture=x86 address-model=64 toolset=msvc ^
		install
					

Note: The binary installation packages from http://site.icu-project.org) do not contain debug versions of the library. If you want to build a debugging version of Wolframe you have to build your own version of ICU.

Build you own version of ICU

You have to get the ZIP file with the Windows sources called icu4c-51_1-src.zip from http://site.icu-project.org. Unpack it for instance to C:\icu4c-52_1-src.

Open the solution file icu\source\allinone\allinone.sln. Build the desired version (Release or Debug, 32-bit or 64-bit).

Best is to copy the resulting artifacts into a directory like C:\icu4c-52_1-win32-debug. Copy in there the include, bin and lib directories.

Adapt the 'ICU_XXX' variables in makefiles\nmake\config.mk as follows:

	ICU_LIB_VERSION = 52
	ICU_DIR = C:\icu4c-52_1-win32-debug
					

You build boost with boost-locale and ICU backend exactly the same way as with the pre-compiled version of ICU:

	bootstrap
	.\b2 --prefix=C:\boost\boost_1_55 ^
		--with-thread --with-filesystem --with-system --with-program_options ^
		--with-date_time --with-locale --with-regex ^
		-sICU_PATH="C:\icu4c-52_1-win32-debug" ^
		architecture=x86 address-model=64 toolset=msvc ^
		install
					

1.3.18. Testing Wolframe

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

Tests are run with:

	nmake /nologo /f Makefile.W32 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:

	nmake /nologo /f Makefile.W32 longtest
			

1.3.19. Testing with Expect

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

You enable testing with Expect with:

	nmake /nologo /f Makefile.W32 WITH_EXPECT=1
			

You can get a Windows version of TCL from http://www.activestate.com/activetcl/. Take the 32-bit community version, the the 64-bit version had no Expect available (at least at the time of writting).

Install ActiveTcl 8.6.1 to for instance C:\Tcl86.

Install Expect with:

	cd C:\Tcl86
	teacup install Expect
				

Adapt the following variable in makefiles\nmake\config.mk:

	TCL_DIR = C:\Tcl86
				

Some tests also need 'telnet'. If telnet is not enabled as Windows feature, enable it in "Control Panel", "Windows Features" under "Telnet Client".

1.3.20. Building the documentation

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

You need the Docbook XSLT files from http://sourceforge.net/projects/docbook/files/docbook-xsl-ns/. Install them and set the 'XSLT_HTMLHELP_STYLESHEET' variable in makefiles\nmake\config.mk:

	XSLT_HTMLHELP_STYLESHEET = C:\docbook-xsl-1.76.1\htmlhelp\htmlhelp.xsl
				

You will also need a working xsltproc.exe.

For generating CHM help files you have to install the "HTML Help Workshop and Documentation" from Microsoft. Install it and set the 'HHC_LOCATION' variable in makefiles\nmake\config.mk:

	HHC_LOCATION = C:\Program Files\HTML Help Workshop\hhc.exe	
				

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

Get Doxygen from http://www.stack.nl/~dimitri/doxygen/, install it to for instance C:\Doxygen and set the 'DOXYGEN' variable in makefiles\nmake\config.mk:

	DOXYGEN = C:\Doxygen\bin\doxygen.exe
				

1.3.21. Building the wolfclient

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

You build it for Qt 4 with:

	C:\Qt\4.8.1\bin\qmake.exe -config debug -recursive
	nmake
	

respectively for a release version:

	C:\Qt\4.8.1\bin\qmake.exe -config release -recursive
	nmake
	

You build it for Qt 5 with:

	C:\Qt\Qt5.2.1\5.2.1\msvc2010\bin\qmake.exe -config debug -recursive
	nmake
	

respectively for a release version:

	C:\Qt\Qt5.2.1\5.2.1\msvc2010\bin\qmake.exe -config release -recursive
	nmake
	

If you want SSL support you have to download or build OpenSSL and rebuild Qt 4 or Qt 5 with SSL support:

1.3.21.1. Secure Socket Layer (SSL)

The Wolframe protocol can be secured with SSL. Currently only OpenSSL (http://www.openssl.org) is supported.

Note: No matter whether you use the precompiled version or if you build OpenSSL on your own use the 0.9.8, 1.0.0 or 1.0.1g versions, but not the version 1.0.1 through 1.0.1f (Heartbleed bug)!

Use prebuild version of OpenSSL

You can get a prebuilt version of OpenSSL from http://www.slproweb.com/products/Win32OpenSSL.html. Despite the name you get also 64-bit versions there.

Install the developer version (for instance Win32OpenSSL-1_0_1g.exe) for instance to C:\OpenSSL-Win32.

Do not copy the OpenSSL binaries to the Windows system directory, copy them to the Bin subdirectory of the OpenSSL installation directory!

Set the "BOOST_XXX" variables in makefiles\nmake\config.mk as follows:

	OPENSSL_DIR = C:\OpenSSL-Win32
					

Build your own version of OpenSSL

You need the community edition of ActivePerl from http://www.activestate.com/activeperl/. Install it for instance to C:\Perl.

You will also need NASM to assemble certain parts of OpenSSL. You can get a Windows NASM from http://www.nasm.us/. Install it for instance to C:\nasm.

Make sure the Perl interpreter and the NASM assembler are part of the path in the shell you want to build OpenSSL:

	Set PATH=%PATH%;C:\Perl\bin;C:\nasm
					

Get the source package openssl-1.0.1g.tar.gz of OpenSSL from http://www.openssl.org.

Configure the package with:

	perl Configure debug-VC-WIN32 \
		--prefix="C:\openssl-1.0.1g-win32-debug"
					

for a debug version, respectively with:

	perl Configure VC-WIN32 \
		--prefix="C:\openssl-1.0.1g-win32-release"
					

for a release version.

Note: Make sure there prefix you choose has no spaces in it!

Prepare OpenSSL for NASM support with:

	ms\do_nasm.bat
					

Build and install OpenSSL now with:

	nmake /f ms\ntdll.mak
	nmake /f ms\ntdll.mak install
					

More build information is available in INSTALL.W32 and INSTALL.W64 of the OpenSSL package itself.

1.3.21.2. Qt libraries

Use prebuild version of Qt

Make sure you download the correct Qt package fitting your architecture and Microsoft Visual Studio version.

If you take the prebuild Qt libraries you have to disable the building of SSL-enabled code by removing the 'WITH_SSL=1' definition in the 'DEFINES' directive in libqtwolfclient/libqtwolfclient.pro.

Build your own version of Qt

Set the following environment variables in order for Qt to find the OpenSSL header files and libraries:\

	set OPENSSL_DIR=C:\openssl-1.0.1g-win32-debug
	set INCLUDE=%INCLUDE%;%OPENSSL_DIR%\include
	set LIB=%LIB%;%OPENSSL_DIR%\lib
					

or for the release version:

	set OPENSSL_DIR=C:\openssl-1.0.1g-win32-release
	set INCLUDE=%INCLUDE%;%OPENSSL_DIR%\include
	set LIB=%LIB%;%OPENSSL_DIR%\lib
					

Compile Qt with OpenSSL enabled:

	configure -platform win32-msvc2010 -debug -openssl
	nmake
					

For a release version use:

	configure -platform win32-msvc2010 -release -openssl
	nmake