nixpkgs/pkgs/tools/graphics/gmic-qt/default.nix
Jan Tojnar 63e4a92217 gmic-qt: Mark as broken
Ever since the gmic 3.2.0 bump, it just does not build – it tries to use stub definitions for gmic_image from src/GmicQt.h, leading to errors like:

    /build/source/src/GmicQt.cpp:344:11: error: 'struct gmic_library::gmic_image<unsigned char>' has no member named 'channels'
      344 |       img.channels(0, 3);
          |       ~~~~^~~~~~~~

gmic-qt 3.2.1 contains a supposed fix (f0d9d8acd1) which might have actually fixed the gmic_image issue but it introduces another one with cimg.

    gmic-3.2.1-dev/include/gmic.h:191:21: fatal error: gmic.cpp: No such file or directory
      191 | #define cimg_plugin "gmic.cpp"
          |                     ^~~~~~~~~~

I do not really understand qmake, deprecated build system which gmic author insists on using for gmic-qt, and the trio of libraries is convoluted enough (mutually including their various headers and source files) that I gave up on creating an usable CMake build script that supports system libraries. It does not help that the git history is obfuscated, making proper investigation annoying.

Marking it as broken will at least make gimp-with-plugins work.
2023-02-19 22:56:19 +01:00

118 lines
2.3 KiB
Nix

{ lib
, mkDerivation
, variant ? "standalone"
, fetchFromGitHub
, cmake
, pkg-config
, ninja
, opencv3
, openexr
, graphicsmagick
, fftw
, zlib
, libjpeg
, libtiff
, libpng
, curl
, gimp ? null
, gmic
, cimg
, qtbase
, qttools
, writeShellScript
, common-updater-scripts
, gnugrep
, gnused
, coreutils
, jq
, nix-update-script
, gimpPlugins
}:
let
variants = {
gimp = {
extraDeps = [
gimp
gimp.gtk
];
description = "GIMP plugin for the G'MIC image processing framework";
};
standalone = {
description = "Versatile front-end to the image processing framework G'MIC";
};
};
in
assert lib.assertMsg (builtins.hasAttr variant variants) "gmic-qt variant ${variant} is not supported. Please use one of ${lib.concatStringsSep ", " (builtins.attrNames variants)}.";
assert lib.assertMsg (builtins.all (d: d != null) variants.${variant}.extraDeps or []) "gmic-qt variant ${variant} is missing one of its dependencies.";
mkDerivation rec {
pname = "gmic-qt${lib.optionalString (variant != "standalone") "-${variant}"}";
version = "3.2.1";
src = fetchFromGitHub {
owner = "c-koi";
repo = "gmic-qt";
rev = "v.${version}";
sha256 = "sha256-z+GtYLBcHVufXwdeSd8WKmPmU1+/EKMv26kNaEgyt5w=";
};
nativeBuildInputs = [
cmake
pkg-config
ninja
];
buildInputs = [
gmic
cimg
qtbase
qttools
fftw
zlib
libjpeg
libtiff
libpng
opencv3
openexr
graphicsmagick
curl
] ++ variants.${variant}.extraDeps or [];
cmakeFlags = [
"-DGMIC_QT_HOST=${if variant == "standalone" then "none" else variant}"
"-DENABLE_SYSTEM_GMIC:BOOL=ON"
];
postPatch = ''
patchShebangs \
translations/filters/csv2ts.sh \
translations/lrelease.sh
'';
postFixup = lib.optionalString (variant == "gimp") ''
echo "wrapping $out/${gimp.targetPluginDir}/gmic_gimp_qt/gmic_gimp_qt"
wrapQtApp "$out/${gimp.targetPluginDir}/gmic_gimp_qt/gmic_gimp_qt"
'';
passthru = {
tests = {
gimp-plugin = gimpPlugins.gmic;
};
updateScript = nix-update-script { };
};
meta = with lib; {
# Broken since 3.2.0 update, cannot handle system gmic and cimg.
broken = true;
description = variants.${variant}.description;
homepage = "http://gmic.eu/";
license = licenses.gpl3Plus;
platforms = platforms.unix;
};
}