Compiling QGIS From Source

/!\ Note: Please do not edit this document directly.

/!\ Note: Please do not remove this notice.

(!) This document was generated using text2tags from INSTALL.t2t in the QGIS sources. Make your edits to that file and use t2t to regenerate in moinmoin format, then paste the procedure in below. I have instated these changes so that we can have a single central document that contains all the instructions for building QGIS. This page should always reflect the most current SVN trunk build procedure - for release versions the INSTALL document in the sources will be generated according to the current build procedure at the time.

Tim Sutton 2007

Last Updated: 7 March 2008


Quantum GIS (QGIS)

Building QGIS from source - step by step


Contents

  1. 1. Introduction
  2. 2. General Build Notes
    1. 2.1. An overview of the dependencies required for building
  3. 3. Building under windows using msys
    1. 3.1. MSYS:
    2. 3.2. Qt4.3
    3. 3.3. Flex and Bison
    4. 3.4. Python stuff: (optional)
      1. 3.4.1. Download and install Python - use Windows installer
      2. 3.4.2. Download SIP and PyQt4 sources
      3. 3.4.3. Compile SIP
      4. 3.4.4. Compile PyQt
      5. 3.4.5. Final python notes
    5. 3.5. Subversion:
    6. 3.6. CMake:
    7. 3.7. QGIS:
    8. 3.8. Compiling:
    9. 3.9. Configuration
    10. 3.10. Compilation and installation
    11. 3.11. Run qgis.exe from the directory where it's installed (CMAKE_INSTALL_PREFIX)
    12. 3.12. Create the installation package: (optional)
  4. 4. Building on Mac OSX using frameworks and cmake (QGIS > 0.8)
    1. 4.1. Install XCODE
    2. 4.2. Install Qt4 from .dmg
    3. 4.3. Install development frameworks for QGIS dependencies
      1. 4.3.1. Additional Dependencies : GSL
      2. 4.3.2. Additional Dependencies : Expat
      3. 4.3.3. Additional Dependencies : SIP
      4. 4.3.4. Additional Dependencies : PyQt
      5. 4.3.5. Additional Dependencies : Bison
    4. 4.4. Install CMAKE for OSX
    5. 4.5. Install subversion for OSX
    6. 4.6. Check out QGIS from SVN
    7. 4.7. Configure the build
    8. 4.8. Building
  5. 5. Building on GNU/Linux
    1. 5.1. Building QGIS with Qt4.x
    2. 5.2. Prepare apt
    3. 5.3. Install Qt4
    4. 5.4. Install additional software dependencies required by QGIS
    5. 5.5. GRASS Specific Steps
    6. 5.6. Setup ccache (Optional)
    7. 5.7. Prepare your development environment
    8. 5.8. Check out the QGIS Source Code
    9. 5.9. Starting the compile
    10. 5.10. Running QGIS
  6. 6. Creation of MSYS environment for compilation of Quantum GIS
    1. 6.1. Initial setup
      1. 6.1.1. MSYS
      2. 6.1.2. MinGW
      3. 6.1.3. Flex and Bison
    2. 6.2. Installing dependencies
      1. 6.2.1. Getting ready
      2. 6.2.2. GDAL level one
      3. 6.2.3. GRASS
      4. 6.2.4. GDAL level two
      5. 6.2.5. GEOS
      6. 6.2.6. SQLITE
      7. 6.2.7. GSL
      8. 6.2.8. EXPAT
      9. 6.2.9. POSTGRES
    3. 6.3. Cleanup
  7. 7. Building with MS Visual Studio
    1. 7.1. Setup Visual Studio
      1. 7.1.1. Express Edition
      2. 7.1.2. All Editions
    2. 7.2. Download/Install Dependencies
      1. 7.2.1. Flex and Bison
      2. 7.2.2. To include PostgreSQL support in Qt
      3. 7.2.3. Qt
      4. 7.2.4. Proj.4
      5. 7.2.5. GSL
      6. 7.2.6. GEOS
      7. 7.2.7. GDAL
      8. 7.2.8. PostGIS
      9. 7.2.9. Expat
      10. 7.2.10. CMake
    3. 7.3. Building QGIS with CMAKE
  8. 8. Building under Windows using MSVC Express
    1. 8.1. System preparation
    2. 8.2. Install the libraries archive
    3. 8.3. Install Visual Studio Express 2005
    4. 8.4. Install Microsoft Platform SDK2
    5. 8.5. Edit your vsvars
    6. 8.6. Environment Variables
    7. 8.7. Building Qt4.3.2
      1. 8.7.1. Compile Qt
      2. 8.7.2. Configure Visual C++ to use Qt
    8. 8.8. Install Python
    9. 8.9. Install SIP
    10. 8.10. Install PyQt4
    11. 8.11. Install CMake
    12. 8.12. Install Subversion
    13. 8.13. Initial SVN Check out
    14. 8.14. Create Makefiles using cmakesetup.exe
    15. 8.15. Running and packaging
  9. 9. Authors and Acknowledgments


1. Introduction

This document is the original installation guide of the described software Quantum GIS. The software and hardware descriptions named in this document are in most cases registered trademarks and are therefore subject to the legal requirements. Quantum GIS is subject to the GNU General Public License. Find more information on the Quantum GIS Homepage: http://www.qgis.org

