diff options
author | Lars Wendler <polynomial-c@gentoo.org> | 2018-05-13 13:32:46 +0200 |
---|---|---|
committer | Lars Wendler <polynomial-c@gentoo.org> | 2018-05-13 13:33:01 +0200 |
commit | ed9b5301d7a11ee89997c2d932aca99da5e25bcc (patch) | |
tree | 667b9d612880f1941902ed0ad1f38f44e929cc13 /app-shells/dash | |
parent | dev-python/cryptography: arm stable, bug #653620 (diff) | |
download | gentoo-ed9b5301d7a11ee89997c2d932aca99da5e25bcc.tar.gz gentoo-ed9b5301d7a11ee89997c2d932aca99da5e25bcc.tar.bz2 gentoo-ed9b5301d7a11ee89997c2d932aca99da5e25bcc.zip |
app-shells/dash: Revbump to add official jobs patch.
Package-Manager: Portage-2.3.36, Repoman-2.3.9
Diffstat (limited to 'app-shells/dash')
-rw-r--r-- | app-shells/dash/dash-0.5.10-r2.ebuild | 79 | ||||
-rw-r--r-- | app-shells/dash/files/dash-0.5.10-jobs.patch | 88 |
2 files changed, 167 insertions, 0 deletions
diff --git a/app-shells/dash/dash-0.5.10-r2.ebuild b/app-shells/dash/dash-0.5.10-r2.ebuild new file mode 100644 index 000000000000..b268b07aea01 --- /dev/null +++ b/app-shells/dash/dash-0.5.10-r2.ebuild @@ -0,0 +1,79 @@ +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit flag-o-matic toolchain-funcs versionator + +#MY_PV="$(get_version_component_range 1-3)" +DEB_PATCH="" #$(get_version_component_range 4) +#MY_P="${PN}-${MY_PV}" + +DESCRIPTION="Debian Almquist Shell" +HOMEPAGE="http://gondor.apana.org.au/~herbert/dash/" +SRC_URI="http://gondor.apana.org.au/~herbert/dash/files/${P}.tar.gz" +if [[ -n "${DEB_PATCH}" ]] ; then + DEB_PF="${PN}_${MY_PV}-${DEB_PATCH}" + SRC_URI+=" mirror://debian/pool/main/d/dash/${DEB_PF}.diff.gz" +fi + +LICENSE="BSD" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris" +IUSE="libedit static vanilla" + +RDEPEND="!static? ( libedit? ( dev-libs/libedit ) )" +DEPEND="${RDEPEND} + virtual/pkgconfig + libedit? ( static? ( dev-libs/libedit[static-libs] ) )" + +PATCHES=( + "${FILESDIR}"/${PN}-0.5.9.1-format-security.patch + "${FILESDIR}"/${P}-jobs.patch +) + +src_prepare() { + if [[ -n "${DEB_PATCH}" ]] ; then + eapply "${WORKDIR}"/${DEB_PF}.diff + eapply */debian/diff/* + fi + + #337329 #527848 + use vanilla || eapply "${FILESDIR}"/${PN}-0.5.10-dumb-echo.patch + + default + + # Fix the invalid sort + sed -i -e 's/LC_COLLATE=C/LC_ALL=C/g' src/mkbuiltins + + # Use pkg-config for libedit linkage + sed -i \ + -e "/LIBS/s:-ledit:\`$(tc-getPKG_CONFIG) --libs libedit $(usex static --static '')\`:" \ + configure || die +} + +src_configure() { + # don't redefine stat on Solaris + if [[ ${CHOST} == *-solaris* ]] ; then + export ac_cv_func_stat64=yes + fi + append-cppflags -DJOBS=$(usex libedit 1 0) + use static && append-ldflags -static + # Do not pass --enable-glob due to #443552. + # Autotools use $LINENO as a proxy for extended debug support + # (i.e. they're running bash), so disable that. #527644 + local myeconfargs=( + --bindir="${EPREFIX}"/bin + --enable-fnmatch + --disable-lineno + $(use_with libedit) + ) + econf "${myeconfargs[@]}" +} + +src_install() { + default + if [[ -n "${DEB_PATCH}" ]] ; then + dodoc */debian/changelog + fi +} diff --git a/app-shells/dash/files/dash-0.5.10-jobs.patch b/app-shells/dash/files/dash-0.5.10-jobs.patch new file mode 100644 index 000000000000..a4c83d88dcb8 --- /dev/null +++ b/app-shells/dash/files/dash-0.5.10-jobs.patch @@ -0,0 +1,88 @@ +From 9e5cd41d9605e4caaac3aacdc0482f6ee220a298 Mon Sep 17 00:00:00 2001 +From: Herbert Xu <herbert@gondor.apana.org.au> +Date: Mon, 7 May 2018 00:40:34 +0800 +Subject: jobs - Do not block when waiting on SIGCHLD + +Because of the nature of SIGCHLD, the process may have already been +waited on and therefore we must be prepared for the case that wait +may block. So ensure that it doesn't by using WNOHANG. + +Furthermore, multiple jobs may have exited when gotsigchld is set. +Therefore we need to wait until there are no zombies left. + +Lastly, waitforjob needs to be called with interrupts off and +the original patch broke that. + +Fixes: 03876c0743a5 ("eval: Reap zombies after built-in...") +Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> +--- + src/eval.c | 12 ++++-------- + src/jobs.c | 13 ++++++++++--- + 2 files changed, 14 insertions(+), 11 deletions(-) + +diff --git a/src/eval.c b/src/eval.c +index a27d657..39c4e41 100644 +--- a/src/eval.c ++++ b/src/eval.c +@@ -859,10 +859,8 @@ bail: + if (!(flags & EV_EXIT) || have_traps()) { + INTOFF; + jp = makejob(cmd, 1); +- if (forkshell(jp, cmd, FORK_FG) != 0) { +- INTON; ++ if (forkshell(jp, cmd, FORK_FG) != 0) + break; +- } + FORCEINTON; + } + listsetvar(varlist.list, VEXPORT|VSTACK); +@@ -875,11 +873,8 @@ bail: + if (execcmd && argc > 1) + listsetvar(varlist.list, VEXPORT); + } +- if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) { +- if (exception == EXERROR && spclbltin <= 0) { +- FORCEINTON; +- break; +- } ++ if (evalbltin(cmdentry.u.cmd, argc, argv, flags) && ++ !(exception == EXERROR && spclbltin <= 0)) { + raise: + longjmp(handler->loc, 1); + } +@@ -892,6 +887,7 @@ raise: + } + + status = waitforjob(jp); ++ FORCEINTON; + + out: + if (cmd->ncmd.redirect) +diff --git a/src/jobs.c b/src/jobs.c +index 1a97c54..606d603 100644 +--- a/src/jobs.c ++++ b/src/jobs.c +@@ -975,10 +975,17 @@ waitforjob(struct job *jp) + int st; + + TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0)); +- while ((jp && jp->state == JOBRUNNING) || gotsigchld) +- dowait(DOWAIT_BLOCK, jp); +- if (!jp) ++ if (!jp) { ++ int pid = gotsigchld; ++ ++ while (pid > 0) ++ pid = dowait(DOWAIT_NORMAL, NULL); ++ + return exitstatus; ++ } ++ ++ while (jp->state == JOBRUNNING) ++ dowait(DOWAIT_BLOCK, jp); + st = getstatus(jp); + #if JOBS + if (jp->jobctl) { +-- +cgit v1.1 + |