commit:     6f8ef094bd4fb0dfaf7ab70fc79fc826eb0540b8
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Jan 28 23:31:09 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Jan 28 23:31:24 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6f8ef094

sys-apps/gawk: backport str2wstr fix

Closes: https://bugs.gentoo.org/921503
Signed-off-by: Sam James <sam <AT> gentoo.org>

 sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch | 193 ++++++++++++++++++++++++++
 sys-apps/gawk/gawk-5.3.0-r1.ebuild            | 140 +++++++++++++++++++
 2 files changed, 333 insertions(+)

diff --git a/sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch 
b/sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch
new file mode 100644
index 000000000000..078ba8b1c746
--- /dev/null
+++ b/sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch
@@ -0,0 +1,193 @@
+https://bugs.gentoo.org/921503
+https://lists.gnu.org/archive/html/bug-gawk/2024-01/msg00013.html
+https://git.savannah.gnu.org/cgit/gawk.git/commit/?h=gawk-5.3-stable&id=e05040b5d81b5a0e809fc56df2a7c3d654c77e1d
+
+From e05040b5d81b5a0e809fc56df2a7c3d654c77e1d Mon Sep 17 00:00:00 2001
+From: "Arnold D. Robbins" <arn...@skeeve.com>
+Date: Sun, 28 Jan 2024 20:24:09 +0200
+Subject: Bug fix in str2wstr.
+
+---
+ node.c           | 26 ++++++++++++++------------
+ pc/Makefile.tst  |  6 ++++++
+ test/Makefile.am |  5 ++++-
+ test/Makefile.in | 10 +++++++++-
+ test/Maketests   |  5 +++++
+ test/match4.awk  |  1 +
+ test/match4.ok   |  1 +
+ 10 files changed, 56 insertions(+), 14 deletions(-)
+ create mode 100644 test/match4.awk
+ create mode 100644 test/match4.ok
+
+diff --git a/node.c b/node.c
+index de12f05..5aac5e8 100644
+--- a/node.c
++++ b/node.c
+@@ -816,6 +816,20 @@ str2wstr(NODE *n, size_t **ptr)
+       assert((n->flags & (STRING|STRCUR)) != 0);
+ 
+       /*
++       * For use by do_match, create and fill in an array.
++       * For each byte `i' in n->stptr (the original string),
++       * a[i] is equal to `j', where `j' is the corresponding wchar_t
++       * in the converted wide string.
++       *
++       * This is needed even for Nnull_string or Null_field.
++       *
++       * Create the array.
++       */
++      if (ptr != NULL) {
++              ezalloc(*ptr, size_t *, sizeof(size_t) * (n->stlen + 1), 
"str2wstr");
++      }
++
++      /*
+        * Don't convert global null string or global null field
+        * variables to a wide string. They are both zero-length anyway.
+        * This also avoids future double-free errors while releasing
+@@ -848,18 +862,6 @@ str2wstr(NODE *n, size_t **ptr)
+       emalloc(n->wstptr, wchar_t *, sizeof(wchar_t) * (n->stlen + 1), 
"str2wstr");
+       wsp = n->wstptr;
+ 
+-      /*
+-       * For use by do_match, create and fill in an array.
+-       * For each byte `i' in n->stptr (the original string),
+-       * a[i] is equal to `j', where `j' is the corresponding wchar_t
+-       * in the converted wide string.
+-       *
+-       * Create the array.
+-       */
+-      if (ptr != NULL) {
+-              ezalloc(*ptr, size_t *, sizeof(size_t) * (n->stlen + 1), 
"str2wstr");
+-      }
+-
+       sp = n->stptr;
+       src_count = n->stlen;
+       memset(& mbs, 0, sizeof(mbs));
+diff --git a/pc/Makefile.tst b/pc/Makefile.tst
+index daf3c56..9ab61c7 100644
+--- a/pc/Makefile.tst
++++ b/pc/Makefile.tst
+@@ -180,6 +180,7 @@ BASIC_TESTS = \
+       substr swaplns synerr1 synerr2 synerr3 tailrecurse tradanch \
+       trailbs tweakfld uninit2 uninit3 uninit4 uninit5 uninitialized \
+       unterm uparrfs uplus wideidx wideidx2 widesub widesub2 widesub3 \
++      match4 \
+       widesub4 wjposer1 zero2 zeroe0 zeroflag
+ 
+ UNIX_TESTS = \
+@@ -2602,6 +2603,11 @@ widesub3:
+       AWKPATH="$(srcdir)" $(AWK) -f $@.awk  < "$(srcdir)"/$@.in >_$@ 2>&1 || 
echo EXIT CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+ 
++match4:
++      @echo $@
++      @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk  >_$@ 2>&1 || echo EXIT CODE: 
$$? >>_$@
++      @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
++
+ widesub4:
+       @echo $@ $(ZOS_FAIL)
+       @-[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=ENU_USA.1252; export GAWKLOCALE; \
+diff --git a/test/Makefile.am b/test/Makefile.am
+index a876b3a..e1e1f3f 100644
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -1,7 +1,7 @@
+ #
+ # test/Makefile.am --- automake input file for gawk
+ #
+-# Copyright (C) 1988-2023 the Free Software Foundation, Inc.
++# Copyright (C) 1988-2024 the Free Software Foundation, Inc.
+ #
+ # This file is part of GAWK, the GNU implementation of the
+ # AWK Programming Language.
+@@ -763,6 +763,8 @@ EXTRA_DIST = \
+       match3.awk \
+       match3.in \
+       match3.ok \
++      match4.awk \
++      match4.ok \
+       math.awk \
+       math.ok \
+       mbfw1.awk \
+@@ -1544,6 +1546,7 @@ BASIC_TESTS = \
+       substr swaplns synerr1 synerr2 synerr3 tailrecurse tradanch \
+       trailbs tweakfld uninit2 uninit3 uninit4 uninit5 uninitialized \
+       unterm uparrfs uplus wideidx wideidx2 widesub widesub2 widesub3 \
++      match4 \
+       widesub4 wjposer1 zero2 zeroe0 zeroflag
+ 
+ UNIX_TESTS = \
+diff --git a/test/Makefile.in b/test/Makefile.in
+index 1ef143f..681a85b 100644
+--- a/test/Makefile.in
++++ b/test/Makefile.in
+@@ -17,7 +17,7 @@
+ #
+ # test/Makefile.am --- automake input file for gawk
+ #
+-# Copyright (C) 1988-2023 the Free Software Foundation, Inc.
++# Copyright (C) 1988-2024 the Free Software Foundation, Inc.
+ #
+ # This file is part of GAWK, the GNU implementation of the
+ # AWK Programming Language.
+@@ -1027,6 +1027,8 @@ EXTRA_DIST = \
+       match3.awk \
+       match3.in \
+       match3.ok \
++      match4.awk \
++      match4.ok \
+       math.awk \
+       math.ok \
+       mbfw1.awk \
+@@ -1808,6 +1810,7 @@ BASIC_TESTS = \
+       substr swaplns synerr1 synerr2 synerr3 tailrecurse tradanch \
+       trailbs tweakfld uninit2 uninit3 uninit4 uninit5 uninitialized \
+       unterm uparrfs uplus wideidx wideidx2 widesub widesub2 widesub3 \
++      match4 \
+       widesub4 wjposer1 zero2 zeroe0 zeroflag
+ 
+ UNIX_TESTS = \
+@@ -4414,6 +4417,11 @@ widesub3:
+       AWKPATH="$(srcdir)" $(AWK) -f $@.awk  < "$(srcdir)"/$@.in >_$@ 2>&1 || 
echo EXIT CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+ 
++match4:
++      @echo $@
++      @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk  >_$@ 2>&1 || echo EXIT CODE: 
$$? >>_$@
++      @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
++
+ widesub4:
+       @echo $@ $(ZOS_FAIL)
+       @-[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; export GAWKLOCALE; \
+diff --git a/test/Maketests b/test/Maketests
+index bac220f..9a00140 100644
+--- a/test/Maketests
++++ b/test/Maketests
+@@ -1288,6 +1288,11 @@ widesub3:
+       AWKPATH="$(srcdir)" $(AWK) -f $@.awk  < "$(srcdir)"/$@.in >_$@ 2>&1 || 
echo EXIT CODE: $$? >>_$@
+       @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+ 
++match4:
++      @echo $@
++      @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk  >_$@ 2>&1 || echo EXIT CODE: 
$$? >>_$@
++      @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
++
+ widesub4:
+       @echo $@ $(ZOS_FAIL)
+       @-[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; export GAWKLOCALE; \
+diff --git a/test/match4.awk b/test/match4.awk
+new file mode 100644
+index 0000000..e50150a
+--- /dev/null
++++ b/test/match4.awk
+@@ -0,0 +1 @@
++BEGIN { print match (m, /a?/) }
+diff --git a/test/match4.ok b/test/match4.ok
+new file mode 100644
+index 0000000..d00491f
+--- /dev/null
++++ b/test/match4.ok
+@@ -0,0 +1 @@
++1
+-- 
+cgit v1.1

diff --git a/sys-apps/gawk/gawk-5.3.0-r1.ebuild 
b/sys-apps/gawk/gawk-5.3.0-r1.ebuild
new file mode 100644
index 000000000000..b5dcc51606c4
--- /dev/null
+++ b/sys-apps/gawk/gawk-5.3.0-r1.ebuild
@@ -0,0 +1,140 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+#GAWK_IS_BETA=yes
+
+DESCRIPTION="GNU awk pattern-matching language"
+HOMEPAGE="https://www.gnu.org/software/gawk/gawk.html";
+
+if [[ ${GAWK_IS_BETA} == yes || ${PV} == *_beta* ]] ; then
+       if [[ ${PV} == *_beta* ]] ; then
+               # Beta versioning is sometimes for the release prior, e.g.
+               # 5.2.1_beta is labelled upstream as 5.2.0b.
+               MY_PV=${PV/_beta/b}
+               MY_PV=$(ver_cut 1-2 ${MY_PV}).$(($(ver_cut 3 ${MY_PV}) - 
1))$(ver_cut 4- ${MY_PV})
+               MY_P=${PN}-${MY_PV}
+
+               S="${WORKDIR}"/${MY_P}
+       else
+               MY_P=${P}
+       fi
+
+       SRC_URI="https://www.skeeve.com/gawk/${MY_P}.tar.gz";
+else
+       VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/gawk.asc
+       inherit verify-sig
+
+       SRC_URI="mirror://gnu/gawk/${P}.tar.xz"
+       SRC_URI+=" verify-sig? ( mirror://gnu/gawk/${P}.tar.xz.sig )"
+
+       KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc 
~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos 
~x64-macos ~x64-solaris"
+fi
+
+LICENSE="GPL-3+"
+SLOT="0"
+# While tempting to enable mpfr by default as e.g. Fedora do, as of 5.2.x,
+# MPFR support is "on parole" and may be removed:
+# https://www.gnu.org/software/gawk/manual/html_node/MPFR-On-Parole.html.
+IUSE="mpfr pma nls readline"
+
+RDEPEND="
+       mpfr? (
+               dev-libs/gmp:=
+               dev-libs/mpfr:=
+       )
+       readline? ( sys-libs/readline:= )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+       >=sys-apps/texinfo-7.1
+       >=sys-devel/bison-3.5.4
+       nls? ( sys-devel/gettext )
+"
+
+if [[ ${GAWK_IS_BETA} != yes ]] ; then
+       BDEPEND+=" verify-sig? ( sec-keys/openpgp-keys-gawk )"
+fi
+
+PATCHES=(
+       "${FILESDIR}"/${P}-str2wstr.patch
+)
+
+src_prepare() {
+       default
+
+       # Use symlinks rather than hardlinks, and disable version links
+       sed -i \
+               -e '/^LN =/s:=.*:= $(LN_S):' \
+               -e '/install-exec-hook:/s|$|\nfoo:|' \
+               Makefile.in doc/Makefile.in || die
+
+       # bug #413327
+       sed -i '/^pty1:$/s|$|\n_pty1:|' test/Makefile.in || die
+
+       # Fix standards conflict on Solaris
+       if [[ ${CHOST} == *-solaris* ]] ; then
+               sed -i \
+                       -e '/\<_XOPEN_SOURCE\>/s/1$/600/' \
+                       -e '/\<_XOPEN_SOURCE_EXTENDED\>/s/1//' \
+                       extension/inplace.c || die
+       fi
+}
+
+src_configure() {
+       # README says gawk may not work properly if built with non-Bison.
+       # We already BDEPEND on Bison, so just unset YACC rather than
+       # guessing if we need to do yacc.bison or bison -y.
+       unset YACC
+
+       local myeconfargs=(
+               --cache-file="${S}"/config.cache
+               --libexec='$(libdir)/misc'
+               $(use_with mpfr)
+               $(use_enable nls)
+               $(use_enable pma)
+               $(use_with readline)
+       )
+
+       econf "${myeconfargs[@]}"
+}
+
+src_install() {
+       # Automatic dodocs barfs
+       rm -rf README_d || die
+
+       default
+
+       # Install headers
+       insinto /usr/include/awk
+       doins *.h
+       rm "${ED}"/usr/include/awk/config.h || die
+}
+
+pkg_postinst() {
+       # Symlink creation here as the links do not belong to gawk, but to any 
awk
+       if has_version app-admin/eselect && has_version app-eselect/eselect-awk 
; then
+               eselect awk update ifunset
+       else
+               local l
+               for l in "${EROOT}"/usr/share/man/man1/gawk.1* 
"${EROOT}"/usr/bin/gawk ; do
+                       if [[ -e ${l} ]] && ! [[ -e ${l/gawk/awk} ]] ; then
+                               ln -s "${l##*/}" "${l/gawk/awk}" || die
+                       fi
+               done
+
+               if ! [[ -e ${EROOT}/bin/awk ]] ; then
+                       # /bin might not exist yet (stage1)
+                       [[ -d "${EROOT}/bin" ]] || mkdir "${EROOT}/bin" || die
+
+                       ln -s "../usr/bin/gawk" "${EROOT}/bin/awk" || die
+               fi
+       fi
+}
+
+pkg_postrm() {
+       if has_version app-admin/eselect && has_version app-eselect/eselect-awk 
; then
+               eselect awk update ifunset
+       fi
+}

Reply via email to