Building SVN versions with CMake

From Scribus Wiki
Revision as of 14:00, 31 December 2013 by Ale (talk | contribs) (Version 1.5.x)
Jump to: navigation, search


Why would I Need or Want to 'Build' Scribus?

Reasons to compile or build your own Scribus:

  1. You are using the current stable version, but certain bugs are a problem, and you know they have been fixed since the last release.
  2. You have heard about some new features in the development version, and you'd like to try them out.
  3. You're considering helping out the Scribus project in some way, and you'd like to see how it's put together to get some idea about where you might help.

Or, for that matter, what the hell is 'Building'?

When you are going to build or compile Scribus, what you have downloaded (if you have downloaded the source code) is a large collection of plain-text files (ending in '.c' or '.cpp' to denote either the C or C++ programming language respectively). The reason there are so many is that this actually makes the process of developing software easier, and allows for use of small parts repeatedly by different functions of the overall program. These plain-text files need to be converted to binary files (ending in ',o' for object files) so that your computer can use them, and the program works efficiently.

The first step is to configure your downloaded directory of files. This requires a check of your computer to make sure the compiling programs and all the other required outside resources are present and sufficiently up-to-date. Just as Scribus itself consists of these small program files, it also will use those of outside programs, like CUPS, lcms, and so on, so it needs to have on hand those plain text files to connect to these outside resources. After checking for the necessary resources, a script is being written to tell the compiler how to go about building Scribus. The process will fail if you are missing something, and cmake will give you error messages.

The Scribus Team requires the use of CMake for this configuring process. It is quick, easy to use, and easy for the developers to write for – even CMake needs instructions. You can also pass to CMake several special parameters for your particular Computer setup, for example, where you want Scribus to be installed.

Next, the actual 'build' process is done with a program called make. To start the process you simply enter make in a command line. That's it. You do not need to have root privileges to compile, and it is generally recommended that do not compile as root (one reason for this is that, by creating a number of files under root's name, you then interfere with subsequent updating from SVN). Compiling takes up a good part of your computer's resources, especially your processor(s), so you will find its performance rather sluggish while compiling is going on. Consequently, many find that compiling is best done by starting make and then walking away from the PC to let it do its work.

Finally, you need to install, done with the command make install. If you are going to install in the default location, you will need to have root privileges. On most Linux distros this can easily be done with the su command (after which you need root's password), or with sudo, entered as sudo make install. You can run cmake with a command that can install Scribus in a directory for which you have write privileges, and therefore do not need to be root.

For this help, and other advice, continue reading the following sections.


You must have CMake version ≥ 2.8.9 for best results. Older versions will fail.

See also: http://wiki.scribus.net/canvas/Official:Compile_with_CMake

First of all: don't let it scare you off

Building Scribus yourself is not as hard as it sounds. In the rest of this page you'll find an answer to (almost) every question you could have about this subject. It is worth reading, but you hopefully won't have to bother with most of the problems outlined here.

So, you may be interested in just knowing how it works in the best case.

Using Linux, it just boils down to, in case you want to compile the development version (1.5, not yet stable):

mkdir ~/src/
mkdir ~/src/scribus_svn
sudo mkdir /usr/local/scribus_svn
cd ~/src/scribus_svn
svn co svn://scribus.net/trunk/Scribus
cd ./Scribus
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/scribus_svn ..
make
sudo make install
  • you may change ~/src/ to wherever you want to put your source into.
  • you may change /usr/local/scribus_svn/ to wherever you want to put the Scribus binaries.
  • in case you want to install the 1.4 stable version, replace the "svn" instruction with following : svn co svn://scribus.net/branches/Version14x/Scribus


Now, if you want to understand what that commands mean, you will have to read through the rest of this page...

The easy way for Debian users

If you're using Debian (or Ubuntu) you need to manually compile the SVN version, only if you want to be really really up to date.

Otherwise, you can rely on the .deb for scribus-ng in our own repositories or, if you don't find the packages for your platform (ppc for instance) you can let apt-get compile from source using the latest sources in the repositories (most of the time those will be older than the SVN ones, but you probably don't really care).

You first have to add the source line for deb-src in synaptic, then you should become root (sudo -i) and:

apt-get source scribus-ng;
cd scribus-ng-1.3.5.dfsg~svn20090208;
apt-get build-dep scribus-ng;
debuild -us -uc; dpkg -i 
../scribus-ng_1.3.5.dfsg~svn20090208-3_i386.deb

For more information on using Scribus with debian, please have a look at the Debian page our offical site

First thing first: Download latest snapshot with Subversion

Subversion is the versioning control system used for Scribus. Check this link for instructions for using Subversion.

All subversion URLs for Scribus anonsvn are based at:

svn://scribus.net/

There's also http://scribus.net/svn/Scribus/ , which gets you to the same content, but svn://scribus.net/ is usually faster. HTTP access might be useful to those behind paranoid firewalls or proxies, though.

If you used to check out -r <Version>, check out <SVN Path> instead:

Version SVN Path Status
Version150 /trunk/Scribus **development version**
Version14x /branches/Version14x/Scribus **stable version**
Version133x /branches/Version133x/Scribus **old outdated stable version**

So, if I wanted to use svn:// to check out 1.4.x.svn, I'd run:

svn co svn://scribus.net/branches/Version14x/Scribus scribus14x

Updating your working copy is much the same as cvs - just cd into your working copy and run "svn up" .


Some links to learn more about downloading Scribus and about SVN:

  • There is an online reference for SVN at this site.
  • Once you have subversion installed, you can get some help for SVN at the command line by entering svn help
  • See the installing section on docs.scribus.net for more info on the Official Documentation site.
  • Craig Ringer explained how to use SVN with Scribus on the list.

Thanks to Anduin.net [[1]], anonymous SVN access is updated daily.

More info on downloading scribus:

  • You can also get the source code from the Download page

If you are compiling for the first time, don't be scared of the command line. Just copy the lines relevant to the version of Scribus you want to use, one by one on the command line.

Watch out:

  • Newbies should take care, that only 'make install' part has to be done as a root. Rest of the part, like downloading and compiling can be done easily as a normal users.
    You can install as a user, however, if you are installing into a directory you have write permission for. See the -DCMAKE_INSTALL_PREFIX command below.
  • And if you already have a version of Scribus on your system, don't forget to use the option WANT_VERSIONING=1. You can specify this option as -DWANT_VERSIONING=1.

Good luck!

Getting All the Things You Need

This is probably something of a worst-case scenario, but likely representative for a situation for a newbie having no built-in capability to compile software.

An installation of Fedora 8 was done on a computer having no DVD drive, so therefore a CD had to be used, in this case the Fedora-8-Live-KDE CD. Installing Fedora 8 in this manner is simple, since everything on the CD gets installed, but you have no capability to compile software – none whatsoever.

The basic beginning packages needed are these, obtained with yum install... :

  • gcc
  • gcc-c++
  • cmake
  • subversion – if you're going to compile, you might as well get the latest Scribus updates

So if you follow the instructions above for downloading using svn, then use Cmake, you have many dependencies to deal with, so get these before you even try Cmake the first time:

  • qt4 and qt4-devel (not for 1.5 svn : it now uses - and requires - qt5)
  • qtwebkit-devel
  • poppler-devel
  • podofo-devel
  • ghostscript – this should already be there
  • pkgconfig
  • lcms2-devel
  • libjpeg-devel
  • libtiff-devel
  • cups-devel
  • libxml2 and libxml2-devel – you should already have libxml2
  • python and python-devel
  • fontconfig-devel
  • openssl-devel
  • freetype and freetype-devel
  • python-imaging-devel
  • tk and tkinter
  • hunspell and hunspell-devel (as of 1.4.2)
  • cairo and cairo-devel – you should already have cairo
  • boost-devel

For Fedora at least, the names are as used with yum, for example:

yum install qt-devel lcms-devel libjpeg-devel libtiff-devel

and so on. On other distros the exact names may vary. Here is a link describing the particulars for Ubuntu 7.10 (Gutsy Gibbon):

On Fedora, if you install various development packages, you have most of what you need. Exceptions seem to be cups-devel, lcms-devel, tk and tkinter, and python-imaging-devel (maybe cairo-devel). Incidentally, in Fedora 9 and later, Qt4 is loaded by default, and is labeled only qt and qt-devel.

On Debian, if you install the develeopment packages as described above(apt-get build-dep scribus-ng) you will need the following packages to build the trunk (status September 2011):

  • libqtwebkit-dev

Packages for Ubuntu

To install all the required libraries and packages for Debian or Ubuntu type the following in a terminal:

sudo apt-get build-dep scribus-ng

Right now (March 2011) the build dependencies for Scribus 1.4.0 on Debian/Ubuntu are:

debhelper (>= 7), cmake (>= 2.4.3), gcc (>=3.3.5), libqt4-dev (>= 4.6), libcairo2-dev, zlib1g-dev,
liblcms1-dev (>= 1.13), libtiff4-dev, libcups2-dev,libxml2-dev (>= 2.6.16), gettext, python-all-dev,
libboost-python-dev, libaspell-dev, libpodofo-dev (>= 0.8.4), quilt

Version 1.5.x

Building Scribus 1.5.0svn and later with Qt5

Starting with rev. 18438 (2 September 2012), building version 1.5.0svn requires Qt5 (for previous revision, it was optional). To build Scribus 1.5.0svn with Qt5, you need all Qt libraries listed above, but this time in their Qt5 incarnation.

If you have Qt4 and Qt5 installed, you need to specify Qt5 with additional CMake options.

As of 21 of September 2013, the best way to get QT5 seems to be to use the installer found on http://qt-project.org/downloads. It suggests as installation directory /home/user/Qt and I suggest you keep to that. The cmake option is -DQT_PREFIX="/home/user/Qt/5.1.1/gcc/". It built OK on SUSE-12.3, Ubuntu-12.04 (Pepperment) and Ubuntu-13.04.

In case you need a list, required qt5 libs are :

 qt5-qtbase.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-devel.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-ibase.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-mysql.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-odbc.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-postgresql.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-static.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-tds.x86_64 0:5.1.1-1.fc19
 qt5-qtbase-x11.x86_64 0:5.1.1-1.fc19
 qt5-qttools.x86_64 0:5.1.1-3.fc19
 qt5-qttools-devel.x86_64 0:5.1.1-3.fc19
 qt5-qtwebkit.x86_64 0:5.1.1-1.fc19
 qt5-qtwebkit-devel.x86_64 0:5.1.1-1.fc19
 qt5-qtdeclarative.x86_64 0:5.1.1-1.fc19
 qt5-qtdeclarative-devel.x86_64 0:5.1.1-1.fc19
 qt5-qtjsbackend.x86_64 0:5.1.1-1.fc19

In case you got problems, Pygmee suggests too : "it build here after i've build sigil where it make a bit changes in QT5 config".

Debian

On Debian Testing, on top of the packages pulled in by apt-get build-dep you need.

  • libqt5webkit5-dev
  • qtquick1-5-dev
  • qtdeclarative5-dev
  • qttools5-dev-tools
  • qttools5-dev
  • liblcms2-dev

They are all available in the official Debian repositories.

This list should also apply for the latest Ubuntu release.

Fedora 20

Fedora 20 has Qt5 packages available from its repositories. The requirements seem to be:

qt5-qtbase
qt5-qtbase-devel
qt5-qtdeclarative
qt5-qtdeclarative-devel
qt5-qttools
qt5-qttools-devel
qt5-qtwebkit
qt5-qtwebkit-devel

