Skip to content

Commit

Permalink
FL-751: bash update
Browse files Browse the repository at this point in the history
  • Loading branch information
Oleg Vinichenko committed Sep 29, 2013
1 parent 1fc4fa1 commit 56f9c69
Show file tree
Hide file tree
Showing 3 changed files with 338 additions and 0 deletions.
8 changes: 8 additions & 0 deletions app-shells/bash/Manifest
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,11 @@ DIST bash42-034 1345 SHA256 01c1f332101389cedf347c7736102966722a3b213900954e5d62
DIST bash42-035 1920 SHA256 cecde463b038b4849635ff0993d9b264fc92403e7ae0accb52c7877aeaed78df SHA512 9f294177e91600f65cfee1b9dbf59b3ad7db449a99cc1013b7c97ef6c814b51afa7a2d2516a37fcc110ff3f0b25c4b06e42094f4665e03e41650bfa69c15eaf7 WHIRLPOOL e8806743da1f16375ffd29fb7c9ae78d8966d6f7faa833025e57fb59bd290a2afdf94777e9ac51917f378312fc8ce05d72ee14525352412c5826e8a2a9909fed
DIST bash42-036 3123 SHA256 fe293a1bc92ac4d272ae9b9a0de3afef7c06145a2b52337a09cacccc5305aafa SHA512 7e114b99d8f5b210b826715c77adfdbb115e86ace35f7ff331fc6f595a4d0f689a055ccf7adfbafc057c7549f5597e4de455ab9e18a6ffeb5b4fd1d3a2aab99c WHIRLPOOL 6f4e9e9e8251b5a703bad2202301edb45546d94f452669ef681786ff5882269b70791456c7c2040731b5b7cff27c4028823592a61d46204a1271218f7e6c7b8c
DIST bash42-037 3483 SHA256 c7578cddd3bb2430689c740f58a03403800726dcd1268b28f91bf37f368e1674 SHA512 4466990dc3499ccde5940ddfb383052fa345d4e53fff7c8963ac7482fa280658b4516a1583486175cab2f3a5c8afbbedda8461e3cb1802031bce8db386404608 WHIRLPOOL 918dd53aea5ba7c5da2b6ef3325289d80d5c9e01aa57bd5bf9b9e6a22302865929a670ed7b20a5916237e2078aa69223c681e00c79c5db40dcf4d9ffa455b603
DIST bash42-038 1290 SHA256 b8c9a81bdf206be58ba491dfad80373b3348af769e80aaf72f7611ddbbbe6d57 SHA512 f835bb393153310fa2e4c2d95a98c0db53a97075f8989d61cccb095db223495777e413b21e9b235391a4a0f34d935a828ff5ccf337520d5dc87d380170efb351 WHIRLPOOL 3625b8a1e17e2ec7925027b6e048262126366ec2691e7a2bdfd23f8da2eefcea6ce967382067c8d6969d1a9cc641ffcd05ab71a713a61762c43d77df01082b8a
DIST bash42-039 1603 SHA256 f4f9300a60321a5088ae9e54052a64c4d3e876f9a3a17ca104d58fa38b9c1791 SHA512 4c5e44a623840c7efe7894f313a5691307b12aea325dbc923b48deb6ee6ac0bb2ff7afb0d2ee12ab97b04d60c1b9e2a4facc51b66c93be9fe0beda317ec7318f WHIRLPOOL e863174def546d9e9cbcdf5cfa1f735a1503a7caa10ab25a017add965cde524412e37c7fdc43ee80b6dd23676f2231093df64de1d1f41aa823e6cf5c79136531
DIST bash42-040 1710 SHA256 b265f9caf3c7321f95bc8e0b9e2c46bd86c226f00f05e823699aafb83c4aaa6c SHA512 ff5cfdd2aa846f0831a1f2f7b477e70fc6b68b6c4f4785293c417039a7f3fd4822ade4658ea17046ab9616c3fed02b463e6a3e60aeb7daf6ab667da14b9a482e WHIRLPOOL 7b4672ee3112be3919cef4a30e730daa534ee61c2b5a8e48cef799bf5e17a9bbf58dfbb96626f6edcdad595c92bec0dfc9b5f41a9785c20af7cf3e829553fe65
DIST bash42-041 1463 SHA256 05cc1951bd9f6624088dd6067486ff47f1825e333273d7df5f1b06b23baaf5eb SHA512 7c9c12fc77bb764dbe8061e6df9419ab84d296a76c4a8bd96cf0f507bf70652a1c869162ac8d8c36f2d16ea0912a142fe14d6db45636bcb6e6fdf1444f0672a6 WHIRLPOOL bfcc374321554787373bac3d1cf22e2cdf4064a0ece447bda2426b90bd55c09f7d2ea2491bbdf2e03c2152783e45bccc98797fb4f12e4fe8095543ddb51f0457
DIST bash42-042 1571 SHA256 faaa5c1f456517b258b2a65eaa664dd6a01eeff73c8ca4447c3a6de371bbf304 SHA512 99fd4f5f70e3d7d2e8dc1dac80e6ee6e0bb9ba1f629f41019b13f36aba2404aa4d786049bb0039e5fee138a01b813d295d4303c7c3d561a3cf565ffa19bb081e WHIRLPOOL 944cf532a9cdc42dcda55f3b2af96337d31596bcb39e83fb3e223bc3aeb1a45696dfc69e60ef0a68fd0c133728d9d23a037d633d9a267b09f51954ba7693e262
DIST bash42-043 2110 SHA256 dc2683840f3e890a9c5f85338366ff6cd923285e558eb46aa818a03fa67c5c57 SHA512 70503181c392faf565ef0b23a2f6d1614836ffb9c04791cc4bfb31aff7786fd5efab4072034a4cfba0035595140cf7f9461b1565e4854ec34823cbd4f5ab419d WHIRLPOOL e988a962aac3ed9cd1f105cc5c9a477aaa52defdb049be8d9cd37da40177664507c06550193855cddea3b0a9fea3a04ec027ad14eea845317ee67e1b89697076
DIST bash42-044 1871 SHA256 10d32d6c9ccdedb1d826f46468631d475f9dcf983fac087766e16df7b99766e6 SHA512 e94cf93c5760225d4ac16f9c73078c3ce9913ffe1e20ffed8fa31084a0efd3dd63762b5437221f6b570078667e3ec19d882169ffe0ba4c498e258e56f17d2511 WHIRLPOOL 23e3fd1ed1a708eead2ce463c0e5acd720accbe9727462b7fd3916b14b8eabf2339c1f7b1dc973249e075bff4fa566753ae43c540ce3ddc84b5cdd72814d568d
DIST bash42-045 1572 SHA256 ddb7eff0f59d394a483b09feec3771d9026f81ba90afac32846a19b172b2986d SHA512 64f62b19c79eb2c581feda2b9f3c36196b3a794ee9996f6d72078fbb0b8c5878aa2d8ff3e2698cf9769e42083704dd9342bb108212d02aeb79875fad70895560 WHIRLPOOL 02fa25cf02c831675a78a5625e0ba5606b52eb9f3dbdf546cd62983d83cea7fd159b535df94b3c8d39907a7739de7459b69cde3583f28d952a54b384122d264e
218 changes: 218 additions & 0 deletions app-shells/bash/bash-4.2_p45.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
# Distributed under the terms of the GNU General Public License v2

