[PATCH] build: replace which with Bash command built-in
Yousong Zhou
yszhou4tech at gmail.com
Tue Dec 22 05:30:02 EST 2020
On Tue, 22 Dec 2020 at 17:51, Petr Štetiar <ynezz at true.cz> wrote:
>
> `which` utility is not shipped by default for example on recent Arch
> Linux and then any steps relying on its presence fails, like for example
> following Python3 prereq build check:
>
> $ python3 --version
> Python 3.9.1
>
> $ make
> /bin/sh: line 1: which: command not found
> /bin/sh: line 1: which: command not found
> /bin/sh: line 1: which: command not found
> ...
> Checking 'python3'... failed.
> ...
>
> Fix this by switching to Bash builtin `command` which should provide
> same functionality.
>
> Fixes: FS#3525
> Signed-off-by: Petr Štetiar <ynezz at true.cz>
> ---
>
> Other option is to check for `which` util presence in prereq-build and adding
> `which` to the list of required host build utils.
>
> Makefile | 3 ++-
> include/cmake.mk | 2 +-
> include/prereq.mk | 4 ++--
> 3 files changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 24f5955c9066..f4519e00d28d 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -18,7 +18,8 @@ $(if $(findstring $(space),$(TOPDIR)),$(error ERROR: The path to the OpenWrt dir
>
> world:
>
> -DISTRO_PKG_CONFIG:=$(shell which -a pkg-config | grep -E '\/usr' | head -n 1)
> +WHICH:=command -pv
> +DISTRO_PKG_CONFIG:=$(shell $(WHICH) pkg-config | grep -E '\/usr' | head -n 1)
> export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
>
> ifneq ($(OPENWRT_BUILD),1)
> diff --git a/include/cmake.mk b/include/cmake.mk
> index 0a20530a16fe..ff00b5e779b5 100644
> --- a/include/cmake.mk
> +++ b/include/cmake.mk
> @@ -15,7 +15,7 @@ MAKE_PATH = $(firstword $(CMAKE_BINARY_SUBDIR) .)
> ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
> cmake_tool=$(TOOLCHAIN_DIR)/bin/$(1)
> else
> - cmake_tool=$(shell which $(1))
> + cmake_tool=$(shell $(WHICH) $(1))
Will "-p" in "command -pv" ignore those paths in staging_dir? If that
is so, maybe we should only use that flag in prereq.mk
Regards,
yousong
> endif
>
> ifeq ($(CONFIG_CCACHE),)
> diff --git a/include/prereq.mk b/include/prereq.mk
> index 83ac21242c65..a6ee2bb637f5 100644
> --- a/include/prereq.mk
> +++ b/include/prereq.mk
> @@ -52,7 +52,7 @@ endef
>
> define RequireCommand
> define Require/$(1)
> - which $(1)
> + $(WHICH) $(1)
> endef
>
> $$(eval $$(call Require,$(1),$(2)))
> @@ -106,7 +106,7 @@ define SetupHostCommand
> $(call QuoteHostCommand,$(11)) $(call QuoteHostCommand,$(12)); do \
> if [ -n "$$$$$$$$cmd" ]; then \
> bin="$$$$$$$$(PATH="$(subst $(space),:,$(filter-out $(STAGING_DIR_HOST)/%,$(subst :,$(space),$(PATH))))" \
> - which "$$$$$$$${cmd%% *}")"; \
> + $(WHICH) "$$$$$$$${cmd%% *}")"; \
> if [ -x "$$$$$$$$bin" ] && eval "$$$$$$$$cmd" >/dev/null 2>/dev/null; then \
> mkdir -p "$(STAGING_DIR_HOST)/bin"; \
> ln -sf "$$$$$$$$bin" "$(STAGING_DIR_HOST)/bin/$(strip $(1))"; \
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list