diff --git a/.fmf/version b/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/.gitignore b/.gitignore
index 45f963b..9c0b9aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,6 @@
-bison-2.4.tar.bz2
-bison-2.4.1.tar.bz2
-bison-2.4.2.tar.bz2
-bison-2.4.3.tar.bz2
-bison-*/
-/bison-2.5.tar.bz2
-/bison-2.6.1.tar.xz
-/bison-2.6.4.tar.xz
-/bison-2.7.tar.xz
-/bison-3.0.2.tar.xz
-/bison-3.0.4.tar.xz
+# Release tarballs.
+/bison-*.tar.[bgx]z*
+# Generated (source) RPMs.
+/*.rpm
+# Expanded source trees.
+/bison-*/
diff --git a/bison-3.0.5-gnulib-fseterr.patch b/bison-3.0.5-gnulib-fseterr.patch
new file mode 100644
index 0000000..cd2a482
--- /dev/null
+++ b/bison-3.0.5-gnulib-fseterr.patch
@@ -0,0 +1,19 @@
+commit 4af4a4a71827c0bc5e0ec67af23edef4f15cee8e
+Author: Paul Eggert
+Date: Mon Mar 5 10:56:29 2018 -0800
+
+ fflush: adjust to glibc 2.28 libio.h removal
+ (Only part of this commit was backported as needed.)
+
+diff -Nrup a/lib/fseterr.c b/lib/fseterr.c
+--- a/lib/fseterr.c 2018-05-08 06:02:48.000000000 -0400
++++ b/lib/fseterr.c 2018-08-14 16:06:19.636282264 -0400
+@@ -29,7 +29,7 @@ fseterr (FILE *fp)
+ /* Most systems provide FILE as a struct and the necessary bitmask in
+ , because they need it for implementing getc() and putc() as
+ fast macros. */
+-#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
+ fp->_flags |= _IO_ERR_SEEN;
+ #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
diff --git a/bison-3.8.2-gcc15-glibcxx-assertions.patch b/bison-3.8.2-gcc15-glibcxx-assertions.patch
new file mode 100644
index 0000000..245cc84
--- /dev/null
+++ b/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 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
diff --git a/bison-license-check.sh b/bison-license-check.sh
new file mode 100755
index 0000000..e39c8e9
--- /dev/null
+++ b/bison-license-check.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+# Run this in a bison source tree basedir to quickly guess the licensing
+# status of various bison source files. e.g. when using
+# glibc-maintainer-scripts for package maintenance, this means running it in
+# the bison-patches directory.
+# We use this because for some reason, fossology is unable to grok bison
+# sources for a license analysis.
+
+for f in $(find . -type f | grep -v '\.git/' | grep -v 'gnulib/'); do
+
+ if file $f | grep -q text; then # Hoping this is true iff the file is a text file
+
+ license="Unknown"
+
+ if head -n50 $f \
+ | grep -C50 -i "This.*file is free software; the Free Software Foundation" \
+ | grep -C50 -i "unlimited permission to copy and/or distribute it" \
+ | grep -C50 -i "with or without" \
+ | grep -qi "modifications, as long as this notice is preserved"; then
+ license="FSFULLR"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "This.*\(program\|file\) is free software" \
+ | grep -C50 -i "GNU General Public License" \
+ | grep -C50 -i "either version 2" \
+ | grep -qi "any later version"; then
+ license="GPL-2.0-or-later"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "This.*\(program\|file\) is free" \
+ | grep -C50 -i "GNU General Public License" \
+ | grep -C50 -i "either version 3" \
+ | grep -qi "any later version"; then
+ license="GPL-3.0-or-later"
+ fi
+
+ # Order of check for v2 and v2.1 is important here;
+ # "either version 2" will also match "either version 2.1"
+ if head -n50 $f \
+ | grep -C50 -i "This.*\(program\|file\) is free software" \
+ | grep -C50 -i "GNU Lesser General Public License" \
+ | grep -C50 -i "either version 2" \
+ | grep -qi "any later version"; then
+ license="LGPL-2.0-or-later"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "Th.* is free software" \
+ | grep -C50 -i "GNU Lesser General Public" \
+ | grep -C50 -i "License" \
+ | grep -C50 -i "either" \
+ | grep -C50 -i "version 2.1" \
+ | grep -qi "any later version"; then
+ license="LGPL-2.1-or-later"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "This.*\(program\|file\) is free software" \
+ | grep -C50 -i "GNU Lesser General Public License" \
+ | grep -C50 -i "either version 3" \
+ | grep -qi "any later version"; then
+ license="LGPL-3.0-or-later"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "Permission is granted" \
+ | grep -C50 -i "copy, distribute.*modify" \
+ | grep -C50 -i "GNU Free Documentation License" \
+ | grep -C50 -i "Version 1.3" \
+ | grep -qi "any later version"; then
+ license="GFDL-1.3-or-later"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "Permission is hereby granted, free of charge" \
+ | grep -C50 -i "to any person" \
+ | grep -C50 -i "the Software without restriction" \
+ | grep -C50 -i "use, copy, modify, merge, publish, distribute, sublicense" \
+ | grep -qi "X Consortium"; then
+ license="X11"
+ fi
+
+ if head -n50 $f \
+ | grep -C50 -i "This file is distributed under the same license as" \
+ | grep -qi "package"; then
+ license="Same-as-package-license"
+ fi
+
+ if head -n50 $f \
+ | grep -A20 -i "as .*exception" \
+ | grep -qi "2\.2 of bison"; then
+ license="$license WITH Bison-exception-2.2"
+ fi
+
+ if head -n50 $f \
+ | grep -A20 -i "as .*exception" \
+ | grep -A20 -i "distribute" \
+ | grep -A20 -i "generated by autoconf" \
+ | grep -qi "same distribution terms"; then
+ license="$license WITH Autoconf-exception-generic-3.0"
+ fi
+
+ echo $license "("$f")"
+ fi;
+done | sort
diff --git a/bison.spec b/bison.spec
index e730be1..eabe3b8 100644
--- a/bison.spec
+++ b/bison.spec
@@ -1,26 +1,33 @@
Summary: A GNU general-purpose parser generator
Name: bison
-Version: 3.0.4
-Release: 3%{?dist}
-License: GPLv3+
-Group: Development/Tools
-Source: ftp://ftp.gnu.org/pub/gnu/bison/bison-%{version}.tar.xz
+Version: 3.8.2
+Release: 11%{?dist}
-# https://bugzilla.redhat.com/show_bug.cgi?id=948856
-# Submitted for upstream inclusion on 2013-05-17.
-# Patch0: bison-2.7-unused-opts.patch
+# An SPDX license string check done against bison-3.8.2 found strings
+# corresponding to the following licenses across the bison source tree:
+License: GPL-3.0-or-later AND GPL-3.0-or-later WITH Autoconf-exception-generic-3.0 AND GPL-3.0-or-later WITH Bison-exception-2.2 AND GPL-2.0-or-later AND GPL-2.0-or-later WITH Autoconf-exception-generic AND LGPL-3.0-or-later AND LGPL-2.1-or-later AND LGPL-2.0-or-later AND FSFULLR AND GFDL-1.3-or-later AND X11
+
+Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz
+Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig
+# genereted from https://ftp.gnu.org/gnu/gnu-keyring.gpg via:
+# curl https://ftp.gnu.org/gnu/gnu-keyring.gpg | gpg2 --import
+# gpg2 --export --export-options export-minimal 7DF84374B1EE1F9764BBE25D0DDCAA3278D5264E > gpgkey-7DF84374B1EE1F9764BBE25D0DDCAA3278D5264E.gpg
+Source2: gpgkey-7DF84374B1EE1F9764BBE25D0DDCAA3278D5264E.gpg
+
+# from Gentoo sys-devel/bison
+Patch0: bison-3.8.2-gcc15-glibcxx-assertions.patch
# testsuite dependency
+BuildRequires: gcc-c++
BuildRequires: autoconf
BuildRequires: flex
+BuildRequires: gnupg2
-URL: http://www.gnu.org/software/bison/
-BuildRoot: %{_tmppath}/%{name}-root
+URL: http://www.gnu.org/software/%{name}/
BuildRequires: m4 >= 1.4
+BuildRequires: make
#java-1.7.0-openjdk-devel
Requires: m4 >= 1.4
-Requires(post): /sbin/install-info
-Requires(preun): /sbin/install-info
# bison contains a copy of gnulib. As a copylib, gnulib was granted
# an exception that allows bundling it with other software. For
@@ -45,7 +52,6 @@ Bison.
%package devel
Summary: -ly library for development using Bison-generated parsers
-Group: Development/Libraries
Provides: bison-static = %{version}-%{release}
%description devel
@@ -67,7 +73,6 @@ simple programs to supply minimal support for the generated parsers.
%package runtime
Summary: Runtime support files used by Bison-generated parsers
-Group: Development/Libraries
%description runtime
The bison-runtime package contains files used at runtime by parsers
@@ -77,50 +82,35 @@ these files are available. See the Internationalization in the
Bison manual section for more information.
%prep
-%setup -q
-#%patch0 -p1
+%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
+%autosetup -p1
%build
%configure
-make
+%make_build
%check
make check
#make maintainer-check
%install
-rm -rf $RPM_BUILD_ROOT
-%makeinstall
+%make_install
# Remove unpackaged files.
-rm -f $RPM_BUILD_ROOT/%{_bindir}/yacc
-rm -f $RPM_BUILD_ROOT/%{_infodir}/dir
-rm -f $RPM_BUILD_ROOT/%{_mandir}/man1/yacc*
-rm -f $RPM_BUILD_ROOT/%{_docdir}/%{name}/examples/calc++/*
-rm -f $RPM_BUILD_ROOT/%{_docdir}/%{name}/examples/mfcalc/*
-rm -f $RPM_BUILD_ROOT/%{_docdir}/%{name}/examples/rpcalc/*
+rm -f %{buildroot}/%{_bindir}/yacc
+rm -f %{buildroot}/%{_infodir}/dir
+rm -f %{buildroot}/%{_mandir}/man1/yacc*
+rm -rf %{buildroot}/%{_docdir}/%{name}/examples/*
%find_lang %{name}
%find_lang %{name}-runtime
+%find_lang %{name}-gnulib
gzip -9nf ${RPM_BUILD_ROOT}%{_infodir}/bison.info*
-%post
-if [ -f %{_infodir}/bison.info.gz ]; then # for --excludedocs
- /sbin/install-info %{_infodir}/bison.info.gz %{_infodir}/dir --entry="* bison: (bison). The GNU parser generator." || :
-fi
-
-%preun
-if [ $1 = 0 ]; then
- if [ -f %{_infodir}/bison.info.gz ]; then # for --excludedocs
- /sbin/install-info --delete %{_infodir}/bison.info.gz %{_infodir}/dir --entry="* bison: (bison). The GNU parser generator." || :
- fi
-fi
-
# The distribution contains also source files. These are used by m4
# when the target parser file is generated.
-%files -f %{name}.lang
-%defattr(-,root,root)
+%files -f %{name}.lang -f %{name}-gnulib.lang
%doc AUTHORS ChangeLog NEWS README THANKS TODO COPYING
%{_mandir}/*/bison*
%{_datadir}/bison
@@ -136,10 +126,119 @@ fi
%defattr(-,root,root)
%{_libdir}/liby.a
-%clean
-rm -rf $RPM_BUILD_ROOT
-
%changelog
+* Wed Jul 23 2025 Fedora Release Engineering - 3.8.2-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
+
+* Thu Jan 16 2025 Fedora Release Engineering - 3.8.2-10
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
+
+* Wed Jul 17 2024 Fedora Release Engineering - 3.8.2-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Tue Jan 23 2024 Fedora Release Engineering - 3.8.2-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Jan 19 2024 Fedora Release Engineering - 3.8.2-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Sep 1 2023 Arjun Shankar - 3.8.2-6
+- Analyse bison sources for license information
+- Migrate License field to SPDX identifiers for
+ https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_2
+ (#2222079)
+
+* Wed Jul 19 2023 Fedora Release Engineering - 3.8.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
+
+* Wed Jan 18 2023 Fedora Release Engineering - 3.8.2-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
+
+* Wed Jul 20 2022 Fedora Release Engineering - 3.8.2-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
+
+* Wed Jan 19 2022 Fedora Release Engineering - 3.8.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Mon Dec 13 2021 Arjun Shankar - 3.8.2-1
+- Update to bison 3.8.2 (#2002074)
+
+* Wed Jul 21 2021 Fedora Release Engineering - 3.7.6-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Tue May 18 2021 Arjun Shankar - 3.7.6-2
+- Rebuild with binutils-2.36.1-12.fc35
+
+* Tue Mar 16 2021 Arjun Shankar - 3.7.6-1
+- Update to bison 3.7.6 (#1920078)
+
+* Tue Jan 26 2021 Fedora Release Engineering - 3.7.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Jan 11 2021 Arjun Shankar - 3.7.4-1
+- Update to bison 3.7.4 (#1897780)
+
+* Tue Nov 10 2020 Arjun Shankar - 3.7.3-1
+- Update to bison 3.7.3 (#1887766)
+
+* Tue Sep 8 2020 Arjun Shankar - 3.7.2-1
+- Update to bison 3.7.2 (#1876120)
+
+* Thu Aug 27 2020 Arjun Shankar - 3.7.1-1
+- Update to bison 3.7.1 (#1859887)
+
+* Sat Aug 01 2020 Fedora Release Engineering - 3.6.4-3
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering - 3.6.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Jul 10 2020 Dan Čermák - 3.6.4-1
+- Update to bison 3.6.4 (#1792738, #1847608)
+
+* Tue Jan 28 2020 Fedora Release Engineering - 3.5-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Tue Jan 7 2020 Arjun Shankar - 3.5-1
+- Update to bison 3.5 (#1751843)
+
+* Wed Jul 24 2019 Fedora Release Engineering - 3.4.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Fri Jun 21 2019 Arjun Shankar - 3.4.1-1
+- Update to bison 3.4.1 (#1631912)
+
+* Thu Jan 31 2019 Fedora Release Engineering - 3.0.5-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Tue Aug 14 2018 Patsy Griffin Franklin - 3.0.5-1
+- _IO_ftrylockfile is obsolete as part of the removal of libio.h
+- Build requires gcc-c++ to fix build failure. (#1603491)
+- Update to bison 3.0.5 (#1583179)
+
+* Thu Jul 12 2018 Fedora Release Engineering - 3.0.4-10
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Wed Feb 07 2018 Fedora Release Engineering - 3.0.4-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Wed Aug 02 2017 Fedora Release Engineering - 3.0.4-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Wed Jul 26 2017 Fedora Release Engineering - 3.0.4-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Mon Feb 13 2017 Patsy Franklin - 3.0.4-6
+- Proposed upstream patch to fix testsuite failures for tests 430-432.
+ BZ #1422261
+
+* Fri Feb 10 2017 Fedora Release Engineering - 3.0.4-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Feb 03 2016 Fedora Release Engineering - 3.0.4-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
* Thu Oct 22 2015 Patsy Franklin - 3.0.4-3
- Remove unpackaged files.
diff --git a/gating.yaml b/gating.yaml
new file mode 100644
index 0000000..ce3cdc1
--- /dev/null
+++ b/gating.yaml
@@ -0,0 +1,19 @@
+--- !Policy
+product_versions:
+ - fedora-*
+decision_context: bodhi_update_push_stable
+subject_type: koji_build
+rules:
+ - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
+--- !Policy
+product_versions:
+ - rhel-8
+decision_context: osci_compose_gate
+rules:
+ - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
+--- !Policy
+product_versions:
+ - rhel-9
+decision_context: osci_compose_gate
+rules:
+ - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
diff --git a/gpgkey-7DF84374B1EE1F9764BBE25D0DDCAA3278D5264E.gpg b/gpgkey-7DF84374B1EE1F9764BBE25D0DDCAA3278D5264E.gpg
new file mode 100644
index 0000000..3015744
Binary files /dev/null and b/gpgkey-7DF84374B1EE1F9764BBE25D0DDCAA3278D5264E.gpg differ
diff --git a/plans/ci.fmf b/plans/ci.fmf
new file mode 100644
index 0000000..3fd3ab7
--- /dev/null
+++ b/plans/ci.fmf
@@ -0,0 +1,5 @@
+summary: CI Gating Plan
+discover:
+ how: fmf
+execute:
+ how: tmt
diff --git a/sources b/sources
index b7e3f5c..f3f2816 100644
--- a/sources
+++ b/sources
@@ -1 +1,2 @@
-c342201de104cc9ce0a21e0ad10d4021 bison-3.0.4.tar.xz
+SHA512 (bison-3.8.2.tar.xz) = d4d23af6671406e97257892f90651b67f2ab95219831372be032190b7156c10a3435d457857e677445df8b2327aacccc15344acbbc3808a6f332a93cce23b444
+SHA512 (bison-3.8.2.tar.xz.sig) = 8bb7743ca326e81a6c091b1413e3c09bd43c7eabbb80bac0638ccd52bdf7e3395cce300a86acd95f4637a9ec8a1b0e9a4d3d25d95ab0a8f03e57fd82eb87a7ac
diff --git a/tests/Sanity/basic-test/Makefile b/tests/Sanity/basic-test/Makefile
new file mode 100644
index 0000000..9a64167
--- /dev/null
+++ b/tests/Sanity/basic-test/Makefile
@@ -0,0 +1,63 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Makefile of /tools/bison/Sanity/basic-test
+# Description: bison basic test
+# Author: Edjunior Machado
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2021 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+export TEST=/tools/bison/Sanity/basic-test
+export TESTVERSION=1.0
+
+BUILT_FILES=
+
+FILES=$(METADATA) runtest.sh Makefile PURPOSE calc.y
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ./runtest.sh
+
+build: $(BUILT_FILES)
+ test -x runtest.sh || chmod a+x runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+
+include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Edjunior Machado " > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: bison basic test" >> $(METADATA)
+ @echo "Type: Sanity" >> $(METADATA)
+ @echo "TestTime: 1h" >> $(METADATA)
+ @echo "RunFor: bison" >> $(METADATA)
+ @echo "Requires: bison gcc" >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2+" >> $(METADATA)
+ @echo "Confidential: no" >> $(METADATA)
+ @echo "Destructive: no" >> $(METADATA)
+ @echo "Releases: -RHEL4 -RHELClient5 -RHELServer5 -RHEL6" >> $(METADATA)
+
+ rhts-lint $(METADATA)
diff --git a/tests/Sanity/basic-test/PURPOSE b/tests/Sanity/basic-test/PURPOSE
new file mode 100644
index 0000000..fe778df
--- /dev/null
+++ b/tests/Sanity/basic-test/PURPOSE
@@ -0,0 +1,3 @@
+PURPOSE of /tools/bison/Sanity/basic-test
+Description: bison basic test
+Author: Edjunior Machado
diff --git a/tests/Sanity/basic-test/calc.y b/tests/Sanity/basic-test/calc.y
new file mode 100644
index 0000000..f1fac0b
--- /dev/null
+++ b/tests/Sanity/basic-test/calc.y
@@ -0,0 +1,100 @@
+%code top {
+ #include
+ #include /* isdigit. */
+ #include /* printf. */
+ #include /* abort. */
+ #include /* strcmp. */
+
+ int yylex (void);
+ void yyerror (char const *);
+}
+
+/* Generate YYSTYPE from the types used in %token and %type. */
+%define api.value.type union
+%token NUM "number"
+%type expr term fact
+
+/* Generate the parser description file (calc.output). */
+%verbose
+
+/* Nice error messages with details. */
+%define parse.error verbose
+
+/* Enable run-time traces (yydebug). */
+%define parse.trace
+
+/* Formatting semantic values in debug traces. */
+%printer { fprintf (yyo, "%g", $$); } ;
+
+%% /* The grammar follows. */
+input:
+ %empty
+| input line
+;
+
+line:
+ '\n'
+| expr '\n' { printf ("%.10g\n", $1); }
+| error '\n' { yyerrok; }
+;
+
+expr:
+ expr '+' term { $$ = $1 + $3; }
+| expr '-' term { $$ = $1 - $3; }
+| term
+;
+
+term:
+ term '*' fact { $$ = $1 * $3; }
+| term '/' fact { $$ = $1 / $3; }
+| fact
+;
+
+fact:
+ "number"
+| '(' expr ')' { $$ = $2; }
+;
+
+%%
+
+int
+yylex (void)
+{
+ int c;
+
+ /* Ignore white space, get first nonwhite character. */
+ while ((c = getchar ()) == ' ' || c == '\t')
+ continue;
+
+ if (c == EOF)
+ return 0;
+
+ /* Char starts a number => parse the number. */
+ if (c == '.' || isdigit (c))
+ {
+ ungetc (c, stdin);
+ if (scanf ("%lf", &yylval.NUM) != 1)
+ abort ();
+ return NUM;
+ }
+
+ /* Any other character is a token by itself. */
+ return c;
+}
+
+/* Called by yyparse on error. */
+void
+yyerror (char const *s)
+{
+ fprintf (stderr, "%s\n", s);
+}
+
+int
+main (int argc, char const* argv[])
+{
+ /* Enable parse traces on option -p. */
+ for (int i = 1; i < argc; ++i)
+ if (!strcmp (argv[i], "-p"))
+ yydebug = 1;
+ return yyparse ();
+}
diff --git a/tests/Sanity/basic-test/main.fmf b/tests/Sanity/basic-test/main.fmf
new file mode 100644
index 0000000..9efa915
--- /dev/null
+++ b/tests/Sanity/basic-test/main.fmf
@@ -0,0 +1,14 @@
+summary: bison basic test
+description: ''
+contact:
+- Edjunior Machado
+component:
+- bison
+test: ./runtest.sh
+framework: beakerlib
+recommend:
+- bison
+- gcc
+duration: 1h
+extra-summary: /tools/bison/Sanity/basic-test
+extra-task: /tools/bison/Sanity/basic-test
diff --git a/tests/Sanity/basic-test/runtest.sh b/tests/Sanity/basic-test/runtest.sh
new file mode 100755
index 0000000..be397d7
--- /dev/null
+++ b/tests/Sanity/basic-test/runtest.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# runtest.sh of /tools/bison/Sanity/basic-test
+# Description: bison basic test
+# Author: Edjunior Machado
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2021 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# Include Beaker environment
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+PACKAGE="bison"
+
+rlJournalStart
+ rlPhaseStartSetup
+ rlAssertRpm $PACKAGE
+ rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"
+ rlRun "cp calc.y $TmpDir"
+ rlRun "pushd $TmpDir"
+ rlPhaseEnd
+
+ rlPhaseStartTest
+ # calc.y from http://git.savannah.gnu.org/cgit/bison.git/tree/examples/c/calc?h=v3.7.5
+ rlRun -c "bison --defines --xml --graph=calc.gv -o calc.c calc.y"
+
+ rlAssertExists "calc.c"
+ rlAssertGrep "int yylex (void);" calc.c
+ rlAssertExists "calc.h"
+ rlAssertGrep "int yyparse (void);" calc.h
+
+ rlRun -c "gcc -std=c99 -o calc calc.c"
+ rlAssertExists "calc"
+
+ rlAssertEquals "Testing if './calc <<< 1+2*3' is equal '7'" $(./calc <<< 1+2*3) 7
+ rlPhaseEnd
+
+ rlPhaseStartCleanup
+ rlRun "popd"
+ rlRun "rm -r $TmpDir" 0 "Removing tmp directory"
+ rlPhaseEnd
+rlJournalPrintText
+rlJournalEnd
diff --git a/upstream-key.gpg b/upstream-key.gpg
deleted file mode 100644
index 7e88f82..0000000
--- a/upstream-key.gpg
+++ /dev/null
@@ -1,48 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v1.4.1 (GNU/Linux)
-
-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
-=rfoO
------END PGP PUBLIC KEY BLOCK-----