python312Packages.types-aiobotocore: 2.15.2 -> 2.15.2.post3 (#361801)
[NixPkgs.git] / pkgs / by-name / gm / gmic / package.nix
blob21ebebd8f67720322dcc3c542130b9dbd63cd683
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchurl
5 , cimg
6 , cmake
7 , common-updater-scripts
8 , coreutils
9 , curl
10 , fftw
11 , gmic-qt
12 , gnugrep
13 , gnused
14 , graphicsmagick
15 , jq
16 , libX11
17 , libXext
18 , libjpeg
19 , libpng
20 , libtiff
21 , llvmPackages
22 , ninja
23 , opencv
24 , openexr
25 , pkg-config
26 , writeShellScript
27 , zlib
30 stdenv.mkDerivation (finalAttrs: {
31   pname = "gmic";
32   version = "3.4.3";
34   outputs = [ "out" "lib" "dev" "man" ];
36   src = fetchFromGitHub {
37     owner = "GreycLab";
38     repo = "gmic";
39     rev = "v.${finalAttrs.version}";
40     hash = "sha256-dYHADdt9PboUgIRU6wu5uCs2KQ88z5/FZPXvvyYct00=";
41   };
43   # TODO: build this from source
44   # Reference: src/Makefile, directive gmic_stdlib_community.h
45   gmic_stdlib = fetchurl {
46     name = "gmic_stdlib_community.h";
47     url = "https://gmic.eu/gmic_stdlib_community${lib.replaceStrings ["."] [""] finalAttrs.version}.h";
48     hash = "sha256-M/AL1w9KGi+dIGVQ+vdWY8PSCHi+s/aZef08AxeQMJE=";
49   };
51   nativeBuildInputs = [
52     cmake
53     ninja
54     pkg-config
55   ];
57   buildInputs = [
58     cimg
59     fftw
60     graphicsmagick
61     libX11
62     libXext
63     libjpeg
64     libpng
65     libtiff
66     opencv
67     openexr
68     zlib
69   ] ++ lib.optionals stdenv.cc.isClang [
70     llvmPackages.openmp
71   ];
73   cmakeFlags = [
74     (lib.cmakeBool "BUILD_LIB_STATIC" false)
75     (lib.cmakeBool "ENABLE_CURL" false)
76     (lib.cmakeBool "ENABLE_DYNAMIC_LINKING" true)
77     (lib.cmakeBool "ENABLE_OPENCV" true)
78     (lib.cmakeBool "ENABLE_XSHM" true)
79     (lib.cmakeBool "USE_SYSTEM_CIMG" true)
80   ];
82   postPatch = ''
83     cp -r ${finalAttrs.gmic_stdlib} src/gmic_stdlib_community.h
84   ''
85   + lib.optionalString stdenv.hostPlatform.isDarwin ''
86     substituteInPlace CMakeLists.txt \
87       --replace "LD_LIBRARY_PATH" "DYLD_LIBRARY_PATH"
88   '';
90   passthru = {
91     tests = {
92       # Needs to update them all in lockstep.
93       inherit cimg gmic-qt;
94     };
96     updateScript = writeShellScript "gmic-update-script" ''
97       set -o errexit
98       PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep gnused jq ]}
100       latestVersion=$(curl 'https://gmic.eu/files/source/' \
101                        | grep -E 'gmic_[^"]+\.tar\.gz' \
102                        | sed -E 's/.+<a href="gmic_([^"]+)\.tar\.gz".+/\1/g' \
103                        | sort --numeric-sort --reverse | head -n1)
105       if [[ "${finalAttrs.version}" = "$latestVersion" ]]; then
106           echo "The new version same as the old version."
107           exit 0
108       fi
110       for component in src gmic_stdlib; do
111           update-source-version "--source-key=$component" "gmic" $latestVersion --ignore-same-version
112       done
113     '';
114   };
116   meta = {
117     homepage = "https://gmic.eu/";
118     description = "Open and full-featured framework for image processing";
119     mainProgram = "gmic";
120     license = lib.licenses.cecill21;
121     maintainers = [
122       lib.maintainers.AndersonTorres
123     ];
124     platforms = lib.platforms.unix;
125   };