From 319f05e7db9e84302557f1279f4d68a707932e1d Mon Sep 17 00:00:00 2001 From: zzzsyyy Date: Fri, 29 Mar 2024 20:41:25 +0800 Subject: [PATCH] libjxl: build gdk-pixbuf loader and thumbnailer --- pkgs/development/libraries/libjxl/default.nix | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libjxl/default.nix b/pkgs/development/libraries/libjxl/default.nix index 10dcc29785bd6..38414e56d7d2f 100644 --- a/pkgs/development/libraries/libjxl/default.nix +++ b/pkgs/development/libraries/libjxl/default.nix @@ -8,15 +8,22 @@ , libjpeg , libpng , libwebp +, gdk-pixbuf , openexr_3 , pkg-config +, makeWrapper , zlib , asciidoc , graphviz , doxygen , python3 +, lcms2 }: +let + loadersPath = "${gdk-pixbuf.binaryDir}/jxl-loaders.cache"; +in + stdenv.mkDerivation rec { pname = "libjxl"; version = "0.9.1"; @@ -37,6 +44,8 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake pkg-config + gdk-pixbuf + makeWrapper asciidoc doxygen python3 @@ -63,12 +72,14 @@ stdenv.mkDerivation rec { # conclusively in its README or otherwise; they can best be determined # by checking the CMake output for "Could NOT find". buildInputs = [ + lcms2 giflib gperftools # provides `libtcmalloc` gtest libjpeg libpng libwebp + gdk-pixbuf openexr_3 zlib ]; @@ -96,17 +107,30 @@ stdenv.mkDerivation rec { # Viewer tools for evaluation. # "-DJPEGXL_ENABLE_VIEWERS=ON" - # TODO: Update this package to enable this (overridably via an option): # Enable plugins, such as: # * the `gdk-pixbuf` one, which allows applications like `eog` to load jpeg-xl files # * the `gimp` one, which allows GIMP to load jpeg-xl files - # "-DJPEGXL_ENABLE_PLUGINS=ON" + "-DJPEGXL_ENABLE_PLUGINS=ON" ] ++ lib.optionals stdenv.hostPlatform.isStatic [ "-DJPEGXL_STATIC=ON" ] ++ lib.optionals stdenv.hostPlatform.isAarch32 [ "-DJPEGXL_FORCE_NEON=ON" ]; + postPatch = '' + substituteInPlace plugins/gdk-pixbuf/jxl.thumbnailer \ + --replace '/usr/bin/gdk-pixbuf-thumbnailer' "$out/libexec/gdk-pixbuf-thumbnailer-jxl" + ''; + + postInstall = '' + GDK_PIXBUF_MODULEDIR="$out/${gdk-pixbuf.moduleDir}" \ + GDK_PIXBUF_MODULE_FILE="$out/${loadersPath}" \ + gdk-pixbuf-query-loaders --update-cache + mkdir -p "$out/bin" + makeWrapper ${gdk-pixbuf}/bin/gdk-pixbuf-thumbnailer "$out/libexec/gdk-pixbuf-thumbnailer-jxl" \ + --set GDK_PIXBUF_MODULE_FILE "$out/${loadersPath}" + ''; + CXXFLAGS = lib.optionalString stdenv.hostPlatform.isAarch32 "-mfp16-format=ieee"; # FIXME x86_64-darwin: