app-shells/bash: Sync with Gentoo

It's from Gentoo commit 155502b495a5163cc9a04b3995299cfe723fe094.

Signed-off-by: Flatcar Buildbot <buildbot@flatcar-linux.org>
This commit is contained in:
Flatcar Buildbot 2025-09-01 07:07:01 +00:00 committed by Krzesimir Nowak
parent 628f031414
commit f355e30426
31 changed files with 494 additions and 250 deletions

View File

@ -24,9 +24,9 @@ DIST bash-5.2.tar.gz 10950833 BLAKE2B 51b196e710794ebad8eac28c31c93eb99ac1a7db30
DIST bash-5.2.tar.gz.sig 95 BLAKE2B 2991b7c46ef1cdca08062f419be47fca7551f4c5d9aad8a5c1da74974f5e7707d23914b4cecf9b6c9610471146b2c49b611bb62a5d974f1c37cceb77b719851c SHA512 a161664f124f906be32709f66702f8f780e6d52e558ea45e71ec60a959c9435ff68477ee65a0a9f6c0051d5592f5044fb3b410cf3cd3ae5a8a323789b01be258 DIST bash-5.2.tar.gz.sig 95 BLAKE2B 2991b7c46ef1cdca08062f419be47fca7551f4c5d9aad8a5c1da74974f5e7707d23914b4cecf9b6c9610471146b2c49b611bb62a5d974f1c37cceb77b719851c SHA512 a161664f124f906be32709f66702f8f780e6d52e558ea45e71ec60a959c9435ff68477ee65a0a9f6c0051d5592f5044fb3b410cf3cd3ae5a8a323789b01be258
DIST bash-5.3.tar.gz 11354270 BLAKE2B 88a4f0146eb11698120890f2afaf28210295135f8f7f61dcbb99eeb0c39c84da5360a3b0572a26dc2a36b207fd440b83bb5a947213af90306c8f6ab608964ff1 SHA512 05ef640e8ba011d10f858a270c626daa42ed5a75789d0298ae0ced9b2ebaf93d94d8ed5a211ac30cd34e82af8865e50024144c88a3c979bee7c38e449350e02e DIST bash-5.3.tar.gz 11354270 BLAKE2B 88a4f0146eb11698120890f2afaf28210295135f8f7f61dcbb99eeb0c39c84da5360a3b0572a26dc2a36b207fd440b83bb5a947213af90306c8f6ab608964ff1 SHA512 05ef640e8ba011d10f858a270c626daa42ed5a75789d0298ae0ced9b2ebaf93d94d8ed5a211ac30cd34e82af8865e50024144c88a3c979bee7c38e449350e02e
DIST bash-5.3.tar.gz.sig 95 BLAKE2B 90a6a47b5b318d03ff7e196e6504a987c281f564db878e8452f0543953832b5ac4f767f69a9bdf6b6a98938b0b439040c10674dd54e38ef03730ae6a2ec4484e SHA512 e9da98e993528d69bec9c6da272eb7a96858b4ba33487435f584c7df2d73c3ce82f373b5277cc3a7d8dc9ee04410dc06ce476d3f9ade097121bea0570abe07bc DIST bash-5.3.tar.gz.sig 95 BLAKE2B 90a6a47b5b318d03ff7e196e6504a987c281f564db878e8452f0543953832b5ac4f767f69a9bdf6b6a98938b0b439040c10674dd54e38ef03730ae6a2ec4484e SHA512 e9da98e993528d69bec9c6da272eb7a96858b4ba33487435f584c7df2d73c3ce82f373b5277cc3a7d8dc9ee04410dc06ce476d3f9ade097121bea0570abe07bc
DIST bash-5.4_alpha_pre20250711-80a8f650a1defc3f72539c3b57bf6d228c33c116.tar.gz 16111994 BLAKE2B 7ab445c5580c3c8d0af10a6764d65a33705f42ed79c50297a4cbf3b345b2f0ba9f28001a80ec5cc85291f57f88e81aef41492a79779239a33292b460e4361d8f SHA512 64f5985ad9a94fd37bc5efa06a57b72c5b3ec8d43a0ed36d9cdc9f292b37137e035bcba0d9855965e0f7bc2416ae60ec44d8f19ee2201acef01d3eda43d8989b DIST bash-5.4_alpha_pre20250814-3160c0b89ce4f3934e791de94f9370b6cfc26ae5.tar.gz 16118231 BLAKE2B a956361f3c111f1e03bdca68678c08cd595c26cfbb926243fe059689d354fde452feb28b984469fd6b201d5aebc5f6007abdf05a824f0e3f7518f945eef78823 SHA512 7ba29f861fd2e7a0162664f0dba14c4bf8cafb9db9ed8ce36564436c8e797cbae1817c6f8fe6450a5f2863b616bd56feba09a045534b998e5c194fe1104b2b04
DIST bash-5.4_alpha_pre20250718-01070d43248fb97f3b2a08d780ae5a392573ce34.tar.gz 16112469 BLAKE2B 6ebcf65b4f1ae93f52d549d2c6836cd4ff7e87739efa9746ef10f00bf6010f00d957c0624e3b806c4d581539f9160338a00824302b245f4c82c72c416976a0f0 SHA512 b200d62eb6634bf9f623841b7a024dc8b3a89c43b8e127dbc89dbf06f3df793d82ad37d35e1be43558ef97c473e37e44384d8c73736c7b62794e65dcfb8f30ce DIST bash-5.4_alpha_pre20250820-086456835944d1a3098a026646144573deafc917.tar.gz 16118833 BLAKE2B d0fc57ce9c6fb1d4105e937b407fe554bb921b279883db138ead2ff72a25b87c1496f3c4010c0dbf40ced88b7729fee9ff127300cef9704f8bf91398bd053213 SHA512 e3c5c4d5d48507a1fe0325a499651ab5eaa613f2d0009677118ac2d2358586b0bc2407ce55b133400fe5af07016477bac6b3537565467bdb6513acba1a332eff
DIST bash-5.4_alpha_pre20250801-c1d9c088531eef0797e78c66b899d895862de80c.tar.gz 16116027 BLAKE2B 1be7657f61e91acc9e5e3bb9d5051f4d9e6f29e5457db544ebd26ac4ff7931925732d8b81de243bf6374ba3ce3aaa133ec6a33f03133e22317d712e696847bed SHA512 44c890bd46ec87ba11b78a0a817ed42544d32df12270c9766f78418e966d3247457facad0e4dcdbf07fd9a6a8865029f3eb3a93c485e01506d67d4ed1c156670 DIST bash-5.4_alpha_pre20250822-ab17ddb7af948ee6e1a6370aac4ee57b4179cd9c.tar.gz 16121182 BLAKE2B 2802ab3bea45fe40f515d668baeaf5ca04797b992dcb764ee38b707701bc6aac845f091b16770a51c84bfdd2ba3953b12b1fded9fdbfde035df7088f4376c236 SHA512 af7182bcad82bc7256d2b806a6f8c3ee1855fa1b3e4b3695cd8b3618e56263285899a01d6ef49fe2862e812731718fc9d309836ff260e39d30e7e02fab044c72
DIST bash205b-001 1132 BLAKE2B 0c5eef29777d54ef05957ea3d63b1556fb380bd20c238dc28993d822b37bc4e78ff4048ad069f6b8cd25da77ccdeb7aecd86c4349cb9d81e5e94c7001eeae5e6 SHA512 5ce4357468821b05e747201f3aa57225ad8f540c9e2c87051720490e039c30b478b9b662a68f14a0800fefe40184e4495e2645665200f9d75e9a115b2ac08071 DIST bash205b-001 1132 BLAKE2B 0c5eef29777d54ef05957ea3d63b1556fb380bd20c238dc28993d822b37bc4e78ff4048ad069f6b8cd25da77ccdeb7aecd86c4349cb9d81e5e94c7001eeae5e6 SHA512 5ce4357468821b05e747201f3aa57225ad8f540c9e2c87051720490e039c30b478b9b662a68f14a0800fefe40184e4495e2645665200f9d75e9a115b2ac08071
DIST bash205b-002 755 BLAKE2B 6a6ed5679d451f02f8104b345c1722d11718ce3b4043b581c17786d40d8da69a34786fb56d0c363dba277b8e9dd33f12f70c9cc73a9fc39ba4a8319406f0458d SHA512 46947b0229478d5c2cfeff68b8ebc00e4ef0c8b94e336ca12f72b4490ba3622c0240c01c17c1641c3b07adc2c64ec94d6d780365e8990768ec8888f3a9526883 DIST bash205b-002 755 BLAKE2B 6a6ed5679d451f02f8104b345c1722d11718ce3b4043b581c17786d40d8da69a34786fb56d0c363dba277b8e9dd33f12f70c9cc73a9fc39ba4a8319406f0458d SHA512 46947b0229478d5c2cfeff68b8ebc00e4ef0c8b94e336ca12f72b4490ba3622c0240c01c17c1641c3b07adc2c64ec94d6d780365e8990768ec8888f3a9526883
DIST bash205b-003 2356 BLAKE2B b7887d00d92fd298cd07a15e1c73b516dabd22ecd74c97091636dd97a0cd55024ed698e5cc924c4311d994dd326b1ad074bea35e7650cf9cf4e25c60d2713fa7 SHA512 74528ca5d165b812d299f1c69b47757bd677c0b22ce4217e155cd641708b02364a93c6709fb57b546b376b36da74429a61493921c7c199563da40ddcf1c1f399 DIST bash205b-003 2356 BLAKE2B b7887d00d92fd298cd07a15e1c73b516dabd22ecd74c97091636dd97a0cd55024ed698e5cc924c4311d994dd326b1ad074bea35e7650cf9cf4e25c60d2713fa7 SHA512 74528ca5d165b812d299f1c69b47757bd677c0b22ce4217e155cd641708b02364a93c6709fb57b546b376b36da74429a61493921c7c199563da40ddcf1c1f399

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-2.05b-patches/ # See https://ftp.gnu.org/gnu/bash/bash-2.05b-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-3.0-patches/ # See https://ftp.gnu.org/gnu/bash/bash-3.0-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-3.1-patches/ # See https://ftp.gnu.org/gnu/bash/bash-3.1-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-3.2-patches/ # See https://ftp.gnu.org/gnu/bash/bash-3.2-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-4.0-patches/ # See https://ftp.gnu.org/gnu/bash/bash-4.0-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-4.1-patches/ # See https://ftp.gnu.org/gnu/bash/bash-4.1-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-4.2-patches/ # See https://ftp.gnu.org/gnu/bash/bash-4.2-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}-r2" GENTOO_PATCH_VER="${PV}-r2"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-4.3-patches/ # See https://ftp.gnu.org/gnu/bash/bash-4.3-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}-r2" GENTOO_PATCH_VER="${PV}-r2"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-4.4-patches/ # See https://ftp.gnu.org/gnu/bash/bash-4.4-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -10,7 +10,7 @@ GENTOO_PATCH_DEV="sam"
GENTOO_PATCH_VER="${PV}" GENTOO_PATCH_VER="${PV}"
# Official patchlevel # Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-5.0-patches/ # See https://ftp.gnu.org/gnu/bash/bash-5.0-patches/
PLEVEL="${PV##*_p}" PLEVEL="${PV##*_p}"
MY_PV="${PV/_p*}" MY_PV="${PV/_p*}"
MY_PV="${MY_PV/_/-}" MY_PV="${MY_PV/_/-}"

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.1-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.1-patches/.
case ${PV} in case ${PV} in
*_p*) *_p*)
PLEVEL=${PV##*_p} PLEVEL=${PV##*_p}

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.2-patches/.
case ${PV} in case ${PV} in
*_p*) *_p*)
PLEVEL=${PV##*_p} PLEVEL=${PV##*_p}
@ -328,7 +328,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.2-patches/.
case ${PV} in case ${PV} in
*_p*) *_p*)
PLEVEL=${PV##*_p} PLEVEL=${PV##*_p}
@ -65,7 +65,7 @@ S=${WORKDIR}/${MY_P}
LICENSE="GPL-3+" LICENSE="GPL-3+"
SLOT="0" SLOT="0"
if (( PLEVEL >= 0 )); then 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 fi
IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline" IUSE="afs bashlogger examples mem-scramble +net nls plugins pgo +readline"
@ -98,6 +98,8 @@ PATCHES=(
"${FILESDIR}/${PN}-5.2_p21-wpointer-to-int.patch" "${FILESDIR}/${PN}-5.2_p21-wpointer-to-int.patch"
"${FILESDIR}/${PN}-5.2_p32-memory-leaks.patch" "${FILESDIR}/${PN}-5.2_p32-memory-leaks.patch"
"${FILESDIR}/${PN}-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch" "${FILESDIR}/${PN}-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-1.patch"
"${FILESDIR}/${PN}-5.2_p32-invalid-continuation-byte-ignored-as-delimiter-2.patch"
"${FILESDIR}/${PN}-5.2_p32-erroneous-delimiter-pushback-condition.patch"
) )
pkg_setup() { pkg_setup() {
@ -315,18 +317,18 @@ src_install() {
insinto /etc/bash insinto /etc/bash
doins "${FILESDIR}"/bash_logout 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 insinto /etc/bash/bashrc.d
my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color.bash | newins - 10-gentoo-color.bash my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash
newins "${FILESDIR}"/bashrc.d/10-gentoo-title-r1.bash 10-gentoo-title.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 insinto /etc/profile.d
fi doins "${FILESDIR}/profile.d/00-prompt-command.sh"
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.3-patches/.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -321,7 +321,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.3-patches/.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -320,7 +320,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.3-patches/.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -319,7 +319,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -0,0 +1,404 @@
# 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. See https://ftp.gnu.org/gnu/bash/bash-5.3-patches/.
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="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
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
"${FILESDIR}"/${PN}-5.3-read-sys.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-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
insinto /etc/profile.d
doins "${FILESDIR}/profile.d/00-prompt-command.sh"
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
}

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel. See https://ftp.gnu.org/gnu/bash/bash-5.3-patches/.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -320,7 +320,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -46,7 +46,7 @@ elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
# the alpha, and the next pre-release is usually quite far away. # 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. # i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="80a8f650a1defc3f72539c3b57bf6d228c33c116" BASH_COMMIT="3160c0b89ce4f3934e791de94f9370b6cfc26ae5"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz" 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} S=${WORKDIR}/${PN}-${BASH_COMMIT}
else else
@ -319,7 +319,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -46,7 +46,7 @@ elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
# the alpha, and the next pre-release is usually quite far away. # 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. # i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="01070d43248fb97f3b2a08d780ae5a392573ce34" BASH_COMMIT="086456835944d1a3098a026646144573deafc917"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz" 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} S=${WORKDIR}/${PN}-${BASH_COMMIT}
else else
@ -319,7 +319,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -46,7 +46,7 @@ elif (( PLEVEL < 0 )) && [[ ${PV} == *_p* ]] ; then
# the alpha, and the next pre-release is usually quite far away. # 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. # i.e. if it's worth packaging the alpha, it's worth packaging a followup.
BASH_COMMIT="c1d9c088531eef0797e78c66b899d895862de80c" BASH_COMMIT="ab17ddb7af948ee6e1a6370aac4ee57b4179cd9c"
SRC_URI="https://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-${BASH_COMMIT}.tar.gz -> ${P}-${BASH_COMMIT}.tar.gz" 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} S=${WORKDIR}/${PN}-${BASH_COMMIT}
else else
@ -319,7 +319,7 @@ src_install() {
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -15,7 +15,7 @@ MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV} MY_P=${PN}-${MY_PV}
MY_PATCHES=() MY_PATCHES=()
# Determine the patchlevel. See ftp://ftp.gnu.org/gnu/bash/bash-5.2-patches/. # Determine the patchlevel.
case ${PV} in case ${PV} in
9999|*_alpha*|*_beta*|*_rc*) 9999|*_alpha*|*_beta*|*_rc*)
# Set a negative patchlevel to indicate that it's a pre-release. # Set a negative patchlevel to indicate that it's a pre-release.
@ -167,8 +167,10 @@ src_configure() {
# Upstream only test with Bison and require GNUisms like YYEOF and # Upstream only test with Bison and require GNUisms like YYEOF and
# YYERRCODE. The former at least may be in POSIX soon: # YYERRCODE. The former at least may be in POSIX soon:
# https://www.austingroupbugs.net/view.php?id=1269. # https://www.austingroupbugs.net/view.php?id=1269.
#
# configure warns on use of non-Bison but doesn't abort. The result # 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 unset -v YACC
if tc-is-cross-compiler; then if tc-is-cross-compiler; then
@ -308,18 +310,18 @@ src_install() {
insinto /etc/bash insinto /etc/bash
doins "${FILESDIR}"/bash_logout 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 insinto /etc/bash/bashrc.d
my_prefixify DIR_COLORS "${FILESDIR}"/bashrc.d/10-gentoo-color-r2.bash | newins - 10-gentoo-color.bash 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-r2.bash 10-gentoo-title.bash
if [[ ! ${EPREFIX} ]]; then
doins "${FILESDIR}"/bashrc.d/15-gentoo-bashrc-check.bash insinto /etc/profile.d
fi doins "${FILESDIR}/profile.d/00-prompt-command.sh"
insinto /etc/skel insinto /etc/skel
for f in bash{_logout,_profile,rc}; do for f in bash{_logout,_profile,rc}; do
newins "${FILESDIR}/dot-${f}" ".${f}" newins "${FILESDIR}/skel/dot-${f}" ".${f}"
done done
if use plugins; then if use plugins; then

View File

@ -0,0 +1,30 @@
# /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, unless bash is acting as a login shell.
# In the latter case, the profile.d drop-in will already have initialised it.
shopt -q login_shell || 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

View File

@ -1,68 +0,0 @@
# /etc/bash/bashrc.d/10-gentoo-color.bash
if [[ ${NO_COLOR} ]]; then
# Respect the user's wish not to use color. See https://no-color.org/.
gentoo_color=0
elif [[ ${COLORTERM@a} == *x* && ${COLORTERM} == @(24bit|truecolor) ]]; then
# The COLORTERM environment variable can reasonably be trusted here.
# See https://github.com/termstandard/colors for further information.
gentoo_color=1
elif unset -v COLORTERM; ! gentoo_color=$(tput colors 2>/dev/null); then
# Either ncurses is not installed or no terminfo database could be
# found. Fall back to a whitelist which covers the majority of terminal
# emulators and virtual console implementations known to support color
# and which remain (somewhat) popular. This will rarely happen, so the
# list need not be exhaustive.
case ${TERM} in
*color* |\
*direct* |\
[Ekx]term* |\
alacritty |\
aterm |\
dtterm |\
foot* |\
jfbterm |\
linux |\
mlterm |\
rxvt* |\
screen* |\
tmux* |\
wsvt25* ) gentoo_color=1
esac
elif (( gentoo_color == 16777216 )); then
# Truecolor support is available. Advertise it.
export COLORTERM=truecolor
fi
# For direxpand to be missing indicates that bash is lacking readline support.
if (( gentoo_color <= 0 )) || [[ ! $(shopt -p direxpand 2>/dev/null) ]]; then
# Define a prompt without color.
PS1='\u@\h \w \$ '
elif (( EUID == 0 )); then
# If root, omit the username and print the hostname in red.
PS1='\[\e[01;31m\]\h\[\e[01;34m\] \w \$\[\e[00m\] '
else
# Otherwise, print the username and hostname in green.
PS1='\[\e[01;32m\]\u@\h\[\e[01;34m\] \w \$\[\e[00m\] '
fi
if (( gentoo_color > 0 )); then
# Colorize the output of diff(1), grep(1) and a few coreutils utilities.
for _ in diff dir grep ls vdir; do
alias "$_=$_ --color=auto"
done
# Enable colors for ls(1) and some other utilities that respect the
# LS_COLORS variable. Prefer ~/.dir_colors, per bug #64489.
if hash dircolors 2>/dev/null; then
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
fi
fi
unset -v gentoo_color

View File

@ -1,81 +0,0 @@
# /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
# Assigns the basename of the current working directory, having
# sanitised it with @Q parameter expansion. Useful for paths containing
# newlines and such. As a special case, names consisting entirely of
# graphemes shall not undergo the expansion, for reasons of cleanliness.
genfun_sanitise_cwd() {
_cwd=${PWD##*/}
if [[ ! ${_cwd} ]]; then
_cwd=${PWD}
elif [[ ${_cwd} == *[![:graph:]]* ]]; then
_cwd=${_cwd@Q}
fi
}
# 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() {
genfun_sanitise_cwd
printf '\033]0;%s@%s - %s\007' "${USER}" "${HOSTNAME%%.*}" "${_cwd}"
}
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|foot*|tmux*)
# 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')

