summaryrefslogtreecommitdiff
path: root/app-shells/bash
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-10-01 12:11:11 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2025-10-01 12:11:11 +0000
commitef5d772cb212bb9d3049523be8a7bd2e01301090 (patch)
tree8345c2730a3aa49abe87d32a748203d81b1a7454 /app-shells/bash
parentd5751b1260fda1bd00ddfc78bb34b3c7afd9b343 (diff)
downloadbaldeagleos-repo-ef5d772cb212bb9d3049523be8a7bd2e01301090.tar.gz
baldeagleos-repo-ef5d772cb212bb9d3049523be8a7bd2e01301090.tar.xz
baldeagleos-repo-ef5d772cb212bb9d3049523be8a7bd2e01301090.zip
Adding metadata
Diffstat (limited to 'app-shells/bash')
-rw-r--r--app-shells/bash/Manifest2
-rw-r--r--app-shells/bash/bash-5.2_p37-r4.ebuild68
-rw-r--r--app-shells/bash/bash-5.2_p37-r5.ebuild (renamed from app-shells/bash/bash-5.2_p37-r3.ebuild)106
-rw-r--r--app-shells/bash/bash-5.3_p3-r2.ebuild55
-rw-r--r--app-shells/bash/bash-5.3_p3-r3.ebuild (renamed from app-shells/bash/bash-5.3_p3-r1.ebuild)84
-rw-r--r--app-shells/bash/bash-5.4_alpha_pre20250822.ebuild403
-rw-r--r--app-shells/bash/bash-5.4_alpha_pre20250904-r1.ebuild404
-rw-r--r--app-shells/bash/bash-5.4_alpha_pre20250918-r2.ebuild (renamed from app-shells/bash/bash-5.4_alpha_pre20250904.ebuild)91
-rw-r--r--app-shells/bash/bash-5.4_alpha_pre20250918.ebuild404
-rw-r--r--app-shells/bash/bash-9999.ebuild79
-rw-r--r--app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch160
-rw-r--r--app-shells/bash/files/bashrc106
-rw-r--r--app-shells/bash/files/bashrc-r129
-rw-r--r--app-shells/bash/files/bashrc.d/10-gentoo-title-r3.bash77
-rw-r--r--app-shells/bash/files/bashrc.d/15-gentoo-bashrc-check.bash24
15 files changed, 480 insertions, 1612 deletions
diff --git a/app-shells/bash/Manifest b/app-shells/bash/Manifest
index 4afbac6a24d3..78f0fd367bcd 100644
--- a/app-shells/bash/Manifest
+++ b/app-shells/bash/Manifest
@@ -24,8 +24,6 @@ DIST bash-5.2.tar.gz 10950833 BLAKE2B 51b196e710794ebad8eac28c31c93eb99ac1a7db30
DIST bash-5.2.tar.gz.sig 95 BLAKE2B 2991b7c46ef1cdca08062f419be47fca7551f4c5d9aad8a5c1da74974f5e7707d23914b4cecf9b6c9610471146b2c49b611bb62a5d974f1c37cceb77b719851c SHA512 a161664f124f906be32709f66702f8f780e6d52e558ea45e71ec60a959c9435ff68477ee65a0a9f6c0051d5592f5044fb3b410cf3cd3ae5a8a323789b01be258
DIST bash-5.3.tar.gz 11355854 BLAKE2B 82d1b54322bbd1e8c2a93380f1b2888a42a1d7186e504f41cee705a0fdd41463d8f20baa1755051e1396192f8ebd089524767d933a9e0b5fb76f2588601539bb SHA512 426702c8b0fb9e0c9956259973ce5b657890fd47f4f807a64febf20077bb48d0b91474ed6e843d2ef277186b46c5fffa79b808da9b48d4ec027d5e2de1b28ed8
DIST bash-5.3.tar.gz.sig 95 BLAKE2B 2fb04e4f699fdee6e583581821cf9a5fa435a00febf7893a344371f11ccb964545386c98dfb2d8f5d0efc74aafe9d491b544e90ae4716bdc286ac48d942430f0 SHA512 c77c0898f03e80a042574a486686cc296b96426f6cdb7a6d2376ecd5182ba03477bfcbd95ea3db499c11866d3f4ae99012a37662ccb6f83dfd6b59f671349dc7
-DIST bash-5.4_alpha_pre20250822-ab17ddb7af948ee6e1a6370aac4ee57b4179cd9c.tar.gz 16121182 BLAKE2B 2802ab3bea45fe40f515d668baeaf5ca04797b992dcb764ee38b707701bc6aac845f091b16770a51c84bfdd2ba3953b12b1fded9fdbfde035df7088f4376c236 SHA512 af7182bcad82bc7256d2b806a6f8c3ee1855fa1b3e4b3695cd8b3618e56263285899a01d6ef49fe2862e812731718fc9d309836ff260e39d30e7e02fab044c72
-DIST bash-5.4_alpha_pre20250904-a451bfc3f57201bc0933b62c2fb721940a4c33f5.tar.gz 16571099 BLAKE2B c4661bfe261ac4c653444d7ff4ed17b7335d0c32b12b342e8ae683a5022d098f922a2ac0b2312eb4eb672e53bdbd7e0518d565ee7119f463bc5650ac2663a07b SHA512 9d0f7aecb8809c34828ada19fd69f0e5889a30c5bc4177ce32d3e3c7dc26803d1311a9ef4e2386845d884fa6aa6c1212263253e1347f413350ed2ea42d961036
DIST bash-5.4_alpha_pre20250918-cf8a2518c8b94f75b330d398f5daa0ee21417e1b.tar.gz 16611222 BLAKE2B 4c6f4713da5f1b103176980b5def4c8643ca43b2c97faf3cab61f64baf562c3871bb0f5843164de617eb4f9dcab5c5a11ddd1f31e8614ddc5ff00c41893c4ef7 SHA512 2d0b90277c6e9130064d712c6167e5a2871b0485251cca746a57055e08626b9a11be0cb134f082446ee8db82043eb1eb7f8b20fa58e8cdc859638f50cb16d56d
DIST bash205b-001 1132 BLAKE2B 0c5eef29777d54ef05957ea3d63b1556fb380bd20c238dc28993d822b37bc4e78ff4048ad069f6b8cd25da77ccdeb7aecd86c4349cb9d81e5e94c7001eeae5e6 SHA512 5ce4357468821b05e747201f3aa57225ad8f540c9e2c87051720490e039c30b478b9b662a68f14a0800fefe40184e4495e2645665200f9d75e9a115b2ac08071
DIST bash205b-002 755 BLAKE2B 6a6ed5679d451f02f8104b345c1722d11718ce3b4043b581c17786d40d8da69a34786fb56d0c363dba277b8e9dd33f12f70c9cc73a9fc39ba4a8319406f0458d SHA512 46947b0229478d5c2cfeff68b8ebc00e4ef0c8b94e336ca12f72b4490ba3622c0240c01c17c1641c3b07adc2c64ec94d6d780365e8990768ec8888f3a9526883
diff --git a/app-shells/bash/bash-5.2_p37-r4.ebuild b/app-shells/bash/bash-5.2_p37-r4.ebuild
index 267b3ef78b9d..1066db240020 100644
--- a/app-shells/bash/bash-5.2_p37-r4.ebuild
+++ b/app-shells/bash/bash-5.2_p37-r4.ebuild
@@ -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
@@ -372,21 +386,41 @@ pkg_preinst() {
}
pkg_postinst() {
- local old_ver
+ local IFS old_ver ver
+ local -a versions
# If /bin/sh does not exist, provide it.
if [[ ! -e ${EROOT}/bin/sh ]]; then
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ 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
+ old_ver=${ver}
+ fi
+ done
+
+ 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 +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
}
diff --git a/app-shells/bash/bash-5.2_p37-r3.ebuild b/app-shells/bash/bash-5.2_p37-r5.ebuild
index 6366db5d2df1..1891112ab1bb 100644
--- a/app-shells/bash/bash-5.2_p37-r3.ebuild
+++ b/app-shells/bash/bash-5.2_p37-r5.ebuild
@@ -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,12 +72,10 @@ 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
- 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"
+ 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"
fi
IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline"
@@ -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
@@ -317,14 +331,14 @@ src_install() {
insinto /etc/bash
doins "${FILESDIR}"/bash_logout
- my_prefixify bashrc.d "${FILESDIR}"/bashrc-r1 | newins - bashrc
+ my_prefixify bashrc.d "${FILESDIR}"/bashrc-r2 | newins - bashrc
insinto /etc/bash/bashrc.d
my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
- if [[ ! ${EPREFIX} ]]; then
- doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash
- fi
+ newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r3.bash 10-gentoo-title.bash
+
+ insinto /etc/profile.d
+ doins "${FILESDIR}/profile.d/00-prompt-command.sh"
insinto /etc/skel
for f in bash{_logout,_profile,rc}; do
@@ -372,21 +386,41 @@ pkg_preinst() {
}
pkg_postinst() {
- local old_ver
+ local IFS old_ver ver
+ local -a versions
# If /bin/sh does not exist, provide it.
if [[ ! -e ${EROOT}/bin/sh ]]; then
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ 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
+ old_ver=${ver}
+ fi
+ done
+
+ 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 +443,40 @@ 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 ver_test "${old_ver}" -ge "5.3" \
+ && ver_test "${old_ver}" -ge "5.3_p3-r3"
+ then
+ :
+ elif ver_test "${old_ver}" -lt "5.3" \
+ && ver_test "${old_ver}" -ge "5.2_p37-r5"
+ then
+ :
+ else
+ cat <<'EOF'
+The window title setting behaviour has been improved. It is now formatted as
+"\u@\h \W", in accordance with the prompting mechanism of bash. For example,
+after switching to the home directory, the current working directly will be
+shown as the <tilde> character.
+
+The value of PROMPT_DIRTRIM is now respected. If this variable is unset, the
+use of the \W prompt string escape will prevail, with the current working
+directory typically being shown as its basename. If set to 0 or greater, \w
+will be used instead, which may be trimmed. This also means that the title
+can be made to show the full path by setting PROMPT_DIRTRIM=0.
+
+For further information, run info '(bash)Bash Variables' or visit
+https://www.gnu.org/software/bash/manual/bash.html#index-PROMPT_005fDIRTRIM.
+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
}
diff --git a/app-shells/bash/bash-5.3_p3-r2.ebuild b/app-shells/bash/bash-5.3_p3-r2.ebuild
index d01bec626c3b..7e1f47f54895 100644
--- a/app-shells/bash/bash-5.3_p3-r2.ebuild
+++ b/app-shells/bash/bash-5.3_p3-r2.ebuild
@@ -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
@@ -365,21 +368,41 @@ pkg_preinst() {
}
pkg_postinst() {
- local old_ver
+ local IFS old_ver ver
+ local -a versions
# If /bin/sh does not exist, provide it.
if [[ ! -e ${EROOT}/bin/sh ]]; then
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ 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
+ old_ver=${ver}
+ fi
+ done
+
+ 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
@@ -402,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
}
diff --git a/app-shells/bash/bash-5.3_p3-r1.ebuild b/app-shells/bash/bash-5.3_p3-r3.ebuild
index f069c5c36bd4..4218315eebfc 100644
--- a/app-shells/bash/bash-5.3_p3-r1.ebuild
+++ b/app-shells/bash/bash-5.3_p3-r3.ebuild
@@ -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
@@ -199,6 +202,7 @@ src_configure() {
append-cppflags \
-DDEFAULT_PATH_VALUE=\'\""${EPREFIX}"/usr/local/sbin:"${EPREFIX}"/usr/local/bin:"${EPREFIX}"/usr/sbin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/bin\"\' \
-DSTANDARD_UTILS_PATH=\'\""${EPREFIX}"/bin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/usr/sbin\"\' \
+ -DDEFAULT_LOADABLE_BUILTINS_PATH=\'\""${EPREFIX}"/usr/local/$(get_libdir)/bash:"${EPREFIX}"/usr/$(get_libdir)/bash\"\' \
-DSYS_BASHRC=\'\""${EPREFIX}"/etc/bash/bashrc\"\' \
-DSYS_BASH_LOGOUT=\'\""${EPREFIX}"/etc/bash/bash_logout\"\' \
-DNON_INTERACTIVE_LOGIN_SHELLS \
@@ -313,7 +317,7 @@ src_install() {
insinto /etc/bash/bashrc.d
my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
+ newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r3.bash 10-gentoo-title.bash
insinto /etc/profile.d
doins "${FILESDIR}/profile.d/00-prompt-command.sh"
@@ -364,21 +368,41 @@ pkg_preinst() {
}
pkg_postinst() {
- local old_ver
+ local IFS old_ver ver
+ local -a versions
# If /bin/sh does not exist, provide it.
if [[ ! -e ${EROOT}/bin/sh ]]; then
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ 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
+ old_ver=${ver}
+ fi
+ done
+
+ 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
@@ -401,4 +425,40 @@ 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 ver_test "${old_ver}" -ge "5.3" \
+ && ver_test "${old_ver}" -ge "5.3_p3-r3"
+ then
+ :
+ elif ver_test "${old_ver}" -lt "5.3" \
+ && ver_test "${old_ver}" -ge "5.2_p37-r5"
+ then
+ :
+ else
+ cat <<'EOF'
+The window title setting behaviour has been improved. It is now formatted as
+"\u@\h \W", in accordance with the prompting mechanism of bash. For example,
+after switching to the home directory, the current working directly will be
+shown as the <tilde> character.
+
+The value of PROMPT_DIRTRIM is now respected. If this variable is unset, the
+use of the \W prompt string escape will prevail, with the current working
+directory typically being shown as its basename. If set to 0 or greater, \w
+will be used instead, which may be trimmed. This also means that the title
+can be made to show the full path by setting PROMPT_DIRTRIM=0.
+
+For further information, run info '(bash)Bash Variables' or visit
+https://www.gnu.org/software/bash/manual/bash.html#index-PROMPT_005fDIRTRIM.
+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
}
diff --git a/app-shells/bash/bash-5.4_alpha_pre20250822.ebuild b/app-shells/bash/bash-5.4_alpha_pre20250822.ebuild
deleted file mode 100644
index 3a502078451e..000000000000
--- a/app-shells/bash/bash-5.4_alpha_pre20250822.ebuild
+++ /dev/null
@@ -1,403 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/chetramey.asc
-inherit flag-o-matic toolchain-funcs prefix verify-sig
-
-# Uncomment if we have a patchset.
-#GENTOO_PATCH_DEV="sam"
-#GENTOO_PATCH_VER="${PV}"
-
-MY_PV=${PV/_p*}
-MY_PV=${MY_PV/_/-}
-MY_P=${PN}-${MY_PV}
-MY_PATCHES=()
-
-# Determine the patchlevel.
-case ${PV} in
- 9999|*_alpha*|*_beta*|*_rc*)
- # Set a negative patchlevel to indicate that it's a pre-release.
- PLEVEL=-1
- ;;
- *_p*)
- PLEVEL=${PV##*_p}
- ;;
- *)
- PLEVEL=0
- ;;
-esac
-
-# The version of readline this bash normally ships with. Note that we only use
-# the bundled copy of readline for pre-releases.
-READLINE_VER="8.3"
-
-DESCRIPTION="The standard GNU Bourne again shell"
-HOMEPAGE="https://tiswww.case.edu/php/chet/bash/bashtop.html https://git.savannah.gnu.org/cgit/bash.git"
-
-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
- # 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="ab17ddb7af948ee6e1a6370aac4ee57b4179cd9c"
- 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" )
-
- # bash-5.1 -> bash51
- my_p=${PN}$(ver_cut 1-2) my_p=${my_p/.}
-
- for (( my_patch_idx = 1; my_patch_idx <= PLEVEL; my_patch_idx++ )); do
- printf -v my_patch_ver %s-%03d "${my_p}" "${my_patch_idx}"
- my_urls+=( "mirror://gnu/bash/${MY_P}-patches/${my_patch_ver}" )
- MY_PATCHES+=( "${DISTDIR}/${my_patch_ver}" )
- 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
-
-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
-
-LICENSE="GPL-3+"
-SLOT="0"
-if (( PLEVEL >= 0 )); then
- 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"
-fi
-IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline"
-
-DEPEND="
- >=sys-libs/ncurses-5.2-r2:=
- nls? ( virtual/libintl )
-"
-if (( PLEVEL >= 0 )); then
- DEPEND+=" readline? ( >=sys-libs/readline-${READLINE_VER}:= )"
-fi
-RDEPEND="
- ${DEPEND}
-"
-# We only need bison (yacc) when the .y files get patched (bash42-005, bash51-011).
-BDEPEND="
- pgo? ( dev-util/gperf )
- verify-sig? ( sec-keys/openpgp-keys-chetramey )
-"
-
-# EAPI 8 tries to append it but it doesn't exist here.
-QA_CONFIGURE_OPTIONS="--disable-static"
-
-PATCHES=(
- #"${WORKDIR}"/${PN}-${GENTOO_PATCH_VER}/
-
- # Patches to or from Chet, posted to the bug-bash mailing list.
- "${FILESDIR}/${PN}-5.0-syslog-history-extern.patch"
-)
-
-pkg_setup() {
- # bug #7332
- if is-flag -malign-double; then
- eerror "Detected bad CFLAGS '-malign-double'. Do not use this"
- eerror "as it breaks LFS (struct stat64) on x86."
- die "remove -malign-double from your CFLAGS mr ricer"
- fi
-
- if use bashlogger; then
- ewarn "The logging patch should ONLY be used in restricted (i.e. honeypot) envs."
- ewarn "This will log ALL output you enter into the shell, you have been warned."
- fi
-}
-
-src_unpack() {
- local patch
-
- if [[ ${PV} == 9999 ]]; then
- git-r3_src_unpack
- elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
- default
- else
- if use verify-sig; then
- verify-sig_verify_detached "${DISTDIR}/${MY_P}.tar.gz"{,.sig}
-
- for patch in "${MY_PATCHES[@]}"; do
- verify-sig_verify_detached "${patch}"{,.sig}
- done
- fi
-
- unpack "${MY_P}.tar.gz"
-
- if [[ ${GENTOO_PATCH_VER} ]]; then
- unpack "${PN}-${GENTOO_PATCH_VER}-patches.tar.xz"
- fi
- fi
-}
-
-src_prepare() {
- # Include official patches.
- (( PLEVEL > 0 )) && eapply -p0 "${MY_PATCHES[@]}"
-
- # Prefixify hardcoded path names. No-op for non-prefix.
- hprefixify pathnames.h.in
-
- # Avoid regenerating docs after patches, bug #407985.
- sed -i -E '/^(HS|RL)USER/s:=.*:=:' doc/Makefile.in \
- && touch -r . doc/* \
- || die
-
- # Sometimes hangs (more noticeable w/ pgo), bug #907403.
- rm tests/run-jobs || die
-
- eapply -p0 "${PATCHES[@]}"
- eapply_user
-}
-
-src_configure() {
- local -a myconf
-
- # 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.
- unset -v YACC
-
- if tc-is-cross-compiler; then
- export CFLAGS_FOR_BUILD="${BUILD_CFLAGS} -std=gnu17"
- fi
-
- myconf=(
- --disable-profiling
-
- # Force linking with system curses ... the bundled termcap lib
- # sucks bad compared to ncurses. For the most part, ncurses
- # is here because readline needs it. But bash itself calls
- # ncurses in one or two small places :(.
- --with-curses
-
- $(use_enable mem-scramble)
- $(use_enable net net-redirections)
- $(use_enable readline)
- $(use_enable readline bang-history)
- $(use_enable readline history)
- $(use_with afs)
- $(use_with mem-scramble bash-malloc)
- )
-
- # For descriptions of these, see config-top.h.
- # bashrc/#26952 bash_logout/#90488 ssh/#24762 mktemp/#574426
- append-cppflags \
- -DDEFAULT_PATH_VALUE=\'\""${EPREFIX}"/usr/local/sbin:"${EPREFIX}"/usr/local/bin:"${EPREFIX}"/usr/sbin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/bin\"\' \
- -DSTANDARD_UTILS_PATH=\'\""${EPREFIX}"/bin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/usr/sbin\"\' \
- -DSYS_BASHRC=\'\""${EPREFIX}"/etc/bash/bashrc\"\' \
- -DSYS_BASH_LOGOUT=\'\""${EPREFIX}"/etc/bash/bash_logout\"\' \
- -DNON_INTERACTIVE_LOGIN_SHELLS \
- -DSSH_SOURCE_BASHRC \
- $(use bashlogger && echo -DSYSLOG_HISTORY)
-
- use nls || myconf+=( --disable-nls )
-
- if (( PLEVEL >= 0 )); then
- # Historically, we always used the builtin readline, but since
- # our handling of SONAME upgrades has gotten much more stable
- # in the PM (and the readline ebuild itself preserves the old
- # libs during upgrades), linking against the system copy should
- # be safe.
- # Exact cached version here doesn't really matter as long as it
- # is at least what's in the DEPEND up above.
- export ac_cv_rl_version=${READLINE_VER%%_*}
-
- # Use system readline only with released versions.
- myconf+=( --with-installed-readline=. )
- fi
-
- if use plugins; then
- append-ldflags "-Wl,-rpath,${EPREFIX}/usr/$(get_libdir)/bash"
- else
- # Disable the plugins logic by hand since bash doesn't provide
- # a way of doing it.
- export ac_cv_func_dl{close,open,sym}=no \
- ac_cv_lib_dl_dlopen=no ac_cv_header_dlfcn_h=no
-
- sed -i -e '/LOCAL_LDFLAGS=/s:-rdynamic::' configure || die
- fi
-
- # bug #444070
- tc-export AR
-
- econf "${myconf[@]}"
-}
-
-src_compile() {
- local -a pgo_generate_flags pgo_use_flags
- local flag
-
- # -fprofile-partial-training because upstream notes the test suite isn't
- # super comprehensive.
- # https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html#sec-gcc10-pgo
- if use pgo; then
- pgo_generate_flags=(
- -fprofile-update=atomic
- -fprofile-dir="${T}"/pgo
- -fprofile-generate="${T}"/pgo
- )
- pgo_use_flags=(
- -fprofile-use="${T}"/pgo
- -fprofile-dir="${T}"/pgo
- )
- if flag=$(test-flags-CC -fprofile-partial-training); then
- pgo_generate_flags+=( "${flag}" )
- pgo_use_flags+=( "${flag}" )
- fi
- fi
-
- emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}"
- use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" all others
-
- # Build Bash and run its tests to generate profiles.
- if (( ${#pgo_generate_flags[@]} )); then
- # Used in test suite.
- unset -v A
-
- emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" -k check
-
- if tc-is-clang; then
- llvm-profdata merge "${T}"/pgo --output="${T}"/pgo/default.profdata || die
- fi
-
- # Rebuild Bash using the profiling data we just generated.
- emake clean
- emake CFLAGS="${CFLAGS} ${pgo_use_flags[*]}"
- use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_use_flags[*]}" all others
- fi
-}
-
-src_test() {
- # Used in test suite.
- unset -v A
-
- default
-}
-
-src_install() {
- local d f
-
- default
-
- my_prefixify() {
- while read -r; do
- if [[ $REPLY == *$1* ]]; then
- REPLY=${REPLY/"/etc/"/"${EPREFIX}/etc/"}
- fi
- printf '%s\n' "${REPLY}" || ! break
- done < "$2" || die
- }
-
- dodir /bin
- mv -- "${ED}"/usr/bin/bash "${ED}"/bin/ || die
- dosym bash /bin/rbash
-
- insinto /etc/bash
- doins "${FILESDIR}"/bash_logout
- my_prefixify bashrc.d "${FILESDIR}"/bashrc-r1 | newins - bashrc
-
- insinto /etc/bash/bashrc.d
- my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
- if [[ ! ${EPREFIX} ]]; then
- doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash
- fi
-
- insinto /etc/skel
- for f in bash{_logout,_profile,rc}; do
- newins "${FILESDIR}/skel/dot-${f}" ".${f}"
- done
-
- if use plugins; then
- exeinto "/usr/$(get_libdir)/bash"
- set -- examples/loadables/*.o
- doexe "${@%.o}"
-
- insinto /usr/include/bash-plugins
- doins *.h builtins/*.h include/*.h lib/{glob/glob.h,tilde/tilde.h}
- fi
-
- if use examples; then
- for d in examples/{functions,misc,scripts,startup-files}; do
- exeinto "/usr/share/doc/${PF}/${d}"
- docinto "${d}"
- for f in "${d}"/*; do
- if [[ ${f##*/} != @(PERMISSION|*README) ]]; then
- doexe "${f}"
- else
- dodoc "${f}"
- fi
- done
- done
- fi
-
- # Install bash_builtins.1 and rbash.1.
- emake -C doc DESTDIR="${D}" install_builtins
- sed 's:bash\.1:man1/&:' doc/rbash.1 > "${T}"/rbash.1 || die
- doman "${T}"/rbash.1
-
- newdoc CWRU/changelog ChangeLog
- dosym bash.info /usr/share/info/bashref.info
-}
-
-pkg_preinst() {
- if [[ -e ${EROOT}/etc/bashrc ]] && [[ ! -d ${EROOT}/etc/bash ]]; then
- mkdir -p -- "${EROOT}"/etc/bash \
- && mv -f -- "${EROOT}"/etc/bashrc "${EROOT}"/etc/bash/ \
- || die
- fi
-}
-
-pkg_postinst() {
- local old_ver
-
- # If /bin/sh does not exist, provide it.
- if [[ ! -e ${EROOT}/bin/sh ]]; then
- ln -sf -- bash "${EROOT}"/bin/sh || die
- fi
-
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
- return
- fi
-
- while read -r; do ewarn "${REPLY}"; done <<'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
-characteristics of the operating environment, it may contain a command to set
-the terminal's window title. Those who were already choosing to customise the
-PROMPT_COMMAND variable are now advised to append their commands like so:
-
-PROMPT_COMMAND+=('custom command goes here')
-
-Gentoo no longer defaults to having bash set the window title in the case
-that the terminal is controlled by sshd(8), unless screen is launched on the
-remote side or the terminal reliably supports saving and restoring the title
-(as alacritty, foot and tmux do). Those wanting for the title to be set
-regardless may adjust ~/.bashrc - or create a custom /etc/bash/bashrc.d
-drop-in - to set PROMPT_COMMMAND like so:
-
-PROMPT_COMMAND=(genfun_set_win_title)
-
-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
-}
diff --git a/app-shells/bash/bash-5.4_alpha_pre20250904-r1.ebuild b/app-shells/bash/bash-5.4_alpha_pre20250904-r1.ebuild
deleted file mode 100644
index 7fde1dd927ec..000000000000
--- a/app-shells/bash/bash-5.4_alpha_pre20250904-r1.ebuild
+++ /dev/null
@@ -1,404 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/chetramey.asc
-inherit flag-o-matic toolchain-funcs prefix verify-sig
-
-# Uncomment if we have a patchset.
-#GENTOO_PATCH_DEV="sam"
-#GENTOO_PATCH_VER="${PV}"
-
-MY_PV=${PV/_p*}
-MY_PV=${MY_PV/_/-}
-MY_P=${PN}-${MY_PV}
-MY_PATCHES=()
-
-# Determine the patchlevel.
-case ${PV} in
- 9999|*_alpha*|*_beta*|*_rc*)
- # Set a negative patchlevel to indicate that it's a pre-release.
- PLEVEL=-1
- ;;
- *_p*)
- PLEVEL=${PV##*_p}
- ;;
- *)
- PLEVEL=0
- ;;
-esac
-
-# The version of readline this bash normally ships with. Note that we only use
-# the bundled copy of readline for pre-releases.
-READLINE_VER="8.3"
-
-DESCRIPTION="The standard GNU Bourne again shell"
-HOMEPAGE="https://tiswww.case.edu/php/chet/bash/bashtop.html https://git.savannah.gnu.org/cgit/bash.git"
-
-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
- # 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="a451bfc3f57201bc0933b62c2fb721940a4c33f5"
- 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" )
-
- # bash-5.1 -> bash51
- my_p=${PN}$(ver_cut 1-2) my_p=${my_p/.}
-
- for (( my_patch_idx = 1; my_patch_idx <= PLEVEL; my_patch_idx++ )); do
- printf -v my_patch_ver %s-%03d "${my_p}" "${my_patch_idx}"
- my_urls+=( "mirror://gnu/bash/${MY_P}-patches/${my_patch_ver}" )
- MY_PATCHES+=( "${DISTDIR}/${my_patch_ver}" )
- 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
-
-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
-
-LICENSE="GPL-3+"
-SLOT="0"
-if (( PLEVEL >= 0 )); then
- 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"
-fi
-IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline"
-
-DEPEND="
- >=sys-libs/ncurses-5.2-r2:=
- nls? ( virtual/libintl )
-"
-if (( PLEVEL >= 0 )); then
- DEPEND+=" readline? ( >=sys-libs/readline-${READLINE_VER}:= )"
-fi
-RDEPEND="
- ${DEPEND}
-"
-# We only need bison (yacc) when the .y files get patched (bash42-005, bash51-011).
-BDEPEND="
- pgo? ( dev-util/gperf )
- verify-sig? ( sec-keys/openpgp-keys-chetramey )
-"
-
-# EAPI 8 tries to append it but it doesn't exist here.
-QA_CONFIGURE_OPTIONS="--disable-static"
-
-PATCHES=(
- #"${WORKDIR}"/${PN}-${GENTOO_PATCH_VER}/
-
- # Patches to or from Chet, posted to the bug-bash mailing list.
- "${FILESDIR}/${PN}-5.0-syslog-history-extern.patch"
-)
-
-pkg_setup() {
- # bug #7332
- if is-flag -malign-double; then
- eerror "Detected bad CFLAGS '-malign-double'. Do not use this"
- eerror "as it breaks LFS (struct stat64) on x86."
- die "remove -malign-double from your CFLAGS mr ricer"
- fi
-
- if use bashlogger; then
- ewarn "The logging patch should ONLY be used in restricted (i.e. honeypot) envs."
- ewarn "This will log ALL output you enter into the shell, you have been warned."
- fi
-}
-
-src_unpack() {
- local patch
-
- if [[ ${PV} == 9999 ]]; then
- git-r3_src_unpack
- elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
- default
- else
- if use verify-sig; then
- verify-sig_verify_detached "${DISTDIR}/${MY_P}.tar.gz"{,.sig}
-
- for patch in "${MY_PATCHES[@]}"; do
- verify-sig_verify_detached "${patch}"{,.sig}
- done
- fi
-
- unpack "${MY_P}.tar.gz"
-
- if [[ ${GENTOO_PATCH_VER} ]]; then
- unpack "${PN}-${GENTOO_PATCH_VER}-patches.tar.xz"
- fi
- fi
-}
-
-src_prepare() {
- # Include official patches.
- (( PLEVEL > 0 )) && eapply -p0 "${MY_PATCHES[@]}"
-
- # Prefixify hardcoded path names. No-op for non-prefix.
- hprefixify pathnames.h.in
-
- # Avoid regenerating docs after patches, bug #407985.
- sed -i -E '/^(HS|RL)USER/s:=.*:=:' doc/Makefile.in \
- && touch -r . doc/* \
- || die
-
- # Sometimes hangs (more noticeable w/ pgo), bug #907403.
- rm tests/run-jobs || die
-
- eapply -p0 "${PATCHES[@]}"
- eapply_user
-}
-
-src_configure() {
- local -a myconf
-
- # 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.
- unset -v YACC
-
- if tc-is-cross-compiler; then
- export CFLAGS_FOR_BUILD="${BUILD_CFLAGS} -std=gnu17"
- fi
-
- myconf=(
- --disable-profiling
-
- # Force linking with system curses ... the bundled termcap lib
- # sucks bad compared to ncurses. For the most part, ncurses
- # is here because readline needs it. But bash itself calls
- # ncurses in one or two small places :(.
- --with-curses
-
- $(use_enable mem-scramble)
- $(use_enable net net-redirections)
- $(use_enable readline)
- $(use_enable readline bang-history)
- $(use_enable readline history)
- $(use_with afs)
- $(use_with mem-scramble bash-malloc)
- )
-
- # For descriptions of these, see config-top.h.
- # bashrc/#26952 bash_logout/#90488 ssh/#24762 mktemp/#574426
- append-cppflags \
- -DDEFAULT_PATH_VALUE=\'\""${EPREFIX}"/usr/local/sbin:"${EPREFIX}"/usr/local/bin:"${EPREFIX}"/usr/sbin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/bin\"\' \
- -DSTANDARD_UTILS_PATH=\'\""${EPREFIX}"/bin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/usr/sbin\"\' \
- -DDEFAULT_LOADABLE_BUILTINS_PATH=\'\""${EPREFIX}"/usr/local/$(get_libdir)/bash:"${EPREFIX}"/usr/$(get_libdir)/bash\"\' \
- -DSYS_BASHRC=\'\""${EPREFIX}"/etc/bash/bashrc\"\' \
- -DSYS_BASH_LOGOUT=\'\""${EPREFIX}"/etc/bash/bash_logout\"\' \
- -DNON_INTERACTIVE_LOGIN_SHELLS \
- -DSSH_SOURCE_BASHRC \
- $(use bashlogger && echo -DSYSLOG_HISTORY)
-
- use nls || myconf+=( --disable-nls )
-
- if (( PLEVEL >= 0 )); then
- # Historically, we always used the builtin readline, but since
- # our handling of SONAME upgrades has gotten much more stable
- # in the PM (and the readline ebuild itself preserves the old
- # libs during upgrades), linking against the system copy should
- # be safe.
- # Exact cached version here doesn't really matter as long as it
- # is at least what's in the DEPEND up above.
- export ac_cv_rl_version=${READLINE_VER%%_*}
-
- # Use system readline only with released versions.
- myconf+=( --with-installed-readline=. )
- fi
-
- if use plugins; then
- append-ldflags "-Wl,-rpath,${EPREFIX}/usr/$(get_libdir)/bash"
- else
- # Disable the plugins logic by hand since bash doesn't provide
- # a way of doing it.
- export ac_cv_func_dl{close,open,sym}=no \
- ac_cv_lib_dl_dlopen=no ac_cv_header_dlfcn_h=no
-
- sed -i -e '/LOCAL_LDFLAGS=/s:-rdynamic::' configure || die
- fi
-
- # bug #444070
- tc-export AR
-
- econf "${myconf[@]}"
-}
-
-src_compile() {
- local -a pgo_generate_flags pgo_use_flags
- local flag
-
- # -fprofile-partial-training because upstream notes the test suite isn't
- # super comprehensive.
- # https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html#sec-gcc10-pgo
- if use pgo; then
- pgo_generate_flags=(
- -fprofile-update=atomic
- -fprofile-dir="${T}"/pgo
- -fprofile-generate="${T}"/pgo
- )
- pgo_use_flags=(
- -fprofile-use="${T}"/pgo
- -fprofile-dir="${T}"/pgo
- )
- if flag=$(test-flags-CC -fprofile-partial-training); then
- pgo_generate_flags+=( "${flag}" )
- pgo_use_flags+=( "${flag}" )
- fi
- fi
-
- emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}"
- use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" all others
-
- # Build Bash and run its tests to generate profiles.
- if (( ${#pgo_generate_flags[@]} )); then
- # Used in test suite.
- unset -v A
-
- emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" -k check
-
- if tc-is-clang; then
- llvm-profdata merge "${T}"/pgo --output="${T}"/pgo/default.profdata || die
- fi
-
- # Rebuild Bash using the profiling data we just generated.
- emake clean
- emake CFLAGS="${CFLAGS} ${pgo_use_flags[*]}"
- use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_use_flags[*]}" all others
- fi
-}
-
-src_test() {
- # Used in test suite.
- unset -v A
-
- default
-}
-
-src_install() {
- local d f
-
- default
-
- my_prefixify() {
- while read -r; do
- if [[ $REPLY == *$1* ]]; then
- REPLY=${REPLY/"/etc/"/"${EPREFIX}/etc/"}
- fi
- printf '%s\n' "${REPLY}" || ! break
- done < "$2" || die
- }
-
- dodir /bin
- mv -- "${ED}"/usr/bin/bash "${ED}"/bin/ || die
- dosym bash /bin/rbash
-
- insinto /etc/bash
- doins "${FILESDIR}"/bash_logout
- my_prefixify bashrc.d "${FILESDIR}"/bashrc-r1 | newins - bashrc
-
- insinto /etc/bash/bashrc.d
- my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
- if [[ ! ${EPREFIX} ]]; then
- doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash
- fi
-
- insinto /etc/skel
- for f in bash{_logout,_profile,rc}; do
- newins "${FILESDIR}/skel/dot-${f}" ".${f}"
- done
-
- if use plugins; then
- exeinto "/usr/$(get_libdir)/bash"
- set -- examples/loadables/*.o
- doexe "${@%.o}"
-
- insinto /usr/include/bash-plugins
- doins *.h builtins/*.h include/*.h lib/{glob/glob.h,tilde/tilde.h}
- fi
-
- if use examples; then
- for d in examples/{functions,misc,scripts,startup-files}; do
- exeinto "/usr/share/doc/${PF}/${d}"
- docinto "${d}"
- for f in "${d}"/*; do
- if [[ ${f##*/} != @(PERMISSION|*README) ]]; then
- doexe "${f}"
- else
- dodoc "${f}"
- fi
- done
- done
- fi
-
- # Install bash_builtins.1 and rbash.1.
- emake -C doc DESTDIR="${D}" install_builtins
- sed 's:bash\.1:man1/&:' doc/rbash.1 > "${T}"/rbash.1 || die
- doman "${T}"/rbash.1
-
- newdoc CWRU/changelog ChangeLog
- dosym bash.info /usr/share/info/bashref.info
-}
-
-pkg_preinst() {
- if [[ -e ${EROOT}/etc/bashrc ]] && [[ ! -d ${EROOT}/etc/bash ]]; then
- mkdir -p -- "${EROOT}"/etc/bash \
- && mv -f -- "${EROOT}"/etc/bashrc "${EROOT}"/etc/bash/ \
- || die
- fi
-}
-
-pkg_postinst() {
- local old_ver
-
- # If /bin/sh does not exist, provide it.
- if [[ ! -e ${EROOT}/bin/sh ]]; then
- ln -sf -- bash "${EROOT}"/bin/sh || die
- fi
-
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
- return
- fi
-
- while read -r; do ewarn "${REPLY}"; done <<'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
-characteristics of the operating environment, it may contain a command to set
-the terminal's window title. Those who were already choosing to customise the
-PROMPT_COMMAND variable are now advised to append their commands like so:
-
-PROMPT_COMMAND+=('custom command goes here')
-
-Gentoo no longer defaults to having bash set the window title in the case
-that the terminal is controlled by sshd(8), unless screen is launched on the
-remote side or the terminal reliably supports saving and restoring the title
-(as alacritty, foot and tmux do). Those wanting for the title to be set
-regardless may adjust ~/.bashrc - or create a custom /etc/bash/bashrc.d
-drop-in - to set PROMPT_COMMMAND like so:
-
-PROMPT_COMMAND=(genfun_set_win_title)
-
-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
-}
diff --git a/app-shells/bash/bash-5.4_alpha_pre20250904.ebuild b/app-shells/bash/bash-5.4_alpha_pre20250918-r2.ebuild
index 7fde1dd927ec..5a30defbc42f 100644
--- a/app-shells/bash/bash-5.4_alpha_pre20250904.ebuild
+++ b/app-shells/bash/bash-5.4_alpha_pre20250918-r2.ebuild
@@ -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="a451bfc3f57201bc0933b62c2fb721940a4c33f5"
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
@@ -309,14 +312,14 @@ src_install() {
insinto /etc/bash
doins "${FILESDIR}"/bash_logout
- my_prefixify bashrc.d "${FILESDIR}"/bashrc-r1 | newins - bashrc
+ my_prefixify bashrc.d "${FILESDIR}"/bashrc-r2 | newins - bashrc
insinto /etc/bash/bashrc.d
my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
- if [[ ! ${EPREFIX} ]]; then
- doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash
- fi
+ newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r3.bash 10-gentoo-title.bash
+
+ insinto /etc/profile.d
+ doins "${FILESDIR}/profile.d/00-prompt-command.sh"
insinto /etc/skel
for f in bash{_logout,_profile,rc}; do
@@ -364,21 +367,41 @@ pkg_preinst() {
}
pkg_postinst() {
- local old_ver
+ local IFS old_ver ver
+ local -a versions
# If /bin/sh does not exist, provide it.
if [[ ! -e ${EROOT}/bin/sh ]]; then
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ 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
+ old_ver=${ver}
+ fi
+ done
+
+ 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
@@ -401,4 +424,40 @@ 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 ver_test "${old_ver}" -ge "5.3" \
+ && ver_test "${old_ver}" -ge "5.3_p3-r3"
+ then
+ :
+ elif ver_test "${old_ver}" -lt "5.3" \
+ && ver_test "${old_ver}" -ge "5.2_p37-r5"
+ then
+ :
+ else
+ cat <<'EOF'
+The window title setting behaviour has been improved. It is now formatted as
+"\u@\h \W", in accordance with the prompting mechanism of bash. For example,
+after switching to the home directory, the current working directly will be
+shown as the <tilde> character.
+
+The value of PROMPT_DIRTRIM is now respected. If this variable is unset, the
+use of the \W prompt string escape will prevail, with the current working
+directory typically being shown as its basename. If set to 0 or greater, \w
+will be used instead, which may be trimmed. This also means that the title
+can be made to show the full path by setting PROMPT_DIRTRIM=0.
+
+For further information, run info '(bash)Bash Variables' or visit
+https://www.gnu.org/software/bash/manual/bash.html#index-PROMPT_005fDIRTRIM.
+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
}
diff --git a/app-shells/bash/bash-5.4_alpha_pre20250918.ebuild b/app-shells/bash/bash-5.4_alpha_pre20250918.ebuild
deleted file mode 100644
index f54b1ecb0d54..000000000000
--- a/app-shells/bash/bash-5.4_alpha_pre20250918.ebuild
+++ /dev/null
@@ -1,404 +0,0 @@
-# Copyright 1999-2025 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/chetramey.asc
-inherit flag-o-matic toolchain-funcs prefix verify-sig
-
-# Uncomment if we have a patchset.
-#GENTOO_PATCH_DEV="sam"
-#GENTOO_PATCH_VER="${PV}"
-
-MY_PV=${PV/_p*}
-MY_PV=${MY_PV/_/-}
-MY_P=${PN}-${MY_PV}
-MY_PATCHES=()
-
-# Determine the patchlevel.
-case ${PV} in
- 9999|*_alpha*|*_beta*|*_rc*)
- # Set a negative patchlevel to indicate that it's a pre-release.
- PLEVEL=-1
- ;;
- *_p*)
- PLEVEL=${PV##*_p}
- ;;
- *)
- PLEVEL=0
- ;;
-esac
-
-# The version of readline this bash normally ships with. Note that we only use
-# the bundled copy of readline for pre-releases.
-READLINE_VER="8.3"
-
-DESCRIPTION="The standard GNU Bourne again shell"
-HOMEPAGE="https://tiswww.case.edu/php/chet/bash/bashtop.html https://git.savannah.gnu.org/cgit/bash.git"
-
-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
- # 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
- my_urls=( "mirror://gnu/bash/${MY_P}.tar.gz" )
-
- # bash-5.1 -> bash51
- my_p=${PN}$(ver_cut 1-2) my_p=${my_p/.}
-
- for (( my_patch_idx = 1; my_patch_idx <= PLEVEL; my_patch_idx++ )); do
- printf -v my_patch_ver %s-%03d "${my_p}" "${my_patch_idx}"
- my_urls+=( "mirror://gnu/bash/${MY_P}-patches/${my_patch_ver}" )
- MY_PATCHES+=( "${DISTDIR}/${my_patch_ver}" )
- 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
-
-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
-
-LICENSE="GPL-3+"
-SLOT="0"
-if (( PLEVEL >= 0 )); then
- 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"
-fi
-IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline"
-
-DEPEND="
- >=sys-libs/ncurses-5.2-r2:=
- nls? ( virtual/libintl )
-"
-if (( PLEVEL >= 0 )); then
- DEPEND+=" readline? ( >=sys-libs/readline-${READLINE_VER}:= )"
-fi
-RDEPEND="
- ${DEPEND}
-"
-# We only need bison (yacc) when the .y files get patched (bash42-005, bash51-011).
-BDEPEND="
- pgo? ( dev-util/gperf )
- verify-sig? ( sec-keys/openpgp-keys-chetramey )
-"
-
-# EAPI 8 tries to append it but it doesn't exist here.
-QA_CONFIGURE_OPTIONS="--disable-static"
-
-PATCHES=(
- #"${WORKDIR}"/${PN}-${GENTOO_PATCH_VER}/
-
- # Patches to or from Chet, posted to the bug-bash mailing list.
- "${FILESDIR}/${PN}-5.0-syslog-history-extern.patch"
-)
-
-pkg_setup() {
- # bug #7332
- if is-flag -malign-double; then
- eerror "Detected bad CFLAGS '-malign-double'. Do not use this"
- eerror "as it breaks LFS (struct stat64) on x86."
- die "remove -malign-double from your CFLAGS mr ricer"
- fi
-
- if use bashlogger; then
- ewarn "The logging patch should ONLY be used in restricted (i.e. honeypot) envs."
- ewarn "This will log ALL output you enter into the shell, you have been warned."
- fi
-}
-
-src_unpack() {
- local patch
-
- if [[ ${PV} == 9999 ]]; then
- git-r3_src_unpack
- elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
- default
- else
- if use verify-sig; then
- verify-sig_verify_detached "${DISTDIR}/${MY_P}.tar.gz"{,.sig}
-
- for patch in "${MY_PATCHES[@]}"; do
- verify-sig_verify_detached "${patch}"{,.sig}
- done
- fi
-
- unpack "${MY_P}.tar.gz"
-
- if [[ ${GENTOO_PATCH_VER} ]]; then
- unpack "${PN}-${GENTOO_PATCH_VER}-patches.tar.xz"
- fi
- fi
-}
-
-src_prepare() {
- # Include official patches.
- (( PLEVEL > 0 )) && eapply -p0 "${MY_PATCHES[@]}"
-
- # Prefixify hardcoded path names. No-op for non-prefix.
- hprefixify pathnames.h.in
-
- # Avoid regenerating docs after patches, bug #407985.
- sed -i -E '/^(HS|RL)USER/s:=.*:=:' doc/Makefile.in \
- && touch -r . doc/* \
- || die
-
- # Sometimes hangs (more noticeable w/ pgo), bug #907403.
- rm tests/run-jobs || die
-
- eapply -p0 "${PATCHES[@]}"
- eapply_user
-}
-
-src_configure() {
- local -a myconf
-
- # 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.
- unset -v YACC
-
- if tc-is-cross-compiler; then
- export CFLAGS_FOR_BUILD="${BUILD_CFLAGS} -std=gnu17"
- fi
-
- myconf=(
- --disable-profiling
-
- # Force linking with system curses ... the bundled termcap lib
- # sucks bad compared to ncurses. For the most part, ncurses
- # is here because readline needs it. But bash itself calls
- # ncurses in one or two small places :(.
- --with-curses
-
- $(use_enable mem-scramble)
- $(use_enable net net-redirections)
- $(use_enable readline)
- $(use_enable readline bang-history)
- $(use_enable readline history)
- $(use_with afs)
- $(use_with mem-scramble bash-malloc)
- )
-
- # For descriptions of these, see config-top.h.
- # bashrc/#26952 bash_logout/#90488 ssh/#24762 mktemp/#574426
- append-cppflags \
- -DDEFAULT_PATH_VALUE=\'\""${EPREFIX}"/usr/local/sbin:"${EPREFIX}"/usr/local/bin:"${EPREFIX}"/usr/sbin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/bin\"\' \
- -DSTANDARD_UTILS_PATH=\'\""${EPREFIX}"/bin:"${EPREFIX}"/usr/bin:"${EPREFIX}"/sbin:"${EPREFIX}"/usr/sbin\"\' \
- -DDEFAULT_LOADABLE_BUILTINS_PATH=\'\""${EPREFIX}"/usr/local/$(get_libdir)/bash:"${EPREFIX}"/usr/$(get_libdir)/bash\"\' \
- -DSYS_BASHRC=\'\""${EPREFIX}"/etc/bash/bashrc\"\' \
- -DSYS_BASH_LOGOUT=\'\""${EPREFIX}"/etc/bash/bash_logout\"\' \
- -DNON_INTERACTIVE_LOGIN_SHELLS \
- -DSSH_SOURCE_BASHRC \
- $(use bashlogger && echo -DSYSLOG_HISTORY)
-
- use nls || myconf+=( --disable-nls )
-
- if (( PLEVEL >= 0 )); then
- # Historically, we always used the builtin readline, but since
- # our handling of SONAME upgrades has gotten much more stable
- # in the PM (and the readline ebuild itself preserves the old
- # libs during upgrades), linking against the system copy should
- # be safe.
- # Exact cached version here doesn't really matter as long as it
- # is at least what's in the DEPEND up above.
- export ac_cv_rl_version=${READLINE_VER%%_*}
-
- # Use system readline only with released versions.
- myconf+=( --with-installed-readline=. )
- fi
-
- if use plugins; then
- append-ldflags "-Wl,-rpath,${EPREFIX}/usr/$(get_libdir)/bash"
- else
- # Disable the plugins logic by hand since bash doesn't provide
- # a way of doing it.
- export ac_cv_func_dl{close,open,sym}=no \
- ac_cv_lib_dl_dlopen=no ac_cv_header_dlfcn_h=no
-
- sed -i -e '/LOCAL_LDFLAGS=/s:-rdynamic::' configure || die
- fi
-
- # bug #444070
- tc-export AR
-
- econf "${myconf[@]}"
-}
-
-src_compile() {
- local -a pgo_generate_flags pgo_use_flags
- local flag
-
- # -fprofile-partial-training because upstream notes the test suite isn't
- # super comprehensive.
- # https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html#sec-gcc10-pgo
- if use pgo; then
- pgo_generate_flags=(
- -fprofile-update=atomic
- -fprofile-dir="${T}"/pgo
- -fprofile-generate="${T}"/pgo
- )
- pgo_use_flags=(
- -fprofile-use="${T}"/pgo
- -fprofile-dir="${T}"/pgo
- )
- if flag=$(test-flags-CC -fprofile-partial-training); then
- pgo_generate_flags+=( "${flag}" )
- pgo_use_flags+=( "${flag}" )
- fi
- fi
-
- emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}"
- use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" all others
-
- # Build Bash and run its tests to generate profiles.
- if (( ${#pgo_generate_flags[@]} )); then
- # Used in test suite.
- unset -v A
-
- emake CFLAGS="${CFLAGS} ${pgo_generate_flags[*]}" -k check
-
- if tc-is-clang; then
- llvm-profdata merge "${T}"/pgo --output="${T}"/pgo/default.profdata || die
- fi
-
- # Rebuild Bash using the profiling data we just generated.
- emake clean
- emake CFLAGS="${CFLAGS} ${pgo_use_flags[*]}"
- use plugins && emake -C examples/loadables CFLAGS="${CFLAGS} ${pgo_use_flags[*]}" all others
- fi
-}
-
-src_test() {
- # Used in test suite.
- unset -v A
-
- default
-}
-
-src_install() {
- local d f
-
- default
-
- my_prefixify() {
- while read -r; do
- if [[ $REPLY == *$1* ]]; then
- REPLY=${REPLY/"/etc/"/"${EPREFIX}/etc/"}
- fi
- printf '%s\n' "${REPLY}" || ! break
- done < "$2" || die
- }
-
- dodir /bin
- mv -- "${ED}"/usr/bin/bash "${ED}"/bin/ || die
- dosym bash /bin/rbash
-
- insinto /etc/bash
- doins "${FILESDIR}"/bash_logout
- my_prefixify bashrc.d "${FILESDIR}"/bashrc-r1 | newins - bashrc
-
- insinto /etc/bash/bashrc.d
- my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
- if [[ ! ${EPREFIX} ]]; then
- doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash
- fi
-
- insinto /etc/skel
- for f in bash{_logout,_profile,rc}; do
- newins "${FILESDIR}/skel/dot-${f}" ".${f}"
- done
-
- if use plugins; then
- exeinto "/usr/$(get_libdir)/bash"
- set -- examples/loadables/*.o
- doexe "${@%.o}"
-
- insinto /usr/include/bash-plugins
- doins *.h builtins/*.h include/*.h lib/{glob/glob.h,tilde/tilde.h}
- fi
-
- if use examples; then
- for d in examples/{functions,misc,scripts,startup-files}; do
- exeinto "/usr/share/doc/${PF}/${d}"
- docinto "${d}"
- for f in "${d}"/*; do
- if [[ ${f##*/} != @(PERMISSION|*README) ]]; then
- doexe "${f}"
- else
- dodoc "${f}"
- fi
- done
- done
- fi
-
- # Install bash_builtins.1 and rbash.1.
- emake -C doc DESTDIR="${D}" install_builtins
- sed 's:bash\.1:man1/&:' doc/rbash.1 > "${T}"/rbash.1 || die
- doman "${T}"/rbash.1
-
- newdoc CWRU/changelog ChangeLog
- dosym bash.info /usr/share/info/bashref.info
-}
-
-pkg_preinst() {
- if [[ -e ${EROOT}/etc/bashrc ]] && [[ ! -d ${EROOT}/etc/bash ]]; then
- mkdir -p -- "${EROOT}"/etc/bash \
- && mv -f -- "${EROOT}"/etc/bashrc "${EROOT}"/etc/bash/ \
- || die
- fi
-}
-
-pkg_postinst() {
- local old_ver
-
- # If /bin/sh does not exist, provide it.
- if [[ ! -e ${EROOT}/bin/sh ]]; then
- ln -sf -- bash "${EROOT}"/bin/sh || die
- fi
-
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
- return
- fi
-
- while read -r; do ewarn "${REPLY}"; done <<'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
-characteristics of the operating environment, it may contain a command to set
-the terminal's window title. Those who were already choosing to customise the
-PROMPT_COMMAND variable are now advised to append their commands like so:
-
-PROMPT_COMMAND+=('custom command goes here')
-
-Gentoo no longer defaults to having bash set the window title in the case
-that the terminal is controlled by sshd(8), unless screen is launched on the
-remote side or the terminal reliably supports saving and restoring the title
-(as alacritty, foot and tmux do). Those wanting for the title to be set
-regardless may adjust ~/.bashrc - or create a custom /etc/bash/bashrc.d
-drop-in - to set PROMPT_COMMMAND like so:
-
-PROMPT_COMMAND=(genfun_set_win_title)
-
-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
-}
diff --git a/app-shells/bash/bash-9999.ebuild b/app-shells/bash/bash-9999.ebuild
index 3d7aff8378bb..7f5ca499dd43 100644
--- a/app-shells/bash/bash-9999.ebuild
+++ b/app-shells/bash/bash-9999.ebuild
@@ -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
@@ -315,7 +316,7 @@ src_install() {
insinto /etc/bash/bashrc.d
my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
- newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r2.bash 10-gentoo-title.bash
+ newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r3.bash 10-gentoo-title.bash
insinto /etc/profile.d
doins "${FILESDIR}/profile.d/00-prompt-command.sh"
@@ -366,21 +367,41 @@ pkg_preinst() {
}
pkg_postinst() {
- local old_ver
+ local IFS old_ver ver
+ local -a versions
# If /bin/sh does not exist, provide it.
if [[ ! -e ${EROOT}/bin/sh ]]; then
ln -sf -- bash "${EROOT}"/bin/sh || die
fi
- read -r old_ver <<<"${REPLACING_VERSIONS}"
- if [[ ! $old_ver ]]; then
- :
- elif ver_test "$old_ver" -ge "5.2" && ver_test "$old_ver" -ge "5.2_p26-r8"; then
+ 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
+ old_ver=${ver}
+ fi
+ done
+
+ 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
@@ -403,4 +424,40 @@ 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 ver_test "${old_ver}" -ge "5.3" \
+ && ver_test "${old_ver}" -ge "5.3_p3-r3"
+ then
+ :
+ elif ver_test "${old_ver}" -lt "5.3" \
+ && ver_test "${old_ver}" -ge "5.2_p37-r5"
+ then
+ :
+ else
+ cat <<'EOF'
+The window title setting behaviour has been improved. It is now formatted as
+"\u@\h \W", in accordance with the prompting mechanism of bash. For example,
+after switching to the home directory, the current working directly will be
+shown as the <tilde> character.
+
+The value of PROMPT_DIRTRIM is now respected. If this variable is unset, the
+use of the \W prompt string escape will prevail, with the current working
+directory typically being shown as its basename. If set to 0 or greater, \w
+will be used instead, which may be trimmed. This also means that the title
+can be made to show the full path by setting PROMPT_DIRTRIM=0.
+
+For further information, run info '(bash)Bash Variables' or visit
+https://www.gnu.org/software/bash/manual/bash.html#index-PROMPT_005fDIRTRIM.
+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
}
diff --git a/app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch b/app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch
deleted file mode 100644
index 848768655ec4..000000000000
--- a/app-shells/bash/files/bash-5.3-empty-PROMPT_COMMAND.patch
+++ /dev/null
@@ -1,160 +0,0 @@
-https://lists.gnu.org/archive/html/bug-bash/2025-07/msg00014.html
---- parse.y Thu Jun 12 12:36:06 2025
---- parse.y Sun Jul 6 16:46:00 2025
-***************
-*** 3009,3023 ****
-
- void
-! execute_variable_command (const char *command, const char *vname)
- {
- char *last_lastarg;
- sh_parser_state_t ps;
-
-! save_parser_state (&ps);
- last_lastarg = save_lastarg ();
-
- parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY);
-
-! restore_parser_state (&ps);
- bind_lastarg (last_lastarg);
- FREE (last_lastarg);
---- 3009,3025 ----
-
- void
-! execute_variable_command (const char *command, const char *vname, int flags)
- {
- char *last_lastarg;
- sh_parser_state_t ps;
-
-! if (flags)
-! save_parser_state (&ps);
- last_lastarg = save_lastarg ();
-
- parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY);
-
-! if (flags)
-! restore_parser_state (&ps);
- bind_lastarg (last_lastarg);
- FREE (last_lastarg);
---- eval.c Fri Mar 7 18:50:03 2025
---- eval.c Sun Jul 6 16:49:18 2025
-***************
-*** 284,288 ****
- /* Caller ensures that A has a non-zero number of elements */
- int
-! execute_array_command (ARRAY *a, void *v)
- {
- char *tag;
---- 284,288 ----
- /* Caller ensures that A has a non-zero number of elements */
- int
-! execute_array_command (ARRAY *a, void *v, int flags)
- {
- char *tag;
-***************
-*** 296,300 ****
- {
- if (argv[i] && argv[i][0])
-! execute_variable_command (argv[i], tag);
- }
- strvec_dispose (argv);
---- 296,300 ----
- {
- if (argv[i] && argv[i][0])
-! execute_variable_command (argv[i], tag, flags);
- }
- strvec_dispose (argv);
-***************
-*** 319,323 ****
- {
- if ((pcmds = array_cell (pcv)) && array_num_elements (pcmds) > 0)
-! execute_array_command (pcmds, "PROMPT_COMMAND");
- return;
- }
---- 319,323 ----
- {
- if ((pcmds = array_cell (pcv)) && array_num_elements (pcmds) > 0)
-! execute_array_command (pcmds, "PROMPT_COMMAND", 0);
- return;
- }
-***************
-*** 328,332 ****
- command_to_execute = value_cell (pcv);
- if (command_to_execute && *command_to_execute)
-! execute_variable_command (command_to_execute, "PROMPT_COMMAND");
- }
-
---- 328,332 ----
- command_to_execute = value_cell (pcv);
- if (command_to_execute && *command_to_execute)
-! execute_variable_command (command_to_execute, "PROMPT_COMMAND", 0);
- }
-
---- input.h Fri Mar 10 16:22:48 2023
---- input.h Sun Jul 6 16:45:42 2025
-***************
-*** 100,104 ****
- extern int find_reserved_word (const char *);
- extern void gather_here_documents (void);
-! extern void execute_variable_command (const char *, const char *);
-
- extern int *save_token_state (void);
---- 100,104 ----
- extern int find_reserved_word (const char *);
- extern void gather_here_documents (void);
-! extern void execute_variable_command (const char *, const char *, int);
-
- extern int *save_token_state (void);
---- array.h Wed Dec 28 14:00:47 2022
---- array.h Sun Jul 6 16:47:27 2025
-***************
-*** 178,182 ****
-
- /* In eval.c, but uses ARRAY * */
-! extern int execute_array_command (ARRAY *, void *);
-
- #endif /* _ARRAY_H_ */
---- 178,182 ----
-
- /* In eval.c, but uses ARRAY * */
-! extern int execute_array_command (ARRAY *, void *, int);
-
- #endif /* _ARRAY_H_ */
---- y.tab.c Mon Jun 30 09:56:25 2025
---- y.tab.c Sun Jul 6 17:38:06 2025
-***************
-*** 5368,5382 ****
-
- void
-! execute_variable_command (const char *command, const char *vname)
- {
- char *last_lastarg;
- sh_parser_state_t ps;
-
-! save_parser_state (&ps);
- last_lastarg = save_lastarg ();
-
- parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY);
-
-! restore_parser_state (&ps);
- bind_lastarg (last_lastarg);
- FREE (last_lastarg);
---- 5368,5384 ----
-
- void
-! execute_variable_command (const char *command, const char *vname, int flags)
- {
- char *last_lastarg;
- sh_parser_state_t ps;
-
-! if (flags)
-! save_parser_state (&ps);
- last_lastarg = save_lastarg ();
-
- parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOOPTIMIZE|SEVAL_NOTIFY);
-
-! if (flags)
-! restore_parser_state (&ps);
- bind_lastarg (last_lastarg);
- FREE (last_lastarg);
-
diff --git a/app-shells/bash/files/bashrc b/app-shells/bash/files/bashrc
deleted file mode 100644
index 4a50bdebb93b..000000000000
--- a/app-shells/bash/files/bashrc
+++ /dev/null
@@ -1,106 +0,0 @@
-# /etc/bash/bashrc
-#
-# This file is sourced by all *interactive* bash shells on startup,
-# including some apparently interactive shells such as scp and rcp
-# that can't tolerate any output. So make sure this doesn't display
-# anything or bad things will happen!
-
-# Test for an interactive shell. There is no need to set anything
-# past this point for scp and rcp, and it's important to refrain from
-# outputting anything in those cases.
-if [[ $- != *i* ]] ; then
- # Shell is non-interactive. Be done now!
- return
-fi
-
-# Bash won't get SIGWINCH if another process is in the foreground.
-# Enable checkwinsize so that bash will check the terminal size when
-# it regains control. #65623
-# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
-shopt -s checkwinsize
-
-# Disable completion when the input buffer is empty. i.e. Hitting tab
-# and waiting a long time for bash to expand all of $PATH.
-shopt -s no_empty_cmd_completion
-
-# Enable history appending instead of overwriting when exiting. #139609
-shopt -s histappend
-
-# Save each command to the history file as it's executed. #517342
-# This does mean sessions get interleaved when reading later on, but this
-# way the history is always up to date. History is not synced across live
-# sessions though; that is what `history -n` does.
-# Disabled by default due to concerns related to system recovery when $HOME
-# is under duress, or lives somewhere flaky (like NFS). Constantly syncing
-# the history will halt the shell prompt until it's finished.
-#PROMPT_COMMAND='history -a'
-
-# Change the window title of X terminals
-case ${TERM} in
- [aEkx]term*|rxvt*|gnome*|konsole*|interix|tmux*)
- PS1='\[\033]0;\u@\h:\w\007\]'
- ;;
- screen*)
- PS1='\[\033_\u@\h:\w\033\\\]'
- ;;
- *)
- unset PS1
- ;;
-esac
-
-# Set colorful PS1 only on colorful terminals.
-# dircolors --print-database uses its own built-in database
-# instead of using /etc/DIR_COLORS. Try to use the external file
-# first to take advantage of user additions.
-# We run dircolors directly due to its changes in file syntax and
-# terminal name patching.
-use_color=false
-if type -P dircolors >/dev/null ; then
- # Enable colors for ls, etc. Prefer ~/.dir_colors #64489
- LS_COLORS=
- if [[ -f ~/.dir_colors ]] ; then
- eval "$(dircolors -b ~/.dir_colors)"
- elif [[ -f /etc/DIR_COLORS ]] ; then
- eval "$(dircolors -b /etc/DIR_COLORS)"
- else
- eval "$(dircolors -b)"
- fi
- # Note: We always evaluate the LS_COLORS setting even when it's the
- # default. If it isn't set, then `ls` will only colorize by default
- # based on file attributes and ignore extensions (even the compiled
- # in defaults of dircolors). #583814
- if [[ -n ${LS_COLORS:+set} ]] ; then
- use_color=true
- else
- # Delete it if it's empty as it's useless in that case.
- unset LS_COLORS
- fi
-else
- # Some systems (e.g. BSD & embedded) don't typically come with
- # dircolors so we need to hardcode some terminals in here.
- case ${TERM} in
- [aEkx]term*|rxvt*|gnome*|konsole*|screen|tmux|cons25|*color) use_color=true;;
- esac
-fi
-
-if ${use_color} ; then
- if [[ ${EUID} == 0 ]] ; then
- PS1+='\[\033[01;31m\]\h\[\033[01;34m\] \w \$\[\033[00m\] '
- else
- PS1+='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
- fi
-
- #BSD#@export CLICOLOR=1
- #GNU#@alias ls='ls --color=auto'
- alias grep='grep --colour=auto'
-else
- # show root@ when we don't have colors
- PS1+='\u@\h \w \$ '
-fi
-
-for sh in /etc/bash/bashrc.d/* ; do
- [[ -r ${sh} ]] && source "${sh}"
-done
-
-# Try to keep environment pollution down, EPA loves us.
-unset use_color sh
diff --git a/app-shells/bash/files/bashrc-r1 b/app-shells/bash/files/bashrc-r1
deleted file mode 100644
index deb0ce97d4a7..000000000000
--- a/app-shells/bash/files/bashrc-r1
+++ /dev/null
@@ -1,29 +0,0 @@
-# /etc/bash/bashrc
-
-# Proceed no further in the case of a non-interactive shell.
-if [[ $- != *i* ]]; then
- return
-fi
-
-# Disable errexit in case the user enabled it then chose to re-source this file.
-shopt -u -o errexit
-
-# Disable completion when the input buffer is empty. Mute STDERR because this
-# option is only present in the case that bash was built with readline support.
-shopt -s no_empty_cmd_completion 2>/dev/null &&
-
-# Append to HISTFILE rather than overwrite upon exiting, per bug #139609. This
-# option also requires for bash to have been built with readline support.
-shopt -s histappend
-
-# Initialise PROMPT_COMMAND as an array, which is permitted as of bash 5.1.
-PROMPT_COMMAND=()
-
-# Don't let the user influence the order of sourcing for bash 5.3 or greater.
-unset -v GLOBSORT
-
-for _ in /etc/bash/bashrc.d/*; do
- if [[ $_ == *.@(bash|sh) && -r $_ ]]; then
- source "$_"
- fi
-done
diff --git a/app-shells/bash/files/bashrc.d/10-gentoo-title-r3.bash b/app-shells/bash/files/bashrc.d/10-gentoo-title-r3.bash
new file mode 100644
index 000000000000..186763d07d9d
--- /dev/null
+++ b/app-shells/bash/files/bashrc.d/10-gentoo-title-r3.bash
@@ -0,0 +1,77 @@
+# /etc/bash/bashrc.d/10-gentoo-title.bash
+
+# For information regarding the control sequences used, please refer to
+# https://invisible-island.net/xterm/ctlseqs/ctlseqs.html.
+
+genfun_set_win_title() {
+ # Advertise the fact that the presently running interactive shell will
+ # update the title. Doing so allows for its subprocesses to determine
+ # whether it is safe to set the title of their own accord. Note that 0
+ # refers to the value of Ps within the OSC Ps ; Pt BEL sequence.
+ export SHELL_SETS_TITLE=0
+
+ # Sets the window title with the Set Text Parameters control sequence.
+ # For screen, the sequence defines the hardstatus (%h) and for tmux, the
+ # pane_title (#T). For graphical terminal emulators, it is normal for
+ # the title bar to be affected.
+ genfun_set_win_title() {
+ local prompt
+
+ if [[ ${PROMPT_DIRTRIM} ]]; then
+ # Respect the value of PROMPT_DIRTRIM. If set as 0, the
+ # current working directory shall be shown in full.
+ prompt='\u@\h \w'
+ else
+ # Show the basename of the current working directory.
+ prompt='\u@\h \W'
+ fi
+ printf '\033]0;%s\007' "${prompt@P}"
+ }
+
+ genfun_set_win_title
+}
+
+unset -v SHELL_SETS_TITLE
+
+# Determine whether the terminal can handle the Set Text Parameters sequence.
+# The only terminals permitted here are those for which there is empirical
+# evidence that the sequence is supported and that the UTF-8 character encoding
+# is handled correctly. Quite rightly, this precludes many vintage terminals.
+case ${TERM} in
+ alacritty*|contour|foot*|tmux*|xterm-ghostty)
+ # The terminal emulator also supports XTWINOPS. If the PTY was
+ # created by sshd(8) then push the current window title to the
+ # stack and arrange for it to be popped upon exiting. Xterm also
+ # supports this but there are far too many terminal emulators
+ # that falsely identify as being xterm-compatible.
+ if [[ ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then
+ trap 'printf "\033[23;0t"' EXIT
+ printf '\033[22;0t'
+ fi
+ ;;
+ rxvt-unicode*|st-256color|xterm*)
+ # If the PTY was created by sshd(8) then proceed no further.
+ # Alas, there exist many operating environments in which the
+ # title would otherwise not be restored upon ssh(1) exiting.
+ # Those wanting for the title to be set regardless may adjust
+ # ~/.bashrc or create a bashrc.d drop-in to set PROMPT_COMMAND.
+ # For example, PROMPT_COMMAND=(genfun_set_win_title).
+ if [[ ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then
+ return
+ fi
+ ;;
+ screen*)
+ # If the PTY was created by sshd(8) and screen(1) was launched
+ # prior to the SSH session beginning, as opposed to afterwards,
+ # proceed no further. It is another case in which there would be
+ # no guarantee of the title being restored upon ssh(1) exiting.
+ if [[ ! ${WINDOW} && ${SSH_TTY} && ${SSH_TTY} == "$(tty)" ]]; then
+ return
+ fi
+ ;;
+ *)
+ return
+esac
+
+# Arrange for the title to be updated each time the primary prompt is displayed.
+PROMPT_COMMAND+=('genfun_set_win_title')
diff --git a/app-shells/bash/files/bashrc.d/15-gentoo-bashrc-check.bash b/app-shells/bash/files/bashrc.d/15-gentoo-bashrc-check.bash
deleted file mode 100644
index 8f2b0405c6b9..000000000000
--- a/app-shells/bash/files/bashrc.d/15-gentoo-bashrc-check.bash
+++ /dev/null
@@ -1,24 +0,0 @@
-# /etc/bash/bashrc.d/15-gentoo-bashrc-check.bash
-
-# Some users have ~/.bashrc as a copy of ${FILESDIR}/bashrc which either matches
-# exactly or is only trivially modified. Such is an improper state of affairs
-# and results in the bashrc.d drop-ins being sourced twice. Warn them that they
-# should use the skeleton file instead. This drop-in should be removed no sooner
-# than one year from the date of its introduction.
-
-if [[ -e ${TMPDIR:-/tmp}/.gentoo-bashrc-check-${EUID} || ! -f ~/.bashrc ]]; then
- return
-fi
-
-{
- if grep -qxF 'for sh in /etc/bash/bashrc.d/* ; do' -- ~/.bashrc; then
- cat >&3 <<'EOF'
-WARNING! Your ~/.bashrc file is based on an old copy of /etc/bash/bashrc, which
-is not intended for use within a home directory. Please either delete ~/.bashrc
-or replace it with a copy of /etc/skel/.bashrc before optionally customizing it
-further. Neglecting to do so may result in bash behaving unexpectedly.
-
-EOF
- fi
- touch -- "${TMPDIR:-/tmp}/.gentoo-bashrc-check-${EUID}"
-} 3>&2 2>/dev/null