BUILDING SCRIBUS ON MICROSOFT WINDOWS WITH MICROSOFT VISUAL STUDIO ================================================================== HOW TO DO THE BUILD =================== This documentation is minimal and assume you have a decent knowledge of Microsoft Visual Studio. No help regarding use of Visual Studio and related tools will be provided. You will need: - Microsoft Windows XP, Vista or 7 - Microsoft Visual Studio 2008 or Visual C++ Express Edition 2008 - A recent Qt release built with Visual Studio 2008 (version >= 4.6) - Cairo sources from cairographics.org (version >= 1.8.0) - Pixman sources from cairographics.org (version >= 0.12.0) - Boost from www.boost.org (version >= 1.35.0) - Freetype sources from freetype.org (version >= 2.4.0) - Libhunspell sources from http://hunspell.sourceforge.net/ (version >= 1.3.2) - Libjpeg win32 libs and binaries from the GnuWin32 project - Libtiff win32 libs and binaries from the GnuWin32 project - Libxml2 win32 binaries from the Libxml project - LittleCMS sources from www.littlecms.com (version >= 2.1) - PoDoFo sources from podofo.sourceforge.net (version >= 0.8.x) - A Python 2.7 Windows binary build. For debug builds, you'll need a release that contains the python27_d.dll . Some more details can be found below in the section entitled GETTING DEPENDENCIES. After having installed all dependencies, open Scribus-build-props.vsprops files located in Scribus\win32\vc9 and update the dependency paths to match your system. Open the Visual Studio solution located in Scribus\win32\vc9 and start building. The *-cairo configurations will build Scribus with cairo renderer. The *-arthur configurations will buid Scribus using qt arthur renderer. Note : official Scribus builds use cairo as render. After building completed, you will find executables in a Scribus-builds\scribus-vc9-*\scribus directory located in same directory as Scribus sources. Those executables will not function yet. Scribus resources must be copied from source directory to install directory first. In order to do that, create a batch script and copy/paste following lines : set SCRIBUS_SRC_PATH=.\Scribus set SCRIBUS_BUILD_ROOT=.\Scribus-builds set SCRIBUS_INSTALL_PATH=.\Scribus-builds\scribus-vc9-debug-cairo\scribus copy %SCRIBUS_SRC_PATH%\AUTHORS %SCRIBUS_INSTALL_PATH%\share\doc copy %SCRIBUS_SRC_PATH%\COPYING %SCRIBUS_INSTALL_PATH%\share\doc copy %SCRIBUS_SRC_PATH%\LINKS %SCRIBUS_INSTALL_PATH%\share\doc copy %SCRIBUS_SRC_PATH%\TRANSLATION %SCRIBUS_INSTALL_PATH%\share\doc xcopy %SCRIBUS_SRC_PATH%\scribus\doc %SCRIBUS_INSTALL_PATH%\share\doc /s /y /D xcopy %SCRIBUS_SRC_PATH%\resources\dicts %SCRIBUS_INSTALL_PATH%\share\dicts /s /y /D xcopy %SCRIBUS_SRC_PATH%\resources\editorconfig %SCRIBUS_INSTALL_PATH%\share\editorconfig /s /y xcopy %SCRIBUS_SRC_PATH%\resources\icons %SCRIBUS_INSTALL_PATH%\share\icons /s /y /D xcopy %SCRIBUS_SRC_PATH%\resources\loremipsum %SCRIBUS_INSTALL_PATH%\share\loremipsum /s /y xcopy %SCRIBUS_SRC_PATH%\resources\profiles %SCRIBUS_INSTALL_PATH%\libs\profiles /s /y xcopy %SCRIBUS_SRC_PATH%\resources\swatches %SCRIBUS_INSTALL_PATH%\libs\swatches /s /y xcopy %SCRIBUS_SRC_PATH%\resources\templates %SCRIBUS_INSTALL_PATH%\share\templates /s /y /D copy %SCRIBUS_SRC_PATH%\scribus\plugins\tools\pathcut\*.png %SCRIBUS_INSTALL_PATH%\share\icons\ /y copy %SCRIBUS_SRC_PATH%\scribus\plugins\tools\pathfinder\*.png %SCRIBUS_INSTALL_PATH%\share\icons\ /y xcopy %SCRIBUS_SRC_PATH%\scribus\plugins\scriptplugin\scripts %SCRIBUS_INSTALL_PATH%\share\scripts /s /y /D xcopy %SCRIBUS_SRC_PATH%\scribus\plugins\scriptplugin\samples %SCRIBUS_INSTALL_PATH%\share\samples /s /y copy %SCRIBUS_SRC_PATH%\scribus\plugins\psimport\import.prolog %SCRIBUS_INSTALL_PATH%\libs\import.prolog copy %SCRIBUS_SRC_PATH%\scribus\plugins\barcodegenerator\barcode.ps %SCRIBUS_INSTALL_PATH%\share\plugins\barcode.ps copy %SCRIBUS_SRC_PATH%\scribus\unicodemap\unicodenameslist.txt %SCRIBUS_INSTALL_PATH%\share\unicodenameslist.txt del %SCRIBUS_BUILD_ROOT%\*CMake* /s del %SCRIBUS_BUILD_ROOT%\*MakeFile* /s Adjust SCRIBUS_SRC_PATH, SCRIBUS_BUILD_ROOT and SCRIBUS_INSTALL_PATH as needed and run batch script. Now copy the DLLs from the zlib, libpng, qt, lcms, freetype, libtiff, libjpeg, libxml, and podofo directories into the Scribus install directory (where scribus.exe is). Copy also the Dlls, lib and tcl directories from your python install to scribus install path. Finally copy python27.dll. Scribus should now run. Crash problems at runtime? Verify that Qt, freetype, lcms, and Scribus all use the same runtime, and that all were built for debugging or all for release not a mixture of the two. Windows does not permit you to mix debug and release executables like other platforms do. You can use depends.exe to check that the runtimes match. GETTING DEPENDENCIES ==================== This is a quick and dirty set of notes that will be filled out once everything's verified as correct and working. It asssumes that you'll be building all your dependencies at a single root, like C:\Developer. The root *MUST* not have spaces in its path. ---- Qt: Download the latest qt >= 4.6 snapshot from ftp://ftp.qt.nokia.com/qt/source and unpack it to C:\Developer. Start a command line and import your Visual Studio environment: \path\to\visual\studio\VC\vcvarsall.bat now cd to C:\Developer\qt-everywhere-whatever and run configure: configure -debug-and-release -fast -no-qt3support -platform win32-msvc2008 and nmake. ---- Boost: Download the latest boost libraries from www.boost.org. Unpack, no need to compile anything as Scribus only use functionnalities embedded in C++ templates. ---- Zlib and LibPNG : Zlib and LibPNG are both embedded in the QtCore library with symbols exported for public use . If you're using a Qt binary redist you may still need to download these libraries sources for their headers. In most cases your copy of Qt will contain a directory called %QTDIR%\src\3rdparty\zlib (and one for libpng), in which case you need not worry about these libraries at all. --- Cairo and Pixman Cairo and pixman sources can be downloaded from cairographics.org at following address : http://cairographics.org/releases/ Follow instructions in sources packages to build pixman, then cairo. You will however probably find easier to directly download packages with Visual Studio 2008 solutions ready to build. You can find required file at following address : https://sourceforge.net/projects/scribus/files/scribus-libs/win32-msvc2008/ Download the both scribus-pixman-* and scribus-cairo-* zip files. Unpack them. Build pixman first : open the PixManWin32 solution located in pixman-whatever\win32 directory and build Debug and Release configurations. Build cairo afterwards : open the CairoWin32 solution located in cairo-whatever\win32 directory and build Debug and Release configurations. ---- Freetype: Unpack freetype Open include\freetype\config\ftoption.h and replace the DLL export compilation section by following lines : #ifndef __GNUC__ # define __DLL_IMPORT__ __declspec(dllimport) # define __DLL_EXPORT__ __declspec(dllexport) #else # define __DLL_IMPORT__ __attribute__((dllimport)) extern # define __DLL_EXPORT__ __attribute__((dllexport)) extern #endif #if (defined __WIN32__) || (defined _WIN32) # ifdef BUILD_FREETYPE2_DLL # define FREETYPE2_DLL_IMPEXP __DLL_EXPORT__ # elif defined(FREETYPE2_STATIC) # define FREETYPE2_DLL_IMPEXP # elif defined (USE_FREETYPE2_DLL) # define FREETYPE2_DLL_IMPEXP __DLL_IMPORT__ # elif defined (USE_FREETYPE2_STATIC) # define FREETYPE2_DLL_IMPEXP # else /* assume USE_FREETYPE2_DLL */ # define FREETYPE2_DLL_IMPEXP __DLL_IMPORT__ # endif #else /* __WIN32__ */ # define FREETYPE2_DLL_IMPEXP #endif #define FT_EXPORT(x) FREETYPE2_DLL_IMPEXP x #define FT_BASE(x) FREETYPE2_DLL_IMPEXP x Open builds\win32\vc2008 Build "Release Multithreaded" and "Debug Multithreaded" At the end of the process you must have those files in your freetype lib directory : - freetype.dll - freetype.lib - freetypeD.dll - freetypeD.lib ---- Libhunspell : You will probably find easier to directly download packages with Visual Studio 2008 solutions ready to build. You can find required file at following address : https://sourceforge.net/projects/scribus/files/scribus-libs/win32-msvc2008/ Download the scribus-hunspell-*.zip archive. Unpack it. Open the visual studio solution located in hunspell-whatever/src/win-api directory and build Debug and Release configurations of Libhunspell project. ---- Libjpeg : While Qt also bundles libjpeg, it's not linked to the main DLL but rather a plugin. As such, we need to link to it directly. Get jpeg libraries from GnuWin32 project on Sourceforge : http://sourceforge.net/projects/gnuwin32/files/jpeg/6b-3/jpeg-6b-3-lib.zip/download Unpack in C:\Developer. After unpacking you directory layout must be as following : C:\Developer |- libjpeg-6b-3 |- include |- lib |- manifest ---- LittleCMS : Get lcms sources (>= 2.1). Although it is possible to build Scribus with lcms 1, you can only do so without modifying lcms sources with lcms >= 2.1. We will only describe here instructions related to lcms >= 2.1. Build using VC project in Projects\VC2008 dir. Modify projects if necessary so as to make them use the multithreaded dll runtim libraries. Build the static libraries in debug and release configurations. After building you must have a lcms2_static.lib and lcms2_staticd.lib in your lcms source directory. If this is not the case modify projects as necessary. ---- Libtiff While Qt also bundles libtiff, it's not linked to the main DLL but rather a plugin. As such, we need to link to it directly. Download libtiff libraries, binaries and dependency packages from GnuWin32 project on sourceforge : http://sourceforge.net/projects/gnuwin32/files/tiff/3.8.2/ Unpack them in C:\Developer. After unpacking you directory layout must be as following : C:\Developer |- libtiff-3.8.2 |- bin |- contrib |- include |- lib |- man |- manifest ---- Libxml2 / iconv : Download libxml2 and icon win32 binaries from following address : ftp://ftp.zlatkovic.com/libxml/ Note that these binaries do not use the same runtime as the rest of the binaries we're building. Feel free to rebuild libxml to fix this, but in practice it doesn't matter since we never pass a FILE* nor do we allocate memory to be deallocated in libxml or vice versa. Remember that iconv from the same package must be on the header search path too. If in doubt, just drop iconv.h into the libxml tree. --- Podofo : Podofo sources can be downloaded from podofo.sourceforge.net. At the moment those instructions are written, the recommended version to build Scribus on Windows is one of the 0.8.x series. Follow instructions in sources packages to build Podofo. You will however probably find easier to directly download packages with Visual Studio 2008 solutions ready to build. You can find required file at following address : https://sourceforge.net/projects/scribus/files/scribus-libs/win32-msvc2008/ Download the scribus-podofo-*.zip archive. Unpack it. Open the podofo solution located in podofo-whatever directory and build Debug and Release configurations of PoDoFoLib project. Note : freetype, libtiff and libjpeg must have been installed and if necessary compiled before attempting to build podofo. --- Python : Download latest Python 2.7 binaries (and only 2.7, 3.x will not work). Unpack or install. Copy the python27.lib file in python 'libs' directory to python27_d.lib Open pyconfig.h in python include directory Replace those lines : #ifdef _DEBUG # define Py_DEBUG #endif by : #ifdef _DEBUG # //define Py_DEBUG #endif