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.
This commit is contained in:
Vladimír Čunát
2013-04-21 20:15:38 +00:00
parent b37b73a56c
commit 5e4aa51173
3 changed files with 53 additions and 47 deletions

View File

@@ -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";
};
}