summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2024-12-24 07:37:09 +0000
committerSam James <sam@gentoo.org>2024-12-24 07:37:09 +0000
commitbebb08842689ea39ed4806947fcdc03c21c4e33b (patch)
tree92c05d9d8c9ca32f7e59757c228d31e279fb62ee /sys-devel/bison
parentdev-java/commons-io: Stabilize 2.18.0 ppc64, #946875 (diff)
downloadgentoo-bebb08842689ea39ed4806947fcdc03c21c4e33b.tar.gz
gentoo-bebb08842689ea39ed4806947fcdc03c21c4e33b.tar.bz2
gentoo-bebb08842689ea39ed4806947fcdc03c21c4e33b.zip
sys-devel/bison: fix tests w/ -D_GLIBCXX_ASSERTIONS in GCC 15
Closes: https://bugs.gentoo.org/935754 Thanks-to: Arsen Arsenović <arsen@gentoo.org> Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'sys-devel/bison')
-rw-r--r--sys-devel/bison/bison-3.8.2-r3.ebuild109
-rw-r--r--sys-devel/bison/files/bison-3.8.2-gcc15-glibcxx-assertions.patch69
2 files changed, 178 insertions, 0 deletions
diff --git a/sys-devel/bison/bison-3.8.2-r3.ebuild b/sys-devel/bison/bison-3.8.2-r3.ebuild
new file mode 100644
index 000000000000..966b52d053aa
--- /dev/null
+++ b/sys-devel/bison/bison-3.8.2-r3.ebuild
@@ -0,0 +1,109 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/bison.asc
+inherit flag-o-matic multiprocessing verify-sig
+
+DESCRIPTION="A general-purpose (yacc-compatible) parser generator"
+HOMEPAGE="https://www.gnu.org/software/bison/"
+SRC_URI="mirror://gnu/${PN}/${P}.tar.xz"
+SRC_URI+=" verify-sig? ( mirror://gnu/${PN}/${P}.tar.xz.sig )"
+
+LICENSE="GPL-3+"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
+IUSE="examples nls static test"
+RESTRICT="!test? ( test )"
+
+# gettext _IS_ required in RDEPEND because >=bison-3.7 links against
+# libtextstyle.so!!! (see bug #740754)
+DEPEND="
+ >=sys-devel/m4-1.4.16
+ >=sys-devel/gettext-0.21
+"
+RDEPEND="${DEPEND}"
+BDEPEND="
+ app-alternatives/lex
+ test? ( dev-lang/perl )
+ verify-sig? ( sec-keys/openpgp-keys-bison )
+"
+PDEPEND="app-alternatives/yacc"
+
+DOCS=( AUTHORS ChangeLog NEWS README THANKS TODO ) # ChangeLog-2012 ChangeLog-1998 PACKAGING README-alpha README-release
+
+PATCHES=(
+ "${FILESDIR}"/${PN}-3.8.2-gcc15-glibcxx-assertions.patch
+)
+
+src_prepare() {
+ # Old logic when we needed to patch configure.ac
+ # Keeping in case it's useful for future
+
+ # Record date to avoid 'config.status --recheck' & regen of 'tests/package.m4'
+ #touch -r configure.ac old.configure.ac || die
+ #touch -r configure old.configure || die
+
+ #eapply "${WORKDIR}"/patches
+ #default
+
+ # Restore date after patching
+ #touch -r old.configure.ac configure.ac || die
+ #touch -r old.configure configure || die
+
+ # The makefiles make the man page depend on the configure script
+ # which we patched above. Touch it to prevent regeneration.
+ #touch doc/bison.1 || die #548778 #538300#9
+
+ default
+
+ # Avoid regenerating the info page when the timezone is diff. #574492
+ sed -i '2iexport TZ=UTC' build-aux/mdate-sh || die
+}
+
+src_configure() {
+ use static && append-ldflags -static
+
+ local myeconfargs=(
+ $(use_enable nls)
+ )
+
+ econf "${myeconfargs[@]}"
+}
+
+src_test() {
+ emake check TESTSUITEFLAGS="--jobs=$(get_makeopts_jobs)"
+}
+
+src_install() {
+ default
+
+ # These are owned by app-alternatives/yacc
+ mv "${ED}"/usr/bin/yacc{,.bison} || die
+ mv "${ED}"/usr/share/man/man1/yacc{,.bison}.1 || die
+
+ # We do not need liby.a
+ rm -r "${ED}"/usr/lib* || die
+
+ # Examples are about 200K, so let's make them optional still for now.
+ if ! use examples ; then
+ rm -r "${ED}"/usr/share/doc/${PF}/examples/ || die
+ fi
+}
+
+pkg_postinst() {
+ # ensure to preserve the symlinks before app-alternatives/yacc
+ # is installed
+ if [[ ! -h ${EROOT}/usr/bin/yacc ]]; then
+ if [[ -e ${EROOT}/usr/bin/yacc ]] ; then
+ # bug #886123
+ ewarn "${EROOT}/usr/bin/yacc exists but is not a symlink."
+ ewarn "This is expected during Prefix bootstrap and unusual otherwise."
+ ewarn "Moving away unexpected ${EROOT}/usr/bin/yacc to .bak."
+ mv "${EROOT}/usr/bin/yacc" "${EROOT}/usr/bin/yacc.bak" || die
+ fi
+
+ ln -s yacc.bison "${EROOT}/usr/bin/yacc" || die
+ fi
+}
diff --git a/sys-devel/bison/files/bison-3.8.2-gcc15-glibcxx-assertions.patch b/sys-devel/bison/files/bison-3.8.2-gcc15-glibcxx-assertions.patch
new file mode 100644
index 000000000000..245cc842a7be
--- /dev/null
+++ b/sys-devel/bison/files/bison-3.8.2-gcc15-glibcxx-assertions.patch
@@ -0,0 +1,69 @@
+https://bugs.gentoo.org/935754
+https://lists.gnu.org/archive/html/bison-patches/2024-07/msg00000.html
+
+* data/skeletons/glr2.cc (yyundeleteLastStack): Recover
+yylookaheadNeeds stack entry also, to prevent desyncing the sizes
+of yystates and yylookaheadNeeds.
+(class glr_state_set): New field yylookaheadNeedLastDeleted,
+tracks lookahead need of last deleted state.
+(yymarkStackDeleted): Save yylookaheadNeeds also.
+---
+Hi!
+
+GCC 15 has added bounds-checks to vector<bool> when assertions are
+enabled. This has caught a bug in Bison. See bug referenced above.
+
+Now, WRT the fix: I am not sure of its correctness, but it appears to
+pass tests and everything seems to indicate that the presumption it is
+based on is correct. That presumption is that the two stacks mentioned
+above (yylookaheadNeeds and yystates) ought to be the same size. I
+inferred this because all other locations that alter the size of the two
+vectors appear to do so in lock-step.
+
+TIA, have a lovely day.
+
+ data/skeletons/glr2.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/data/skeletons/glr2.cc b/data/skeletons/glr2.cc
+index 970ccfdf..8b962d6f 100644
+--- a/data/skeletons/glr2.cc
++++ b/data/skeletons/glr2.cc
+@@ -1080,7 +1080,10 @@ namespace
+ {
+ size_t k = yyk.uget ();
+ if (yystates[k] != YY_NULLPTR)
+- yylastDeleted = yystates[k];
++ {
++ yylastDeleted = yystates[k];
++ yylookaheadNeedLastDeleted = yylookaheadNeeds[k];
++ }
+ yystates[k] = YY_NULLPTR;
+ }
+
+@@ -1093,6 +1096,7 @@ namespace
+ if (yylastDeleted == YY_NULLPTR || !yystates.empty ())
+ return;
+ yystates.push_back (yylastDeleted);
++ yylookaheadNeeds.push_back (yylookaheadNeedLastDeleted);
+ YYCDEBUG << "Restoring last deleted stack as stack #0.\n";
+ clearLastDeleted ();
+ }
+@@ -1102,6 +1106,7 @@ namespace
+ void
+ yyremoveDeletes ()
+ {
++ YYASSERT(yystates.size () == yylookaheadNeeds.size ());
+ size_t newsize = yystates.size ();
+ /* j is the number of live stacks we have seen. */
+ for (size_t i = 0, j = 0; j < newsize; ++i)
+@@ -1160,6 +1165,7 @@ namespace
+
+ /** The last stack we invalidated. */
+ glr_state* yylastDeleted;
++ bool yylookaheadNeedLastDeleted;
+ }; // class glr_state_set
+ } // namespace
+
+--
+2.45.2