Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / libavif / default.nix
blob27aaef5464330300d8929d88dea043693b99c5cf
1 { lib, stdenv
2 , fetchFromGitHub
3 , libaom
4 , cmake
5 , pkg-config
6 , zlib
7 , libpng
8 , libjpeg
9 , dav1d
10 , libyuv
11 , gdk-pixbuf
12 , makeWrapper
15 let
16   gdkPixbufModuleDir = "${placeholder "out"}/${gdk-pixbuf.moduleDir}";
17   gdkPixbufModuleFile = "${placeholder "out"}/${gdk-pixbuf.binaryDir}/avif-loaders.cache";
20 stdenv.mkDerivation rec {
21   pname = "libavif";
22   version = "1.0.1";
24   src = fetchFromGitHub {
25     owner = "AOMediaCodec";
26     repo = pname;
27     rev = "v${version}";
28     sha256 = "sha256-3zNhKl8REWsRlblXIFD7zn7qvrc/pa4wHZI0oEc3pKE=";
29   };
31   # reco: encode libaom slowest but best, decode dav1d fastest
33   cmakeFlags = [
34     "-DBUILD_SHARED_LIBS=ON"
35     "-DAVIF_CODEC_AOM=ON" # best encoder (slow but small)
36     "-DAVIF_CODEC_DAV1D=ON" # best decoder (fast)
37     "-DAVIF_CODEC_AOM_DECODE=OFF"
38     "-DAVIF_BUILD_APPS=ON"
39     "-DAVIF_BUILD_GDK_PIXBUF=ON"
40   ];
42   nativeBuildInputs = [
43     cmake
44     pkg-config
45     gdk-pixbuf
46     makeWrapper
47   ];
49   buildInputs = [
50     gdk-pixbuf
51     libaom
52     zlib
53     libpng
54     libjpeg
55     dav1d
56     libyuv
57   ];
59   postPatch = ''
60     substituteInPlace contrib/gdk-pixbuf/avif.thumbnailer.in \
61       --replace '@CMAKE_INSTALL_FULL_BINDIR@/gdk-pixbuf-thumbnailer' "$out/libexec/gdk-pixbuf-thumbnailer-avif"
62   '';
64   env.PKG_CONFIG_GDK_PIXBUF_2_0_GDK_PIXBUF_MODULEDIR = gdkPixbufModuleDir;
66   postInstall = ''
67     GDK_PIXBUF_MODULEDIR=${gdkPixbufModuleDir} \
68     GDK_PIXBUF_MODULE_FILE=${gdkPixbufModuleFile} \
69     gdk-pixbuf-query-loaders --update-cache
71   ''
72   # Cross-compiled gdk-pixbuf doesn't support thumbnailers
73   + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
74     mkdir -p "$out/bin"
75     makeWrapper ${gdk-pixbuf}/bin/gdk-pixbuf-thumbnailer "$out/libexec/gdk-pixbuf-thumbnailer-avif" \
76       --set GDK_PIXBUF_MODULE_FILE ${gdkPixbufModuleFile}
77   '';
79   meta = with lib; {
80     description  = "C implementation of the AV1 Image File Format";
81     longDescription = ''
82       Libavif aims to be a friendly, portable C implementation of the
83       AV1 Image File Format. It is a work-in-progress, but can already
84       encode and decode all AOM supported YUV formats and bit depths
85       (with alpha). It also features an encoder and a decoder
86       (avifenc/avifdec).
87     '';
88     homepage    = "https://github.com/AOMediaCodec/libavif";
89     changelog   = "https://github.com/AOMediaCodec/libavif/blob/v${version}/CHANGELOG.md";
90     maintainers = with maintainers; [ mkg20001 ];
91     platforms   = platforms.all;
92     license     = licenses.bsd2;
93   };