Building SVN versions with CMake: Difference between revisions
Line 41: | Line 41: | ||
When you are going to build or compile Scribus, what you have downloaded is a large collection of plain-text files (ending in '.c' or '.cpp' to denote either the C or C++ 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 PC can use them, and the program works efficiently. | When you are going to build or compile Scribus, what you have downloaded is a large collection of plain-text files (ending in '.c' or '.cpp' to denote either the C or C++ 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 PC 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 PC to make sure all the 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 written to tell the compiler how to go about building Scribus. | The first step is to configure your downloaded directory of files. This requires a check of your PC 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 written to tell the compiler how to go about building Scribus. | ||
The Scribus Team now encourages 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 PC setup, where you want Scribus to be installed, for example. | The Scribus Team now encourages 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 PC setup, where you want Scribus to be installed, for example. |
Revision as of 13:56, 26 May 2007
After many years of using the autotools build system, the developers of Scribus have selected CMake as a replacement system. It provides a much more flexible setup with a lot less complexity. It also provides compatibility with build tools on Linux and variants of Unix, Windows and Mac OSX.
You must have CMake 2.4.3 for best results. Older versions will fail.
First thing first: Download latest snapshot
To download cvs snapshots of Scribus 1.3.3.x and 1.3.x follow these steps.
These commands are the same regardless of which version you are downloading:
- export CVSROOT=:pserver:anoncvs:@scribus.info:/cvs
Here is a hint: If you are using bash, put a line in your .bashrc file (located in your home/user directory) such as this:
alias cvsroot='export CVSROOT=:pserver:anoncvs:@scribus.info:/cvs'
so that then you only need to type cvsroot in the command line to make this command.
- cvs login <Enter>
At this point, you choose your version, as follows:
Scribus 1.3.3.x - Development - Recommended for those using 1.3.x for production use
- cvs -z3 co -r Version133x Scribus
Scribus 1.3.4cvs - Development - More Experimental
- cvs -z3 co -r Version13x Scribus
Thanks to Anduin.net [[1]], anonymous CVS access is updated daily.
More info on downloading scribus:
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.
- And if u 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!
Why Do I Have to 'Build' Scribus?
For that matter, what is Building?
When you are going to build or compile Scribus, what you have downloaded is a large collection of plain-text files (ending in '.c' or '.cpp' to denote either the C or C++ 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 PC 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 PC 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 written to tell the compiler how to go about building Scribus.
The Scribus Team now encourages 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 PC setup, where you want Scribus to be installed, for example.
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. 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.
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/scribus134cvs
Some options that the Scribus CMake files know about (more to come!):
- WANT_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.4cvs
. This should mean that you can install multiple versions with the same prefix with no clashes. - WANT_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).
- WANT_CAIRO=1: Makes CMake search for cairo and build with cairo instead of LibArt_LGPL. Please note we still consider the cairo build as beta.
- WANT_LIBART=1 (default): Makes CMake search for and build with LibArt_LGPL instead of cairo.
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
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 follow directory:
/home/username/scribuscmake/builddir
So then, instead of doing:
eg /usr/local/bin/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus134cvs
you would then change to the builddir directory and run:
eg /usr/local/bin/cmake ../Scribus -DCMAKE_INSTALL_PREFIX:PATH=/opt/scribus134cvs
Simple!
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
Compilation fails using Qt4 binaries
Systems with both Qt3 and Qt4 installed: You have uic
and moc
from Qt4 in the path and it may results to the compilation crash. This should NOT be the case with cmake 2.4.2 when released, or when using current Scribus CVS. However, this might be a useful workaround:
Remove cached options from previous cmake configuration run:
rm CMakeCache.txt
Then change PATH variable (for my Gentoo) e.g.:
export PATH=/usr/qt/3/bin/:$PATH
And run cmake config phase again:
eg ~/devel/CMAKE/bin/cmake . -DCMAKE_INSTALL_PREFIX:PATH=/path/to/install/to/scribuscmake/
Specific library locations
Whenever your distribution releases their package for a library Scribus depends on, it may still not be the very latest stable or unstable version from the writers of the library. In some cases, the Scribus developers have had to rely on the very latest code to further some parts of Scribus. In this case it is necessary to build your own version of such a library.
On example of this is the cairo graphics library. Right now, 1.3.4cvs has the capability to use the very very latest code from the just released cairo 1.2.
To specify a new cairo install path, other than your system's default add this to the cmake command line:
-DPREFIX_CAIRO:PATH=/path/to/your/cairo/install
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
- 64 bit supoprt
- Prefixes for more packages
Success Stories
Please add the operating system or distribution that you have tested successfully on:
- Gentoo, current (--Cbradney 17:04, 12 November 2006 (CET))
- Kubuntu Dapper Drake (--TomZ 17:08, 12 November 2006 (CET))
- openSuse 10.1 (--TomZ 17:08, 12 November 2006 (CET))
- Fedora Core 6 (--gpittman 15:44, 12 November 2006 (EST))
- PLD Linux Th (--DeeJay1 09:52, 13 November 2006 (CET))
- Mandriva 2007 (--Leo [[4]] 01:00, 16 November, 2006 (IST)) - a smooth ride
- PCLinuxOS 0.93a (--Leo [[5]] few days before i tried mandriva 2007) - manualy specified lib locations
- SuSE Linux 10.0 (--C_schaefer 19 November 2006)
- MacOSX 10.4 Tiger (--avox 18:50, 1 March 2007 (CET)) check the advanced settings with ccmake, sometimes it doesnt pick up some paths
- OpenSuSE 10.2 (--C_schaefer 28 February 2007)
- Ubuntu Feisty (--Oberten 23 March 2007)
- SUSE Linux Enterprise Desktop 10 (i586) --Mhanski 15:41, 21 April 2007 (CEST)