diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/cairo/default.nix')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/cairo/default.nix | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/cairo/default.nix b/nixpkgs/pkgs/development/libraries/cairo/default.nix new file mode 100644 index 000000000000..799024f19acf --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/cairo/default.nix @@ -0,0 +1,146 @@ +{ config, lib, stdenv, fetchurl, fetchpatch, pkg-config, autoreconfHook, gtk-doc +, pixman +, zlibSupport ? true, zlib +, pngSupport ? true, libpng +, freetypeSupport ? true, freetype +, fontconfigSupport ? freetypeSupport, fontconfig +, gobjectSupport ? true, glib +, x11Support ? !stdenv.isDarwin, libX11, libXext +, x11XrenderSupport ? x11Support, libXrender +, xcbSupport ? !stdenv.isDarwin, libxcb # no longer experimental since 1.12 +, libGLSupported ? lib.elem stdenv.hostPlatform.system lib.platforms.mesaPlatforms +, glSupport ? x11Support && config.cairo.gl or (libGLSupported && stdenv.isLinux) +, libGL ? null # libGLU libGL is no longer a big dependency +, darwin +}: + +assert fontconfigSupport -> freetypeSupport; +assert x11XrenderSupport -> x11Support; +assert glSupport -> x11Support && libGL != null; + +let + version = "1.16.0"; + inherit (lib) enableFeature optional optionals; +in stdenv.mkDerivation rec { + pname = "cairo"; + inherit version; + + 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"; + 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"; + }) + + ./0001-test-don-t-always-build-FreeType-dependent-test.patch + ./0002-gl-don-t-implicitly-include-X11-headers.patch + ./0003-test-only-build-GL-tests-when-Xlib-is-enabled.patch + ./0004-util-don-t-build-cairo-sphinx-unless-PNG-enabled.patch + ] ++ 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 = [ + autoreconfHook + gtk-doc + pkg-config + ]; + + buildInputs = optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ + CoreGraphics + CoreText + ApplicationServices + Carbon + ]); + + propagatedBuildInputs = + [ pixman ] + ++ optional zlibSupport zlib + ++ optional pngSupport libpng + ++ optionals x11Support [ libX11 libXext ] + ++ optional x11XrenderSupport libXrender + ++ optional xcbSupport libxcb + ++ optional freetypeSupport freetype + ++ optional fontconfigSupport fontconfig + ++ 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 [ + (enableFeature zlibSupport "script") + (enableFeature zlibSupport "ps") + (enableFeature zlibSupport "pdf") + (enableFeature zlibSupport "interpreter") + (enableFeature pngSupport "png") + (enableFeature pngSupport "svg") + "--enable-tee" + (enableFeature glSupport "gl") + (enableFeature x11Support "xlib") + ]); + + preConfigure = + # On FreeBSD, `-ldl' doesn't exist. + 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 = lib.optionalString stdenv.isDarwin glib.flattenInclude; + + meta = with 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; + }; +} |