From 5e4aa511733c693dde3320a620ccc7ea35feddcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Sun, 21 Apr 2013 20:15:38 +0000 Subject: [PATCH] poppler: share most things between glib and qt4 versions Most of the stuff was duplicated (headers, the core library). The new solution makes the _qt4 package use the _glib one, because it depended on glib through cairo anyway (and _glib bindings themselves are just ~350kB). This also fixes a problem that mergeAttrsByFuncDefaultsClean didn't merge patches, which affected dbus.libs. --- .../development/libraries/poppler/default.nix | 82 +++++++++++-------- pkgs/lib/misc.nix | 3 +- pkgs/top-level/all-packages.nix | 15 +--- 3 files changed, 53 insertions(+), 47 deletions(-) diff --git a/pkgs/development/libraries/poppler/default.nix b/pkgs/development/libraries/poppler/default.nix index 12bd73b4b32..26316233648 100644 --- a/pkgs/development/libraries/poppler/default.nix +++ b/pkgs/development/libraries/poppler/default.nix @@ -1,17 +1,12 @@ { stdenv, fetchurl, fetchgit, cairo, freetype, fontconfig, zlib , libjpeg, curl, libpthreadstubs, xorg, openjpeg , libxml2, pkgconfig, cmake, lcms2 -, glibSupport ? false, glib, gtk3Support ? false, gtk3 # gtk2 no longer accepted , qt4Support ? false, qt4 ? null }: -stdenv.mkDerivation rec { - name = "poppler-0.22.3"; - - src = fetchurl { - url = "${meta.homepage}${name}.tar.gz"; - sha256 = "0ca4jci8xmbdz4fhahdcck0cqms6ax55yggi2ih3clgrpqf96sli"; - }; +let + version = "0.22.3"; + sha256 = "0ca4jci8xmbdz4fhahdcck0cqms6ax55yggi2ih3clgrpqf96sli"; qtcairo_patches = let qtcairo = fetchgit { # the version for poppler-0.22 @@ -23,42 +18,59 @@ stdenv.mkDerivation rec { "${qtcairo}/0002-Setting-default-Qt4-backend-to-Cairo.patch" "${qtcairo}/0003-Forcing-subpixel-rendering-in-Cairo-backend.patch" ]; + poppler_drv = nameSuff: merge: stdenv.mkDerivation (stdenv.lib.mergeAttrsByFuncDefaultsClean [ + rec { + name = "poppler-${nameSuff}-${version}"; - propagatedBuildInputs = with xorg; - [ zlib cairo freetype fontconfig libjpeg lcms2 curl - libpthreadstubs libxml2 stdenv.gcc.libc - libXau libXdmcp libxcb libXrender libXext - openjpeg - ] - ++ stdenv.lib.optional glibSupport glib - ++ stdenv.lib.optional gtk3Support gtk3 - ++ stdenv.lib.optional qt4Support qt4; + src = fetchurl { + url = "${meta.homepage}/poppler-${version}.tar.gz"; + inherit sha256; + }; - nativeBuildInputs = [ pkgconfig cmake ]; + propagatedBuildInputs = with xorg; + [ zlib cairo freetype fontconfig libjpeg lcms2 curl + libpthreadstubs libxml2 + libXau libXdmcp libxcb libXrender libXext + openjpeg + ]; - cmakeFlags = "-DENABLE_XPDF_HEADERS=ON -DENABLE_LIBCURL=ON -DENABLE_ZLIB=ON"; + nativeBuildInputs = [ pkgconfig cmake ]; - patches = [ ./datadir_env.patch ] ++ stdenv.lib.optionals qt4Support qtcairo_patches; + cmakeFlags = "-DENABLE_XPDF_HEADERS=ON -DENABLE_LIBCURL=ON -DENABLE_ZLIB=ON"; - # XXX: The Poppler/Qt4 test suite refers to non-existent PDF files - # such as `../../../test/unittestcases/UseNone.pdf'. - #doCheck = !qt4Support; - checkTarget = "test"; + patches = [ ./datadir_env.patch ]; - enableParallelBuilding = true; + # XXX: The Poppler/Qt4 test suite refers to non-existent PDF files + # such as `../../../test/unittestcases/UseNone.pdf'. + #doCheck = !qt4Support; + checkTarget = "test"; - meta = { - homepage = http://poppler.freedesktop.org/; - description = "Poppler, a PDF rendering library"; + enableParallelBuilding = true; - longDescription = '' - Poppler is a PDF rendering library based on the xpdf-3.0 code base. - ''; + meta = { + homepage = http://poppler.freedesktop.org/; + description = "A PDF rendering library"; - platforms = if qt4Support - then qt4.meta.platforms - else stdenv.lib.platforms.all; + longDescription = '' + Poppler is a PDF rendering library based on the xpdf-3.0 code base. + ''; - license = "GPLv2"; + license = "GPLv2"; + }; + } merge ]); # poppler_drv + +in rec { + /* We always use cairo in poppler, so we always depend on glib, + so we always build the glib wrapper (~350kB). + We also always build the cpp wrapper (<100kB). + ToDo: around half the size could be saved by splitting out headers and tools (1.5 + 0.5 MB). + */ + + poppler_glib = poppler_drv "glib" { }; + + poppler_qt4 = poppler_drv "qt4" { + propagatedBuildInputs = [ qt4 poppler_glib ]; + patches = qtcairo_patches; + postConfigure = "cd qt4"; }; } diff --git a/pkgs/lib/misc.nix b/pkgs/lib/misc.nix index 9a1539dfee8..32390b0d192 100644 --- a/pkgs/lib/misc.nix +++ b/pkgs/lib/misc.nix @@ -319,7 +319,8 @@ rec { # sane defaults (same name as attr name so that inherit can be used) mergeAttrBy = # { buildInputs = concatList; [...]; passthru = mergeAttr; [..]; } - listToAttrs (map (n : nameValuePair n lib.concat) [ "nativeBuildInputs" "buildInputs" "propagatedBuildInputs" "configureFlags" "prePhases" "postAll" ]) + listToAttrs (map (n : nameValuePair n lib.concat) + [ "nativeBuildInputs" "buildInputs" "propagatedBuildInputs" "configureFlags" "prePhases" "postAll" "patches" ]) // listToAttrs (map (n : nameValuePair n lib.mergeAttrs) [ "passthru" "meta" "cfg" "flags" ]) // listToAttrs (map (n : nameValuePair n (a: b: "${a}\n${b}") ) [ "preConfigure" "postInstall" ]) ; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 93e5802b290..b22f86a7969 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4810,23 +4810,16 @@ let policykit = callPackage ../development/libraries/policykit { }; - poppler = callPackage ../development/libraries/poppler { - glibSupport = true; - gtk3Support = false; - qt4Support = false; - }; + poppler = let popplers = callPackage ../development/libraries/poppler { }; + in popplers // popplers.poppler_glib; + popplerQt4 = poppler.poppler_qt4; + poppler_0_18 = callPackage ../development/libraries/poppler/0.18.nix { glibSupport = true; gtk3Support = false; qt4Support = false; }; - popplerQt4 = poppler.override { - glibSupport = false; - gtk3Support = false; - qt4Support = true; - }; - popt = callPackage ../development/libraries/popt { }; portaudio = callPackage ../development/libraries/portaudio { };