app-shells/bash: overhaul SLOT 0 ebuilds; minimise their differences

The bash ebuilds in SLOT 0 continue to diverge from one another in small
but irksome ways, which makes working on them a chore. As such, the main
purpose of this commit is to minimise the differences between them.
Beyond that, several other changes have been made. All of the changes
are described herewith.

As regards the matter of difference minimisation:

- order the patterns of the first case statement in a consistent way
- declare BASH_COMMIT within the scope of the first case statement
- always declare BASH_COMMIT (even if as a null string or dead code)
- remove a redundant ;; operator from the first case statement
- always acknowledge that BASH_COMMIT might be set
- declare S within the scope of the second case statement
- consistently mention that Chet advises against the use of byacc

In pkg_postinst(), incorporate a warning to the effect of the
"15-gentoo-bashrc-check.bash" file being safe to delete.

Restructure the pkg_postinst() code so as to make it easier to
incorporate additional, version-dependent, upgrade notices.

In pkg_postinst(), if the terminal is found to be more than 80 columns
wide, invoke the fmt(1) utility so as to reflow the upgrade notice(s).

Signed-off-by: Kerin Millar <kfm@plushkava.net>
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Kerin Millar
2025-09-25 18:24:41 +01:00
committed by Sam James
parent 3fe09cee79
commit 82ef038c82
5 changed files with 184 additions and 45 deletions

View File

