diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gettext')
4 files changed, 215 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gettext/absolute-paths.diff b/nixpkgs/pkgs/development/libraries/gettext/absolute-paths.diff new file mode 100644 index 000000000000..af37f61a9a41 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gettext/absolute-paths.diff @@ -0,0 +1,21 @@ +diff --git a/gettext-runtime/src/gettext.sh.in b/gettext-runtime/src/gettext.sh.in +index 1dfa3bb..d6ef8a8 100644 +--- a/gettext-runtime/src/gettext.sh.in ++++ b/gettext-runtime/src/gettext.sh.in +@@ -86,14 +86,14 @@ fi + # looks up the translation of MSGID and substitutes shell variables in the + # result. + eval_gettext () { +- gettext "$1" | (export PATH `envsubst --variables "$1"`; envsubst "$1") ++ @out@/bin/gettext "$1" | (export PATH `@out@/bin/envsubst --variables "$1"`; @out@/bin/envsubst "$1") + } + + # eval_ngettext MSGID MSGID-PLURAL COUNT + # looks up the translation of MSGID / MSGID-PLURAL for COUNT and substitutes + # shell variables in the result. + eval_ngettext () { +- ngettext "$1" "$2" "$3" | (export PATH `envsubst --variables "$1 $2"`; envsubst "$1 $2") ++ @out@/bin/ngettext "$1" "$2" "$3" | (export PATH `@out@/bin/envsubst --variables "$1 $2"`; @out@/bin/envsubst "$1 $2") + } + + # Note: This use of envsubst is much safer than using the shell built-in 'eval' diff --git a/nixpkgs/pkgs/development/libraries/gettext/default.nix b/nixpkgs/pkgs/development/libraries/gettext/default.nix new file mode 100644 index 000000000000..6adc147c6acc --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gettext/default.nix @@ -0,0 +1,95 @@ +{ stdenv, lib, fetchurl, libiconv, xz, fetchpatch }: + +stdenv.mkDerivation rec { + pname = "gettext"; + version = "0.20.1"; + + src = fetchurl { + url = "mirror://gnu/gettext/${pname}-${version}.tar.gz"; + sha256 = "0p3zwkk27wm2m2ccfqm57nj7vqkmfpn7ja1nf65zmhz8qqs5chb6"; + }; + patches = [ + ./absolute-paths.diff + ./gettext.git-2336451ed68d91ff4b5ae1acbc1eca30e47a86a9.patch + ] + ++ lib.optional stdenv.isDarwin + (fetchpatch { + url = "https://git.savannah.gnu.org/cgit/gettext.git/patch?id=ec0e6b307456ceab352669ae6bccca9702108753"; + sha256 = "0xqs01c7xl7vmw6bqvsmrzxxjxk2a4spcdpmlwm3b4hi2wc2lxnf"; + }); + + outputs = [ "out" "man" "doc" "info" ]; + + hardeningDisable = [ "format" ]; + + LDFLAGS = if stdenv.isSunOS then "-lm -lmd -lmp -luutil -lnvpair -lnsl -lidmap -lavl -lsec" else ""; + + configureFlags = [ + "--disable-csharp" "--with-xz" + ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + # On cross building, gettext supposes that the wchar.h from libc + # does not fulfill gettext needs, so it tries to work with its + # own wchar.h file, which does not cope well with the system's + # wchar.h and stddef.h (gcc-4.3 - glibc-2.9) + "gl_cv_func_wcwidth_works=yes" + ]; + + postPatch = '' + substituteAllInPlace gettext-runtime/src/gettext.sh.in + substituteInPlace gettext-tools/projects/KDE/trigger --replace "/bin/pwd" pwd + substituteInPlace gettext-tools/projects/GNOME/trigger --replace "/bin/pwd" pwd + substituteInPlace gettext-tools/src/project-id --replace "/bin/pwd" pwd + '' + lib.optionalString stdenv.hostPlatform.isCygwin '' + sed -i -e "s/\(cldr_plurals_LDADD = \)/\\1..\/gnulib-lib\/libxml_rpl.la /" gettext-tools/src/Makefile.in + sed -i -e "s/\(libgettextsrc_la_LDFLAGS = \)/\\1..\/gnulib-lib\/libxml_rpl.la /" gettext-tools/src/Makefile.in + ''; + + nativeBuildInputs = [ + xz + xz.bin + ]; + # HACK, see #10874 (and 14664) + buildInputs = stdenv.lib.optional (!stdenv.isLinux && !stdenv.hostPlatform.isCygwin) libiconv; + + setupHooks = [ + ../../../build-support/setup-hooks/role.bash + ./gettext-setup-hook.sh + ]; + gettextNeedsLdflags = stdenv.hostPlatform.libc != "glibc" && !stdenv.hostPlatform.isMusl; + + enableParallelBuilding = true; + enableParallelChecking = false; # fails sometimes + + meta = with lib; { + description = "Well integrated set of translation tools and documentation"; + + longDescription = '' + Usually, programs are written and documented in English, and use + English at execution time for interacting with users. Using a common + language is quite handy for communication between developers, + maintainers and users from all countries. On the other hand, most + people are less comfortable with English than with their own native + language, and would rather be using their mother tongue for day to + day's work, as far as possible. Many would simply love seeing their + computer screen showing a lot less of English, and far more of their + own language. + + GNU `gettext' is an important step for the GNU Translation Project, as + it is an asset on which we may build many other steps. This package + offers to programmers, translators, and even users, a well integrated + set of tools and documentation. Specifically, the GNU `gettext' + utilities are a set of tools that provides a framework to help other + GNU packages produce multi-lingual messages. + ''; + + homepage = "https://www.gnu.org/software/gettext/"; + + maintainers = with maintainers; [ zimbatm vrthra ]; + license = licenses.gpl2Plus; + platforms = platforms.all; + }; +} + +// stdenv.lib.optionalAttrs stdenv.isDarwin { + makeFlags = [ "CFLAGS=-D_FORTIFY_SOURCE=0" ]; +} diff --git a/nixpkgs/pkgs/development/libraries/gettext/gettext-setup-hook.sh b/nixpkgs/pkgs/development/libraries/gettext/gettext-setup-hook.sh new file mode 100644 index 000000000000..69020146f84d --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gettext/gettext-setup-hook.sh @@ -0,0 +1,17 @@ +gettextDataDirsHook() { + # See pkgs/build-support/setup-hooks/role.bash + getHostRoleEnvHook + if [ -d "$1/share/gettext" ]; then + addToSearchPath "GETTEXTDATADIRS${role_post}" "$1/share/gettext" + fi +} + +addEnvHooks "$hostOffset" gettextDataDirsHook + +# libintl must be listed in load flags on non-Glibc +# it doesn't hurt to have it in Glibc either though +if [ -n "@gettextNeedsLdflags@" -a -z "${dontAddExtraLibs-}" ]; then + # See pkgs/build-support/setup-hooks/role.bash + getHostRole + export NIX_${role_pre}LDFLAGS+=" -lintl" +fi diff --git a/nixpkgs/pkgs/development/libraries/gettext/gettext.git-2336451ed68d91ff4b5ae1acbc1eca30e47a86a9.patch b/nixpkgs/pkgs/development/libraries/gettext/gettext.git-2336451ed68d91ff4b5ae1acbc1eca30e47a86a9.patch new file mode 100644 index 000000000000..4a19b11507ac --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gettext/gettext.git-2336451ed68d91ff4b5ae1acbc1eca30e47a86a9.patch @@ -0,0 +1,82 @@ +From 2336451ed68d91ff4b5ae1acbc1eca30e47a86a9 Mon Sep 17 00:00:00 2001 +From: Bruno Haible <bruno@clisp.org> +Date: Sun, 19 May 2019 13:10:06 +0200 +Subject: [PATCH] msgmerge: Fix behaviour of --for-msgfmt on PO files with no + translations. + +Reported by Don Lawrence <dlawrence@iecok.com> +in <https://lists.freedesktop.org/archives/p11-glue/2019-May/000700.html> +via Daiki Ueno +in <https://lists.gnu.org/archive/html/bug-gettext/2019-05/msg00124.html>. + +* gettext-tools/src/msgmerge.c (main): Treat force_po like true if for_msgfmt +is true. +* gettext-tools/tests/msgmerge-26: Add test of PO file with no translations. +--- + gettext-tools/src/msgmerge.c | 4 ++-- + gettext-tools/tests/msgmerge-26 | 36 +++++++++++++++++++++++++++++++++--- + 2 files changed, 35 insertions(+), 5 deletions(-) + +diff --git a/gettext-tools/src/msgmerge.c b/gettext-tools/src/msgmerge.c +index cd762c0..92c9b7a 100644 +--- a/gettext-tools/src/msgmerge.c ++++ b/gettext-tools/src/msgmerge.c +@@ -520,8 +520,8 @@ There is NO WARRANTY, to the extent permitted by law.\n\ + else + { + /* Write the merged message list out. */ +- msgdomain_list_print (result, output_file, output_syntax, force_po, +- false); ++ msgdomain_list_print (result, output_file, output_syntax, ++ for_msgfmt || force_po, false); + } + + exit (EXIT_SUCCESS); +diff --git a/gettext-tools/tests/msgmerge-26 b/gettext-tools/tests/msgmerge-26 +index cd3862e..b86f7a0 100755 +--- a/gettext-tools/tests/msgmerge-26 ++++ b/gettext-tools/tests/msgmerge-26 +@@ -73,7 +73,37 @@ msgstr "Papaya" + EOF + + : ${DIFF=diff} +-${DIFF} mm-test26.ok mm-test26.out +-result=$? ++${DIFF} mm-test26.ok mm-test26.out || Exit 1 + +-exit $result ++# Test with a PO file that has no translated messages. ++ ++cat <<\EOF > mm-test26a.in1 ++msgid "" ++msgstr "" ++"Content-Type: text/plain; charset=UTF-8\n" ++ ++msgid "Hello world" ++msgstr "Hallo Welt" ++EOF ++ ++cat <<\EOF > mm-test26a.in2 ++msgid "" ++msgstr "" ++"Content-Type: text/plain; charset=ASCII\n" ++ ++msgid "Hello, world!" ++msgstr "" ++EOF ++ ++: ${MSGMERGE=msgmerge} ++${MSGMERGE} --for-msgfmt -o mm-test26a.tmp mm-test26a.in1 mm-test26a.in2 \ ++ || Exit 1 ++LC_ALL=C tr -d '\r' < mm-test26a.tmp > mm-test26a.out || Exit 1 ++ ++cat <<\EOF > mm-test26a.ok ++msgid "" ++msgstr "Content-Type: text/plain; charset=UTF-8\n" ++EOF ++ ++: ${DIFF=diff} ++${DIFF} mm-test26a.ok mm-test26a.out || Exit 1 +-- +1.9.1 + |