summary refs log tree commit diff
path: root/pkgs/applications/graphics
diff options
context:
space:
mode:
authorzimbatm <zimbatm@zimbatm.com>2016-03-13 23:57:24 +0000
committerzimbatm <zimbatm@zimbatm.com>2016-03-13 23:57:24 +0000
commit34721289d95549d9d30fdc3d96abbcd9a5e33daf (patch)
treeeb74072cc933893f1defa2754f31a6c3b1f5782b /pkgs/applications/graphics
parent305fa260052f51b50ae61e6419f8c9ec7bc94d0b (diff)
parentd2c8919a16a37db7ad3a9d1dee155a9d095f62cd (diff)
downloadnixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.tar
nixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.tar.gz
nixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.tar.bz2
nixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.tar.lz
nixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.tar.xz
nixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.tar.zst
nixlib-34721289d95549d9d30fdc3d96abbcd9a5e33daf.zip
Merge pull request #10219 from jraygauthier/jrg/digikam_improvement_rebased_head
digikam: improvements
Diffstat (limited to 'pkgs/applications/graphics')
-rw-r--r--pkgs/applications/graphics/digikam/default.nix224
1 files changed, 202 insertions, 22 deletions
diff --git a/pkgs/applications/graphics/digikam/default.nix b/pkgs/applications/graphics/digikam/default.nix
index bdf8077624db..a41e1ad07d3c 100644
--- a/pkgs/applications/graphics/digikam/default.nix
+++ b/pkgs/applications/graphics/digikam/default.nix
@@ -3,42 +3,222 @@
 , 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
 }:
 
-stdenv.mkDerivation rec {
-  name = "digikam-4.12.0";
+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";
+    };
+
+    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}/lib"
+      "-DLIBUSB_INCLUDE_DIR=${libusb1}/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" ];
 
-  src = fetchurl {
-    url = "http://download.kde.org/stable/digikam/${name}.tar.bz2";
-    sha256 = "081ldsaf3frf5khznjd3sxkjmi4dyp6w6nqnc2a0agkk0kxkl10m";
+    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;
+    };
   };
 
-  nativeBuildInputs = [ automoc4 cmake gettext perl pkgconfig ];
 
-  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
+  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
   ];
 
-  # Make digikam find some FindXXXX.cmake
-  KDEDIRS="${marble}:${qjson}";
 
-  # Help digiKam find libusb, otherwise gphoto2 support is disabled
-  cmakeFlags = [
-    "-DLIBUSB_LIBRARIES=${libusb1}/lib"
-    "-DLIBUSB_INCLUDE_DIR=${libusb1}/include/libusb-1.0"
-    "-DDIGIKAMSC_COMPILE_LIBKFACE=ON"
-  ];
+  # 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
 
-  enableParallelBuilding = true;
+    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; [ goibhniu viric urkud ];
+    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.
+
+*/