diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/poppler')
-rw-r--r-- | nixpkgs/pkgs/development/libraries/poppler/default.nix | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/poppler/default.nix b/nixpkgs/pkgs/development/libraries/poppler/default.nix new file mode 100644 index 000000000000..6e22ec349d5f --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/poppler/default.nix @@ -0,0 +1,150 @@ +{ lib +, stdenv +, fetchurl +, fetchFromGitLab +, cairo +, cmake +, boost +, cups-filters +, curl +, fontconfig +, freetype +, inkscape +, lcms +, libiconv +, libintl +, libjpeg +, ninja +, openjpeg +, pkg-config +, python3 +, scribus +, zlib +, withData ? true, poppler_data +, qt5Support ? false, qt6Support ? false, qtbase ? null +, introspectionSupport ? false, gobject-introspection ? null +, gpgmeSupport ? false, gpgme ? null +, utils ? false, nss ? null +, minimal ? false +, suffix ? "glib" +}: + +let + mkFlag = optset: flag: "-DENABLE_${flag}=${if optset then "on" else "off"}"; + + # unclear relationship between test data repo versions and poppler + # versions, though files don't appear to be updated after they're + # added, so it's probably safe to just always use the latest available + # version. + testData = fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "poppler"; + repo = "test"; + rev = "400f3ff05b2b1c0ae17797a0bd50e75e35c1f1b1"; + hash = "sha256-Y4aNOJLqo4g6tTW6TAb60jAWtBhRgT/JXsub12vi3aU="; + }; +in +stdenv.mkDerivation (finalAttrs: rec { + pname = "poppler-${suffix}"; + version = "24.02.0"; # beware: updates often break cups-filters build, check scribus too! + + outputs = [ "out" "dev" ]; + + src = fetchurl { + url = "https://poppler.freedesktop.org/poppler-${version}.tar.xz"; + hash = "sha256-GRh6P90F8z59YExHmcGD3lygEYZAyIs3DdzzE2NDIi4="; + }; + + nativeBuildInputs = [ + cmake + ninja + pkg-config + python3 + ]; + + buildInputs = [ + boost + libiconv + libintl + ] ++ lib.optionals withData [ + poppler_data + ]; + + # TODO: reduce propagation to necessary libs + propagatedBuildInputs = [ + zlib + freetype + fontconfig + libjpeg + openjpeg + ] ++ lib.optionals (!minimal) [ + cairo + lcms + curl + nss + ] ++ lib.optionals (qt5Support || qt6Support) [ + qtbase + ] ++ lib.optionals introspectionSupport [ + gobject-introspection + ] ++ lib.optionals gpgmeSupport [ + gpgme + ]; + + cmakeFlags = [ + (mkFlag true "UNSTABLE_API_ABI_HEADERS") # previously "XPDF_HEADERS" + (mkFlag (!minimal) "GLIB") + (mkFlag (!minimal) "CPP") + (mkFlag (!minimal) "LIBCURL") + (mkFlag (!minimal) "LCMS") + (mkFlag (!minimal) "LIBTIFF") + (mkFlag (!minimal) "NSS3") + (mkFlag utils "UTILS") + (mkFlag qt5Support "QT5") + (mkFlag qt6Support "QT6") + (mkFlag gpgmeSupport "GPGME") + ] ++ lib.optionals finalAttrs.finalPackage.doCheck [ + "-DTESTDATADIR=${testData}" + ]; + disallowedReferences = lib.optional finalAttrs.finalPackage.doCheck testData; + + dontWrapQtApps = true; + + # Workaround #54606 + preConfigure = lib.optionalString stdenv.isDarwin '' + sed -i -e '1i cmake_policy(SET CMP0025 NEW)' CMakeLists.txt + ''; + + # Work around gpgme trying to write to $HOME during qt5 and qt6 tests: + preCheck = lib.optionalString gpgmeSupport '' + HOME_orig="$HOME" + export HOME="$(mktemp -d)" + ''; + + postCheck = lib.optionalString gpgmeSupport '' + export HOME="$HOME_orig" + unset -v HOME_orig + ''; + + doCheck = true; + + passthru = { + inherit testData; + tests = { + # These depend on internal poppler code that frequently changes. + inherit inkscape cups-filters scribus; + }; + }; + + meta = with lib; { + homepage = "https://poppler.freedesktop.org/"; + changelog = "https://gitlab.freedesktop.org/poppler/poppler/-/blob/poppler-${version}/NEWS"; + description = "A PDF rendering library"; + longDescription = '' + Poppler is a PDF rendering library based on the xpdf-3.0 code base. In + addition it provides a number of tools that can be installed separately. + ''; + license = licenses.gpl2Plus; + platforms = platforms.all; + maintainers = with maintainers; [ ttuegel ] ++ teams.freedesktop.members; + }; +}) |