EAPI="1"

inherit eutils flag-o-matic toolchain-funcs multilib

# Official patchlevel
# See ftp://ftp.cwru.edu/pub/bash/bash-4.2-patches/
PLEVEL=${PV##*_p}
MY_PV=${PV/_p*}
MY_PV=${MY_PV/_/-}
MY_P=${PN}-${MY_PV}
[[ ${PV} != *_p* ]] && PLEVEL=0
patches() {
local opt=$1 plevel=${2:-${PLEVEL}} pn=${3:-${PN}} pv=${4:-${MY_PV}}
[[ ${plevel} -eq 0 ]] && return 1
eval set -- {1..${plevel}}
set -- $(printf "${pn}${pv/\.}-%03d " "$@")
if [[ ${opt} == -s ]] ; then
echo "${@/#/${DISTDIR}/}"
else
local u
for u in ftp://ftp.cwru.edu/pub/bash mirror://gnu/${pn} ; do
printf "${u}/${pn}-${pv}-patches/%s " "$@"
done
fi
}

DESCRIPTION="The standard GNU Bourne again shell"
HOMEPAGE="http://tiswww.case.edu/php/chet/bash/bashtop.html"
SRC_URI="mirror://gnu/bash/${MY_P}.tar.gz $(patches)"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="*"
IUSE="afs bashlogger examples mem-scramble +net nls plugins +readline vanilla"

DEPEND=">=sys-libs/ncurses-5.2-r2
readline? ( >=sys-libs/readline-6.2 )
nls? ( virtual/libintl )"
RDEPEND="${DEPEND}
!<sys-apps/portage-2.1.6.7_p1
!<sys-apps/paludis-0.26.0_alpha5"
# we only need yacc when the .y files get patched (bash42-005)
DEPEND+=" virtual/yacc"

S=${WORKDIR}/${MY_P}

pkg_setup() {
if is-flag -malign-double ; then #7332
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() {
unpack ${MY_P}.tar.gz
cd "${S}"

# Include official patches
[[ ${PLEVEL} -gt 0 ]] && epatch $(patches -s)

# Clean out local libs so we know we use system ones
rm -rf lib/{readline,termcap}/*
touch lib/{readline,termcap}/Makefile.in # for config.status
sed -ri -e 's:\$[(](RL|HIST)_LIBSRC[)]/[[:alpha:]]*.h::g' Makefile.in || die

# Avoid regenerating docs after patches #407985
sed -i -r '/^(HS|RL)USER/s:=.*:=:' doc/Makefile.in || die
touch -r . doc/*

epatch "${FILESDIR}"/${PN}-4.2-execute-job-control.patch #383237
epatch "${FILESDIR}"/${PN}-4.2-parallel-build.patch
epatch "${FILESDIR}"/${PN}-4.2-no-readline.patch
epatch "${FILESDIR}"/${PN}-4.2-speed-up-read-N.patch
epatch "${FILESDIR}"/${PN}-4.1-document-system-bashrc.patch

epatch_user
}

src_compile() {
local myconf=

# For descriptions of these, see config-top.h
# bashrc/#26952 bash_logout/#90488 ssh/#24762
append-cppflags \
-DDEFAULT_PATH_VALUE=\'\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"\' \
-DSTANDARD_UTILS_PATH=\'\"/bin:/usr/bin:/sbin:/usr/sbin\"\' \
-DSYS_BASHRC=\'\"/etc/bash/bashrc\"\' \
-DSYS_BASH_LOGOUT=\'\"/etc/bash/bash_logout\"\' \
-DNON_INTERACTIVE_LOGIN_SHELLS \
-DSSH_SOURCE_BASHRC \
$(use bashlogger && echo -DSYSLOG_HISTORY)

# Don't even think about building this statically without
# reading Bug 7714 first. If you still build it statically,
# don't come crying to us with bugs ;).
#use static && export LDFLAGS="${LDFLAGS} -static"
use nls || myconf="${myconf} --disable-nls"

# 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=6.2

# 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 :(.

use plugins && append-ldflags -Wl,-rpath,/usr/$(get_libdir)/bash
tc-export AR #444070
econf \
--with-installed-readline=. \
--with-curses \
$(use_with afs) \
$(use_enable net net-redirections) \
--disable-profiling \
$(use_enable mem-scramble) \
$(use_with mem-scramble bash-malloc) \
$(use_enable readline) \
$(use_enable readline history) \
$(use_enable readline bang-history) \
${myconf}
emake || die

if use plugins ; then
emake -C examples/loadables all others || die
fi
}

src_install() {
emake install DESTDIR="${D}" || die

dodir /bin
mv "${D}"/usr/bin/bash "${D}"/bin/ || die
dosym bash /bin/rbash

insinto /etc/bash
doins "${FILESDIR}"/{bashrc,bash_logout}
insinto /etc/skel
for f in bash{_logout,_profile,rc} ; do
newins "${FILESDIR}"/dot-${f} .${f}
done

local sed_args=(
-e "s:#${USERLAND}#@::"
-e '/#@/d'
)
if ! use readline ; then
sed_args+=( #432338
-e '/^shopt -s histappend/s:^:#:'
-e 's:use_color=true:use_color=false:'
)
fi
sed -i \
"${sed_args[@]}" \
"${D}"/etc/skel/.bashrc \
"${D}"/etc/bash/bashrc || die

if use plugins ; then
exeinto /usr/$(get_libdir)/bash
doexe $(echo examples/loadables/*.o | sed 's:\.o::g') || die
insinto /usr/include/bash-plugins
doins *.h builtins/*.h examples/loadables/*.h include/*.h \
lib/{glob/glob.h,tilde/tilde.h}
fi

if use examples ; then
for d in examples/{functions,misc,scripts,scripts.noah,scripts.v2} ; do
exeinto /usr/share/doc/${PF}/${d}
insinto /usr/share/doc/${PF}/${d}
for f in ${d}/* ; do
if [[ ${f##*/} != PERMISSION ]] && [[ ${f##*/} != *README ]] ; then
doexe ${f}
else
doins ${f}
fi
done
done
fi

doman doc/*.1
dodoc README NEWS AUTHORS CHANGES COMPAT Y2K doc/FAQ doc/INTRO
dosym bash.info /usr/share/info/bashref.info
}

pkg_preinst() {
if [[ -e ${ROOT}/etc/bashrc ]] && [[ ! -d ${ROOT}/etc/bash ]] ; then
mkdir -p "${ROOT}"/etc/bash
mv -f "${ROOT}"/etc/bashrc "${ROOT}"/etc/bash/
fi

if [[ -L ${ROOT}/bin/sh ]]; then
# rewrite the symlink to ensure that its mtime changes. having /bin/sh
# missing even temporarily causes a fatal error with paludis.
local target=$(readlink "${ROOT}"/bin/sh)
local tmp=$(emktemp "${ROOT}"/bin)
ln -sf "${target}" "${tmp}"
mv -f "${tmp}" "${ROOT}"/bin/sh
fi
}

pkg_postinst() {
# If /bin/sh does not exist, provide it
if [[ ! -e ${ROOT}/bin/sh ]]; then
ln -sf bash "${ROOT}"/bin/sh
fi
}
112 changes: 112 additions & 0 deletions app-shells/bash/files/bash-4.2-speed-up-read-N.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
http://lists.gnu.org/archive/html/bug-bash/2012-11/msg00034.html

From 530d4988afd68ea9d2cf1b0267d4dc821d0d204f Mon Sep 17 00:00:00 2001
From: Mike Frysinger <vapier@gentoo.org>
Date: Mon, 19 Nov 2012 17:58:51 -0500
Subject: [PATCH] bash: speed up `read -N`

Rather than using 1 byte reads, use the existing cache read logic.
This could be sped up more, but this change is not as invasive and
should (hopefully) be fairly safe.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
builtins/read.def | 21 ++++++++++++++++-----
externs.h | 1 +
lib/sh/zread.c | 15 +++++++++++++--
3 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/builtins/read.def b/builtins/read.def
index e32dec7..81a1b3f 100644
--- a/builtins/read.def
+++ b/builtins/read.def
@@ -457,7 +457,10 @@ read_builtin (list)
interrupt_immediately++;
terminate_immediately++;

- unbuffered_read = (nchars > 0) || (delim != '\n') || input_is_pipe;
+ if ((nchars > 0) && !input_is_tty && ignore_delim)
+ unbuffered_read = 2;
+ else if ((nchars > 0) || (delim != '\n') || input_is_pipe)
+ unbuffered_read = 1;

if (prompt && edit == 0)
{
@@ -505,10 +508,18 @@ read_builtin (list)
print_ps2 = 0;
}

- if (unbuffered_read)
- retval = zread (fd, &c, 1);
- else
- retval = zreadc (fd, &c);
+ switch (unbuffered_read)
+ {
+ case 2:
+ retval = zreadcn (fd, &c, nchars - nr);
+ break;
+ case 1:
+ retval = zread (fd, &c, 1);
+ break;
+ default:
+ retval = zreadc (fd, &c);
+ break;
+ }

if (retval <= 0)
{
diff --git a/externs.h b/externs.h
index 09244fa..a5ad645 100644
--- a/externs.h
+++ b/externs.h
@@ -479,6 +479,7 @@ extern ssize_t zread __P((int, char *, size_t));
extern ssize_t zreadretry __P((int, char *, size_t));
extern ssize_t zreadintr __P((int, char *, size_t));
extern ssize_t zreadc __P((int, char *));
+extern ssize_t zreadcn __P((int, char *, int));
extern ssize_t zreadcintr __P((int, char *));
extern void zreset __P((void));
extern void zsyncfd __P((int));
diff --git a/lib/sh/zread.c b/lib/sh/zread.c
index 5db21a9..af7d02b 100644
--- a/lib/sh/zread.c
+++ b/lib/sh/zread.c
@@ -101,15 +101,18 @@ static char lbuf[128];
static size_t lind, lused;

ssize_t
-zreadc (fd, cp)
+zreadcn (fd, cp, len)
int fd;
char *cp;
+ int len;
{
ssize_t nr;

if (lind == lused || lused == 0)
{
- nr = zread (fd, lbuf, sizeof (lbuf));
+ if (len > sizeof (lbuf))
+ len = sizeof (lbuf);
+ nr = zread (fd, lbuf, len);
lind = 0;
if (nr <= 0)
{
@@ -123,6 +126,14 @@ zreadc (fd, cp)
return 1;
}

+ssize_t
+zreadc (fd, cp)
+ int fd;
+ char *cp;
+{
+ return zreadcn (fd, cp, sizeof (lbuf));
+}
+
/* Don't mix calls to zreadc and zreadcintr in the same function, since they
use the same local buffer. */
ssize_t
--
1.7.12.4

0 comments on commit 56f9c69

Please sign in to comment.