[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