View File

@ -1,52 +0,0 @@
# /etc/bash/bashrc.d/10-gentoo-title.bash
genfun_set_win_title() {
# Assigns the basename of the current working directory, having
# sanitised it with @Q parameter expansion. Useful for paths containing
# newlines and such. As a special case, names consisting entirely of
# graphemes shall not undergo the expansion, for reasons of cleanliness.
genfun_sanitise_cwd() {
_cwd=${PWD##*/}
if [[ ! ${_cwd} ]]; then
_cwd=${PWD}
elif [[ ${_cwd} == *[![:graph:]]* ]]; then
_cwd=${_cwd@Q}
fi
}
# Sets the window title with the Set Text Parameters 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() {
genfun_sanitise_cwd
printf '\033]0;%s@%s - %s\007' "${USER}" "${HOSTNAME%%.*}" "${_cwd}"
}
genfun_set_win_title
}
# Proceed no further if the TTY is that of sshd(8) and if not running a terminal
# multiplexer. Alas, there exist many operating environments in which the window
# title would otherwise not be restored upon ssh(1) exiting. Those who wish for
# the title to be set unconditionally may adjust ~/.bashrc - or create a custom
# bashrc.d drop-in - to define PROMPT_COMMAND=(genfun_set_win_title).
if [[ ${SSH_TTY} && ${TERM} != @(screen|tmux)* && ${SSH_TTY} == "$(tty)" ]]; then
return
fi
# 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.
# https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Operating-System-Commands
case ${TERM} in
alacritty |\
foot* |\
rxvt-unicode* |\
screen* |\
st-256color |\
tmux* |\
xterm* )
PROMPT_COMMAND+=('genfun_set_win_title')
esac

View File

@ -0,0 +1,7 @@
# This unit serves to initialise PROMPT_COMMAND as early as possible in cases
# where bash has been launched as a login shell. Though not an especially
# common practice, some profile.d drop-ins need to be able to extend its value.
if [ "${BASH}" ] && shopt -q login_shell; then
eval 'PROMPT_COMMAND=()'
fi