package/grep: fix egrep/fgrep shebang

egrep/fgrep are wrapper scripts, calling the grep binary with the correct
arguments.

The shell wrappers use the value of SHELL at build time as the shebang value
in these wrapper scripts, which in Buildroot points to /bin/bash.

The target may not have bash available, causing runtime errors.

As a fix, add a post-install hook to change this to /bin/sh.

If the target does not have /bin/sh, simply remove the aliases.

Signed-off-by: Angelo Compagnucci <angelo@amarulasolutions.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
Angelo Compagnucci 2020-02-04 15:24:47 +01:00 committed by Peter Korsgaard
parent 10bc79c612
commit 8f9f48acd2
2 changed files with 19 additions and 0 deletions

View File

@ -5,6 +5,8 @@ config BR2_PACKAGE_GREP
help
The GNU regular expression matcher.
egrep/fgrep aliases need /bin/sh to be available.
http://www.gnu.org/software/grep/grep.html
comment "grep needs a toolchain w/ wchar"

View File

@ -13,6 +13,23 @@ GREP_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES)
# install into /bin like busybox grep
GREP_CONF_OPTS = --exec-prefix=/
ifeq ($(BR2_SYSTEM_BIN_SH_NONE),y)
define GREP_REMOVE_ALIAS
$(RM) $(TARGET_DIR)/bin/[fe]grep
endef
GREP_POST_INSTALL_TARGET_HOOKS += GREP_REMOVE_ALIAS
else
# ensure egrep/fgrep shell wrappers use #!/bin/sh
define GREP_FIXUP_SHEBANG
$(SED) 's/bash$$/sh/' $(TARGET_DIR)/bin/[fe]grep
endef
GREP_POST_INSTALL_TARGET_HOOKS += GREP_FIXUP_SHEBANG
endif
# link with iconv if enabled
ifeq ($(BR2_PACKAGE_LIBICONV),y)
GREP_CONF_ENV += LIBS=-liconv