The details, that are given in this document have been written and verified to the best of knowledge and responsibility of the editors. Nevertheless, mistakes concerning the content are possible. Therefore, all data are not liable to any duties or guarantees. The editors and publishers do not take any responsibility or liability for failures and their consequences. You are always welcome for indicating possible mistakes.

You can download this document as part of the Quantum GIS 'User and Installation Guide' in HTML and PDF format via http://www.qgis.org. A current version is also available at the wiki, see: http://wiki.qgis.org/qgiswiki/BuildingFromSource

Translations of this document can also be downloaded at the documentation area of the Quantum GIS project at http://www.qgis.org. More information is available via http://wiki.qgis.org/qgiswiki/DocumentationWritersCorner.

Please visit http://qgis.org for information on joining our mailing lists and getting involved in the project further.

/!\ *Note to document writers:* Please use this document as the central place for describing build procefures. Please do not remove this notice.

/!\ *Note:* This is a 'cut and paste' tutorial - in most cases you can simply copy the commands listed in codeblocks that look like this:

somecommand to be pasted 

2. General Build Notes

At version 0.8.1 QGIS no longer uses the autotools for building. QGIS, like a number of major projects (eg. KDE 4.0), now uses cmake for building from source. The configure script in this directory simply checks for the existence of cmake and provides some clues to build QGIS.

For complete information, see the wiki at:

2.1. An overview of the dependencies required for building

Required build deps:

Required runtime deps:

Optional dependencies:

Recommended runtime deps:

3. Building under windows using msys

3.1. MSYS:

MSYS provides a unix style build environment under windows. We have created a zip archive that contains just about all dependencies.

Get this:

http://qgis.org/uploadfiles/msys/msys.zip

and unpack to c:\msys

If you wish to prepare your msys environment yourself rather than using our pre-made one, detailed instructions are provided elsewhere in this document.

3.2. Qt4.3

Download qt4.3 opensource precompiled edition exe and install (including the download and install of mingw) from here:

http://www.trolltech.com/developer/downloads/qt/windows

When the installer will ask for MinGW, you don't need to download and install it, just point the installer to c:\msys\mingw

When Qt installation is complete:

Edit C:\Qt\4.3.0\bin\qtvars.bat and add the following lines:

set PATH=%PATH%;C:\msys\local\bin;c:\msys\local\lib 
set PATH=%PATH%;"C:\Program Files\Subversion\bin" 

I suggest you also add C:\Qt\4.3.0\bin\ to your Environment Variables Path in the windows system preferences.

If you plan to do some debugging, you'll need to compile debug version of Qt: C:\Qt\4.3.0\bin\qtvars.bat compile_debug

Note: there is a problem when compiling debug version of Qt 4.3, the script ends with this message "mingw32-make: *** No rule to make target `debug'. Stop.". To compile the debug version you have to go out of src directory and execute the following command:

c:\Qt\4.3.0 make 

3.3. Flex and Bison

*** Note I think this section can be removed as it should be installed int the msys image already. TS

Get Flex http://sourceforge.net/project/showfiles.php?group_id=23617&package_id=16424 (the zip bin) and extract it into c:\msys\mingw\bin

3.4. Python stuff: (optional)

Follow this section in case you would like to use Python bindings for QGIS. To be able to compile bindings, you need to compile SIP and PyQt4 from sources as their installer doesn't include some development files which are necessary.

3.4.1. Download and install Python - use Windows installer

(It doesn't matter to what folder you'll install it)

http://python.org/download/

3.4.2. Download SIP and PyQt4 sources

http://www.riverbankcomputing.com/Downloads/sip4/ http://www.riverbankcomputing.com/Downloads/PyQt4/GPL/

Extract each of the above zip files in a temporary directory. Make sure to get versions that match your current Qt installed version.

3.4.3. Compile SIP

c:\Qt\4.3.0\bin\qtvars.bat 
python configure.py -p win32-g++ 
make 
make install 

3.4.4. Compile PyQt

c:\Qt\4.3.0\bin\qtvars.bat 
python configure.py 
make 
make install 

3.4.5. Final python notes

/!\ You can delete the directories with unpacked SIP and PyQt4 sources after a successfull install, they're not needed anymore.

3.5. Subversion:

In order to check out QGIS sources from the repository, you need Subversion client. This installer should work fine:

http://subversion.tigris.org/files/documents/15/36797/svn-1.4.3-setup.exe

3.6. CMake:

CMake is build system used by Quantum GIS. Download it from here:

http://www.cmake.org/files/v2.4/cmake-2.4.6-win32-x86.exe

3.7. QGIS:

Start a cmd.exe window ( Start -> Run -> cmd.exe ) Create development directory and move into it

md c:\dev\cpp 
cd c:\dev\cpp 

Check out sources from SVN For svn head:

svn co https://svn.osgeo.org/qgis/trunk/qgis 

For svn 0.8 branch

 svn co https://svn.osgeo.org/qgis/branches/Release-0_8_0 qgis0.8

3.8. Compiling:

As a background read the generic building with CMake notes at the end of this document.

