about summary refs log tree commit diff
path: root/pkgs/tools/graphics/gmic/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools/graphics/gmic/default.nix')
-rw-r--r--pkgs/tools/graphics/gmic/default.nix61
1 files changed, 56 insertions, 5 deletions
diff --git a/pkgs/tools/graphics/gmic/default.nix b/pkgs/tools/graphics/gmic/default.nix
index a046aca799c95..42bfe8ad05210 100644
--- a/pkgs/tools/graphics/gmic/default.nix
+++ b/pkgs/tools/graphics/gmic/default.nix
@@ -1,4 +1,6 @@
-{ lib, stdenv
+{ stdenv
+, lib
+, fetchFromGitHub
 , fetchurl
 , cmake
 , ninja
@@ -6,22 +8,40 @@
 , opencv
 , openexr
 , graphicsmagick
+, cimg
 , fftw
 , zlib
 , libjpeg
 , libtiff
 , libpng
+, writeShellScript
+, common-updater-scripts
+, curl
+, gnugrep
+, gnused
+, coreutils
+, jq
 }:
 
 stdenv.mkDerivation rec {
   pname = "gmic";
-  version = "3.0.0";
+  version = "3.1.5";
 
   outputs = [ "out" "lib" "dev" "man" ];
 
-  src = fetchurl {
-    url = "https://gmic.eu/files/source/gmic_${version}.tar.gz";
-    sha256 = "sha256-PwVruebb8GdK9Mjc5Z9BmBchh2Yvf7s2zGPryMG3ESA=";
+  src = fetchFromGitHub {
+    owner = "dtschump";
+    repo = "gmic";
+    rev = "326ea9b7dc320b3624fe660d7b7d81669ca12e6d";
+    sha256 = "RRCzYMN/IXViiUNnacJV3DNpku3hIHQkHbIrtixExT0=";
+  };
+
+  # TODO: build this from source
+  # https://github.com/dtschump/gmic/blob/b36b2428db5926af5eea5454f822f369c2d9907e/src/Makefile#L675-L729
+  gmic_stdlib = fetchurl {
+    name = "gmic_stdlib.h";
+    url = "http://gmic.eu/gmic_stdlib${lib.replaceStrings ["."] [""] version}.h";
+    sha256 = "FM8RscCrt6jYlwVB2DtpqYrh9B3pO0I6Y69tkf9W1/o=";
   };
 
   nativeBuildInputs = [
@@ -31,6 +51,7 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
+    cimg
     fftw
     zlib
     libjpeg
@@ -45,8 +66,38 @@ stdenv.mkDerivation rec {
     "-DBUILD_LIB_STATIC=OFF"
     "-DENABLE_CURL=OFF"
     "-DENABLE_DYNAMIC_LINKING=ON"
+    "-DUSE_SYSTEM_CIMG=ON"
   ];
 
+  postPatch = ''
+    # TODO: build from source
+    cp -r ${gmic_stdlib} src/gmic_stdlib.h
+
+    # CMake build files were moved to subdirectory.
+    mv resources/CMakeLists.txt resources/cmake .
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "${pname}-update-script" ''
+      set -o errexit
+      PATH=${lib.makeBinPath [ common-updater-scripts curl gnugrep gnused coreutils jq ]}
+
+      latestVersion=$(curl 'https://gmic.eu/files/source/' | grep -E 'gmic_[^"]+\.tar\.gz' | sed -E 's/.+<a href="gmic_([^"]+)\.tar\.gz".+/\1/g' | sort --numeric-sort --reverse | head -n1)
+
+      if [[ "${version}" = "$latestVersion" ]]; then
+          echo "The new version same as the old version."
+          exit 0
+      fi
+
+      for component in src gmic_stdlib; do
+          # The script will not perform an update when the version attribute is up to date from previous platform run
+          # We need to clear it before each run
+          update-source-version "--source-key=$component" "gmic" 0 "$(printf '0%.0s' {1..64})"
+          update-source-version "--source-key=$component" "gmic" $latestVersion
+      done
+    '';
+  };
+
   meta = with lib; {
     description = "Open and full-featured framework for image processing";
     homepage = "https://gmic.eu/";