{ stdenv, lib, fetchurl, docbook_xsl, docbook_xsl_ns, gettext, libxml2, libxslt, glibcLocales, docbook_xml_dtd_45, docbook_sgml_dtd_41, opensp, bash, perl, buildPerlPackage, ModuleBuild, TextWrapI18N, LocaleGettext, SGMLSpm, UnicodeLineBreak, PodParser, YAMLTiny, SyntaxKeywordTry, writeShellScriptBin, }: buildPerlPackage rec { pname = "po4a"; version = "0.74"; src = fetchurl { url = "https://github.com/mquinson/po4a/releases/download/v${version}/po4a-${version}.tar.gz"; hash = "sha256-JfwyPyuje71Iw68Ov0mVJkSw5GgmH5hjPpEhmoOP58I="; }; patches = [ # Fix compatibility with gettext >= 1.0, whose msginit merges into # existing files instead of overwriting, producing broken PO headers # when the output file already exists but is empty. # https://github.com/mquinson/po4a/issues/636 ./gettext-1.0-msginit-compat.patch ]; strictDeps = true; nativeBuildInputs = # the tests for the tex-format use kpsewhich -- texlive's file finding utility. # We don't want to depend on texlive here, so we replace it with a minimal # shellscript that suffices for the tests in t/fmt/tex/, i.e. it looks up # subtext.tex and article.cls to appropriate files, but doesn't find article-wrong.cls. let kpsewhich-stub = writeShellScriptBin "kpsewhich" '' srcdir="$NIX_BUILD_TOP/${lib.strings.removeSuffix ".tar.gz" src.name}" [[ $1 = "article.cls" ]] && echo /dev/null [[ $1 = "subtext.tex" ]] && echo "$srcdir/t/fmt/tex/subtext.tex" ''; in [ gettext libxml2 libxslt docbook_xsl docbook_xsl_ns ModuleBuild docbook_xml_dtd_45 docbook_sgml_dtd_41 opensp kpsewhich-stub glibcLocales ]; # TODO: TermReadKey was temporarily removed from propagatedBuildInputs to unfreeze the build propagatedBuildInputs = lib.optionals (!stdenv.hostPlatform.isMusl) [ TextWrapI18N ] ++ [ LocaleGettext SGMLSpm UnicodeLineBreak PodParser YAMLTiny SyntaxKeywordTry ]; buildInputs = [ bash ]; env = { LC_ALL = "en_US.UTF-8"; SGML_CATALOG_FILES = "${docbook_xml_dtd_45}/xml/dtd/docbook/catalog.xml"; }; preConfigure = '' touch Makefile.PL export PERL_MB_OPT="--install_base=$out --prefix=$out" ''; buildPhase = '' perl Build.PL --install_base=$out --install_path="lib=$out/${perl.libPrefix}" ./Build build ''; # Disabling tests on musl # Void linux package have investigated the failure and tracked it down to differences in gettext behavior. They decided to disable tests. # https://github.com/void-linux/void-packages/pull/34029#issuecomment-973267880 # Alpine packagers have not worried about running the tests until now: # https://git.alpinelinux.org/aports/tree/main/po4a/APKBUILD#n11 # # Disabling tests on Darwin until https://github.com/NixOS/nixpkgs/issues/236560 is resolved. doCheck = (!stdenv.hostPlatform.isMusl) && (!stdenv.hostPlatform.isDarwin); checkPhase = '' export SGML_CATALOG_FILES=${docbook_sgml_dtd_41}/sgml/dtd/docbook-4.1/docbook.cat ./Build test ''; installPhase = '' ./Build install for f in $out/bin/*; do substituteInPlace $f --replace "#! /usr/bin/env perl" "#!${perl}/bin/perl" substituteInPlace $f --replace "exec perl" "exec ${perl}/bin/perl" done ''; meta = { description = "Tools for helping translation of documentation"; homepage = "https://po4a.org"; license = with lib.licenses; [ gpl2Plus ]; }; }