nixpkgs/pkgs/applications/graphics/digikam/default.nix

235 lines
7.4 KiB
Nix

{ stdenv, fetchurl, fetchpatch, automoc4, boost, shared_desktop_ontologies
, cmake, eigen, lcms, gettext, jasper, kdelibs, kdepimlibs, lensfun
, libgphoto2, libjpeg, libkdcraw, libkexiv2, libkipi, libpgf, libtiff
, libusb1, liblqr1, marble, mysql, opencv, perl, phonon, pkgconfig
, qca2, qimageblitz, qjson, qt4, soprano
# Optional build time dependencies
, baloo, doxygen, kfilemetadata
, lcms2
, kfaceSupport ? true, libkface ? null
, kgeomapSupport ? true, libkgeomap ? null
, libxslt
# Plugins optional build time dependencies
, gdk_pixbuf, imagemagick
, libgpod, libksane, libkvkontakte
, qt_gstreamer1 /*qt_soap, <https://github.com/commontk/QtSOAP> herqq <http://www.herqq.org> -> is missing its av part.*/
/*qt_koauth <http://gitorious.org/kqoauth>*/
# Supplementary packages required only by the wrapper.
, bash, kde_runtime, kde_baseapps, makeWrapper, oxygen_icons
, phonon-backend-vlc /*phonon-backend-gstreamer,*/
, ffmpegthumbs /*mplayerthumbs*/
, runCommand, shared_mime_info, writeScriptBin
}:
let
version = "4.12.0";
pName = "digikam-${version}";
build = stdenv.mkDerivation rec {
name = "digikam-build-${version}";
src = fetchurl {
url = "http://download.kde.org/stable/digikam/${pName}.tar.bz2";
sha256 = "081ldsaf3frf5khznjd3sxkjmi4dyp6w6nqnc2a0agkk0kxkl10m";
};
patches = [
(fetchpatch {
# Fix compilation against Lensfun 0.3.2
url = "http://cgit.kde.org/digikam.git/patch/?id=0f159981176faa6da701f112bfe557b79804d468";
sha256 = "1c8bg7s84vg4v620gbs16cjcbpml749018gy5dpvfacx5vl24wza";
})
];
patchFlags = ["-p1" "-dcore"];
nativeBuildInputs = [
automoc4 cmake gettext perl pkgconfig
] ++ [
# Optional
doxygen
];
buildInputs = [
boost eigen jasper kdelibs kdepimlibs lcms lensfun
libgphoto2 libjpeg libkdcraw libkexiv2 libkipi liblqr1 libpgf
libtiff marble mysql.lib opencv phonon qca2 qimageblitz qjson qt4
shared_desktop_ontologies soprano ]
# Optional build time dependencies
++ [
baloo
kfilemetadata
lcms2 ]
++ stdenv.lib.optional (kfaceSupport && null != libkface) [ libkface ]
++ stdenv.lib.optional (kgeomapSupport && null != libkgeomap) [ libkgeomap ] ++
[ libxslt ]
# Plugins optional build time dependencies
++ [
gdk_pixbuf imagemagick libgpod libksane
libkvkontakte
qt_gstreamer1 ];
# Make digikam find some FindXXXX.cmake
KDEDIRS="${marble}:${qjson}";
# Find kdepimlibs's upper case headers under `include/KDE`.
NIX_CFLAGS_COMPILE = "-I${kdepimlibs}/include/KDE";
# Help digiKam find libusb, otherwise gphoto2 support is disabled
cmakeFlags = [
"-DLIBUSB_LIBRARIES=${libusb1.out}/lib"
"-DLIBUSB_INCLUDE_DIR=${libusb1.dev}/include/libusb-1.0"
"-DENABLE_BALOOSUPPORT=ON"
"-DENABLE_KDEPIMLIBSSUPPORT=ON"
"-DENABLE_LCMS2=ON" ]
++ stdenv.lib.optional (kfaceSupport && null == libkface) [ "-DDIGIKAMSC_COMPILE_LIBKFACE=ON" ]
++ stdenv.lib.optional (kgeomapSupport && null == libkgeomap) [ "-DDIGIKAMSC_COMPILE_LIBKGEOMAP=ON" ];
enableParallelBuilding = true;
meta = {
description = "Photo Management Program";
license = stdenv.lib.licenses.gpl2;
homepage = http://www.digikam.org;
maintainers = with stdenv.lib.maintainers; [ goibhniu viric urkud ];
inherit (kdelibs.meta) platforms;
};
};
kdePkgs = [
build # digikam's own build
kdelibs kdepimlibs kde_runtime kde_baseapps libkdcraw oxygen_icons
/*phonon-backend-gstreamer*/ phonon-backend-vlc
ffmpegthumbs /*mplayerthumbs*/ shared_mime_info ]
# Optional build time dependencies
++ [
baloo kfilemetadata ]
++ stdenv.lib.optional (kfaceSupport && null != libkface) [ libkface ]
++ stdenv.lib.optional (kgeomapSupport && null != libkgeomap) [ libkgeomap ]
++ [
libkipi ]
# Plugins optional build time dependencies
++ [
libksane libkvkontakte
];
# TODO: It should be the responsability of these packages to add themselves to `KDEDIRS`. See
# <https://github.com/ttuegel/nixpkgs/commit/a0efeacc0ef2cf63bbb768bfb172a483307d080b> for
# a practical example.
# IMPORTANT: Note that using `XDG_DATA_DIRS` here instead of `KDEDIRS` won't work properly.
KDEDIRS = with stdenv.lib; concatStrings (intersperse ":" (map (x: "${x}") kdePkgs));
sycocaDirRelPath = "var/lib/kdesycoca";
sycocaFileRelPath = "${sycocaDirRelPath}/${pName}.sycoca";
sycoca = runCommand "${pName}" {
name = "digikam-sycoca-${version}";
nativeBuildInputs = [ kdelibs ];
dontPatchELF = true;
dontStrip = true;
} ''
# Make sure kbuildsycoca4 does not attempt to write to user home directory.
export HOME=$PWD
export KDESYCOCA="$out/${sycocaFileRelPath}"
mkdir -p $out/${sycocaDirRelPath}
export XDG_DATA_DIRS=""
export KDEDIRS="${KDEDIRS}"
kbuildsycoca4 --noincremental --nosignal
'';
replaceExeListWithWrapped =
let f = exeName: ''
rm -f "$out/bin/${exeName}"
makeWrapper "${build}/bin/${exeName}" "$out/bin/${exeName}" \
--set XDG_DATA_DIRS "" \
--set KDEDIRS "${KDEDIRS}" \
--set KDESYCOCA "${sycoca}/${sycocaFileRelPath}"
'';
in
with stdenv.lib; exeNameList: concatStrings (intersperse "\n" (map f exeNameList));
in
with stdenv.lib;
/*
Final derivation
----------------
- Create symlinks to our original build derivation items.
- Wrap specific executables so that they know of the appropriate
sycoca database, `KDEDIRS` to use and block any interference
from `XDG_DATA_DIRS` (only `dnginfo` is not wrapped).
*/
runCommand "${pName}" {
inherit build;
inherit sycoca;
nativeBuildInputs = [ makeWrapper ];
buildInputs = kdePkgs;
dontPatchELF = true;
dontStrip = true;
meta = {
description = "Photo Management Program";
license = stdenv.lib.licenses.gpl2;
homepage = http://www.digikam.org;
maintainers = with stdenv.lib.maintainers; [ /*jraygauthier*/ ];
inherit (kdelibs.meta) platforms;
};
} ''
pushd $build > /dev/null
for d in `find . -maxdepth 1 -name "*" -printf "%f\n" | tail -n+2`; do
mkdir -p $out/$d
for f in `find $d -maxdepth 1 -name "*" -printf "%f\n" | tail -n+2`; do
ln -s "$build/$d/$f" "$out/$d/$f"
done
done
popd > /dev/null
${replaceExeListWithWrapped [ "cleanup_digikamdb" "digitaglinktree" "digikam" "dngconverter"
"expoblending" "photolayoutseditor" "scangui" "showfoto" ]}
''
/*
TODO
----
### Useful ###
- Per lib `KDELIBS` environment variable export. See above in-code TODO comment.
- Missing optional `qt_soap` or `herqq` (av + normal package) dependencies. Those are not
yet (or not fully) packaged in nix. Mainly required for upnp export.
- Possibility to use the `phonon-backend-gstreamer` with its own user specified set of backend.
- Allow user to disable optional features or dependencies reacting properly.
- Compile `kipiplugins` as a separate package (so that it can be used by other kde packages
and so that this package's build time is reduced).
### Not so useful ###
- Missing optional `qt_koauth` (not packaged in nix).
- Missing optional `libmediawiki` (not packaged in nix)..
- For some reason the cmake build does not detect `libkvkontakte`. Fix this.
- Possibility to use `mplayerthumbs` thumbnail creator backend. In digikam dev docs,
it is however suggested to use `ffmpegthumbs`. Maybe we should stick to it.
*/