nixpkgs/pkgs/development/libraries/cairo/default.nix
Jonathan Ringer 9bb3fccb5b treewide: pkgs.pkgconfig -> pkgs.pkg-config, move pkgconfig to alias.nix
continuation of #109595

pkgconfig was aliased in 2018, however, it remained in
all-packages.nix due to its wide usage. This cleans
up the remaining references to pkgs.pkgsconfig and
moves the entry to aliases.nix.

python3Packages.pkgconfig remained unchanged because
it's the canonical name of the upstream package
on pypi.
2021-01-19 01:16:25 -08:00

125 lines
4.1 KiB
Nix

{ config, stdenv, fetchurl, fetchpatch, pkg-config, libiconv
, libintl, expat, zlib, libpng, pixman, fontconfig, freetype
, x11Support? !stdenv.isDarwin, libXext, libXrender
, gobjectSupport ? true, glib
, xcbSupport ? x11Support, libxcb, xcbutil # no longer experimental since 1.12
, libGLSupported ? stdenv.lib.elem stdenv.hostPlatform.system stdenv.lib.platforms.mesaPlatforms
, glSupport ? x11Support && config.cairo.gl or (libGLSupported && stdenv.isLinux)
, libGL ? null # libGLU libGL is no longer a big dependency
, pdfSupport ? true
, darwin
}:
assert glSupport -> x11Support && libGL != null;
let
version = "1.16.0";
inherit (stdenv.lib) optional optionals;
in stdenv.mkDerivation rec {
pname = "cairo";
inherit version;
src = fetchurl {
url = "https://cairographics.org/${if stdenv.lib.mod (builtins.fromJSON (stdenv.lib.versions.minor version)) 2 == 0 then "releases" else "snapshots"}/${pname}-${version}.tar.xz";
sha256 = "0c930mk5xr2bshbdljv005j3j8zr47gqmkry3q6qgvqky6rjjysy";
};
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";
sha256 = "112hgrrsmcwxh1r52brhi5lksq4pvrz4xhkzcf2iqp55jl2pb7n1";
})
] ++ optionals stdenv.hostPlatform.isDarwin [
# Workaround https://gitlab.freedesktop.org/cairo/cairo/-/issues/121
./skip-configure-stderr-check.patch
];
outputs = [ "out" "dev" "devdoc" ];
outputBin = "dev"; # very small
nativeBuildInputs = [
pkg-config
];
buildInputs = [
libiconv
libintl
] ++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
CoreGraphics
CoreText
ApplicationServices
Carbon
]);
propagatedBuildInputs = [ fontconfig expat freetype pixman zlib libpng ]
++ optionals x11Support [ libXext libXrender ]
++ optionals xcbSupport [ libxcb xcbutil ]
++ optional gobjectSupport glib
++ optional glSupport libGL
; # TODO: maybe liblzo but what would it be for here?
configureFlags = (if stdenv.isDarwin then [
"--disable-dependency-tracking"
"--enable-quartz"
"--enable-quartz-font"
"--enable-quartz-image"
"--enable-ft"
] else ([ "--enable-tee" ]
++ optional xcbSupport "--enable-xcb"
++ optional glSupport "--enable-gl"
++ optional pdfSupport "--enable-pdf"
)) ++ optional (!x11Support) "--disable-xlib";
preConfigure =
# On FreeBSD, `-ldl' doesn't exist.
stdenv.lib.optionalString stdenv.isFreeBSD
'' for i in "util/"*"/Makefile.in" boilerplate/Makefile.in
do
cat "$i" | sed -es/-ldl//g > t
mv t "$i"
done
''
+
''
# Work around broken `Requires.private' that prevents Freetype
# `-I' flags to be propagated.
sed -i "src/cairo.pc.in" \
-es'|^Cflags:\(.*\)$|Cflags: \1 -I${freetype.dev}/include/freetype2 -I${freetype.dev}/include|g'
substituteInPlace configure --replace strings $STRINGS
'';
enableParallelBuilding = true;
doCheck = false; # fails
postInstall = stdenv.lib.optionalString stdenv.isDarwin glib.flattenInclude;
meta = with stdenv.lib; {
description = "A 2D graphics library with support for multiple output devices";
longDescription = ''
Cairo is a 2D graphics library with support for multiple output
devices. Currently supported output targets include the X
Window System, Quartz, Win32, image buffers, PostScript, PDF,
and SVG file output. Experimental backends include OpenGL
(through glitz), XCB, BeOS, OS/2, and DirectFB.
Cairo is designed to produce consistent output on all output
media while taking advantage of display hardware acceleration
when available (e.g., through the X Render Extension).
'';
homepage = "http://cairographics.org/";
license = with licenses; [ lgpl2Plus mpl10 ];
platforms = platforms.all;
};
}