There is also a Qt5-compiled version of Sigil in Fedora's repositories. Installing Sigil also installs qt5-qtbase-gui, qt5-qtsvg and qt5-qtxmlpatterns, but I don't think these or their development packages are used to build Scribus 1.5.0. I do note that in the absence of Sigil, the above list will bring in qt5-qtbase-gui as a dependency.

Ubuntu 13.04

On Ubuntu 13.04

  • use the command line :
sudo apt-get install qt5-default qttools5-dev-tools libqt5location5 libqt5webkit5-dev libqt5webkit5 qt5-qmake libqt5xml5 libqt5gui5 libqt5core5 qttools5-dev qttools5
  • then, specifically relating to qt5, install : libqt5declarative5-dev qtlocation5-dev qtsensors5-dev
  • install too the usual libs not related to qt5 : zlib1g-dev libpng12-dev libjpeg-dev libtiff5-dev libpython-all-dev libfreetype6-dev libcairo2-dev libcups2-dev libxml++2.6-dev liblcms2-dev
Ubuntu 13.10

Allmost the same : just no qttools5 and no libqt5declarative5-dev but qtdeclarative5-dev instead

sudo apt-get install qt5-default qttools5-dev-tools libqt5location5 libqt5webkit5-dev libqt5webkit5 qt5-qmake libqt5xml5 libqt5gui5 libqt5core5 qttools5-dev
sudo apt-get install qtdeclarative5-dev qtlocation5-dev qtsensors5-dev 
sudo apt-get install zlib1g-dev libpng12-dev libjpeg-dev libtiff5-dev libpython-all-dev libfreetype6-dev libcairo2-dev libcups2-dev libxml++2.6-dev liblcms2-dev
OpenSuse 13.1 RC1 or newer

Install the OS Install these packages via Yast2:

  • libQt5WebkitWidgets-devel
  • libqt5-qttools-devel
  • python-devel
  • cairo-devel
  • hunspell-devel
  • lcms2-devel
  • cmake
  • subversion

... and that's it.

Proceed with Scribus compilation process.

Additional dependencies for some graphics formats

In 1.5.0+, there are a number of vector and bitmap graphics formats which can now be imported into Scribus. Some of these have particular additional dependencies.

GraphicsMagick (Optional)

You do not need GraphicsMagick to run cmake or compile 1.5.0svn, but some added import filters will be available if you have it (and cmake will detect it automatically). What Scribus needs are the following packages: graphicsmagick, graphicsmagick-devel, graphicsmagick-c++, and graphicsmagick-c++-devel.

OpenSceneGraph (Optional)

This may be available with your Linux distribution (definitely for Fedora 17). You can also download and compile yourself.

For Fedora, typing

sudo yum install OpenSceneGraph OpenSceneGraph-devel

should be enough, and will get you the additional requirements of Inventor, OpenThreads, and OpenThreads-devel.

For OpenSUSE, go to http://software.opensuse.org/package/OpenSceneGraph and use the 1-click install procedure.

MS Publisher and WPG Importers

To build Scribus with support for MS Publisher and WPG files, you need libmspub, as well as libwpg and libwpd. Note that the minimum version for PUB import is libmspub 0.0.6, and also that you want the development packages (libwpd-devel, libwpg-devel, libmspub-devel, for example in Fedora).

To start the build

Before continuing, please note that an out-of-source build is recommended, however.. From the Scribus directory:

/path/to/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/path/to/install/to/scribuscmake/

For example:

/usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus15svn

Some options that the Scribus CMake files know about (more can be found here : http://wiki.scribus.net/canvas/CMake_Build_Options):

  • -DWANT_VERSIONING=1: Sets the build to use the VERSION setting as a suffix for the install directories and the binary. Eg, the binary could be scribus-1.3.5svn. This should mean that you can install multiple versions with the same prefix with no clashes.
  • -DWANT_DEBUG=1: Sets the build to be a debug release and use -O0 -g3, instead of -O2 (This is the default for now, and cannot be turned off unless you edit the CMakeFiles.txt file).
  • -DWANT_CAIRO=1: Makes CMake search for cairo and build with cairo instead of LibArt_LGPL. cairo is the primary supported option for 1.3.5+.
  • -DWANT_LIBART=1 (not available in 1.3.5, default in 1.3.3.x): Makes CMake search for and build with LibArt_LGPL instead of cairo.
  • -DWANT_QTARTHUR=1: In 1.3.5, uses the QT4 ARTHUR rendering library. This is an alternative to CAIRO.
  • -DWANT_HUNSPELL=1: This will enable the new (as of 1.4.2) hunspell-based spell checking capabilities across *all* platforms.

If you have several version of QT installed or QT is installed in a non standard location you'll have to tell cmake where to find it by setting -DQT_QMAKE_EXECUTABLE

For example: to make a cairo debug build, then something like this:

/usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus134cvs -DWANT_CAIRO=1 -DWANT_DEBUG=1 -DWANT_VERSIONING=1

To use qt_arthur instead:

/usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus134cvs -DWANT_QTARTHUR=1 -DWANT_DEBUG=1 -DWANT_VERSIONING=1

Out-of-source builds

One of the advantages of CMake is that you can do an out-of-source build. What is this? It enables you to build the application without writing anything at all to the directory where the Scribus source is. This means your source tree is clean, always. Its easier and faster to update, and you can build multiple targets out-of-source from the same source tree. Cool!

To do an out-of-source build, you need a new directory to build in. Say you have the source files in:

/home/username/scribuscmake/Scribus

Make the following directory:

/home/username/scribuscmake/builddir

So then, instead of doing:

eg /usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus15svn

you would then change to the builddir directory and run:

eg /usr/local/bin/cmake ../Scribus -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus15svn

Simple!

More CMake Options

CMake_Build_Options

Continuing on to the build stage

Once this has successfully completed, simply run make && make install.

The CMake based build system is very new to Scribus and it will change and it will need improving. Please report issues on our mailing list or bugtracker.

There is a long todo list for this build system including, but not limited to:

  • Checking it works across distributions
  • Checking it works across various flavours of UNIX
  • Checking it works on 64 bit distros
  • Add Win32 and Mac OSX support

Making a tarball for distribution

To make a tarball for distribution, the old way would be to make dist. The new way is to run make package_source or /path/to/cpack -G TBZ2 --config CPackSourceConfig.cmake to give you a bundle of the source. With cmake 2.4.1 there is only support for a gzip tar.gz however a bzip2 tar.bz2 is possible with later versions of cmake.

Notes For Packagers

If you package Scribus for a distribution keep in mind the issue of the install prefix versus temporary install directory prefix. The following seems to work well for Debian packaging:

>_______mkdir -p $(BUILD_DIR)

>_______cd $(BUILD_DIR) && $(CMAKE) \
>_______    -DWANT_DEBUG:STRING=$(DEBUG_FLAG) \
>_______    -DCMAKE_INSTALL_PREFIX:PATH=/usr \
>_______    -DCMAKE_SKIP_RPATH:BOOL=1 \
>_______    -DRPATH_STYLE:STRING=none \
>_______    -DWANT_VERSIONING:BOOL=1 \
>_______    -DCUSTOM_VERSIONTAG:STRING=-ng \
>_______    -DCMAKE_CXX_FLAGS:STRING='-o2 -g -Wall' \
>_______    -DCMAKE_C_FLAGS:STRING='-o2 -g -Wall' ../../

then

>_______$(MAKE) -C $(BUILD_DIR) install DESTDIR=$(INSTALL_DIR)

where $(BUILD_DIR) is ./build and $(INSTALL_DIR) is ./install

Using $(PREFIX) is the key to avoiding hardcoded absolute path problem.

TODO

  • Enable more pkg-config usage
  • Prefixes for more packages
  • Create a new Homebrew formula for MacOSX and eventually add to this page