= Building on GNU/Linux = == Building QGIS with Qt 4.x == **Requires:** Ubuntu / Debian derived distro /!\ **Note:** Refer to the section ''Building Debian packages'' for building debian packages. Unless you plan to develop on QGIS, that is probably the easiest option to compile and install QGIS. These notes are for Ubuntu - other versions and Debian derived distros may require slight variations in package names. These notes are for if you want to build QGIS from source. One of the major aims here is to show how this can be done using binary packages for ***all*** dependencies - building only the core QGIS stuff from source. I prefer this approach because it means we can leave the business of managing system packages to apt and only concern ourselves with coding QGIS! This document assumes you have made a fresh install and have a 'clean' system. These instructions should work fine if this is a system that has already been in use for a while, you may need to just skip those steps which are irrelevant to you. == Prepare apt == The packages QGIS depends on to build are available in the "universe" component of Ubuntu. This is not activated by default, so you need to activate it: + Edit your /etc/apt/sources.list file. + Uncomment all the lines starting with "deb" + Also you will need to be running Ubuntu 'precise' or higher in order for all dependencies to be met. Now update your local sources database: ``` sudo apt-get update ``` == Install build dependencies == || Distribution | install command for packages | | wheezy | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal1-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python python-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | | jessie | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | | precise | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | | trusty | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | | utopic | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | | vivid | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt5-qt4-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | | sid | ``apt-get install bison cmake doxygen flex git graphviz grass-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl0-dev libopenscenegraph-dev libosgearth-dev libpq-dev libproj-dev libqscintilla2-dev libqt4-dev libqt4-opengl-dev libqtwebkit-dev libqwt-dev libspatialindex-dev libspatialite-dev libsqlite3-dev lighttpd locales pkg-config poppler-utils pyqt4-dev-tools pyqt4.qsci-dev python-all python-all-dev python-qscintilla2 python-qt4 python-qt4-dev python-sip python-sip-dev spawn-fcgi txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb`` | (extracted from the control.in file in ``debian/``) == Setup ccache (Optional) == You should also setup ccache to speed up compile times: ``` cd /usr/local/bin sudo ln -s /usr/bin/ccache gcc sudo ln -s /usr/bin/ccache g++ ``` == Prepare your development environment == As a convention I do all my development work in $HOME/dev/, so in this case we will create a work environment for C++ development work like this: ``` mkdir -p ${HOME}/dev/cpp cd ${HOME}/dev/cpp ``` This directory path will be assumed for all instructions that follow. == Check out the QGIS Source Code == There are two ways the source can be checked out. Use the anonymous method if you do not have edit privileges for the QGIS source repository, or use the developer checkout if you have permissions to commit source code changes. 1. Anonymous Checkout ``` cd ${HOME}/dev/cpp git clone git://github.com/qgis/QGIS.git ``` 2. Developer Checkout ``` cd ${HOME}/dev/cpp git clone git@github.com:qgis/QGIS.git ``` == Starting the compile == I compile my development version of QGIS into my ~/apps directory to avoid conflicts with Ubuntu packages that may be under /usr. This way for example you can use the binary packages of QGIS on your system along side with your development version. I suggest you do something similar: ``` mkdir -p ${HOME}/apps ``` Now we create a build directory and run ccmake: ``` cd QGIS mkdir build-master cd build-master ccmake .. ``` When you run ccmake (note the .. is required!), a menu will appear where you can configure various aspects of the build. If you want QGIS to have debugging capabilities then set CMAKE_BUILD_TYPE to Debug. If you do not have root access or do not want to overwrite existing QGIS installs (by your packagemanager for example), set the CMAKE_INSTALL_PREFIX to somewhere you have write access to (I usually use ${HOME}/apps). Now press 'c' to configure, 'e' to dismiss any error messages that may appear. and 'g' to generate the make files. Note that sometimes 'c' needs to be pressed several times before the 'g' option becomes available. After the 'g' generation is complete, press 'q' to exit the ccmake interactive dialog. Now on with the build: ``` make make install ``` It may take a little while to build depending on your platform. After that you can try to run QGIS: ``` $HOME/apps/bin/qgis ``` If all has worked properly the QGIS application should start up and appear on your screen. If you get the error message "error while loading shared libraries", execute this command in your shell. ``` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/apps/lib/ ``` == Building Debian packages == Instead of creating a personal installation as in the previous step you can also create debian package. This is done from the QGIS root directory, where you'll find a debian directory. First you need to install the debian packaging tools once: ``` apt-get install build-essential ``` First you need to create an changelog entry for your distribution. For example for Ubuntu Lucid: ``` dch -l ~precise --force-distribution --distribution precise "precise build" ``` The QGIS packages will be created with: ``` dpkg-buildpackage -us -uc -b ``` /!\ **Note:** Install ``devscripts`` to get ``dch``. /!\ **Note:** If ``dpkg-buildpackage`` complains about unmet build dependencies you can install them using ``apt-get`` and re-run the command. /!\ **Note:** If you have ``libqgis1-dev`` installed, you need to remove it first using ``dpkg -r libqgis1-dev``. Otherwise ``dpkg-buildpackage`` will complain about a build conflict. /!\ **Note:** By default tests are run in the process of building and their results are uploaded to http://dash.orfeo-toolbox.org/index.php?project=QGIS. You can turn the tests off using DEB_BUILD_OPTIONS=nocheck in front of the build command. The upload of results can be avoided with DEB_TEST_TARGET=test. The packages are created in the parent directory (ie. one level up). Install them using dpkg. E.g.: ``` sudo debi ```