diff options
author | Anderson Torres <torres.anderson.85@protonmail.com> | 2024-03-09 12:48:42 -0300 |
---|---|---|
committer | Anderson Torres <torres.anderson.85@protonmail.com> | 2024-03-09 12:54:14 -0300 |
commit | a47a4508b3ac5f377ac280ffdb1848106097dc79 (patch) | |
tree | 52736fbe2395022f70f8d5f4898d4ea2cef4818e /pkgs/by-name/gm | |
parent | cd3a1aeff78a2e1201c4b3e3099eb639095e1a53 (diff) |
gmic-qt: refactor
- bring uniformity to variants set - set sourceRoot - intern libsForQt5 - migrate to by-name
Diffstat (limited to 'pkgs/by-name/gm')
-rw-r--r-- | pkgs/by-name/gm/gmic-qt/package.nix | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/pkgs/by-name/gm/gmic-qt/package.nix b/pkgs/by-name/gm/gmic-qt/package.nix new file mode 100644 index 0000000000000..abc2c4d0f037f --- /dev/null +++ b/pkgs/by-name/gm/gmic-qt/package.nix @@ -0,0 +1,138 @@ +{ lib +, cimg +, cmake +, coreutils +, curl +, fetchzip +, fftw +, gimp +, gimpPlugins +, gmic +, gnugrep +, gnused +, graphicsmagick +, libjpeg +, libpng +, libsForQt5 +, libtiff +, ninja +, nix-update +, openexr +, pkg-config +, stdenv +, writeShellScript +, zlib +, variant ? "standalone" +}: + +let + variants = { + gimp = { + extraDeps = [ + gimp + gimp.gtk + ]; + description = "GIMP plugin for the G'MIC image processing framework"; + }; + + standalone = { + extraDeps = []; # Just to keep uniformity and avoid test-for-null + 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) + "gmic-qt variant \"${variant}\" is missing one of its dependencies."; + +stdenv.mkDerivation (finalAttrs: { + pname = "gmic-qt${lib.optionalString (variant != "standalone") "-${variant}"}"; + version = "3.3.4"; + + src = fetchzip { + url = "https://gmic.eu/files/source/gmic_${finalAttrs.version}.tar.gz"; + hash = "sha256-/Hh5yzH//i01kyeoqETokvsKUOcY2iZsiYJBEmgw1rU="; + }; + + sourceRoot = "${finalAttrs.src.name}/gmic-qt"; + + nativeBuildInputs = [ + cmake + libsForQt5.wrapQtAppsHook + ninja + pkg-config + ]; + + buildInputs = [ + curl + fftw + gmic + graphicsmagick + libjpeg + libpng + libtiff + openexr + zlib + ] ++ (with libsForQt5; [ + qtbase + qttools + ]) ++ variants.${variant}.extraDeps; + + postPatch = '' + patchShebangs \ + translations/filters/csv2ts.sh \ + translations/lrelease.sh + ''; + + cmakeFlags = [ + (lib.cmakeBool "ENABLE_DYNAMIC_LINKING" true) + (lib.cmakeBool "ENABLE_SYSTEM_GMIC" true) + (lib.cmakeFeature "GMIC_QT_HOST" (if variant == "standalone" then "none" else variant)) + ]; + + 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 = { + # They need to be update in lockstep. + gimp-plugin = gimpPlugins.gmic; + inherit cimg gmic; + }; + + updateScript = writeShellScript "gmic-qt-update-script" '' + set -euo pipefail + + export PATH="${lib.makeBinPath [ coreutils curl gnugrep gnused nix-update ]}:$PATH" + + 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 [[ '${finalAttrs.version}' = "$latestVersion" ]]; then + echo "The new version same as the old version." + exit 0 + fi + + nix-update --version "$latestVersion" + ''; + }; + + meta = { + homepage = "http://gmic.eu/"; + inherit (variants.${variant}) description; + license = lib.licenses.gpl3Plus; + mainProgram = "gmic_qt"; + maintainers = with lib.maintainers; [ AndersonTorres lilyinstarlight ]; + platforms = lib.platforms.unix; + }; +}) |