Linux: Difference between revisions
No edit summary |
Thanatomanic (talk | contribs) m (Add expat-devel to Fedora build instructions) |
||
(35 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
<div class="pagetitle">Linux</div> | |||
When in doubt, [[IRC | join us on IRC]] and ask a human! | This page details instructions for compiling RawTherapee on '''GNU/Linux''' systems. There are also instructions for compiling on [[Windows]] and [[macOS]]. | ||
When in doubt, [[IRC|join us on IRC]] or in the [[Forum]] and ask a human! | |||
== Dependencies == | == Dependencies == | ||
To compile RawTherapee your system will need a set of tools. | |||
To compile RawTherapee your system will need a set of tools and code libraries from other programs. These are called dependencies, and here is a list of them for the latest version of RawTherapee: | |||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
|+ Build-time dependencies for RawTherapee: | |+ Build-time dependencies for RawTherapee: | ||
! Package !! Version !! URL | |||
|- | |- | ||
| | | CMake || cmake>=3.5 || https://cmake.org/ | ||
|- | |- | ||
| EXIV2 || exiv2>=0.19 || http://www.exiv2.org/ | |||
|- | |- | ||
| EXPAT || expat>=2.1.0 || https://libexpat.github.io/ | |||
|- | |- | ||
| FFTW3 || fftw>=3.2.2 || http://fftw.org/ | |||
|- | |- | ||
| GCC || gcc>=4.9 || https://gcc.gnu.org/ | |||
|- | |- | ||
| GLIB2 || glib-2.0>=2.24 || https://www.gtk.org/ | |||
|- | |- | ||
| GLIBMM || glibmm-2.4>=2.24 || https://www.gtkmm.org/ | |||
|- | |- | ||
| GTK+ || gtk+-3.16 < 3.24.0 || https://www.gtk.org/ | |||
|- | |- | ||
| | | GTKMM || gtkmm-3.16 || https://www.gtkmm.org/ | ||
|- | |- | ||
| | | JPEG || libjpeg>=6b || https://libjpeg-turbo.org/ https://jpegclub.org/ https://www.ijg.org/ | ||
|- | |- | ||
| | | LCMS2 || lcms>=2.6 || https://www.littlecms.com/ | ||
|- | |- | ||
| | | LENSFUN || lensfun>=0.2 || https://github.com/lensfun/lensfun | ||
|- | |- | ||
| | | LIBCANBERRA || libcanberra>=0.29 || http://0pointer.de/lennart/projects/libcanberra/ (Linux only) | ||
|- | |- | ||
| | | LIBIPTCDATA || libiptcdata>=1.0.2 || http://libiptcdata.sourceforge.net | ||
|- | |- | ||
| | | PNG || libpng>=1.2.44 || http://www.libpng.org/ | ||
|- | |- | ||
| | | librsvg || librsvg>=2.40 || https://github.com/GNOME/librsvg | ||
|- | |- | ||
| | | SIGC || sigc++-2.0 || https://github.com/libsigcplusplus/libsigcplusplus | ||
|- | |- | ||
| | | TIFF || libtiff>=4.0.4 || http://libtiff.org/ | ||
|- | |- | ||
| ZLIB || zlib>=1.2.3 || http://www.zlib.net/ | |||
|} | |} | ||
In order to install all these dependencies, you will need to open a console and paste the code from the appropriate section into the console. | In order to install all these dependencies, you will need to open a console and paste the code from the appropriate section into the console. | ||
The code snippets below list dependencies for the latest RawTherapee code which requires GTK3. We dropped support for GTK2 with release "5.0-r1-gtk2" in February 2017. If you use a modern distribution, just copy and paste the code snippets as they are. If you're on an old distribution without the required GTK3 support, then refer to the archived [[Linux_GTK2|GTK2]] article, then checkout and compile the obsolete <code>5.0-r1-gtk2</code> tag. | |||
=== Arch/Manjaro === | === Arch/Manjaro === | ||
Current versions of Arch and Manjaro work well out of the box. Refer to the [[Linux_GTK2|GTK2]] article if compiling on a version older than 17.1.12. | |||
Proceed to [[ | <pre style="white-space: pre-wrap">sudo pacman -S --needed cmake exiv2 expat fftw glib2 glibmm gtk3 gtkmm3 lcms2 lensfun libcanberra libiptcdata libjpeg-turbo libpng librsvg libsigc++ libtiff zlib</pre> | ||
Proceed to [[#Compilation|Compilation]]. | |||
=== CentOS === | === CentOS === | ||
CentOS 7 has very outdated packages and requires extra steps to install a recent GCC, git, lensfun and libtiff. The steps below were verified to work in CentOS 7.4.1708, but proceed at your own risk. | |||
<pre style="white-space: pre-wrap">sudo yum install | GCC >=4.9.3: | ||
<pre style="white-space: pre-wrap">sudo yum update | |||
sudo yum install cmake git | |||
sudo yum install centos-release-scl | |||
sudo yum install devtoolset-7-gcc* | |||
scl enable devtoolset-7 bash | |||
source /opt/rh/devtoolset-7/enable</pre> | |||
git >=2.7: | |||
<pre style="white-space: pre-wrap">sudo yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm</pre> | |||
=== | lensfun: | ||
<pre style="white-space: pre-wrap"> | |||
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm | |||
sudo rpm -ivh epel-release-latest-7.noarch.rpm</pre> | |||
libtiff >=4.0.4: | |||
<pre style="white-space: pre-wrap">sudo yum install ninja-build | |||
mkdir ~/programs && cd ~/programs | |||
wget http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz | |||
tar zxvf tiff-4.0.9.tar.gz | |||
mkdir tiff-4.0.9/libtiff-build && cd tiff-4.0.9/libtiff-build | |||
cmake -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.0.9 -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. | |||
ninja-build | |||
sudo ninja-build install | |||
</pre> | |||
Install the other dependencies: | |||
<pre style="white-space: pre-wrap">sudo yum install curl expat-devel fftw-devel gtk3-devel gtkmm30-devel lcms2-devel lensfun-devel libcanberra-devel libiptcdata-devel libjpeg-turbo-devel libpng-devel librsvg2-devel zlib-devel</pre> | |||
Symlink libatomic: | |||
<pre style="white-space: pre-wrap">sudo ln -s /usr/lib64/libatomic.so.1 /usr/lib64/libatomic.so</pre> | |||
As you proceed to the next step - compilation - you will need to edit the <code>build-rawtherapee</code> script and add these three lines to the CMake section near the end of the file, for example after the "-DWITH_BENCHMARK" line before the "$HOME" line: | |||
<pre style="white-space: pre-wrap"> -DTIFF_INCLUDE_DIR="$HOME/programs/tiff-4.0.9/libtiff" \ | |||
-DTIFF_LIBRARY="$HOME/programs/tiff-4.0.9/libtiff-build/libtiff/libtiff.so" \ | |||
-DCMAKE_CXX_FLAGS="-Wno-deprecated -Wno-parentheses" \ | |||
</pre> | |||
Proceed to [[#Compilation|Compilation]]. | |||
=== Debian/Ubuntu/Mint/elementary OS === | |||
=== | Current versions of these distributions work well out of the box (Debian >=9, Ubuntu >=18.04 LTS, Linux Mint >=19, elementary OS >=5). Instructions below assume a fully updated system. Additional packages may need to be installed on your particular system. | ||
<pre style="white-space: pre-wrap">sudo | <pre style="white-space: pre-wrap">sudo apt install git build-essential cmake curl pkg-config libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev</pre> | ||
==== Ubuntu 16.04 LTS (Xenial) ==== | |||
RawTherapee 5.8 (release) is the latest version supported for Xenial-based distributions. See [https://github.com/Beep6581/RawTherapee/issues/5943 here] for details. When compiling, follow the manual steps and use git to checkout the <code>5.8</code> branch. | |||
=== | ==== Ubuntu <=14.04 LTS (Trusty), Debian <=8 (Jessie) ==== | ||
Refer to the [[Linux_GTK2|GTK2]] article if compiling on earlier versions of Ubuntu. The GTK3 version of RawTherapee is unsupported in these distributions. | |||
Proceed to [[#Compilation|Compilation]]. | |||
=== Fedora === | |||
Current versions of Fedora work well out of the box. Instructions below assume a fully updated system. Additional packages may need to be installed on your particular system. | |||
= | <pre style="white-space: pre-wrap">sudo dnf install git make cmake curl gcc gcc-c++ gtk3-devel gtkmm30-devel lensfun-devel librsvg2-devel lcms2-devel fftw-devel expat-devel libiptcdata-devel libtiff-devel libjpeg-turbo-devel libcanberra-devel libatomic</pre> | ||
< | ==== Fedora <=23 ==== | ||
RawTherapee 5.6 (release) is the latest version supported for this distribution because of a higher CMake version requirement (see [https://github.com/Beep6581/RawTherapee/issues/5302 here]). When compiling, follow the manual steps and use git to checkout the <code>5.6</code> branch. | |||
==== Fedora 22 ==== | |||
In addition to the above notices and requirements, an updated version of <code>libtiff</code> needs to be compiled manually. | |||
=== | <pre style="white-space: pre-wrap">sudo yum install ninja-build | ||
cd ~ | |||
wget http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz | |||
tar zxvf tiff-4.0.9.tar.gz | |||
cd tiff-4.0.9.tar.gz | |||
mkdir build && cd build | |||
cmake -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.0.9 -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. | |||
ninja-build | |||
sudo ninja-build install | |||
</pre> | |||
==== Fedora <=21 ==== | |||
Refer to the [[Linux_GTK2|GTK2]] article if compiling on earlier versions of Fedora. The GTK3 version of RawTherapee is unsupported in these distributions. | |||
Proceed to [[#Compilation|Compilation]]. | |||
=== Gentoo/Sabayon === | |||
Sabayon users should use the same dependencies as for Gentoo, but instead of <code>sudo emerge -uva</code> use <code>sudo equo install sys-devel/gcc dev-vcs/git</code>. | |||
= | <pre style="white-space: pre-wrap">sudo emerge -uva dev-cpp/gtkmm:3.0 dev-libs/expat dev-util/cmake media-gfx/exiv2 media-libs/lcms media-libs/lensfun media-libs/libcanberra media-libs/libiptcdata media-libs/libjpeg-turbo media-libs/libpng gnome-base/librsvg media-libs/tiff net-misc/curl sci-libs/fftw sys-libs/zlib x11-libs/gtk+:3</pre> | ||
Proceed to [[#Compilation|Compilation]]. | |||
=== openSUSE === | |||
openSUSE Leap 15 and Tumbleweed should work well out of the box. Serious compilation issues can be expected with other versions. Refer to the [[Linux_GTK2|GTK2]] article if compiling on a version older than 42.1. | |||
<pre style="white-space: pre-wrap">sudo | <pre style="white-space: pre-wrap">sudo zypper install git cmake gcc gcc-c++ gtk3-devel gtkmm3-devel liblcms2-devel fftw3-devel libitpcdata-devel librsvg-devel libtiff-devel libjpeg8-devel libcanberra-gtk3-devel</pre> | ||
For openSUSE 15.1 and newer, the <code>lensfun</code> library needs to be installed as follows: | |||
<pre style="white-space: pre-wrap">sudo zypper install lensfun-data liblensfun1</pre> | |||
For openSUSE Tumbleweed, the package is slightly different: | |||
<pre style="white-space: pre-wrap">sudo zypper install lensfun-devel</pre> | |||
< | For other versions of openSUSE <code>lensfun</code> has to be installed manually: | ||
<pre>wget https://sourceforge.net/projects/lensfun/files/0.3.2/lensfun-0.3.2.tar.gz | |||
tar xvf lensfun-0.3.2.tar.gz | |||
cd lensfun-0.3.2.tar.gz | |||
mkdir build | |||
cd build | |||
cmake ../ | |||
make | |||
sudo make install</pre> | |||
Proceed to [[#Compilation|Compilation]]. | |||
== Compilation == | |||
There are two general ways you can compile RawTherapee: either use the [[#The_Automatic_Way|automatic]] Bash script which compiles RawTherapee for you (recommended), or do so [[#The_Manual_Way|manually]]. | |||
=== | === The Automatic Way === | ||
This is the recommended way of compiling RawTherapee as it is fast, simple and fool-proof. It relies on a Bash script which downloads the latest RawTherapee source code and compiles it in a way which is optimized for your CPU. The compiled builds are ready for use. The script does not check for build-time dependencies, so be sure to read the [[#Dependencies|Dependencies]] section before using the script. The compiled builds are standalone, meaning that you can keep several versions of RawTherapee at the same time simply by renaming the build folders so that creating a new build does not overwrite the previous build, which happens by default. | |||
This is the recommended way of compiling RawTherapee as it is fast, simple and fool-proof. It relies on a Bash script which downloads the latest RawTherapee source code and compiles it in a way which is optimized for your CPU. The compiled builds are ready for use. The script does not check for build-time dependencies, so be sure to read the [[ | |||
Run the script as a normal user, not as root! | Run the script as a normal user, not as root! | ||
Line 174: | Line 198: | ||
Open a terminal, get the script, make it executable, and run it: | Open a terminal, get the script, make it executable, and run it: | ||
<pre style="white-space: pre-wrap">cd ~ | <pre style="white-space: pre-wrap">cd ~ | ||
wget https://raw.githubusercontent.com/Beep6581/RawTherapee/dev/tools/build-rawtherapee | wget https://raw.githubusercontent.com/Beep6581/RawTherapee/dev/tools/build-rawtherapee -O build-rawtherapee | ||
chmod +x build-rawtherapee | chmod +x build-rawtherapee | ||
./build-rawtherapee</pre> | ./build-rawtherapee</pre> | ||
Line 182: | Line 206: | ||
To update RawTherapee if you previously compiled it using this script, just re-run the script. That's it. | To update RawTherapee if you previously compiled it using this script, just re-run the script. That's it. | ||
The <code>build-rawtherapee</code> script is included in RawTherapee's source code. Since running the script updates the source code, after you compiled your first build you can delete the script you downloaded manually above using wget, and instead use <code>~/programs/code-rawtherapee/tools/build-rawtherapee</code> which will always update itself. | |||
== | The script compiles the current branch, which by default is <code>dev</code> where most of the development happens. To compile a different branch, check it out using standard git commands before running the script. Read more about RawTherapee's branches below in the [[Linux#Choose_a_branch|Choose a Branch]] section. | ||
The recommended way of compiling RawTherapee is by using the script - see [[ | |||
For more information, see <code>./build-rawtherapee --help</code> | |||
You have finished, RawTherapee is ready for use. You can skip the "Manual Way" section. | |||
=== The Manual Way === | |||
The recommended way of compiling RawTherapee is by using the automatic script - see [[#The_Automatic_Way|Compilation: The Automatic Way]]. If you want to learn how to compile manually, read on. | |||
In order to keep your "home" folder clean when manually compiling multiple programs (i.e. when not using your distribution's package manager) and for this manual compilation tutorial to maintain compatibility with the automatic compilation script, you will create the folder <code>~/programs/</code> which will contain all RawTherapee-related source code in the <code>~/programs/code-rawtherapee</code> folder, and the compiled build in the <code>~/programs/rawtherapee</code> folder. You can use the same scheme when compiling other programs. | In order to keep your "home" folder clean when manually compiling multiple programs (i.e. when not using your distribution's package manager) and for this manual compilation tutorial to maintain compatibility with the automatic compilation script, you will create the folder <code>~/programs/</code> which will contain all RawTherapee-related source code in the <code>~/programs/code-rawtherapee</code> folder, and the compiled build in the <code>~/programs/rawtherapee</code> folder. You can use the same scheme when compiling other programs. | ||
=== Clone the source === | ==== Clone the source ==== | ||
First, you need to clone RawTherapee's source code repository. Bring up your console and run this: | First, you need to clone RawTherapee's source code repository. Bring up your console and run this: | ||
Line 196: | Line 228: | ||
cd ~/programs/code-rawtherapee</pre> | cd ~/programs/code-rawtherapee</pre> | ||
=== Choose a branch === | ==== Choose a branch ==== | ||
* Features are developed on their own feature branches. | * Features are developed on their own feature branches. | ||
* Development happens in the <code>dev</code> branch. Feature branches are merged into the <code>dev</code> branch when they're ready. The <code>dev</code> branch is unstable. | * Development happens in the <code>dev</code> branch. Feature branches are merged into the <code>dev</code> branch when they're ready. The <code>dev</code> branch is unstable. | ||
Line 210: | Line 243: | ||
<pre style="white-space: pre-wrap">git checkout <tag or branch></pre> | <pre style="white-space: pre-wrap">git checkout <tag or branch></pre> | ||
RawTherapee uses GTK+ for the user interface and requires GTK+ version 3.16 or newer. If your system does not support version 3.16 or newer then you must checkout the <code>5.0-r1-gtk2</code> tag. Our GTK2 support has officially ended on 2 February 2017 - update your system. | RawTherapee uses GTK+ for the user interface and requires GTK+ version 3.16 or newer. If your system does not support version 3.16 or newer then you must checkout the <code>5.0-r1-gtk2</code> tag. Our GTK2 support has officially ended on 2 February 2017 - refer to the archived [[Linux_GTK2|GTK2]] article, and update your system. | ||
Compiling old versions of RawTherapee will fail on a modern system, as you will be missing the old dependencies. | |||
==== Compile RawTherapee ==== | |||
Now you will make an out-of-source compilation of RawTherapee, it will be built into the <code>~/programs/code-rawtherapee/build/release</code> folder, and then you will move this folder to <code>~/programs/rawtherapee</code> | Now you will make an out-of-source compilation of RawTherapee, it will be built into the <code>~/programs/code-rawtherapee/build/release</code> folder, and then you will move this folder to <code>~/programs/rawtherapee</code> | ||
==== CMake ==== | ===== CMake ===== | ||
There are a few compilation settings you need to be aware of, you will pass these to CMake using the <code>-D</code> option as described below: | There are a few compilation settings you need to be aware of, you will pass these to CMake using the <code>-D</code> option as described below: | ||
; | ; CMAKE_BUILD_TYPE | ||
: One of: <code>release</code> (default), <code>relwithdebinfo</code> or <code>debug</code>. | : One of: <code>release</code> (default), <code>relwithdebinfo</code> or <code>debug</code>. | ||
: This controls whether the build will favor faster execution time or more verbose debugging output. | : This controls whether the build will favor faster execution time or more verbose debugging output. | ||
: The "debug" and "relwithdebinfo" builds will let you [[How_to_write_useful_bug_reports | get a useful stack-backtrace]] if RawTherapee crashes while running through GDB which you can then submit to us so we can find the problem and fix it. The "debug" build is the slowest but generates the most detailed information. The "relwithdebinfo" build is almost as fast as a "release" build and generates often sufficient information, though not as detailed as a "debug" build. The "release" build will not provide any useful information when it crashes, but does contain many speed optimizations resulting in a program that works several times faster than the "debug" build would. For normal use, make a "release" or "relwithdebinfo" build. If you find a reproducible bug, then make a "debug" build and send us a stack-backtrace (or fix it yourself and send us the patch!). We prefer stack backtraces from debug builds than from relwithdebinfo ones. | : The "debug" and "relwithdebinfo" builds will let you [[How_to_write_useful_bug_reports|get a useful stack-backtrace]] if RawTherapee crashes while running through GDB which you can then submit to us so we can find the problem and fix it. The "debug" build is the slowest but generates the most detailed information. The "relwithdebinfo" build is almost as fast as a "release" build and generates often sufficient information, though not as detailed as a "debug" build. The "release" build will not provide any useful information when it crashes, but does contain many speed optimizations resulting in a program that works several times faster than the "debug" build would. For normal use, make a "release" or "relwithdebinfo" build. If you find a reproducible bug, then make a "debug" build and send us a stack-backtrace (or fix it yourself and send us the patch!). We prefer stack backtraces from debug builds than from relwithdebinfo ones. | ||
:: To make a "release" type build, set: <code>-DCMAKE_BUILD_TYPE="release"</code> | :: To make a "release" type build, set: <code>-DCMAKE_BUILD_TYPE="release"</code> | ||
Line 288: | Line 323: | ||
: Build with timing functions enabled to benchmark performance. | : Build with timing functions enabled to benchmark performance. | ||
==== Make ==== | ; ENABLE_TCMALLOC | ||
: <code>ON</code> or <code>OFF</code> (default). | |||
: In some cases the operating system has trouble handling memory allocation and deallocation required by RawTherapee (see [https://github.com/Beep6581/RawTherapee/issues/5459 here] for more information). Linking against [https://gperftools.github.io/gperftools/tcmalloc.html TCMalloc] may alleviate these problems. This library may not be available on all platforms or distributions. | |||
===== Make ===== | |||
Find out how many threads your CPU supports. This only influences the compilation speed, it has no influence over how fast the compiled RawTherapee build runs. To find out how many threads your CPU supports, run this in a terminal: | Find out how many threads your CPU supports. This only influences the compilation speed, it has no influence over how fast the compiled RawTherapee build runs. To find out how many threads your CPU supports, run this in a terminal: | ||
Line 296: | Line 335: | ||
Compile: | Compile: | ||
<pre style="white-space: pre-wrap">cd ~/programs/code-rawtherapee | <pre style="white-space: pre-wrap">cd ~/programs/code-rawtherapee | ||
mkdir build | |||
cd build | |||
cmake \ | cmake \ | ||
Line 316: | Line 355: | ||
</pre> | </pre> | ||
=== Run RawTherapee === | ==== Run RawTherapee ==== | ||
To run RawTherapee: | To run RawTherapee: | ||
<pre style="white-space: pre-wrap">~/programs/rawtherapee/rawtherapee</pre> | <pre style="white-space: pre-wrap">~/programs/rawtherapee/rawtherapee</pre> | ||
Line 326: | Line 366: | ||
You can safely delete <code>~/programs/code-rawtherapee</code> if you so wish. The compiled program will still work, but then you will have to redo all the above steps if you want to update. Rather, leave the repository intact so that you can do the next step in a week or a month's time when you want to update. | You can safely delete <code>~/programs/code-rawtherapee</code> if you so wish. The compiled program will still work, but then you will have to redo all the above steps if you want to update. Rather, leave the repository intact so that you can do the next step in a week or a month's time when you want to update. | ||
=== Update RawTherapee === | ==== Update RawTherapee ==== | ||
Every time you want to update RawTherapee to the latest code available, just do the following: | Every time you want to update RawTherapee to the latest code available, just do the following: | ||
<pre style="white-space: pre-wrap">cd ~/programs/code-rawtherapee | <pre style="white-space: pre-wrap">cd ~/programs/code-rawtherapee | ||
git pull</pre> | git pull</pre> | ||
Then repeat the [[ | Then repeat the [[#Make|Make]] step above. | ||
When updating, you can re-use the <code>build</code> folder from last time to avoid having to recompile things which have not changed, to make the whole process faster. CMake should automatically detect changes. However, there are situations when compilation may fail when re-using an old <code>build</code> folder - typically that might happen when hopping between very different branches. If that happens, just delete the <code>build</code> folder, then proceed with the steps in the "Make" section. |
Revision as of 19:25, 30 July 2021
This page details instructions for compiling RawTherapee on GNU/Linux systems. There are also instructions for compiling on Windows and macOS.
When in doubt, join us on IRC or in the Forum and ask a human!
Dependencies
To compile RawTherapee your system will need a set of tools and code libraries from other programs. These are called dependencies, and here is a list of them for the latest version of RawTherapee:
In order to install all these dependencies, you will need to open a console and paste the code from the appropriate section into the console.
The code snippets below list dependencies for the latest RawTherapee code which requires GTK3. We dropped support for GTK2 with release "5.0-r1-gtk2" in February 2017. If you use a modern distribution, just copy and paste the code snippets as they are. If you're on an old distribution without the required GTK3 support, then refer to the archived GTK2 article, then checkout and compile the obsolete 5.0-r1-gtk2
tag.
Arch/Manjaro
Current versions of Arch and Manjaro work well out of the box. Refer to the GTK2 article if compiling on a version older than 17.1.12.
sudo pacman -S --needed cmake exiv2 expat fftw glib2 glibmm gtk3 gtkmm3 lcms2 lensfun libcanberra libiptcdata libjpeg-turbo libpng librsvg libsigc++ libtiff zlib
Proceed to Compilation.
CentOS
CentOS 7 has very outdated packages and requires extra steps to install a recent GCC, git, lensfun and libtiff. The steps below were verified to work in CentOS 7.4.1708, but proceed at your own risk.
GCC >=4.9.3:
sudo yum update sudo yum install cmake git sudo yum install centos-release-scl sudo yum install devtoolset-7-gcc* scl enable devtoolset-7 bash source /opt/rh/devtoolset-7/enable
git >=2.7:
sudo yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-2.noarch.rpm
lensfun:
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm sudo rpm -ivh epel-release-latest-7.noarch.rpm
libtiff >=4.0.4:
sudo yum install ninja-build mkdir ~/programs && cd ~/programs wget http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz tar zxvf tiff-4.0.9.tar.gz mkdir tiff-4.0.9/libtiff-build && cd tiff-4.0.9/libtiff-build cmake -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.0.9 -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. ninja-build sudo ninja-build install
Install the other dependencies:
sudo yum install curl expat-devel fftw-devel gtk3-devel gtkmm30-devel lcms2-devel lensfun-devel libcanberra-devel libiptcdata-devel libjpeg-turbo-devel libpng-devel librsvg2-devel zlib-devel
Symlink libatomic:
sudo ln -s /usr/lib64/libatomic.so.1 /usr/lib64/libatomic.so
As you proceed to the next step - compilation - you will need to edit the build-rawtherapee
script and add these three lines to the CMake section near the end of the file, for example after the "-DWITH_BENCHMARK" line before the "$HOME" line:
-DTIFF_INCLUDE_DIR="$HOME/programs/tiff-4.0.9/libtiff" \ -DTIFF_LIBRARY="$HOME/programs/tiff-4.0.9/libtiff-build/libtiff/libtiff.so" \ -DCMAKE_CXX_FLAGS="-Wno-deprecated -Wno-parentheses" \
Proceed to Compilation.
Debian/Ubuntu/Mint/elementary OS
Current versions of these distributions work well out of the box (Debian >=9, Ubuntu >=18.04 LTS, Linux Mint >=19, elementary OS >=5). Instructions below assume a fully updated system. Additional packages may need to be installed on your particular system.
sudo apt install git build-essential cmake curl pkg-config libgtk-3-dev libgtkmm-3.0-dev liblensfun-dev librsvg2-dev liblcms2-dev libfftw3-dev libiptcdata0-dev libtiff5-dev libcanberra-gtk3-dev
Ubuntu 16.04 LTS (Xenial)
RawTherapee 5.8 (release) is the latest version supported for Xenial-based distributions. See here for details. When compiling, follow the manual steps and use git to checkout the 5.8
branch.
Ubuntu <=14.04 LTS (Trusty), Debian <=8 (Jessie)
Refer to the GTK2 article if compiling on earlier versions of Ubuntu. The GTK3 version of RawTherapee is unsupported in these distributions.
Proceed to Compilation.
Fedora
Current versions of Fedora work well out of the box. Instructions below assume a fully updated system. Additional packages may need to be installed on your particular system.
sudo dnf install git make cmake curl gcc gcc-c++ gtk3-devel gtkmm30-devel lensfun-devel librsvg2-devel lcms2-devel fftw-devel expat-devel libiptcdata-devel libtiff-devel libjpeg-turbo-devel libcanberra-devel libatomic
Fedora <=23
RawTherapee 5.6 (release) is the latest version supported for this distribution because of a higher CMake version requirement (see here). When compiling, follow the manual steps and use git to checkout the 5.6
branch.
Fedora 22
In addition to the above notices and requirements, an updated version of libtiff
needs to be compiled manually.
sudo yum install ninja-build cd ~ wget http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz tar zxvf tiff-4.0.9.tar.gz cd tiff-4.0.9.tar.gz mkdir build && cd build cmake -DCMAKE_INSTALL_DOCDIR=/usr/share/doc/libtiff-4.0.9 -DCMAKE_INSTALL_PREFIX=/usr -G Ninja .. ninja-build sudo ninja-build install
Fedora <=21
Refer to the GTK2 article if compiling on earlier versions of Fedora. The GTK3 version of RawTherapee is unsupported in these distributions.
Proceed to Compilation.
Gentoo/Sabayon
Sabayon users should use the same dependencies as for Gentoo, but instead of sudo emerge -uva
use sudo equo install sys-devel/gcc dev-vcs/git
.
sudo emerge -uva dev-cpp/gtkmm:3.0 dev-libs/expat dev-util/cmake media-gfx/exiv2 media-libs/lcms media-libs/lensfun media-libs/libcanberra media-libs/libiptcdata media-libs/libjpeg-turbo media-libs/libpng gnome-base/librsvg media-libs/tiff net-misc/curl sci-libs/fftw sys-libs/zlib x11-libs/gtk+:3
Proceed to Compilation.
openSUSE
openSUSE Leap 15 and Tumbleweed should work well out of the box. Serious compilation issues can be expected with other versions. Refer to the GTK2 article if compiling on a version older than 42.1.
sudo zypper install git cmake gcc gcc-c++ gtk3-devel gtkmm3-devel liblcms2-devel fftw3-devel libitpcdata-devel librsvg-devel libtiff-devel libjpeg8-devel libcanberra-gtk3-devel
For openSUSE 15.1 and newer, the lensfun
library needs to be installed as follows:
sudo zypper install lensfun-data liblensfun1
For openSUSE Tumbleweed, the package is slightly different:
sudo zypper install lensfun-devel
For other versions of openSUSE lensfun
has to be installed manually:
wget https://sourceforge.net/projects/lensfun/files/0.3.2/lensfun-0.3.2.tar.gz tar xvf lensfun-0.3.2.tar.gz cd lensfun-0.3.2.tar.gz mkdir build cd build cmake ../ make sudo make install
Proceed to Compilation.
Compilation
There are two general ways you can compile RawTherapee: either use the automatic Bash script which compiles RawTherapee for you (recommended), or do so manually.
The Automatic Way
This is the recommended way of compiling RawTherapee as it is fast, simple and fool-proof. It relies on a Bash script which downloads the latest RawTherapee source code and compiles it in a way which is optimized for your CPU. The compiled builds are ready for use. The script does not check for build-time dependencies, so be sure to read the Dependencies section before using the script. The compiled builds are standalone, meaning that you can keep several versions of RawTherapee at the same time simply by renaming the build folders so that creating a new build does not overwrite the previous build, which happens by default.
Run the script as a normal user, not as root!
Open a terminal, get the script, make it executable, and run it:
cd ~ wget https://raw.githubusercontent.com/Beep6581/RawTherapee/dev/tools/build-rawtherapee -O build-rawtherapee chmod +x build-rawtherapee ./build-rawtherapee
If everything goes well, the script will terminate with the message, "To run rawtherapee type: ...".
To update RawTherapee if you previously compiled it using this script, just re-run the script. That's it.
The build-rawtherapee
script is included in RawTherapee's source code. Since running the script updates the source code, after you compiled your first build you can delete the script you downloaded manually above using wget, and instead use ~/programs/code-rawtherapee/tools/build-rawtherapee
which will always update itself.
The script compiles the current branch, which by default is dev
where most of the development happens. To compile a different branch, check it out using standard git commands before running the script. Read more about RawTherapee's branches below in the Choose a Branch section.
For more information, see ./build-rawtherapee --help
You have finished, RawTherapee is ready for use. You can skip the "Manual Way" section.
The Manual Way
The recommended way of compiling RawTherapee is by using the automatic script - see Compilation: The Automatic Way. If you want to learn how to compile manually, read on.
In order to keep your "home" folder clean when manually compiling multiple programs (i.e. when not using your distribution's package manager) and for this manual compilation tutorial to maintain compatibility with the automatic compilation script, you will create the folder ~/programs/
which will contain all RawTherapee-related source code in the ~/programs/code-rawtherapee
folder, and the compiled build in the ~/programs/rawtherapee
folder. You can use the same scheme when compiling other programs.
Clone the source
First, you need to clone RawTherapee's source code repository. Bring up your console and run this:
mkdir -p ~/programs git clone https://github.com/Beep6581/RawTherapee ~/programs/code-rawtherapee cd ~/programs/code-rawtherapee
Choose a branch
- Features are developed on their own feature branches.
- Development happens in the
dev
branch. Feature branches are merged into thedev
branch when they're ready. Thedev
branch is unstable. - Releases are tagged in the
releases
branch.
Checkout the latest tag if you want the most stable code. To see all available tags, type:
git tag
Checkout the dev
branch or some other feature branch if you want to test the latest bleeding-edge code. To see all available branches, type:
git branch -a
Checking out is done via the "git checkout" command. To checkout a tag or a branch, type:
git checkout <tag or branch>
RawTherapee uses GTK+ for the user interface and requires GTK+ version 3.16 or newer. If your system does not support version 3.16 or newer then you must checkout the 5.0-r1-gtk2
tag. Our GTK2 support has officially ended on 2 February 2017 - refer to the archived GTK2 article, and update your system.
Compiling old versions of RawTherapee will fail on a modern system, as you will be missing the old dependencies.
Compile RawTherapee
Now you will make an out-of-source compilation of RawTherapee, it will be built into the ~/programs/code-rawtherapee/build/release
folder, and then you will move this folder to ~/programs/rawtherapee
CMake
There are a few compilation settings you need to be aware of, you will pass these to CMake using the -D
option as described below:
- CMAKE_BUILD_TYPE
- One of:
release
(default),relwithdebinfo
ordebug
. - This controls whether the build will favor faster execution time or more verbose debugging output.
- The "debug" and "relwithdebinfo" builds will let you get a useful stack-backtrace if RawTherapee crashes while running through GDB which you can then submit to us so we can find the problem and fix it. The "debug" build is the slowest but generates the most detailed information. The "relwithdebinfo" build is almost as fast as a "release" build and generates often sufficient information, though not as detailed as a "debug" build. The "release" build will not provide any useful information when it crashes, but does contain many speed optimizations resulting in a program that works several times faster than the "debug" build would. For normal use, make a "release" or "relwithdebinfo" build. If you find a reproducible bug, then make a "debug" build and send us a stack-backtrace (or fix it yourself and send us the patch!). We prefer stack backtraces from debug builds than from relwithdebinfo ones.
- To make a "release" type build, set:
-DCMAKE_BUILD_TYPE="release"
- To make a "release" type build, set:
- USE_OLD_CXX_ABI
ON
orOFF
(default).- When compiling a program, one must use the same conventions as those used by the libraries which that program relies upon, otherwise compilation (linking) will fail. Generally one does not need to concern oneself with this, but we are now at a time when GCC4 is being phased out by GCC5, each by default using a convention incompatible with the other, and so this issue is relevant. If the libraries on your system have been compiled using GCC5, they probably use a standard called C++11. This means that your RawTherapee build must use the same standard, which is the case by default. However, if despite using GCC5 your libraries were built using the older C++03 standard, then RawTherapee must be set to use the same, and this is when you would set "USE_OLD_CXX_ABI" to "ON".
- To enable USE_OLD_CXX_ABI, set:
-DUSE_OLD_CXX_ABI="ON"
- To enable USE_OLD_CXX_ABI, set:
- CACHE_NAME_SUFFIX
- The CACHE_NAME_SUFFIX options sets the suffix of the cache and config folder names the compiled RawTherapee build will use. See the File Paths article for an explanation of what those are.
- For stable releases (if you checkout the "releases" branch) use
-DCACHE_NAME_SUFFIX=""
- For development builds (if you checkout the "dev" branch or any branch other than "releases") use
-DCACHE_NAME_SUFFIX="5-dev"
- PROC_TARGET_NUMBER
- From
0
(default) to9
. - The PROC_TARGET_NUMBER option sets which CPU type to optimize for.
- If building for yourself, use "2". It means "native", so the optimizations will be automatically detected for your CPU and RawTherapee will perform as fast as possible on your CPU. It might not run at all on older or other CPU architectures.
- If building for distribution (for other people), use "1". It means "generic", so only optimizations supported by most CPUs will be used, meaning the build can be downloaded and used by anyone, though it won't benefit from the best optimizations possible for the user's CPU.
- For more info, see the file "ProcessorTargets.cmake" in the cloned repository.
- To make a build using "native" optimizations, set:
-DPROC_TARGET_NUMBER="2"
- To make a build using "native" optimizations, set:
- BUILD_BUNDLE
ON
orOFF
.- Forced to "ON" for Windows and macOS. Optional in Linux where it is "OFF" by default.
- If set to ON, the program will be built into the
DATADIR
folder, otherwise it will be installed relative toCMAKE_INSTALL_PREFIX
which would typically be system-wide.
- BUNDLE_BASE_INSTALL_DIR
- Use an absolute path.
- The program will be built into this folder.
- For example, set it to:
-DBUNDLE_BASE_INSTALL_DIR="$HOME/programs/rawtherapee"
- If it is not set, the default is to use
${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}
- LENSFUNDBDIR
- Unset by default.
- The
LENSFUNDBDIR
option permits to locate the lensfun database in the specified directory. It can be unset, absolute or relative. - When unset, Lensfun uses its own logic to find the database. This is the recommended option if you have Lensfun installed system-wide and want to use it.
- You can set it to a relative or absolute path if you want to use a custom lensfun database.
- If building a bundle, it is relative to the bundle's root folder, otherwise it is relative to
DATADIR
, i.e.${CMAKE_INSTALL_PREFIX}/share/rawtherapee
- OPTION_OMP
ON
(default) orOFF
.- Build with OpenMP support when enabled, which enables multithreading and makes RawTherapee much faster.
- WITH_LTO
ON
orOFF
(default).- Build with link-time optimizations when enabled, which may make RawTherapee run a little faster.
- WITH_PROF
ON
orOFF
(default).- For debugging purposes. Generate extra code to write profile information suitable for the analysis program gprof.
- WITH_SAN
OFF
(default) or one of various other options.- For debugging purposes. Allows enabling various sanitizers to help detect program issues.
- See GCC manual's Program Instrumentation Options chapter for more information.
- WITH_SYSTEM_KLT
ON
orOFF
(default).- Build using system KLT library when ON, otherwise use KLT files bundled with RawTherapee.
- The Kanade–Lucas–Tomasi (KLT) feature tracker is used by the Auto Distortion Correction tool.
- WITH_BENCHMARK
ON
orOFF
(default).- Build with timing functions enabled to benchmark performance.
- ENABLE_TCMALLOC
ON
orOFF
(default).- In some cases the operating system has trouble handling memory allocation and deallocation required by RawTherapee (see here for more information). Linking against TCMalloc may alleviate these problems. This library may not be available on all platforms or distributions.
Make
Find out how many threads your CPU supports. This only influences the compilation speed, it has no influence over how fast the compiled RawTherapee build runs. To find out how many threads your CPU supports, run this in a terminal:
nproc --all
It will return a number. Use this number for the --jobs
parameter below.
Compile:
cd ~/programs/code-rawtherapee mkdir build cd build cmake \ -DCMAKE_BUILD_TYPE="release" \ -DCACHE_NAME_SUFFIX="5-dev" \ -DPROC_TARGET_NUMBER="2" \ -DBUILD_BUNDLE="ON" \ -DBUNDLE_BASE_INSTALL_DIR="$HOME/programs/rawtherapee" \ -DOPTION_OMP="ON" \ -DWITH_LTO="OFF" \ -DWITH_PROF="OFF" \ -DWITH_SAN="OFF" \ -DWITH_SYSTEM_KLT="OFF" \ .. make --jobs=4 make install
Run RawTherapee
To run RawTherapee:
~/programs/rawtherapee/rawtherapee
Or to run the CLI version:
~/programs/rawtherapee/rawtherapee-cli
The source code repository is in ~/programs/code-rawtherapee
and the compiled program is in ~/programs/rawtherapee
You can safely delete ~/programs/code-rawtherapee
if you so wish. The compiled program will still work, but then you will have to redo all the above steps if you want to update. Rather, leave the repository intact so that you can do the next step in a week or a month's time when you want to update.
Update RawTherapee
Every time you want to update RawTherapee to the latest code available, just do the following:
cd ~/programs/code-rawtherapee git pull
Then repeat the Make step above.
When updating, you can re-use the build
folder from last time to avoid having to recompile things which have not changed, to make the whole process faster. CMake should automatically detect changes. However, there are situations when compilation may fail when re-using an old build
folder - typically that might happen when hopping between very different branches. If that happens, just delete the build
folder, then proceed with the steps in the "Make" section.