Re: [PATCH] emake: explicitly set SHELL
Fabian Groffen <[email protected]> Thu, 28 Jul 2022 19:12:26 +0200
| Newsgroups | gmane.linux.gentoo.portage.devel |
|---|---|
| Organization | Gentoo Foundation, Inc. |
| Message-ID | <YuLDevt/1JWu/[email protected]> |
--J/nvFe7cXXR+8zFV Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 26-07-2022 09:20:58 +0200, Fabian Groffen wrote: > On 26-07-2022 09:03:18 +0200, Florian Schmaus wrote: > > On 26.07.22 05:00, Sam James wrote: > > >> On 25 Jul 2022, at 16:28, Fabian Groffen <[email protected]> wrote: > > >> > > >> bin/ebuild-helpers/emake: force SHELL to be set > > >> > [snip] > > >> > > >> diff --git a/bin/ebuild-helpers/emake b/bin/ebuild-helpers/emake > > >> index 60718a2e4..21da85845 100755 > > >> --- a/bin/ebuild-helpers/emake > > >> +++ b/bin/ebuild-helpers/emake > > >> @@ -12,7 +12,7 @@ > > >> source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1 > > >> > > >> cmd=3D( > > >> - ${MAKE:-make} ${MAKEOPTS} "$@" ${EXTRA_EMAKE} > > >> + ${MAKE:-make} SHELL=3D"${BASH:-/bin/bash}" ${MAKEOPTS} "$@" ${EXTR= A_EMAKE} > > >> ) > > >> > > >> if [[ ${PORTAGE_QUIET} !=3D 1 ]] ; then > > >> > > >=20 > > > I don't think I agree with this as it is. Why not just ${EPREFIX}/bin= /sh to avoid using > > > an ancient host sh? > >=20 > > I was about to write the same (also using EPREFIX, but EBROOT seems wha= t=20 > > you want, as you figured). > >=20 > > But then I wondered if "make SHELL=3D$BROOT/bin/sh" wouldn't override= =20 > > explicitly set SHELL values in Makefiles. Assume a package has > >=20 > > SHELL =3D /bin/zsh > >=20 > > in one of its Makefiles. Then emake would reset this to 'sh'. Which=20 > > appears like it could cause build issues. > >=20 > > If this is the case, then I am not sure what we can do about it. It=20 > > appears fragile, if not impossible, to ask 'make' which value for SHELL= =20 > > it would assume, so that emake could adjust the path. Another option=20 > > could be that affected packages define a variable in their ebuild, e.g.= =20 > > EMAKE_SHELL=3D"zsh", which emake could extend with BROOT before passing= =20 > > the resulting value as SHELL to make. >=20 > So, I can also envision we drop this patch, and I see if I can patch > make(1) to use $EPREFIX/bin/sh instead of /bin/sh by default. Not sure, > but this would retain the behaviour Portage is doing now for non-Prefix, > and would get the behaviour we want in Prefix. >=20 > On an alternative note, there is CONFIG_SHELL (used for setting which she= ll > to use with configure), which I think in many cases bleeds through to > make, but should there be a MAKE_SHELL perhaps as well? Then the > default would be pretty much ok. >=20 > (We never ran into any problems forcing SHELL to bash in Prefix, but > perhaps that's not a representative test for the whole of Gentoo.) I've been looking around in make, and it seems we can set a default shell there, would be pretty simple, I guess. It doesn't solve, however, a bigger problem, which is what make's source also mentions, lots of Makefiles having SHELL=3D/bin/sh. In other words, setting a default in make makes no difference in preventing it from using /bin/sh (which is the main aim here). Therefore, I would like to consider the possibility to override SHELL this way via emake, as it seems like the fix we need (for Prefix at least) afterall. Overriding should be safe, I think. SHELL=3D/bin/zsh makes little sense to me, SHELL=3D/bin/csh would be more of a thing, but is there any package out there that needs it? And if it does, wouldn't it be acceptable to just handle that in that package? It would require a dep on that shell anyway (so you could consider it a kludgy sanity check as well). I think using bash like the original patch did isn't quite nice, it should use sh instead. However, it cannot hardcode EPREFIX/bin/sh without ensuring that binary exists, else we break bootstraps. So I was thinking: how about something like SHELL=3D$(type -P sh)? To be completely safe here, it could become an if such that if there's no sh, it falls back to ${BASH}. Would this approach be acceptable? Should it be perhaps conditional based on whether an offset prefix is active? Thanks, Fabian --=20 Fabian Groffen Gentoo on a different level --J/nvFe7cXXR+8zFV Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEELUvHd/Gtp7LaU1vuzpXahU5EQpMFAmLiw3gACgkQzpXahU5E QpOG7Af/RtDH2bZhWjOxvPkJ0y+Iaz1mAatK9uxVCDdAOr5yyBH2GLUQyr87QAzY Y0IYmFMKLGc1O/1fe7QihoMMzCIajS+2iYDZtkA/I++Yld3hfFkvrWTlCafh49EB AZigpuCwB2IbHW0drJyTugEzGtzU/sJXHHLjaQ0TOnGUyHJeYckmbtcBRB9UDPRt jQlsVP2hh613UbpAHv/YPBACIiMFYSYnmdyBo6n+s0WAMUUqXJFDy7yktW/llRS0 WDmKM9fvXvWesqfPg4biVQdIy36GzCIGSlX9hdiIPHw565DcWKyL52OlmKnbw1a/ GQAbcMx29rqx6TC+TcW5paveNBIW/A== =8iNa -----END PGP SIGNATURE----- --J/nvFe7cXXR+8zFV--