cairo: 1.16.0 -> 1.18.0

- libiconv and expat are no longer used.
 - libintl and xcbutil no longer appear to be used.
 - The GL backend has been removed.
 - We can no longer disable PDF support, since something always
   propagates zlib.
 - Not sure whether the Requires.private is still needed, so I've left
   it.
This commit is contained in:
Alyssa Ross
2023-10-20 22:03:10 +00:00
parent 77d52cd3f1
commit 2c0a4f46b9
+52 -108
View File
@@ -1,12 +1,8 @@
{ config, lib, stdenv, fetchurl, fetchpatch, pkg-config, libiconv { lib, stdenv, fetchurl, fetchpatch, gtk-doc, meson, ninja, pkg-config, python3
, libintl, expat, zlib, libpng, pixman, fontconfig, freetype , docbook_xsl, fontconfig, freetype, libpng, pixman, zlib
, x11Support? !stdenv.isDarwin, libXext, libXrender , x11Support? !stdenv.isDarwin || true, libXext, libXrender
, gobjectSupport ? true, glib , gobjectSupport ? true, glib
, xcbSupport ? x11Support, libxcb, xcbutil # no longer experimental since 1.12 , xcbSupport ? x11Support, libxcb
, libGLSupported ? lib.elem stdenv.hostPlatform.system lib.platforms.mesaPlatforms
, glSupport ? x11Support && config.cairo.gl or (libGLSupported && stdenv.isLinux)
, libGL # libGLU libGL is no longer a big dependency
, pdfSupport ? true
, darwin , darwin
, testers , testers
}: }:
@@ -17,82 +13,27 @@ in stdenv.mkDerivation (finalAttrs: let
inherit (finalAttrs) pname version; inherit (finalAttrs) pname version;
in { in {
pname = "cairo"; pname = "cairo";
version = "1.16.0"; version = "1.18.0";
src = fetchurl { src = fetchurl {
url = "https://cairographics.org/${if lib.mod (builtins.fromJSON (lib.versions.minor version)) 2 == 0 then "releases" else "snapshots"}/${pname}-${version}.tar.xz"; url = "https://cairographics.org/${if lib.mod (builtins.fromJSON (lib.versions.minor version)) 2 == 0 then "releases" else "snapshots"}/${pname}-${version}.tar.xz";
sha256 = "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy"; hash = "sha256-JDoHNrl4oz3uKfnMp1IXM7eKZbVBggb+970cPUzxC2Q=";
}; };
patches = [
# Fixes CVE-2018-19876; see Nixpkgs issue #55384
# CVE information: https://nvd.nist.gov/vuln/detail/CVE-2018-19876
# Upstream PR: https://gitlab.freedesktop.org/cairo/cairo/merge_requests/5
#
# This patch is the merged commit from the above PR.
(fetchpatch {
name = "CVE-2018-19876.patch";
url = "https://gitlab.freedesktop.org/cairo/cairo/-/commit/6edf572ebb27b00d3c371ba5ae267e39d27d5b6d.patch";
hash = "sha256-wZ51BZWlXByFY3/CTn7el2A9aYkwL1FygJ2zqnN+UIQ=";
})
# Fix PDF output.
# https://gitlab.freedesktop.org/cairo/cairo/issues/342
(fetchpatch {
url = "https://gitlab.freedesktop.org/cairo/cairo/-/commit/5e34c5a9640e49dcc29e6b954c4187cfc838dbd1.patch";
hash = "sha256-yCwsDUY7efVvOZkA6a0bPS+RrVc8Yk9bfPwWHeOjq5o=";
})
# Fixes CVE-2020-35492; see https://github.com/NixOS/nixpkgs/issues/120364.
# CVE information: https://nvd.nist.gov/vuln/detail/CVE-2020-35492
# Upstream PR: https://gitlab.freedesktop.org/cairo/cairo/merge_requests/85
(fetchpatch {
name = "CVE-2020-35492.patch";
includes = [ "src/cairo-image-compositor.c" ];
url = "https://gitlab.freedesktop.org/cairo/cairo/-/commit/78266cc8c0f7a595cfe8f3b694bfb9bcc3700b38.patch";
hash = "sha256-cXKzLMENx4/BHXLZg3Kfkx3esCnaNaB7WvjNfL77FhE=";
})
# Workaround https://gitlab.freedesktop.org/cairo/cairo/-/issues/121
./skip-configure-stderr-check.patch
# Fixes cairo crash on macOS Big Sur
# Upstream PR: https://gitlab.freedesktop.org/cairo/cairo/-/issues/420
(fetchpatch {
url = "https://gitlab.freedesktop.org/cairo/cairo/-/commit/e22d7212acb454daccc088619ee147af03883974.diff";
hash = "sha256-8G98nsPz3MLEWPDX9F0jKgXC4hC4NNdFQLSpmW3ay2s=";
})
# Fix clang build failures on newer LLVM versions
# Upstream PR: https://gitlab.freedesktop.org/cairo/cairo/-/merge_requests/119
(fetchpatch {
name = "fix-types.patch";
url = "https://gitlab.freedesktop.org/cairo/cairo/-/commit/38e486b34d435130f2fb38c429e6016c3c82cd53.patch";
hash = "sha256-vmluOJSuTRiQHmbBBVCxOIkZ0O0ZEo0J4mgrUPn0SIo=";
})
# Fix unexpected color addition on grayscale images (usually text).
# Upstream fix: https://gitlab.freedesktop.org/cairo/cairo/-/merge_requests/114
# Can be removed after 1.18 release
(fetchpatch {
name = "fix-grayscale-anialias.patch";
url = "https://gitlab.freedesktop.org/cairo/cairo/-/commit/4f4d89506f58a64b4829b1bb239bab9e46d63727.diff";
hash = "sha256-mbTg67e7APfdELsuMAgXdY3xokWbGtHF7VDD5UyYqKM=";
})
];
outputs = [ "out" "dev" "devdoc" ]; outputs = [ "out" "dev" "devdoc" ];
outputBin = "dev"; # very small outputBin = "dev"; # very small
separateDebugInfo = true; separateDebugInfo = true;
nativeBuildInputs = [ nativeBuildInputs = [
gtk-doc
meson
ninja
pkg-config pkg-config
python3
]; ];
buildInputs = [ buildInputs = [
libiconv docbook_xsl
libintl
] ++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ ] ++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
CoreGraphics CoreGraphics
CoreText CoreText
@@ -100,49 +41,53 @@ in {
Carbon Carbon
]); ]);
propagatedBuildInputs = [ fontconfig expat freetype pixman zlib libpng ] propagatedBuildInputs = [ fontconfig freetype pixman libpng zlib ]
++ optionals x11Support [ libXext libXrender ] ++ optionals x11Support [ libXext libXrender ]
++ optionals xcbSupport [ libxcb xcbutil ] ++ optionals xcbSupport [ libxcb ]
++ optional gobjectSupport glib ++ optional gobjectSupport glib
++ optional glSupport libGL
; # TODO: maybe liblzo but what would it be for here? ; # TODO: maybe liblzo but what would it be for here?
configureFlags = [ mesonFlags = [
"--enable-tee" "-Dgtk_doc=true"
] ++ (if stdenv.isDarwin then [
"--disable-dependency-tracking"
"--enable-quartz"
"--enable-quartz-font"
"--enable-quartz-image"
"--enable-ft"
] else (optional xcbSupport "--enable-xcb"
++ optional glSupport "--enable-gl"
++ optional pdfSupport "--enable-pdf"
)) ++ optional (!x11Support) "--disable-xlib";
preConfigure = # error: #error config.h must be included before this header
# On FreeBSD, `-ldl' doesn't exist. "-Dsymbol-lookup=disabled"
lib.optionalString stdenv.isFreeBSD
'' for i in "util/"*"/Makefile.in" boilerplate/Makefile.in # Only used in tests, causes a dependency cycle
do "-Dspectre=disabled"
cat "$i" | sed -es/-ldl//g > t
mv t "$i" (lib.mesonEnable "glib" gobjectSupport)
done (lib.mesonEnable "tests" finalAttrs.doCheck)
'' (lib.mesonEnable "xlib" x11Support)
+ (lib.mesonEnable "xcb" xcbSupport)
'' # ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
# Work around broken `Requires.private' that prevents Freetype # "--cross-file=${builtins.toFile "cross-file.conf" ''
# `-I' flags to be propagated. # [properties]
sed -i "src/cairo.pc.in" \ # ipc_rmid_deferred_release = ${
-es'|^Cflags:\(.*\)$|Cflags: \1 -I${freetype.dev}/include/freetype2 -I${freetype.dev}/include|g' # {
substituteInPlace configure --replace strings $STRINGS # linux = "true";
''; # freebsd = "true";
# netbsd = "false";
# }.${stdenv.hostPlatform.parsed.kernel.name} or
# throw "Unknown value for ipc_rmid_deferred_release"
# }
# ''}"
];
preConfigure = ''
patchShebangs version.py
'';
enableParallelBuilding = true; enableParallelBuilding = true;
doCheck = false; # fails doCheck = false; # fails
postInstall = lib.optionalString stdenv.isDarwin glib.flattenInclude; postInstall = ''
# Work around broken `Requires.private' that prevents Freetype
# `-I' flags to be propagated.
sed -i "$out/lib/pkgconfig/cairo.pc" \
-es'|^Cflags:\(.*\)$|Cflags: \1 -I${freetype.dev}/include/freetype2 -I${freetype.dev}/include|g'
'' + lib.optionalString stdenv.isDarwin glib.flattenInclude;
passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage; passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
@@ -151,9 +96,8 @@ in {
longDescription = '' longDescription = ''
Cairo is a 2D graphics library with support for multiple output Cairo is a 2D graphics library with support for multiple output
devices. Currently supported output targets include the X devices. Currently supported output targets include the X
Window System, Quartz, Win32, image buffers, PostScript, PDF, Window System, XCB, Quartz, Win32, image buffers, PostScript,
and SVG file output. Experimental backends include OpenGL PDF, and SVG file output.
(through glitz), XCB, BeOS, OS/2, and DirectFB.
Cairo is designed to produce consistent output on all output Cairo is designed to produce consistent output on all output
media while taking advantage of display hardware acceleration media while taking advantage of display hardware acceleration
@@ -162,10 +106,10 @@ in {
homepage = "http://cairographics.org/"; homepage = "http://cairographics.org/";
license = with licenses; [ lgpl2Plus mpl10 ]; license = with licenses; [ lgpl2Plus mpl10 ];
pkgConfigModules = [ pkgConfigModules = [
"cairo-pdf"
"cairo-ps" "cairo-ps"
"cairo-svg" "cairo-svg"
] ++ lib.optional gobjectSupport "cairo-gobject" ] ++ lib.optional gobjectSupport "cairo-gobject";
++ lib.optional pdfSupport "cairo-pdf";
platforms = platforms.all; platforms = platforms.all;
}; };
}) })