If you have problems with the compilation, please ask on the appropriate RawTherapee forum : http://www.rawtherapee.com/forum/viewforum.php?f=10 Preamble -------- CMake is actually used to create the makefiles (scripts that handle the build process) or specific Integrated Developement Environement (IDE) projects. It is designed to find all necessary compilation flags for your specific machine, but everything can be overriden. RawTherapee's build mechanism will generate a build information file, named "AboutThisBuild.txt", and require some parameters that can't be set by CMake, so it's done in our build script, and may be overridden at your own will. The build process also enables some sort of cross-compiling, since you can only choose a specific processor variation of the same type (e.g. core2, athlon64, which are both an x86 architecture). Real cross-compiling (e.g. building the Windows version on a Linux platform) has not been tested. By default, no processor is specified, so CMake/GCC will build RT for your machine's processor. You can specify that the build is to be made for a generic processor by using the -DPROC_TARGET_NUMBER="1" CMake option. Developers who are providing builds for download from the RawTherapee website have to set the processor label (a human-readable description of the processor, set to "undefined" by default) manually with the -DPROC_LABEL="foo" CMake parameter. Note for developers that handle an automated build system: Mercurial is required in order to produce the build information file, but your build system will certainly only use the source code without any access to a Mercurial repository. To generate the needed information, run the sript ./tools/generateReleaseInfo. After that you can delete .hg* and continue with the normal compile instructions without the need for mercurial. In short, once you cd into your clone of the RawTherapee source code repository: 1. Check out the desired hg tag: hg update "4.0.10" 2. Run tools/generateReleaseInfo to generate ReleaseInfo.cmake: ./tools/generateReleaseInfo 3. Delete the mercurial stuff: rm -rvf .hg* 4. The repository is now ready to be made into a public tarball: hg archive "rawtherapee-4.0.10.tar" -X ".hg*" && xz -z -9e -T 8 "rawtherapee-4.0.10.tar" Windows ------- The toolchain: There are two methods of compiling RawTherapee in Windows, and they each rely on different and common packages. They will be referred to as METHOD 1 and METHOD 2. You will have to install the dependencies for the build methods explained later in this document. The rest of this document assumes that you've installed MinGW, MSYS and gtkmm respectively to "C:\mingw", "C:\msys" and "C:\gtkmm". This tutorial assume that you've installed the packages in paths that DO NOT CONTAIN SPACES. METHOD 1 - MinGW64-TDM (Bundle or On-Demand installer from http://tdm-gcc.tdragon.net/download) Make sure you use the current 4.6.1 or newer stable version, and install MinGW64 (not MinGW32), as MinGW64 is more comprehensive plus it runs AND compiles for both 32bit and 64bit Windows machines. Old Mingw32 versions miss some required header files, so some Windows functions will be disabled though it will compile. However MinGW64 does not fully support Windows XP, only Vista and up. - MSYS - http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe If you have some trouble installing MSYS, see here: http://www.mingw.org/wiki/MSYS - CMake - http://www.cmake.org/cmake/resources/software.html Version 2.8.8 or above is required for this platform - Gtkmm2.22 - for 32bit: http://ftp.se.debian.org/pub/gnome/binaries/win32/gtkmm/2.22/ - for 64bit: http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/ METHOD 2 - MinGW-TDM - Bundle or On-Demand installer http://tdm-gcc.tdragon.net/download - CMake - http://www.cmake.org/cmake/resources/software.html - gtkmm-2.22 - for 32bit: http://ftp.se.debian.org/pub/gnome/binaries/win32/gtkmm/2.22/ - for 64bit: http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/ Additional steps: When all the packages of your preferred method are installed: - set the GTKMM_BASEPATH user or system environment variable to the installation directory of gtkmm (the gtkmm installer can do it for you). - set the MINGW_BASEPATH user or system environment variable to the installation directory of MinGW32. - set the PKG_CONFIG_PATH user or system environment variable to the location of the pkgconfig directories: c:\mingw\lib\pkgconfig;c:\gtkmm\lib\pkgconfig You have to restart the console to take these new variables into effect. - set the CMake option BUILD_BUNDLE ON - If you run MinGW64 and want to compile for 32bit, change the following vars in CMake (use CMAKE-GUI to makes this easier): CMAKE_CXX_FLAGS,CMAKE_C_FLAGS,CMAKE_SHARED_LINKER_FLAGS: -m32 CMAKE_EXE_LINKER_FLAGS: -m32 --large-address-aware CMAKE_RC_FLAGS: -F pe-i386 - Copy the "Win32CMakeOptions-sample.txt" file located in the root directory of RT's source tree, to "cmo.txt" (for example). You can edit that copy to change the compilation flags to your needs, but the default values should be fine. However, if you want to upload a build, you should set some additional information about your processor. There are two possibilities: 1. You pick up a target processor from "ProcessorTargets.cmake". All you have to do is set the PROC_TARGET_NUMBER parameter in cmo.txt to the desired target number. If you choose the 'native' solution, you have to set the processor label manually in cmo.txt by uncommenting and setting the PROC_LABEL parameter. Please provide a short name, like "core i5" or "athlon64" (without double quotes). Processor frequency is of no use. 2. You don't need specific processor flags, so you'll let PROC_TARGET_NUMBER default to 0, but you have to set the PROC_LABEL parameter in cmo.txt (don't forget to uncomment the line). Please provide a short name, like "core i5" or "athlon64" (without double quotes). Specifying the processor frequency isof no use. Dependancies: RawTherapee relies on libraries that may not be part of the gtkmm or MinGW packages. There are two ways of installing these libraries. The simple way: For your convenience, these libraries has been precompiled and are downloadable at: http://www.rawtherapee.com/releases_head/windows/dependencies_for_creating_builds/ If you don't find a suitable package for your toolchain, take the DIY way or ask a developer to build them for you. Unpack the contents of this archive to the base installation dir of MinGW, and everything should work fine. The "Do It Yourself" way: The MSYS package is required to build the libraries. See above for the download link. Before building them, check if they are already installed in your gtkmm and MinGW directories. There shouldn't be two versions of the same library in different places. Open an MSYS console, that will create a Linux environment, and compile the dependancies in the following order: zlib: If you have Gtkmm-2.22 installed, you should skip this zlib section. - Download: http://zlib.net/ - How to build: cd to the directory you unpacked zlib-1.2.5 to, make -f win32/Makefile.gcc Then, manually copy the files as follows (tip: you can individually copy the lines below and paste them in MSYS' prompt with the middle mouse button): cp -iv zlib1.dll /mingw/bin cp -iv zconf.h zlib.h /mingw/include cp -iv libz.a /mingw/lib cp -iv libzdll.a /mingw/lib/libz.dll.a libpng: If you have gtkmm-2.22 installed, you should skip this libpng section. - Download: http://sourceforge.net/projects/libpng/files/ - How to build: cd to the directory you unpacked lpng144 to. There are two methods of building libpng: 1. gtkmm doesn't provide zlib so compile it yourself: cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX:PATH=/mingw -DCMAKE_BUILD_TYPE:STRING=Release 2. gtkmm provides zlib so you can reuse it (assuming that you hadn't compiled zlib as explained above): cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX:PATH=/mingw -DCMAKE_PREFIX_PATH:PATH=C:/gtkmm -DCMAKE_BUILD_TYPE:STRING=Release Then build and install: make make install libjpeg: - Download: http://www.ijg.org/ - How to build: cd to the directory you unpacked jpeg-8b to. ./configure --prefix=/mingw Copy jconfig.txt to jconfig.h (overwrite the existing file). make make install libtiff: - Download: ftp://ftp.remotesensing.org/pub/libtiff/ - How to build: In the configure process below, set the zlib include and lib path to the right folder. We're assuming that you're using the one provided in the gtkmm bundle. ./configure --prefix=/mingw --with-zlib-include-dir=/c/gtkmm/include --with-zlib-lib-dir=/c/gtkmm/lib make cd libtiff make install libiptcdata: - Download: http://libiptcdata.sourceforge.net/ - How to build: ./configure --prefix=/mingw Edit the "Makefile" file from the root dir of libiptcdata and search for "DIST_SUBDIRS =" and "SUBDIRS =". You should only find one line for each search. From these lines, remove "iptc", then: make make install lcms: - Download lcms1 for RawTherapee-3.0 or lcms2 for RawTherapee-3.1 and newer http://sourceforge.net/projects/lcms/files/ - How to build (suitable for both version): ./configure --prefix=/mingw make make install IMPORTANT: Make sure that the lcms.pc and libiptcdata.pc files located in the pkgconfig dir have the first line like this: prefix=/mingw If everything has been installed correctly, you should see the following lines when running the cmake command (see "Building RT" below): -- checking for module 'libiptcdata' -- found libiptcdata, version 1.0.4 -- checking for module 'lcms2' -- found lcms2, version 2.3 -- Found JPEG: C:/mingw/lib/libjpeg.dll.a -- Found ZLIB: C:/gtkmm/lib/libz.dll.a -- Found PNG: C:/gtkmm/lib/libpng.lib -- Found TIFF: C:/mingw/lib/libtiff.dll.a Building RT: METHOD 1: Requirements: - MinGW + MSYS - CMake - GTK and gtkmm development environments Compile: - Start an MSYS command line interface, - Enter the root directory of the RawTherapee source tree: cd /C/Absolute/Path/To/RawTherapee_sourceTree - Type: cmake -G "MSYS Makefiles" -DCMAKE_BUILD_TYPE=Release -Ccmo.txt . - Type: make install - You'll find the compiled program in the subdirectory named like the value of CMAKE_BUILD_TYPE ("Release" in this example). METHOD 2: Requirements: - MinGW-TDM: https://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/ - CMake: http://www.cmake.org/cmake/resources/software.html - Mercurial: http://mercurial.selenic.com/wiki/WindowsInstall - gtkmm: http://ftp.se.debian.org/pub/gnome/binaries/win32/gtkmm/2.22/ Compile: - Start a standard DOS command prompt (WIN+R > cmd), - Enter the root directory of the RawTherapee source tree: cd C:\Absolute\Path\To\RawTherapee_sourceTree If you want to upload a build, you should set some additional information about your processor. There are two possibilities: 1. You pick up a target processor from "ProcessorTargets.cmake". All you have to do is set "-D PROC_TARGET_NUMBER:STRING=number" in cmake's command line to the desired target number. If you choose the 'native' solution, you have to set the processor label manually by setting "-D PROC_LABEL:STRING=procLabel" in cmake's command line. Please provide a short name, like "core i5" or "athlon64" (without double quotes). Processor frequency is of no use. 2. You don't need specific processor flags, so you'll let PROC_TARGET_NUMBER default to 0, but you still have to set the PROC_LABEL parameter (see point 1 righ above). - Type: mingw32-make.exe install - You'll find the compiled program in the subdirectory named like the value of CMAKE_BUILD_TYPE ("Release" in this example). Linux ----- Requirements: PACKAGE GENTOO DEBIAN/UBUNTU URL GTK+ gtk+-2.0>=2.12 x11-libs/gtk+ libgtk2.0-dev http://www.gtk.org/ GLIB2 glib-2.0>=2.16 dev-libs/glib libglib2.0-dev http://www.gtk.org/ GLIBMM glibmm-2.4>=2.16 dev-cpp/glibmm libglibmm-2.4-dev http://www.gtkmm.org GTKMM gtkmm-2.4>=2.12 dev-cpp/gtkmm libgtkmm-2.4-dev http://www.gtkmm.org SIGC sigc++-2.0 dev-libs/libsigc++ libsigc++-2.0-dev http://libsigc.sourceforge.net/ LIBIPTCDATA libiptcdata>=1.0.2 media-libs/libiptcdata libiptcdata-dev http://libiptcdata.sourceforge.net LCMS2 lcms>=2.0a media-libs/lcms liblcms2-dev http://www.littlecms.com/ JPEG libjpeg>=6b media-libs/jpeg libjpeg-dev http://jpegclub.org/ http://www.ijg.org/ TIFF libtiff>=3.9.4 media-libs/tiff libtiff-dev http://www.remotesensing.org/libtiff/ PNG libpng>=1.2.44 media-libs/libpng libpng-dev http://www.libpng.org/ BZIP2 bzip2>-1.0.4 app-arch/bzip2 libbz2-dev http://www.bzip.org/ ZLIB zlib>=1.2.3-r1 sys-libs/zlib zlib1g-dev http://www.zlib.net/ EXIV2 exiv2>=0.19 media-gfx/exiv2 libexiv2-dev http://www.exiv2.org/ EXPAT expat>=2.1.0 dev-libs/expat libexpat-dev http://expat.sourceforge.net/ On Ubuntu/Debian the requirements can be installed by running: sudo apt-get install build-essential cmake libbz2-dev libexiv2-dev libexpat1-dev libglib2.0-dev libglibmm-2.4-dev libgtk2.0-dev libgtkmm-2.4-dev libiptcdata-dev libjpeg8-dev liblcms2-dev libpng-dev libsigc++-2.0-dev libtiff-dev mercurial zlib1g-dev Compile: - Enter the root directory of the RawTherapee source tree - Type: cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./release -DBINDIR=. -DDATADIR=. -DLIBDIR=. Developers who want to provide a public build have to set the PROC_LABEL to their processor name, e.g.: cmake -DPROC_LABEL:STRING=athlon64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./release -DBINDIR=. -DDATADIR=. -DLIBDIR=. - Type: make install - You'll find the compiled program in the subdirectory named like the value of CMAKE_BUILD_TYPE ("Release" in this example). You can copy it anywhere you want. By changing the cmake flags, you can change where the release will compile to. By removing all flags it should go to the standard system install location. Using Eclipse under Linux: Eclipse mercurial plugin: Click "Help > Install new Software". The Eclipse Update Site for MercurialEclipse is available at this URL: http://cbes.javaforge.com/update Import the rawtherapee mercurial repository: "File > new > other > mercurial > Clone existing repository" Enter this URL: https://rawtherapee.googlecode.com/hg Enter the root directory of the RawTherapee source tree from a terminal window. Configure the source for Eclipse with: cmake -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_INSTALL_PREFIX=./release -DBINDIR=. -DDATADIR=. -DLIBDIR=. -DCMAKE_BUILD_TYPE=Release If you want to upload a build, you should set some additional information about your processor. There are two possibilities: 1. You pick up a target processor from "ProcessorTargets.cmake". All you have to do is set "-D PROC_TARGET_NUMBER:STRING=number" in cmake's command line to the desired target number. If you choose the 'native' solution, you have to set the processor label manually by setting "-D PROC_LABEL:STRING=procLabel" in cmake's command line. Please provide a short name, like "core i5" or "athlon64" (without double quotes). Processor frequency is of no use. 2. You don't need specific processor flags, so you'll let PROC_TARGET_NUMBER default to 0, but you still have to set the PROC_LABEL parameter (see point 1 righ above). Eclipse does not do 'make install', but only 'make all'. There are two ways to compile: 1. type 'make install' in the console or, 2. in "Project > properties > C/C++ Make Project > Build (incremental build)" change 'all' to 'install'. OS X ---- Requirements: - XCode Development Tools (you only need a subset of these, but it is probably easier to just install all of them) - MacPorts - Set /opt/local/etc/macports/variants.conf to include "+no_x11 +quartz" - If you want to build for multiple architectures, add +universal to variants.conf. Note that this will increase the size of the final application substantially. - Set /opt/local/etc/macports/macports.conf key 'universal_archs' to the architectures you wish to build for. Possible values include "i386 x86_64 ppc ppc64" - Edit the beginning of CMakeLists.txt to enable the same architectures as you added to variants.conf - To install all the tools and dependencies, run: sudo port install cairomm pango-devel gtk2 cmake glibmm gtkmm lcms libiptcdata - If you don't already have Mercurial installed, run: sudo port install mercurial - If you want to try OpenMP builds, run: sudo port install gcc45 Compile: - Enter the root directory of the RawTherapee source tree - To enable OpenMP, assuming you have installed gcc45), type: cmake -D CMAKE_C_COMPILER=gcc-mp-4.5 -D CMAKE_CXX_COMPILER=g++-mp-4.5 . OR to disable OpenMP and use the default compiler, type: cmake -D OPTION_OMP=false . If you want to upload a build, you should set some additional information about your processor. There are two possibilities: 1. You pick up a target processor from "ProcessorTargets.cmake". All you have to do is set "-D PROC_TARGET_NUMBER:STRING=number" in cmake's command line to the desired target number. If you choose the 'native' solution, you have to set the processor label manually by setting "-D PROC_LABEL:STRING=procLabel" in cmake's command line. Please provide a short name, like "core i5" or "athlon64" (without double quotes). Processor frequency is of no use. 2. You don't need specific processor flags, so you'll let PROC_TARGET_NUMBER default to 0, but you still have to set the PROC_LABEL parameter (see point 1 righ above). - Type: make install - Type: ./tools/osx/make-app-bundle - You will find a RawTherapee.dmg file in the release/ folder; this is the distribution release and can be run on any machine which meets the architecture requirements you specified in variants.conf earlier. Contact: For any bugs or patches to the OS X build, please contact Wyatt