Start a cmd.exe window ( Start -> Run -> cmd.exe ) if you don't have one already. Add paths to compiler and our MSYS environment:

c:\Qt\4.3.0\bin\qtvars.bat 

For ease of use add c:\Qt\4.3.0\bin\ to your system path in system properties so you can just type qtvars.bat when you open the cmd console. Create build directory and set it as current directory:

cd c:\dev\cpp\qgis 
md build 
cd build 

3.9. Configuration

cmakesetup ..  

/!\ NOTE: You must include the '..' above.

Click 'Configure' button. When asked, you should choose 'MinGW Makefiles' as generator.

There's a problem with MinGW Makefiles on Win2K. If you're compiling on this platform, use 'MSYS Makefiles' generator instead.

All dependencies should be picked up automatically, if you have set up the Paths correctly. The only thing you need to change is the installation destination (CMAKE_INSTALL_PREFIX) and/or set 'Debug'.

For compatibility with NSIS packaging cripts I recommend to leave the install prefix to its default c:\program files\

When configuration is done, click 'OK' to exit the setup utility.

3.10. Compilation and installation

 make make install 

3.11. Run qgis.exe from the directory where it's installed (CMAKE_INSTALL_PREFIX)

Make sure to copy all .dll:s needed to the same directory as the qgis.exe binary is installed to, if not already done so, otherwise QGIS will complain about missing libraries when started.

The best way to do this is to download both the QGIS current release installer package from http://qgis.org/uploadfiles/testbuilds/ and install it. Now copy the installation dir from C:\Program Files\Quantum GIS into c:\Program Files\qgis-0.8.1 (or whatever the current version is. The name should strictly match the version no.) After making this copy you can uninstall the release version of QGIS from your c:\Program Files directory using the provided uninstaller. Double check that the Quantum GIS dir is completely gone under program files afterwards.

Another possibility is to run qgis.exe when your path contains c:\msys\local\bin and c:\msys\local\lib directories, so the DLLs will be used from that place.

3.12. Create the installation package: (optional)

Downlad and install NSIS from (http://nsis.sourceforge.net/Main_Page)

Now using windows explorer, enter the win_build directory in your QGIS source tree. Read the READMEfile there and follow the instructions. Next right click on qgis.nsi and choose the option 'Compile NSIS Script'.

4. Building on Mac OSX using frameworks and cmake (QGIS > 0.8)

In this approach I will try to avoid as much as possible building dependencies from source and rather use frameworks wherever possible.

Included are a few notes for building on Mac OS X 10.5 (Leopard).

4.1. Install XCODE

I recommend to get the latest xcode dmg from the Apple XDC Web site. Install XCODE after the ~941mb download is complete.

4.2. Install Qt4 from .dmg

You need a minimum of Qt4.2. I suggest getting the latest (at time of writing).

ftp://ftp.trolltech.com/qt/source/qt-mac-opensource-4.3.2.dmg

If you want debug libs, Qt also provide a dmg with these:

ftp://ftp.trolltech.com/qt/source/qt-mac-opensource-4.3.2-debug-libs.dmg

I am going to proceed using only release libs at this stage as the download for the debug dmg is substantially bigger. If you plan to do any debugging though you probably want to get the debug libs dmg. Once downloaded open the dmg and run the installer. Note you need admin access to install.

After installing you need to make two small changes:

First edit /Library/Frameworks/QtCore.framework/Headers/qconfig.h and change

/!\ Note this doesnt seem to be needed since version 4.2.3

QT_EDITION_UNKNOWN to QT_EDITION_OPENSOURCE

Second change the default mkspec symlink so that it points to macx-g++:

cd /usr/local/Qt4.3/mkspecs/ sudo rm default sudo ln -sf macx-g++ default

4.3. Install development frameworks for QGIS dependencies

Download William Kyngesburye's excellent all in one framework that includes proj, gdal, sqlite3 etc

http://www.kyngchaos.com/wiki/software:frameworks

Once downloaded, open and install the frameworks.

William provides an additional installer package for Postgresql/PostGIS. Its available here:

http://www.kyngchaos.com/wiki/software:postgres 

There are some additional dependencies that at the time of writing are not provided as frameworks so we will need to build these from source.

4.3.1. Additional Dependencies : GSL

Retrieve the Gnu Scientific Library from

curl -O ftp://ftp.gnu.org/gnu/gsl/gsl-1.8.tar.gz 

Then extract it and build it to a prefix of /usr/local:

tar xvfz gsl-1.8.tar.gz 
cd gsl-1.8 
./configure --prefix=/usr/local 
make
sudo make install
cd ..  

4.3.2. Additional Dependencies : Expat

Get the expat sources:

http://sourceforge.net/project/showfiles.php?group_id=10127 

tar xvfz expat-2.0.0.tar.gz 
cd expat-2.0.0 
./configure --prefix=/usr/local
make 
sudo make install 
cd ..  

4.3.3. Additional Dependencies : SIP

Make sure you have the latest Python fom

http://www.python.org/download/mac/

Leopard note: Leopard includes a usable Python 2.5. Though you can install Python from python.org if preferred.

Retrieve the python bindings toolkit SIP from

http://www.riverbankcomputing.com/Downloads/sip4/

Then extract and build it (this installs by default into the Python framework):

tar xvfz sip-<version number>.tar.gz 
cd sip-<version number>
python configure.py 
make 
sudo make install 
cd ..  

Leopard notes

If building on Leopard, using Leopard's bundled Python, SIP wants to install in the system path -- this is not a good idea. Use this configure command instead of the basic configure above:

python configure.py -d /Library/Python/2.5/site-packages -b /usr/local/bin -e /usr/local/include -v /usr/local/share/sip

4.3.4. Additional Dependencies : PyQt

If you encounter problems compiling PyQt using the instructions below you can also try adding python from your frameworks dir explicitly to your path e.g.

export PATH=/Library/Frameworks/Python.framework/Versions/Current/bin:$PATH$

Retrieve the python bindings toolkit for Qt from

http://www.riverbankcomputing.com/Downloads/PyQt4/GPL/

Then extract and build it (this installs by default into the Python framework):

tar xvfz PyQt-mac<version number here>
cd PyQt-mac<version number here>
export QTDIR=/Developer/Applications/Qt
python configure.py 
yes 
make 
sudo make install 
cd ..  

Leopard notes

If building on Leopard, using Leopard's bundled Python, PyQt wants to install in the system path -- this is not a good idea. Use this configure command instead of the basic configure above:

python configure.py -d /Library/Python/2.5/site-packages -b /usr/local/bin

There may be a problem with undefined symbols in QtOpenGL on Leopard. Edit QtOpenGL/makefile and add -undefined dynamic_lookup to LFLAGS.

4.3.5. Additional Dependencies : Bison

Leopard note: Leopard includes Bison 2.3, so this step can be skipped on Leopard.

The version of bison available by default on Mac OSX is too old so you need to get a more recent one on your system. Download if from:

curl -O http://ftp.gnu.org/gnu/bison/bison-2.3.tar.gz 

Now build and install it to a prefix of /usr/local :

tar xvfz bison-2.3.tar.gz 
cd bison-2.3 
./configure --prefix=/usr/local 
make
sudo make install 
cd ..  

4.4. Install CMAKE for OSX

Get the latest release from here:

http://www.cmake.org/HTML/Download.html 

At the time of writing the file I grabbed was:

curl -O http://www.cmake.org/files/v2.4/cmake-2.4.6-Darwin-universal.dmg

Once downloaded open the dmg and run the installer

4.5. Install subversion for OSX

Leopard note: Leopard includes SVN, so this step can be skipped on Leopard.

The [MacSVN http://sourceforge.net/projects/macsvn/] project has a downloadable build of svn. If you are a GUI inclined person you may want to grab their gui client too. Get the command line client here:

curl -O http://ufpr.dl.sourceforge.net/sourceforge/macsvn/Subversion_1.4.2.zip 

Once downloaded open the zip file and run the installer.

You also need to install BerkleyDB available from the same [website http://sourceforge.net/projects/macsvn/]. At the time of writing the file was here:

curl -O http://ufpr.dl.sourceforge.net/sourceforge/macsvn/Berkeley_DB_4.5.20.zip 

Once again unzip this and run the installer therein.

Lastly we need to ensure that the svn commandline executeable is in the path. Add the following line to the end of /etc/bashrc using sudo:

sudo vim /etc/bashrc 

And add this line to the bottom before saving and quiting:

export PATH=/usr/local/bin:$PATH:/usr/local/pgsql/bin 

/usr/local/bin needs to be first in the path so that the newer bison (that will be built from source further down) is found before the bison (which is very old) that is installed by MacOSX

Now close and reopen your shell to get the updated vars.

4.6. Check out QGIS from SVN

Now we are going to check out the sources for QGIS. First we will create a directory for working in:

mkdir -p ~/dev/cpp cd ~/dev/cpp 

Now we check out the sources:

Trunk:

svn co https://svn.osgeo.org/qgis/trunk/qgis qgis 

For svn 0.8 branch

svn co https://svn.osgeo.org/qgis/branches/Release-0_8_0 qgis0.8

For svn 0.9 branch

svn co https://svn.qgis.org/qgis/branches/Release-0_9_0 qgis0.9

The first time you check out QGIS sources you will probably get a message like this:

 Error validating server certificate for 'https://svn.qgis.org:443':
 - The certificate is not issued by a trusted authority. Use the fingerprint to
   validate the certificate manually!  Certificate information:
 - Hostname: svn.qgis.org
 - Valid: from Apr  1 00:30:47 2006 GMT until Mar 21 00:30:47 2008 GMT
 - Issuer: Developer Team, Quantum GIS, Anchorage, Alaska, US
 - Fingerprint: 2f:cd:f1:5a:c7:64:da:2b:d1:34:a5:20:c6:15:67:28:33:ea:7a:9b
   (R)eject, accept (t)emporarily or accept (p)ermanently?  

I suggest you press 'p' to accept the key permanently.

4.7. Configure the build

CMake supports out of source build so we will create a 'build' dir for the build process . By convention I build my software into a dir called 'apps' in my home directory. If you have the correct permissions you may want to build straight into your /Applications folder. The instructions below assume you are building into a pre-existing ${HOME}/apps directory ...

cd qgis
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=$HOME/apps/ -D CMAKE_BUILD_TYPE=Release ..

Leopard note: To find the custom install of SIP on Leopard, add ""- D SIP_BINARY_PATH=/usr/local/bin/sip"" to the cmake command above, before the .. at the end, ie:

cmake -D CMAKE_INSTALL_PREFIX=$HOME/apps/ -D CMAKE_BUILD_TYPE=Release -
D SIP_BINARY_PATH=/usr/local/bin/sip ..

To use the application build of GRASS on OSX, you can optionally use the following cmake invocation (minimum GRASS 6.3 required, substitute the GRASS version as required):

cmake -D CMAKE_INSTALL_PREFIX=${HOME}/apps/ \
      -D GRASS_INCLUDE_DIR=/Applications/GRASS-6.3.app/Contents/MacOS/
      include \
      -D GRASS_PREFIX=/Applications/GRASS-6.3.app/Contents/MacOS \
      -D CMAKE_BUILD_TYPE=Release \
      ..

Or, to use a Unix-style build of GRASS, use the following cmake invocation (minimum GRASS version as stated in the Qgis requirements, substitute the GRASS path and version as required):

cmake -D CMAKE_INSTALL_PREFIX=${HOME}/apps/ \
  -D GRASS_INCLUDE_DIR=/user/local/grass-6.3.0/include \
  -D GRASS_PREFIX=/user/local/grass-6.3.0 \
  -D CMAKE_BUILD_TYPE=Release \
  ..

4.8. Building

Now we can start the build process:

make 

If all built without errors you can then install it:

make install 

5. Building on GNU/Linux

5.1. Building QGIS with Qt4.x

Requires: Ubuntu Gutsy / Debian derived distro

These notes are current for Ubuntu 7.10 - 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.

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

1. Edit your /etc/apt/sources.list file. 2. Uncomment the all the lines starting with "deb"

Also you will need to be running (K)Ubuntu 'edgy' or higher in order for all dependencies to be met.

Now update your local sources database:

sudo apt-get update 

5.3. Install Qt4

sudo apt-get install libqt4-core libqt4-debug  \
libqt4-dev libqt4-gui libqt4-qt3support libqt4-sql lsb-qt4 qt4-designer \
qt4-dev-tools qt4-doc qt4-qtconfig uim-qt gcc libapt-pkg-perl resolvconf

/!\ *A Special Note:* If you are following this set of instructions on a system where you already have Qt3 development tools installed, there will be a conflict between Qt3 tools and Qt4 tools. For example, qmake will point to the Qt3 version not the Qt4. Ubuntu Qt4 and Qt3 packages are designed to live alongside each other. This means that for example if you have them both installed you will have three qmake exe's:

/usr/bin/qmake -> /etc/alternatives/qmake 
/usr/bin/qmake-qt3
/usr/bin/qmake-qt4 

The same applies to all other Qt binaries. You will notice above that the canonical 'qmake' is managed by apt alternatives, so before we start to build QGIS, we need to make Qt4 the default. To return Qt3 to default later you can use this same process.

You can use apt alternatives to correct this so that the Qt4 version of applications is used in all cases:

sudo update-alternatives --config qmake
sudo update-alternatives --config uic 
sudo update-alternatives --config designer 
sudo update-alternatives --config assistant 
sudo update-alternatives --config qtconfig 
sudo update-alternatives --config moc 
sudo update-alternatives --config lupdate 
sudo update-alternatives --config lrelease 
sudo update-alternatives --config linguist 

Use the simple command line dialog that appears after running each of the above commands to select the Qt4 version of the relevant applications.

5.4. Install additional software dependencies required by QGIS

sudo apt-get install gdal-bin libgdal1-dev libgeos-dev proj \
libgdal-doc libhdf4g-dev libhdf4g-run python-dev \
libgsl0-dev g++ libjasper-dev libtiff4-dev subversion \
libsqlite3-dev sqlite3 ccache make libpq-dev flex bison cmake txt2tags \
python-qt4 python-qt4-dev python-sip4 sip4 python-sip4-dev

/!\ Debian users should use libgdal-dev above rather

/!\ *Note:* For python language bindings SIP >= 4.5 and PyQt4 >= 4.1 is required! Some stable GNU/Linux distributions (e.g. Debian or SuSE) only provide SIP < 4.5 and PyQt4 < 4.1. To include support for python language bindings you may need to build and install those packages from source.

5.5. GRASS Specific Steps

/!\ *Note:* If you don't need to build with GRASS support, you can skip this section.

Now you can install grass from dapper:

sudo apt-get install grass libgrass-dev libgdal-1.4.0-grass 

/!\ You may need to explicitly state your grass version e.g. libgdal1-1.3.2-grass

5.6. 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++ 

5.7. Prepare your development environment

As a convention I do all my development work in $HOME/dev/<language>, 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.

5.8. 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 privaleges for the QGIS source repository, or use

1. Anonymous Checkout

cd ${HOME}/dev/cpp 
svn co https://svn.osgeo.org/qgis/trunk/qgis qgis

2. Developer Checkout

cd ${HOME}/dev/cpp 
svn co --username <yourusername> https://svn.osgeo.org/qgis/trunk/qgis qgis 

The first time you check out the source you will be prompted to accept the qgis.org certificate. Press 'p' to accept it permanently:

Error validating server certificate for 'https://svn.qgis.org:443':
   - The certificate is not issued by a trusted authority. Use the
     fingerprint to validate the certificate manually!  Certificate
     information:
   - Hostname: svn.qgis.org
   - Valid: from Apr  1 00:30:47 2006 GMT until Mar 21 00:30:47 2008 GMT
   - Issuer: Developer Team, Quantum GIS, Anchorage, Alaska, US
   - Fingerprint:
     2f:cd:f1:5a:c7:64:da:2b:d1:34:a5:20:c6:15:67:28:33:ea:7a:9b (R)eject,
     accept (t)emporarily or accept (p)ermanently?  

5.9. 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
cd build
ccmake ..

When you run ccmake (note the .. is required!), a menu will appear where you can configure various aspects of the build. If you do not have root access or do not want to overwrite existing QGIS installs (by your packagemanager for example), set the CMAKE_BUILD_PREFIX to somewhere you have write access to (I usually use /home/timlinux/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.

5.10. Running QGIS

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

6. Creation of MSYS environment for compilation of Quantum GIS

6.1. Initial setup

6.1.1. MSYS

This is the environment that supplies many utilities from UNIX world in Windows and is needed by many dependencies to be able to compile.

Download from here:

Install to c:\msys

All stuff we're going to compile is going to get to this directory (resp. its subdirs).

6.1.2. MinGW

Download from here:

Install to c:\msys\mingw

It suffices to download and install only g++ and mingw-make components.

6.1.3. Flex and Bison

Flex and Bison are tools for generation of parsers, they're needed for GRASS and also QGIS compilation.

Download the following packages:

Unpack them all to c:\msys\local

6.2. Installing dependencies

6.2.1. Getting ready

Paul Kelly did a great job and prepared a package of precompiled libraries for GRASS. The package currently includes:

It's available for download here:

Moreover he also left the notes how to compile it (for those interested):

Unpack the whole package to c:\msys\local

6.2.2. GDAL level one

Since Quantum GIS needs GDAL with GRASS support, we need to compile GDAL from source - Paul Kelly's package doesn't include GRASS support in GDAL. The idea is following:

  1. compile GDAL without GRASS
  2. compile GRASS
  3. compile GDAL with GRASS

So, start with downloading GDAL sources:

Unpack it to some directory, preferably c:\msys\local\src.

Start MSYS console, go to gdal-1.4.1 directory and run the commands below. You can put them all to a script, e.g. build-gdal.sh and run them at once. The recipe is taken from Paul Kelly's instructions - basically they just make sure that the library will be created as DLL and the utility programs will be dynamically linked to it...

CFLAGS="-O2 -s" CXXFLAGS="-O2 -s" LDFLAGS=-s ./configure --without-libtool --prefix=/usr/local --enable-shared --disable-static --with-libz=/usr/local --with-png=/usr/local
make
make install
rm /usr/local/lib/libgdal.a
g++ -s -shared -o ./libgdal.dll -L/usr/local/lib -lz -lpng ./frmts/o/*.o ./gcore/*.o ./port/*.o ./alg/*.o ./ogr/ogrsf_frmts/o/*.o ./ogr/ogrgeometryfactory.o ./ogr/ogrpoint.o ./ogr/ogrcurve.o ./ogr/ogrlinestring.o ./ogr/ogrlinearring.o ./ogr/ogrpolygon.o ./ogr/ogrutils.o ./ogr/ogrgeometry.o ./ogr/ogrgeometrycollection.o ./ogr/ogrmultipolygon.o ./ogr/ogrsurface.o ./ogr/ogrmultipoint.o ./ogr/ogrmultilinestring.o ./ogr/ogr_api.o ./ogr/ogrfeature.o ./ogr/ogrfeaturedefn.o ./ogr/ogrfeaturequery.o ./ogr/ogrfeaturestyle.o ./ogr/ogrfielddefn.o ./ogr/ogrspatialreference.o ./ogr/ogr_srsnode.o ./ogr/ogr_srs_proj4.o ./ogr/ogr_fromepsg.o ./ogr/ogrct.o ./ogr/ogr_opt.o ./ogr/ogr_srs_esri.o ./ogr/ogr_srs_pci.o ./ogr/ogr_srs_usgs.o ./ogr/ogr_srs_dict.o ./ogr/ogr_srs_panorama.o ./ogr/swq.o ./ogr/ogr_srs_validate.o ./ogr/ogr_srs_xml.o ./ogr/ograssemblepolygon.o ./ogr/ogr2gmlgeometry.o ./ogr/gml2ogrgeometry.o
install libgdal.dll /usr/local/lib
cd ogr
g++ -s ogrinfo.o -o ogrinfo.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s ogr2ogr.o -o ogr2ogr.exe -lgdal -L/usr/local/lib -lpng -lz -lgdal
g++ -s ogrtindex.o -o ogrtindex.exe -lgdal -L/usr/local/lib -lpng -lz -lgdal
install ogrinfo.exe ogr2ogr.exe ogrtindex.exe /usr/local/bin
cd ../apps
g++ -s gdalinfo.o -o gdalinfo.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s gdal_translate.o -o gdal_translate.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s gdaladdo.o -o gdaladdo.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s gdalwarp.o -o gdalwarp.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s gdal_contour.o -o gdal_contour.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s gdaltindex.o -o gdaltindex.exe -L/usr/local/lib -lpng -lz -lgdal
g++ -s gdal_rasterize.o -o gdal_rasterize.exe -L/usr/local/lib -lpng -lz -lgdal
install gdalinfo.exe gdal_translate.exe gdaladdo.exe gdalwarp.exe gdal_contour.exe gdaltindex.exe gdal_rasterize.exe /usr/local/bin

Finally, manually edit gdal-config in c:\msys\local\bin to replace the static library reference with -lgdal:

CONFIG_LIBS="-L/usr/local/lib -lpng -lz -lgdal"

GDAL build procedure can be greatly simplified to use libtool with a libtool line patch: configure gdal as below: ./configure --with-ngpython --with-xerces=/local/ --with-jasper=/local/ --with-grass=/local/grass-6.3.cvs/ --with-pg=/local/pgsql/bin/pg_config.exe

Then fix libtool with: mv libtool libtool.orig cat libtool.orig | sed 's/max_cmd_len=8192/max_cmd_len=32768/g' > libtool

Libtool on windows assumes a line length limit of 8192 for some reason and tries to page the linking and fails miserably. This is a work around.

Make and make install should be hassle free after this.

6.2.3. GRASS

Grab sources from CVS or use a weekly snapshot, see:

In MSYS console go to the directory where you've unpacked or checked out sources (e.g. c:\msys\local\src\grass-6.3.cvs)

Run these commands:

export PATH="/usr/local/bin:/usr/local/lib:$PATH"
./configure --prefix=/usr/local --bindir=/usr/local --with-includes=/usr/local/include --with-libs=/usr/local/lib --with-cxx --without-jpeg --without-tiff --with-postgres=yes --with-postgres-includes=/local/pgsql/include --with-pgsql-libs=/local/pgsql/lib --with-opengl=windows --with-fftw --with-freetype --with-freetype-includes=/mingw/include/freetype2 --without-x --without-tcltk --enable-x11=no --enable-shared=yes --with-proj-share=/usr/local/share/proj
make
make install

It should get installed to c:\msys\local\grass-6.3.cvs

By the way, these pages might be useful:

6.2.4. GDAL level two

At this stage, we'll use GDAL sources we've used before, only the compilation will be a bit different.

But first in order to be able to compile GDAL sources with current GRASS CVS, you need to patch them, here's what you need to change:

(you can patch it by hand or use patch.exe in c:\msys\bin)

Now in MSYS console go to the GDAL sources directory and run the same commands as in level one, only with these differences:

  1. when running ./configure add this argument: --with-grass=/usr/local/grass-6.3.cvs

  2. when calling g++ on line 5 (which creates libgdal.dll), add these arguments: -L/usr/local/grass-6.3.cvs/lib -lgrass_vect -lgrass_dig2 -lgrass_dgl -lgrass_rtree -lgrass_linkm -lgrass_dbmiclient -lgrass_dbmibase -lgrass_I -lgrass_gproj -lgrass_vask -lgrass_gmath -lgrass_gis -lgrass_datetime

Then again, edit gdal-config and change line with CONFIG_LIBS

CONFIG_LIBS="-L/usr/local/lib -lpng -L/usr/local/grass-6.3.cvs/lib -lgrass_vect -lgrass_dig2 -lgrass_dgl -lgrass_rtree -lgrass_linkm -lgrass_dbmiclient -lgrass_dbmibase -lgrass_I -lgrass_gproj -lgrass_vask -lgrass_gmath -lgrass_gis -lgrass_datetime -lz -L/usr/local/lib -lgdal" 

Now, GDAL should be able to work also with GRASS raster layers.

6.2.5. GEOS

Download the sources:

Unpack to e.g. c:\msys\local\src

To compile, I had to patch the sources: in file source/headers/timeval.h line 13. Change it from:

#ifdef _WIN32

to:

#if defined(_WIN32) && defined(_MSC_VER)

Now, in MSYS console, go to the source directory and run:

./configure --prefix=/usr/local
make
make install

6.2.6. SQLITE

You can use precompiled DLL, no need to compile from source:

Download this archive:

and copy sqlite3.dll from it to c:\msys\local\lib

Then download this archive:

and copy sqlite3.h to c:\msys\local\include

6.2.7. GSL

Download sources:

Unpack to c:\msys\local\src

Run from MSYS console in the source directory:

./configure
make
make install

6.2.8. EXPAT

Download sources:

Unpack to c:\msys\local\src

Run from MSYS console in the source directory:

./configure
make
make install

6.2.9. POSTGRES

We're going to use precompiled binaries. Use the link below for download:

copy contents of pgsql directory from the archive to c:\msys\local

6.3. Cleanup

We're done with preparation of MSYS environment. Now you can delete all stuff in c:\msys\local\src - it takes quite a lot of space and it's not necessary at all.

7. Building with MS Visual Studio

/!\ This section describes a process where you build all dependencies yourself. See the section after this for a simpler procedure where we have all the dependencies you need pre-packaged and we focus just on getting Visual Studio Express set up and building QGIS.

Note that this does not currently include GRASS or Python plugins.

7.1. Setup Visual Studio

This section describes the setup required to allow Visual Studio to be used to build QGIS.

7.1.1. Express Edition

The free Express Edition lacks the platform SDK which contains headers and so on that are needed when building QGIS. The platform SDK can be installed as described here:

Once this is done, you will need to edit the <vsinstalldir>\Common7\Tools\vsvars file as follows:

This will add more headers to the system INCLUDE path. Note that this will only work when you use the Visual Studio command prompt when building. Most of the dependencies will be built with this. You will also need to perform the edits described here to remove the need for a library that Visual Studio Express lacks:

7.1.2. All Editions

You will need stdint.h and unistd.h. unistd.h comes with GnuWin32 version of flex & bison binaries (see later). stdint.h can be found here:

Copy both of these to <vsinstalldir>\VC\include.

7.2. Download/Install Dependencies

This section describes the downloading and installation of the various QGIS dependencies.

7.2.1. Flex and Bison

Flex and Bison are tools for generation of parsers, they're needed for GRASS and also QGIS compilation.

Download the following packages and run the installers:

7.2.2. To include PostgreSQL support in Qt

If you want to build Qt with PostgreSQL support you need to download PostgreSQL, install it and create a library you can later link with Qt.

Download from .../binary/v8.2.5/win32/postgresql-8.2.5-1.zip from an PostgreSQL.org Mirror and install.

PostgreSQL is currently build with MinGW and comes with headers and libraries for MinGW. The headers can be used with Visual C++ out of the box, but the library is only shipped in DLL and archive (.a) form and therefore cannot be used with Visual C++ directly.

To create a library copy following sed script to the file mkdef.sed in PostgreSQL lib directory:

/Dump of file / {
        s/Dump of file \([^      ]*\)$/LIBRARY \1/p
        a\
EXPORTS
}
/[      ]*ordinal hint/,/^[     ]*Summary/ {
 /^[    ]\+[0-9]\+/ {
   s/^[         ]\+[0-9]\+[     ]\+[0-9A-Fa-f]\+[       ]\+[0-9A-Fa-f]\+[       ]\+\([^         =]\+\).*$/      \1/p
 }
}

and process execute in the Visual Studio C++ command line (from Programs menu):

cd c:\Program Files\PostgreSQL\8.2\bin
dumpbin /exports ..\bin\libpq.dll | sed -nf ../lib/mkdef.sed >..\lib\libpq.def
cd ..\lib
lib /def:libpq.def /machine:x86

You'll need an sed for that to work in your path (e.g. from cygwin or msys).

That's almost it. You only need to the include and lib path to INCLUDE and LIB in vcvars.bat respectively.

7.2.3. Qt

Build Qt following the instructions here:

7.2.4. Proj.4

Get proj.4 source from here:

Using the Visual Studio command prompt (ensures the environment is setup properly), run the following in the src directory:

nmake -f makefile.vc

Install by running the following in the top level directory setting PROJ_DIR as appropriate:

set PROJ_DIR=c:\lib\proj

mkdir %PROJ_DIR%\bin
mkdir %PROJ_DIR%\include
mkdir %PROJ_DIR%\lib

copy src\*.dll %PROJ_DIR%\bin
copy src\*.exe %PROJ_DIR%\bin
copy src\*.h %PROJ_DIR%\include
copy src\*.lib %PROJ_DIR%\lib 

This can also be added to a batch file.

7.2.5. GSL

Get gsl source from here:

Build using the gsl.sln file

7.2.6. GEOS

Get geos from svn (svn checkout http://svn.refractions.net/geos/trunk geos). Edit geos\source\makefile.vc as follows:

Uncomment lines 333 and 334 to allow the copying of version.h.vc to version.h.

Uncomment lines 338 and 339.

Rename geos_c.h.vc to geos_c.h.in on lines 338 and 339 to allow the copying of geos_c.h.in to geos_c.h.

Using the Visual Studio command prompt (ensures the environment is setup properly), run the following in the top level directory:

nmake -f makefile.vc 

Run the following in top level directory, setting GEOS_DIR as appropriate:

set GEOS_DIR="c:\lib\geos"

mkdir %GEOS_DIR%\include
mkdir %GEOS_DIR%\lib
mkdir %GEOS_DIR%\bin

xcopy /S/Y source\headers\*.h %GEOS_DIR%\include
copy /Y capi\*.h %GEOS_DIR%\include
copy /Y source\*.lib %GEOS_DIR%\lib
copy /Y source\*.dll %GEOS_DIR%\bin

This can also be added to a batch file.

7.2.7. GDAL

Get gdal from svn (svn checkout https://svn.osgeo.org/gdal/branches/1.4/gdal gdal).

Edit nmake.opt to suit, it's pretty well commented.

Using the Visual Studio command prompt (ensures the environment is setup properly), run the following in the top level directory: