gnu: Use the CMake build system's #:build-type key.
[jackhill/guix/guix.git] / gnu / packages / photo.scm
index fff1955..90bc365 100644 (file)
@@ -1,9 +1,11 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2017 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages graphics)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libusb)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xfig)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages xml)
+  #:use-module ((srfi srfi-1) #:hide (zip))
+  #:use-module (srfi srfi-26))
 
 (define-public libraw
   (package
     (name "libraw")
-    (version "0.17.2")
+    (version "0.18.8")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.libraw.org/data/LibRaw-"
+              (uri (string-append "https://www.libraw.org/data/LibRaw-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0p6imxpsfn82i0i9w27fnzq6q6gwzvb9f7sygqqakv36fqnc9c4j"))))
+                "1qi0fkw2zmd0yplrf79z7lgpz0hxl45dj5rdgpaj7283jzys9b2n"))))
     (build-system gnu-build-system)
-    (home-page "http://www.libraw.org")
+    (home-page "https://www.libraw.org")
     (synopsis "Raw image decoder")
     (description
      "LibRaw is a library for reading RAW files obtained from digital photo
@@ -77,6 +93,8 @@ cameras (CRW/CR2, NEF, RAF, DNG, and others).")
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/libexif/libexif/"
                                   version "/libexif-" version ".tar.bz2"))
+              (patches (search-patches "libexif-CVE-2016-6328.patch"
+                                       "libexif-CVE-2017-7544.patch"))
               (sha256
                (base32
                 "06nlsibr3ylfwp28w8f5466l6drgrnydgxrm4jmxzrmk5svaxk8n"))))
@@ -91,14 +109,14 @@ data as produced by digital cameras.")
 (define-public libgphoto2
   (package
     (name "libgphoto2")
-    (version "2.5.11")
+    (version "2.5.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/libgphoto/"
                                   version "/libgphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "1ap070zz6l4kn2mbyxb1yj4x5ar8hpdbmf2pvjxgnly1ss319dkz"))))
+                "01i95av28d0szyvx6l2gjv039r3205wjwjr91nfimq132rnl2mz7"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
@@ -122,14 +140,14 @@ from digital cameras.")
 (define-public gphoto2
   (package
     (name "gphoto2")
-    (version "2.5.11")
+    (version "2.5.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/gphoto/" version
                                   "/gphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "1sgr6rsvzzagcwhc8fxbnvz3k02wr2hab0vrbvcb04k5l3b48a1r"))))
+                "0xsa12k5fz49v8y4h3zahzr427a3ylxaf0k7hybrkp43g4i1lmxf"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -140,15 +158,16 @@ from digital cameras.")
        ("libexif" ,libexif)
        ("libgphoto2" ,libgphoto2)))
     (arguments
-     '(#:phases (alist-cons-before
-                 'check 'pre-check
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (substitute* (find-files "tests/data" "\\.param$")
-                     (("/usr/bin/env")
-                      (which "env"))))
-                 %standard-phases)
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* (find-files "tests/data" "\\.param$")
+               (("/usr/bin/env")
+                (which "env")))
+             #t)))
 
-       ;; FIXME: There are 2 test failures, most likely related to the build
+       ;; FIXME: There is 1 test failure, most likely related to the build
        ;; environment.
        #:tests? #f))
 
@@ -165,7 +184,7 @@ MTP, and much more.")
 (define-public perl-image-exiftool
   (package
     (name "perl-image-exiftool")
-    (version "10.40")
+    (version "10.55")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -173,20 +192,20 @@ MTP, and much more.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1p05d9k94win8a24cr7lsllb6wjl3dagsmdbcxzv6f68z7i1jdly"))))
+                "0z8zwjjfvyllnhsafhddbybywpgqv0pl1dbn1g034cs27yj836q2"))))
     (build-system perl-build-system)
     (arguments
-     '(#:phases (alist-cons-after
-                 'install 'post-install
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   ;; Make sure the 'exiftool' commands finds the library.
-                   ;; XXX: Shouldn't it be handled by PERL-BUILD-SYSTEM?
-                   (let* ((out (assoc-ref outputs "out"))
-                          (pm  (find-files out "^ExifTool\\.pm$"))
-                          (lib (dirname (dirname (car pm)))))
-                     (wrap-program (string-append out "/bin/exiftool")
-                                   `("PERL5LIB" prefix (,lib)))))
-                 %standard-phases)))
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'post-install
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Make sure the 'exiftool' commands finds the library.
+             ;; XXX: Shouldn't it be handled by PERL-BUILD-SYSTEM?
+             (let* ((out (assoc-ref outputs "out"))
+                    (pm  (find-files out "^ExifTool\\.pm$"))
+                    (lib (dirname (dirname (car pm)))))
+               (wrap-program (string-append out "/bin/exiftool")
+                             `("PERL5LIB" prefix (,lib)))))))))
     (home-page "http://search.cpan.org/dist/Image-ExifTool")
     (synopsis "Program and Perl library to manipulate EXIF and other metadata")
     (description "This package provides the @code{exiftool} command and the
@@ -243,7 +262,7 @@ overlapping images, as well as some command line tools.")
        ("help2man" ,help2man)
        ("imagemagick" ,imagemagick)
        ("libxml2" ,libxml2)
-       ("texlive-minimal" ,texlive-minimal)
+       ("texlive-minimal" ,texlive-tiny)
        ("tidy" ,tidy)
        ("transfig" ,transfig)))
     (inputs
@@ -279,7 +298,14 @@ scene to produce an image that looks much like a tone-mapped image.")
                (base32
                 "0cfk8jjhs9nbfjfdy98plrj9ayi59aph0nx6ppslgjhlcvacm2xf"))))
     (build-system cmake-build-system)
