bottom: add gpu recognition, new apple sdk, refactor (#360568)
[NixPkgs.git] / pkgs / by-name / gm / gmic-qt / package.nix
blobad7ec1323da153cf449770d625eca0bcbfd2f265
2   lib,
3   cimg,
4   cmake,
5   curl,
6   fetchFromGitHub,
7   fftw,
8   gimp,
9   gimpPlugins,
10   gmic,
11   graphicsmagick,
12   libjpeg,
13   libpng,
14   libsForQt5,
15   libtiff,
16   llvmPackages,
17   ninja,
18   nix-update-script,
19   openexr,
20   pkg-config,
21   stdenv,
22   zlib,
23   variant ? "standalone",
26 let
27   variants = {
28     gimp = {
29       extraDeps = [
30         gimp
31         gimp.gtk
32       ];
33       description = "GIMP plugin for the G'MIC image processing framework";
34     };
36     standalone = {
37       extraDeps = [ ]; # Just to keep uniformity and avoid test-for-null
38       description = "Versatile front-end to the image processing framework G'MIC";
39     };
40   };
44 assert lib.assertMsg (builtins.hasAttr variant variants)
45   "gmic-qt variant \"${variant}\" is not supported. Please use one of ${lib.concatStringsSep ", " (builtins.attrNames variants)}.";
47 assert lib.assertMsg (builtins.all (d: d != null)
48   variants.${variant}.extraDeps
49 ) "gmic-qt variant \"${variant}\" is missing one of its dependencies.";
51 stdenv.mkDerivation (finalAttrs: {
52   pname = "gmic-qt${lib.optionalString (variant != "standalone") "-${variant}"}";
53   version = "3.4.2";
55   src = fetchFromGitHub {
56     owner = "c-koi";
57     repo = "gmic-qt";
58     rev = "v.${finalAttrs.version}";
59     hash = "sha256-fM6dBxBC2b1/v+rfiP//QaAcTJmMtYPn4OUNwVqKhYk=";
60   };
62   nativeBuildInputs = [
63     cmake
64     libsForQt5.wrapQtAppsHook
65     ninja
66     pkg-config
67   ];
69   buildInputs =
70     [
71       cimg
72       curl
73       fftw
74       gmic
75       graphicsmagick
76       libjpeg
77       libpng
78       libtiff
79       openexr
80       zlib
81     ]
82     ++ (with libsForQt5; [
83       qtbase
84       qttools
85     ])
86     ++ lib.optionals stdenv.cc.isClang [
87       llvmPackages.openmp
88     ]
89     ++ variants.${variant}.extraDeps;
91   postPatch = ''
92     patchShebangs \
93       translations/filters/csv2ts.sh \
94       translations/lrelease.sh
96     mkdir ../src
97     ln -s ${gmic.src}/src/gmic.cpp ../src/gmic.cpp
98   '';
100   cmakeFlags = [
101     (lib.cmakeBool "ENABLE_DYNAMIC_LINKING" true)
102     (lib.cmakeBool "ENABLE_SYSTEM_GMIC" true)
103     (lib.cmakeFeature "GMIC_QT_HOST" (if variant == "standalone" then "none" else variant))
104   ];
106   postFixup = lib.optionalString (variant == "gimp") ''
107     echo "wrapping $out/${gimp.targetPluginDir}/gmic_gimp_qt/gmic_gimp_qt"
108     wrapQtApp "$out/${gimp.targetPluginDir}/gmic_gimp_qt/gmic_gimp_qt"
109   '';
111   passthru = {
112     tests = {
113       # They need to be update in lockstep.
114       gimp-plugin = gimpPlugins.gmic;
115       inherit cimg gmic;
116     };
118     updateScript = nix-update-script {
119       extraArgs = [
120         "--version-regex"
121         "^v\\.(.*)"
122       ];
123     };
124   };
126   meta = {
127     homepage = "http://gmic.eu/";
128     inherit (variants.${variant}) description;
129     license = lib.licenses.gpl3Plus;
130     mainProgram = "gmic_qt";
131     maintainers = with lib.maintainers; [ AndersonTorres ];
132     platforms = lib.platforms.unix;
133   };