summaryrefslogtreecommitdiff
blob: 0c27f5c1566a2e4416e3f1d6298ae778dc1cde4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Copyright 2022-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

ALTERNATIVES=(
	bash:app-shells/bash
	busybox:sys-apps/busybox
	dash:app-shells/dash
	ksh:app-shells/ksh
	"lksh:app-shells/mksh[lksh]"
	mksh:app-shells/mksh
)

inherit app-alternatives

DESCRIPTION="/bin/sh (POSIX shell) symlink"
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"

RDEPEND="
	!app-eselect/eselect-sh
"

pkg_setup() {
	if [[ -z ${ROOT} ]] && use busybox ; then
		# Needed to avoid busybox preferring internal applets over PATH lookups.
		# https://web.archive.org/web/20221206223848/https://busybox.net/FAQ.html#standalone_shell.
		if busybox bbconfig | grep -q "CONFIG_FEATURE_SH_STANDALONE=y" ; then
			ewarn "busybox is configured with CONFIG_FEATURE_SH_STANDALONE=y!"
			ewarn "This is not a safe configuration for busybox as /bin/sh."
			ewarn "Please use savedconfig to disable CONFIG_FEATURE_SH_STANDALONE on busybox."
			die "Aborting due to unsafe Busybox configuration (CONFIG_FEATURE_SH_STANDALONE=y)!"
		fi
	fi
}

src_install() {
	dosym "$(get_alternative)" /bin/sh || die
}

pkg_postrm() {
	# make sure we don't leave the user without /bin/sh, since it's not
	# been owned by any other package
	if [[ ! -h ${EROOT}/bin/sh ]]; then
		ln -s bash "${EROOT}/bin/sh" || die
	fi
}