@@ -17,12 +17,15 @@ MY_PATCHES=()
# Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.2-patches/.
case ${PV} in
*_p*)
PLEVEL=${PV##*_p}
;;
9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release.
PLEVEL=-1
if [[ ${PV} =~ _pre[0-9]{8}$ ]]; then
BASH_COMMIT=
fi
;;
*_p*)
PLEVEL=${PV##*_p}
;;
*)
PLEVEL=0
@@ -39,6 +42,14 @@ if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://git.savannah.gnu.org/git/bash.git"
EGIT_BRANCH=devel
inherit git-r3
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
# It can be useful to have snapshots in the pre-release period once
# the first alpha is out, as various bugs get reported and fixed from
# the alpha, and the next pre-release is usually quite far away.
#
# i.e. if it's worth packaging the alpha, it's worth packaging a followup.
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz"
S=${WORKDIR}/${PN}-${BASH_COMMIT}
else
my_urls=( "mirror://gnu/bash/${MY_P}.tar.gz" )
@@ -52,6 +63,7 @@ else
done
SRC_URI="${my_urls[*]} verify-sig? ( ${my_urls[*]/%/.sig} )"
S=${WORKDIR}/${MY_P}
unset -v my_urls my_p my_patch_idx my_patch_ver
fi
@@ -60,8 +72,6 @@ if [[ ${GENTOO_PATCH_VER} ]]; then
SRC_URI+=" https://dev.gentoo.org/~${GENTOO_PATCH_DEV:?}/distfiles/${CATEGORY}/${PN}/${PN}-${GENTOO_PATCH_VER:?}-patches.tar.xz"
fi
S=${WORKDIR}/${MY_P}
LICENSE="GPL-3+"
SLOT="0"
if (( PLEVEL >= 0 )); then
@@ -121,6 +131,8 @@ src_unpack() {
if [[ ${PV} == 9999 ]]; then
git-r3_src_unpack
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
default
else
if use verify-sig; then
verify-sig_verify_detached "${DISTDIR}/${MY_P}.tar.gz"{,.sig}
@@ -172,8 +184,10 @@ src_configure() {
# Upstream only test with Bison and require GNUisms like YYEOF and
# YYERRCODE. The former at least may be in POSIX soon:
# https://www.austingroupbugs.net/view.php?id=1269.
#
# configure warns on use of non-Bison but doesn't abort. The result
# may misbehave at runtime.
# may misbehave at runtime. Chet also advises against use of byacc:
# https://lists.gnu.org/archive/html/bug-bash/2025-08/msg00115.html
unset -v YACC
# bash 5.3 drops unprototyped functions, earlier versions are
@@ -380,6 +394,11 @@ pkg_postinst() {
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
if [[ -e ${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash ]]; then
ewarn "The following file is no longer packaged and can safely be deleted:"
ewarn "${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash"
fi
read -rd '' -a versions <<<"${REPLACING_VERSIONS}"
for ver in "${versions[@]}"; do
if [[ ! ${old_ver} ]] || ver_test "${ver}" -lt "${old_ver}"; then
@@ -387,13 +406,21 @@ pkg_postinst() {
fi
done
if [[ ! $old_ver ]]; then
:
elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
if [[ ! ${old_ver} ]]; then
return
fi
while read -r; do ewarn "${REPLY}"; done <<'EOF'
{
if ver_test "${old_ver}" -ge "5.2" \
&& ver_test "${old_ver}" -ge "5.2_p26-r8"
then
:
elif ver_test "${old_ver}" -lt "5.2" \
&& ver_test "${old_ver}" -ge "5.1_p16-r8"
then
:
else
cat <<'EOF'
Files under /etc/bash/bashrc.d must now have a suffix of .sh or .bash.
Gentoo now defaults to defining PROMPT_COMMAND as an array. Depending on the
@@ -416,4 +443,14 @@ Those who would prefer for bash never to interfere with the window title may
now opt out of the default title setting behaviour, either with the "unset -v
PROMPT_COMMAND" command or by re-defining PROMPT_COMMAND as desired.
EOF
fi
} \
| if [[ ${COLUMNS} == [1-9]*([0-9]) ]] && (( COLUMNS > 80 )); then
fmt -w "$(( COLUMNS - 3 ))"
else
cat
fi \
| while read -r; do
ewarn "${REPLY}"
done
}

View File

@@ -20,13 +20,15 @@ case ${PV} in
9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release.
PLEVEL=-1
if [[ ${PV} =~ _pre[0-9]{8}$ ]]; then
BASH_COMMIT=
fi
;;
*_p*)
PLEVEL=${PV##*_p}
;;
*)
PLEVEL=0
;;
esac
# The version of readline this bash normally ships with. Note that we only use
@@ -40,13 +42,12 @@ if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://git.savannah.gnu.org/git/bash.git"
EGIT_BRANCH=devel
inherit git-r3
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
# It can be useful to have snapshots in the pre-release period once
# the first alpha is out, as various bugs get reported and fixed from
# the alpha, and the next pre-release is usually quite far away.
#
# i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="b35866a2891a9b069e37ca5684d4309c0391e261"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz"
S=${WORKDIR}/${PN}-${BASH_COMMIT}
else
@@ -124,7 +125,7 @@ src_unpack() {
if [[ ${PV} == 9999 ]]; then
git-r3_src_unpack
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
default
else
if use verify-sig; then
@@ -168,8 +169,10 @@ src_configure() {
# Upstream only test with Bison and require GNUisms like YYEOF and
# YYERRCODE. The former at least may be in POSIX soon:
# https://www.austingroupbugs.net/view.php?id=1269.
#
# configure warns on use of non-Bison but doesn't abort. The result
# may misbehave at runtime.
# may misbehave at runtime. Chet also advises against use of byacc:
# https://lists.gnu.org/archive/html/bug-bash/2025-08/msg00115.html
unset -v YACC
if tc-is-cross-compiler; then
@@ -372,6 +375,11 @@ pkg_postinst() {
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
if [[ -e ${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash ]]; then
ewarn "The following file is no longer packaged and can safely be deleted:"
ewarn "${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash"
fi
read -rd '' -a versions <<<"${REPLACING_VERSIONS}"
for ver in "${versions[@]}"; do
if [[ ! ${old_ver} ]] || ver_test "${ver}" -lt "${old_ver}"; then
@@ -379,13 +387,21 @@ pkg_postinst() {
fi
done
if [[ ! $old_ver ]]; then
:
elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
if [[ ! ${old_ver} ]]; then
return
fi
while read -r; do ewarn "${REPLY}"; done <<'EOF'
{
if ver_test "${old_ver}" -ge "5.2" \
&& ver_test "${old_ver}" -ge "5.2_p26-r8"
then
:
elif ver_test "${old_ver}" -lt "5.2" \
&& ver_test "${old_ver}" -ge "5.1_p16-r8"
then
:
else
cat <<'EOF'
Files under /etc/bash/bashrc.d must now have a suffix of .sh or .bash.
Gentoo now defaults to defining PROMPT_COMMAND as an array. Depending on the
@@ -408,4 +424,14 @@ Those who would prefer for bash never to interfere with the window title may
now opt out of the default title setting behaviour, either with the "unset -v
PROMPT_COMMAND" command or by re-defining PROMPT_COMMAND as desired.
EOF
fi
} \
| if [[ ${COLUMNS} == [1-9]*([0-9]) ]] && (( COLUMNS > 80 )); then
fmt -w "$(( COLUMNS - 3 ))"
else
cat
fi \
| while read -r; do
ewarn "${REPLY}"
done
}

View File

@@ -20,13 +20,15 @@ case ${PV} in
9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release.
PLEVEL=-1
if [[ ${PV} =~ _pre[0-9]{8}$ ]]; then
BASH_COMMIT=
fi
;;
*_p*)
PLEVEL=${PV##*_p}
;;
*)
PLEVEL=0
;;
esac
# The version of readline this bash normally ships with. Note that we only use
@@ -40,13 +42,12 @@ if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://git.savannah.gnu.org/git/bash.git"
EGIT_BRANCH=devel
inherit git-r3
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
# It can be useful to have snapshots in the pre-release period once
# the first alpha is out, as various bugs get reported and fixed from
# the alpha, and the next pre-release is usually quite far away.
#
# i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="b35866a2891a9b069e37ca5684d4309c0391e261"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz"
S=${WORKDIR}/${PN}-${BASH_COMMIT}
else
@@ -124,7 +125,7 @@ src_unpack() {
if [[ ${PV} == 9999 ]]; then
git-r3_src_unpack
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
default
else
if use verify-sig; then
@@ -168,8 +169,10 @@ src_configure() {
# Upstream only test with Bison and require GNUisms like YYEOF and
# YYERRCODE. The former at least may be in POSIX soon:
# https://www.austingroupbugs.net/view.php?id=1269.
#
# configure warns on use of non-Bison but doesn't abort. The result
# may misbehave at runtime.
# may misbehave at runtime. Chet also advises against use of byacc:
# https://lists.gnu.org/archive/html/bug-bash/2025-08/msg00115.html
unset -v YACC
if tc-is-cross-compiler; then
@@ -373,6 +376,11 @@ pkg_postinst() {
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
if [[ -e ${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash ]]; then
ewarn "The following file is no longer packaged and can safely be deleted:"
ewarn "${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash"
fi
read -rd '' -a versions <<<"${REPLACING_VERSIONS}"
for ver in "${versions[@]}"; do
if [[ ! ${old_ver} ]] || ver_test "${ver}" -lt "${old_ver}"; then
@@ -380,13 +388,21 @@ pkg_postinst() {
fi
done
if [[ ! $old_ver ]]; then
:
elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
if [[ ! ${old_ver} ]]; then
return
fi
while read -r; do ewarn "${REPLY}"; done <<'EOF'
{
if ver_test "${old_ver}" -ge "5.2" \
&& ver_test "${old_ver}" -ge "5.2_p26-r8"
then
:
elif ver_test "${old_ver}" -lt "5.2" \
&& ver_test "${old_ver}" -ge "5.1_p16-r8"
then
:
else
cat <<'EOF'
Files under /etc/bash/bashrc.d must now have a suffix of .sh or .bash.
Gentoo now defaults to defining PROMPT_COMMAND as an array. Depending on the
@@ -409,4 +425,14 @@ Those who would prefer for bash never to interfere with the window title may
now opt out of the default title setting behaviour, either with the "unset -v
PROMPT_COMMAND" command or by re-defining PROMPT_COMMAND as desired.
EOF
fi
} \
| if [[ ${COLUMNS} == [1-9]*([0-9]) ]] && (( COLUMNS > 80 )); then
fmt -w "$(( COLUMNS - 3 ))"
else
cat
fi \
| while read -r; do
ewarn "${REPLY}"
done
}

View File

@@ -20,13 +20,15 @@ case ${PV} in
9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release.
PLEVEL=-1
if [[ ${PV} =~ _pre[0-9]{8}$ ]]; then
BASH_COMMIT="cf8a2518c8b94f75b330d398f5daa0ee21417e1b"
fi
;;
*_p*)
PLEVEL=${PV##*_p}
;;
*)
PLEVEL=0
;;
esac
# The version of readline this bash normally ships with. Note that we only use
@@ -40,13 +42,12 @@ if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://git.savannah.gnu.org/git/bash.git"
EGIT_BRANCH=devel
inherit git-r3
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
# It can be useful to have snapshots in the pre-release period once
# the first alpha is out, as various bugs get reported and fixed from
# the alpha, and the next pre-release is usually quite far away.
#
# i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="cf8a2518c8b94f75b330d398f5daa0ee21417e1b"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz"
S=${WORKDIR}/${PN}-${BASH_COMMIT}
else
@@ -123,7 +124,7 @@ src_unpack() {
if [[ ${PV} == 9999 ]]; then
git-r3_src_unpack
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
default
else
if use verify-sig; then
@@ -167,8 +168,10 @@ src_configure() {
# Upstream only test with Bison and require GNUisms like YYEOF and
# YYERRCODE. The former at least may be in POSIX soon:
# https://www.austingroupbugs.net/view.php?id=1269.
#
# configure warns on use of non-Bison but doesn't abort. The result
# may misbehave at runtime.
# may misbehave at runtime. Chet also advises against use of byacc:
# https://lists.gnu.org/archive/html/bug-bash/2025-08/msg00115.html
unset -v YACC
if tc-is-cross-compiler; then
@@ -369,6 +372,11 @@ pkg_postinst() {
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
if [[ -e ${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash ]]; then
ewarn "The following file is no longer packaged and can safely be deleted:"
ewarn "${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash"
fi
read -rd '' -a versions <<<"${REPLACING_VERSIONS}"
for ver in "${versions[@]}"; do
if [[ ! ${old_ver} ]] || ver_test "${ver}" -lt "${old_ver}"; then
@@ -376,13 +384,21 @@ pkg_postinst() {
fi
done
if [[ ! $old_ver ]]; then
:
elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
if [[ ! ${old_ver} ]]; then
return
fi
while read -r; do ewarn "${REPLY}"; done <<'EOF'
{
if ver_test "${old_ver}" -ge "5.2" \
&& ver_test "${old_ver}" -ge "5.2_p26-r8"
then
:
elif ver_test "${old_ver}" -lt "5.2" \
&& ver_test "${old_ver}" -ge "5.1_p16-r8"
then
:
else
cat <<'EOF'
Files under /etc/bash/bashrc.d must now have a suffix of .sh or .bash.
Gentoo now defaults to defining PROMPT_COMMAND as an array. Depending on the
@@ -405,4 +421,14 @@ Those who would prefer for bash never to interfere with the window title may
now opt out of the default title setting behaviour, either with the "unset -v
PROMPT_COMMAND" command or by re-defining PROMPT_COMMAND as desired.
EOF
fi
} \
| if [[ ${COLUMNS} == [1-9]*([0-9]) ]] && (( COLUMNS > 80 )); then
fmt -w "$(( COLUMNS - 3 ))"
else
cat
fi \
| while read -r; do
ewarn "${REPLY}"
done
}

View File

@@ -20,13 +20,15 @@ case ${PV} in
9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release.
PLEVEL=-1
if [[ ${PV} =~ _pre[0-9]{8}$ ]]; then
BASH_COMMIT=
fi
;;
*_p*)
PLEVEL=${PV##*_p}
;;
*)
PLEVEL=0
;;
esac
# The version of readline this bash normally ships with. Note that we only use
@@ -40,13 +42,12 @@ if [[ ${PV} == 9999 ]]; then
EGIT_REPO_URI="https://git.savannah.gnu.org/git/bash.git"
EGIT_BRANCH=devel
inherit git-r3
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
# It can be useful to have snapshots in the pre-release period once
# the first alpha is out, as various bugs get reported and fixed from
# the alpha, and the next pre-release is usually quite far away.
#
# i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="b35866a2891a9b069e37ca5684d4309c0391e261"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz"
S=${WORKDIR}/${PN}-${BASH_COMMIT}
else
@@ -123,7 +124,7 @@ src_unpack() {
if [[ ${PV} == 9999 ]]; then
git-r3_src_unpack
elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
elif (( PLEVEL < 0 )) && [[ ${BASH_COMMIT} ]]; then
default
else
if use verify-sig; then
@@ -374,6 +375,11 @@ pkg_postinst() {
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
if [[ -e ${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash ]]; then
ewarn "The following file is no longer packaged and can safely be deleted:"
ewarn "${EROOT}/etc/bash/bashrc.d/15-gentoo-bashrc-check.bash"
fi
read -rd '' -a versions <<<"${REPLACING_VERSIONS}"
for ver in "${versions[@]}"; do
if [[ ! ${old_ver} ]] || ver_test "${ver}" -lt "${old_ver}"; then
@@ -381,13 +387,21 @@ pkg_postinst() {
fi
done
if [[ ! $old_ver ]]; then
:
elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
if [[ ! ${old_ver} ]]; then
return
fi
while read -r; do ewarn "${REPLY}"; done <<'EOF'
{
if ver_test "${old_ver}" -ge "5.2" \
&& ver_test "${old_ver}" -ge "5.2_p26-r8"
then
:
elif ver_test "${old_ver}" -lt "5.2" \
&& ver_test "${old_ver}" -ge "5.1_p16-r8"
then
:
else
cat <<'EOF'
Files under /etc/bash/bashrc.d must now have a suffix of .sh or .bash.
Gentoo now defaults to defining PROMPT_COMMAND as an array. Depending on the
@@ -410,4 +424,14 @@ Those who would prefer for bash never to interfere with the window title may
now opt out of the default title setting behaviour, either with the "unset -v
PROMPT_COMMAND" command or by re-defining PROMPT_COMMAND as desired.
EOF
fi
} \
| if [[ ${COLUMNS} == [1-9]*([0-9]) ]] && (( COLUMNS > 80 )); then
fmt -w "$(( COLUMNS - 3 ))"
else
cat
fi \
| while read -r; do
ewarn "${REPLY}"
done
}