-    (arguments `(#:tests? #f)) ; There are no tests to run.
+    (arguments
+     `(,@(if (any (cute string-prefix? <> (or (%current-system)
+                                              (%current-target-system)))
+                  '("x86_64" "i686"))
+        ;; SSE and SSE2 are supported only on Intel processors.
+        '()
+        '(#:configure-flags '("-DBUILD_FOR_SSE=OFF" "-DBUILD_FOR_SSE2=OFF")))
+       #:tests? #f)) ; There are no tests to run.
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
@@ -300,3 +326,198 @@ photographic equipment.")
     ;; licensed GPL3, and the database is license CC-BY-SA 3.0.  See the
     ;; README.md file for this clarification.
     (license (list license:lgpl3 license:gpl3 license:cc-by-sa3.0))))
+
+(define-public darktable
+  (package
+    (name "darktable")
+    (version "2.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/darktable-org/darktable/releases/"
+                    "download/release-"
+                    version "/darktable-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0y0q7a7k09sbg05k5xl1lz8n2ak1v8yarfv222ksvmbrxs53hdwx"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:configure-flags '("-DBINARY_PACKAGE_BUILD=On")
+       #:make-flags
+       (list
+        (string-append "CPATH=" (assoc-ref %build-inputs "ilmbase")
+                       "/include/OpenEXR:" (or (getenv "CPATH") "")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-ldflags
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "LDFLAGS"
+                     (string-append
+                      "-Wl,-rpath="
+                      (assoc-ref outputs "out") "/lib/darktable"))
+             #t)))))
+    (native-inputs
+     `(("llvm" ,llvm-3.9.1)
+       ("clang" ,clang-3.9.1)))
+    (inputs
+     `(("libxslt" ,libxslt)
+       ("libxml2" ,libxml2)
+       ("pugixml" ,pugixml)
+       ("gtk+" ,gtk+)
+       ("sqlite" ,sqlite)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("cairo" ,cairo)
+       ("lcms" ,lcms)
+       ("exiv2" ,exiv2)
+       ("libtiff" ,libtiff)
+       ("curl" ,curl)
+       ("libgphoto2" ,libgphoto2)
+       ("dbus-glib" ,dbus-glib)
+       ("openexr" ,openexr)
+       ("ilmbase" ,ilmbase)
+       ("libsoup" ,libsoup)
+       ("python-jsonschema" ,python-jsonschema)
+       ("intltool" ,intltool)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("libwebp" ,libwebp)
+       ("lensfun" ,lensfun)
+       ("librsvg" ,librsvg)
+       ("json-glib" ,json-glib)
+       ("freeimage" ,freeimage)))
+    (home-page "https://www.darktable.org")
+    (synopsis "Virtual lighttable and darkroom for photographers")
+    (description "Darktable is a photography workflow application and RAW
+developer.  It manages your digital negatives in a database, lets you view
+them through a zoomable lighttable and enables you to develop raw images
+and enhance them.")
+    ;; see src/is_supported_platform.h for supported platforms
+    (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
+    (license license:gpl3+)))
+
+(define-public hugin
+  (package
+    (name "hugin")
+    (version "2016.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/hugin/hugin/hugin-"
+                                  (version-major+minor version)
+                                  "/hugin-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "058zd63vx29yrx2pphbbll7kzcxkai22q26lpw13rn4lvp41pasl"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("gettext" ,gnu-gettext)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("boost" ,boost)
+       ("enblend-enfuse" ,enblend-enfuse)
+       ("exiv2" ,exiv2)
+       ("fftw" ,fftw)
+       ("flann" ,flann)
+       ("freeglut" ,freeglut)
+       ("glew" ,glew)
+       ("lcms" ,lcms)
+       ("libjpeg" ,libjpeg)
+       ("libpano13" ,libpano13)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("libxi" ,libxi)
+       ("libxmu" ,libxmu)
+       ("mesa" ,mesa)
+       ("openexr" ,openexr)
+       ("sqlite" ,sqlite)
+       ("vigra" ,vigra)
+       ("wxwidgets" ,wxwidgets)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f                      ; no check target
+       #:configure-flags
+       (list
+        ;; The header files of ilmbase (propagated by openexr) are not found
+        ;; when included by the header files of openexr, and an explicit
+        ;; flag needs to be set.
+        (string-append "-DCMAKE_CXX_FLAGS=-I"
+                       (assoc-ref %build-inputs "ilmbase")
+                       "/include/OpenEXR")
+        ;; Disable installation of the Python scripting interface.
+        ;; It would require the additional inputs python and swig.
+        ;; Installation would need to be tweaked, as it tries to install
+        ;; into the python directory.
+        "-DBUILD_HSI=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'substitute
+           (lambda _
+             (substitute* "src/hugin1/base_wx/StitchingExecutor.cpp"
+               (("wxT\\(\"enblend\"\\)")
+                (string-append "wxT(\"" (which "enblend") "\")"))
+               (("wxT\\(\"enfuse\"\\)")
+                (string-append "wxT(\"" (which "enfuse") "\")")))
+             #t)))))
+    (home-page "http://hugin.sourceforge.net/")
+    (synopsis "Panorama photo stitcher")
+    (description
+     "Hugin is an easy to use panoramic imaging toolchain with a graphical
+user interface.  It can be used to assemble a mosaic of photographs into
+a complete panorama and stitch any series of overlapping pictures.")
+    (license license:gpl2+)))
+
+(define-public rawtherapee
+  (package
+    (name "rawtherapee")
+    (version "5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://rawtherapee.com/shared/source/"
+                                  "rawtherapee-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1y1ygxqmqfp4zg8rcgrlfdc1597cyr5zqgp5zjpldhvwdfa9r5cp"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f ; no test suite
+       #:build-type "release"
+       #:configure-flags
+       (list (string-append "-DLENSFUNDBDIR="
+                            (assoc-ref %build-inputs "lensfun")
+                            "/share/lensfun")
+             ; Don't optimize the build for the host machine. See the file
+             ; 'ProcessorTargets.cmake' in the source distribution for more
+             ; information.
+             "-DPROC_TARGET_NUMBER=1"
+             ; These flags are recommended by upstream for distributed packages.
+             ; See the file 'RELEASE_NOTES.txt' in the source distribution.
+             "-O3"
+             "-DCACHE_NAME_SUFFIX=\"\"")))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("expat" ,expat)
+       ("fftw" ,fftwf)
+       ("glib" ,glib)
+       ("glibmm" ,glibmm)
+       ("gtk+" ,gtk+)
+       ("gtkmm" ,gtkmm)
+       ("lcms" ,lcms)
+       ("lensfun" ,lensfun)
+       ("libcanberra" ,libcanberra)
+       ("libiptcdata" ,libiptcdata)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libsigc++" ,libsigc++)
+       ("libtiff" ,libtiff)
+       ("zlib" ,zlib)))
+    (home-page "http://rawtherapee.com")
+    (synopsis "Raw image developing and processing")
+    (description "RawTherapee is a raw image processing suite.  It comprises a
+subset of image editing operations specifically aimed at non-destructive raw
+photo post-production and is primarily focused on improving a photographer's
+workflow by facilitating the handling of large numbers of images.  Most raw
+formats are supported, including Pentax Pixel Shift, Canon Dual-Pixel, and those
+from Foveon and X-Trans sensors.")
+    (license license:gpl3+)))