diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/gettext')
4 files changed, 471 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/gettext/CVE-2018-18751-bison.patch b/nixpkgs/pkgs/development/libraries/gettext/CVE-2018-18751-bison.patch new file mode 100644 index 000000000000..b734c1c8b027 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gettext/CVE-2018-18751-bison.patch @@ -0,0 +1,323 @@ +This patch was generated by re-running Bison 3.0.4 on pro-gram-gen.y after +applying CVE-2018-18751.patch. This patch removes the need to add bison to +nativeBuildInputs. + +--- a/gettext-tools/src/po-gram-gen.c ++++ b/gettext-tools/src/po-gram-gen.c +@@ -568,9 +568,9 @@ static const yytype_uint8 yytranslate[] = + static const yytype_uint16 yyrline[] = + { + 0, 169, 169, 171, 172, 173, 174, 179, 187, 195, +- 216, 240, 249, 258, 269, 278, 292, 301, 315, 321, +- 332, 338, 350, 361, 372, 376, 391, 414, 422, 434, +- 442 ++ 216, 237, 246, 255, 266, 275, 289, 298, 312, 318, ++ 329, 335, 347, 358, 369, 373, 388, 411, 419, 431, ++ 439 + }; + #endif + +@@ -1419,14 +1419,11 @@ yyreduce: + check_obsolete ((yyvsp[-3].message_intro), (yyvsp[-1].string)); + check_obsolete ((yyvsp[-3].message_intro), (yyvsp[0].rhs)); + if (!(yyvsp[-3].message_intro).obsolete || pass_obsolete_entries) +- { +- do_callback_message ((yyvsp[-3].message_intro).ctxt, string2, &(yyvsp[-3].message_intro).pos, (yyvsp[-1].string).string, +- (yyvsp[0].rhs).rhs.msgstr, (yyvsp[0].rhs).rhs.msgstr_len, &(yyvsp[0].rhs).pos, +- (yyvsp[-3].message_intro).prev_ctxt, +- (yyvsp[-3].message_intro).prev_id, (yyvsp[-3].message_intro).prev_id_plural, +- (yyvsp[-3].message_intro).obsolete); +- free ((yyvsp[-1].string).string); +- } ++ do_callback_message ((yyvsp[-3].message_intro).ctxt, string2, &(yyvsp[-3].message_intro).pos, (yyvsp[-1].string).string, ++ (yyvsp[0].rhs).rhs.msgstr, (yyvsp[0].rhs).rhs.msgstr_len, &(yyvsp[0].rhs).pos, ++ (yyvsp[-3].message_intro).prev_ctxt, ++ (yyvsp[-3].message_intro).prev_id, (yyvsp[-3].message_intro).prev_id_plural, ++ (yyvsp[-3].message_intro).obsolete); + else + { + free_message_intro ((yyvsp[-3].message_intro)); +@@ -1435,11 +1432,11 @@ yyreduce: + free ((yyvsp[0].rhs).rhs.msgstr); + } + } +-#line 1439 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1436 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 11: +-#line 241 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 238 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-2].message_intro), (yyvsp[-1].stringlist)); + check_obsolete ((yyvsp[-2].message_intro), (yyvsp[0].string)); +@@ -1448,11 +1445,11 @@ yyreduce: + string_list_destroy (&(yyvsp[-1].stringlist).stringlist); + free ((yyvsp[0].string).string); + } +-#line 1452 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1449 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 12: +-#line 250 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 247 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-2].message_intro), (yyvsp[-1].stringlist)); + check_obsolete ((yyvsp[-2].message_intro), (yyvsp[0].rhs)); +@@ -1461,22 +1458,22 @@ yyreduce: + string_list_destroy (&(yyvsp[-1].stringlist).stringlist); + free ((yyvsp[0].rhs).rhs.msgstr); + } +-#line 1465 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1462 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 13: +-#line 259 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 256 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].message_intro), (yyvsp[0].stringlist)); + po_gram_error_at_line (&(yyvsp[-1].message_intro).pos, _("missing 'msgstr' section")); + free_message_intro ((yyvsp[-1].message_intro)); + string_list_destroy (&(yyvsp[0].stringlist).stringlist); + } +-#line 1476 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1473 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 14: +-#line 270 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 267 "po-gram-gen.y" /* yacc.c:1646 */ + { + (yyval.message_intro).prev_ctxt = NULL; + (yyval.message_intro).prev_id = NULL; +@@ -1485,11 +1482,11 @@ yyreduce: + (yyval.message_intro).pos = (yyvsp[0].string).pos; + (yyval.message_intro).obsolete = (yyvsp[0].string).obsolete; + } +-#line 1489 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1486 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 15: +-#line 279 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 276 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].prev), (yyvsp[0].string)); + (yyval.message_intro).prev_ctxt = (yyvsp[-1].prev).ctxt; +@@ -1499,11 +1496,11 @@ yyreduce: + (yyval.message_intro).pos = (yyvsp[0].string).pos; + (yyval.message_intro).obsolete = (yyvsp[0].string).obsolete; + } +-#line 1503 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1500 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 16: +-#line 293 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 290 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].string), (yyvsp[0].stringlist)); + (yyval.prev).ctxt = (yyvsp[-1].string).string; +@@ -1512,11 +1509,11 @@ yyreduce: + (yyval.prev).pos = (yyvsp[-1].string).pos; + (yyval.prev).obsolete = (yyvsp[-1].string).obsolete; + } +-#line 1516 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1513 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 17: +-#line 302 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 299 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-2].string), (yyvsp[-1].stringlist)); + check_obsolete ((yyvsp[-2].string), (yyvsp[0].string)); +@@ -1526,21 +1523,21 @@ yyreduce: + (yyval.prev).pos = (yyvsp[-2].string).pos; + (yyval.prev).obsolete = (yyvsp[-2].string).obsolete; + } +-#line 1530 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1527 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 18: +-#line 316 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 313 "po-gram-gen.y" /* yacc.c:1646 */ + { + (yyval.string).string = NULL; + (yyval.string).pos = (yyvsp[0].pos).pos; + (yyval.string).obsolete = (yyvsp[0].pos).obsolete; + } +-#line 1540 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1537 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 19: +-#line 322 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 319 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-2].pos), (yyvsp[-1].stringlist)); + check_obsolete ((yyvsp[-2].pos), (yyvsp[0].pos)); +@@ -1548,21 +1545,21 @@ yyreduce: + (yyval.string).pos = (yyvsp[0].pos).pos; + (yyval.string).obsolete = (yyvsp[0].pos).obsolete; + } +-#line 1552 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1549 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 20: +-#line 333 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 330 "po-gram-gen.y" /* yacc.c:1646 */ + { + (yyval.string).string = NULL; + (yyval.string).pos = (yyvsp[0].pos).pos; + (yyval.string).obsolete = (yyvsp[0].pos).obsolete; + } +-#line 1562 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1559 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 21: +-#line 339 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 336 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-2].pos), (yyvsp[-1].stringlist)); + check_obsolete ((yyvsp[-2].pos), (yyvsp[0].pos)); +@@ -1570,11 +1567,11 @@ yyreduce: + (yyval.string).pos = (yyvsp[0].pos).pos; + (yyval.string).obsolete = (yyvsp[0].pos).obsolete; + } +-#line 1574 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1571 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 22: +-#line 351 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 348 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].pos), (yyvsp[0].stringlist)); + plural_counter = 0; +@@ -1582,30 +1579,30 @@ yyreduce: + (yyval.string).pos = (yyvsp[-1].pos).pos; + (yyval.string).obsolete = (yyvsp[-1].pos).obsolete; + } +-#line 1586 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1583 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 23: +-#line 362 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 359 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].pos), (yyvsp[0].stringlist)); + (yyval.string).string = string_list_concat_destroy (&(yyvsp[0].stringlist).stringlist); + (yyval.string).pos = (yyvsp[-1].pos).pos; + (yyval.string).obsolete = (yyvsp[-1].pos).obsolete; + } +-#line 1597 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1594 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 24: +-#line 373 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 370 "po-gram-gen.y" /* yacc.c:1646 */ + { + (yyval.rhs) = (yyvsp[0].rhs); + } +-#line 1605 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1602 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 25: +-#line 377 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 374 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].rhs), (yyvsp[0].rhs)); + (yyval.rhs).rhs.msgstr = XNMALLOC ((yyvsp[-1].rhs).rhs.msgstr_len + (yyvsp[0].rhs).rhs.msgstr_len, char); +@@ -1617,11 +1614,11 @@ yyreduce: + (yyval.rhs).pos = (yyvsp[-1].rhs).pos; + (yyval.rhs).obsolete = (yyvsp[-1].rhs).obsolete; + } +-#line 1621 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1618 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 26: +-#line 392 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 389 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-4].pos), (yyvsp[-3].pos)); + check_obsolete ((yyvsp[-4].pos), (yyvsp[-2].number)); +@@ -1640,11 +1637,11 @@ yyreduce: + (yyval.rhs).pos = (yyvsp[-4].pos).pos; + (yyval.rhs).obsolete = (yyvsp[-4].pos).obsolete; + } +-#line 1644 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1641 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 27: +-#line 415 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 412 "po-gram-gen.y" /* yacc.c:1646 */ + { + string_list_init (&(yyval.stringlist).stringlist); + string_list_append (&(yyval.stringlist).stringlist, (yyvsp[0].string).string); +@@ -1652,11 +1649,11 @@ yyreduce: + (yyval.stringlist).pos = (yyvsp[0].string).pos; + (yyval.stringlist).obsolete = (yyvsp[0].string).obsolete; + } +-#line 1656 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1653 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 28: +-#line 423 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 420 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].stringlist), (yyvsp[0].string)); + (yyval.stringlist).stringlist = (yyvsp[-1].stringlist).stringlist; +@@ -1665,11 +1662,11 @@ yyreduce: + (yyval.stringlist).pos = (yyvsp[-1].stringlist).pos; + (yyval.stringlist).obsolete = (yyvsp[-1].stringlist).obsolete; + } +-#line 1669 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1666 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 29: +-#line 435 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 432 "po-gram-gen.y" /* yacc.c:1646 */ + { + string_list_init (&(yyval.stringlist).stringlist); + string_list_append (&(yyval.stringlist).stringlist, (yyvsp[0].string).string); +@@ -1677,11 +1674,11 @@ yyreduce: + (yyval.stringlist).pos = (yyvsp[0].string).pos; + (yyval.stringlist).obsolete = (yyvsp[0].string).obsolete; + } +-#line 1681 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1678 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + case 30: +-#line 443 "po-gram-gen.y" /* yacc.c:1646 */ ++#line 440 "po-gram-gen.y" /* yacc.c:1646 */ + { + check_obsolete ((yyvsp[-1].stringlist), (yyvsp[0].string)); + (yyval.stringlist).stringlist = (yyvsp[-1].stringlist).stringlist; +@@ -1690,11 +1687,11 @@ yyreduce: + (yyval.stringlist).pos = (yyvsp[-1].stringlist).pos; + (yyval.stringlist).obsolete = (yyvsp[-1].stringlist).obsolete; + } +-#line 1694 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1691 "po-gram-gen.c" /* yacc.c:1646 */ + break; + + +-#line 1698 "po-gram-gen.c" /* yacc.c:1646 */ ++#line 1695 "po-gram-gen.c" /* yacc.c:1646 */ + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires 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..6eb8bae435be --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/gettext/default.nix @@ -0,0 +1,110 @@ +{ stdenv, lib, fetchurl, libiconv, xz, bison, automake115x, autoconf }: + +let allowBisonDependency = !stdenv.isDarwin; in +stdenv.mkDerivation rec { + name = "gettext-${version}"; + version = "0.19.8.1"; + + src = fetchurl { + url = "mirror://gnu/gettext/${name}.tar.gz"; + sha256 = "0hsw28f9q9xaggjlsdp2qmbp2rbd1mp0njzan2ld9kiqwkq2m57z"; + }; + patches = [ + ./absolute-paths.diff + (fetchurl { + name = "CVE-2018-18751.patch"; + url = "https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=patch;h=dce3a16e5e9368245735e29bf498dcd5e3e474a4"; + sha256 = "1lpjwwcjr1sb879faj0xyzw02kma0ivab6xwn3qciy13qy6fq5xn"; + }) + ] ++ lib.optionals (!allowBisonDependency) [ + # Only necessary for CVE-2018-18751.patch: + ./CVE-2018-18751-bison.patch + ]; + + 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" + # avoid retaining reference to CF during stdenv bootstrap + ] ++ lib.optionals stdenv.isDarwin [ + "gt_cv_func_CFPreferencesCopyAppValue=no" + "gt_cv_func_CFLocaleCopyCurrent=no" + ] ++ 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 + ] + # Only necessary for CVE-2018-18751.patch (unless CVE-2018-18751-bison.patch + # is also applied): + ++ lib.optional allowBisonDependency bison + ++ [ + # Only necessary for CVE-2018-18751.patch: + automake115x + autoconf + ]; + # 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..ad3763c29b64 --- /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 |