build: replace which with Bash command built-in
authorPetr Štetiar <ynezz@true.cz>
Tue, 22 Dec 2020 09:33:02 +0000 (10:33 +0100)
committerPetr Štetiar <ynezz@true.cz>
Mon, 4 Jan 2021 18:32:25 +0000 (19:32 +0100)
`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@true.cz>
Makefile
include/cmake.mk
include/prereq.mk

index 4ccbc20b85803600206f6f1e365bbdf492915312..f1577ad4d143b9ece4536e0e8c0551a8484eb5dd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ $(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)
+DISTRO_PKG_CONFIG:=$(shell command -pv pkg-config | grep -E '\/usr' | head -n 1)
 export PATH:=$(TOPDIR)/staging_dir/host/bin:$(PATH)
 
 ifneq ($(OPENWRT_BUILD),1)
index 96c4d7df3479f2e8f9941573738e18895708d1c9..de8022ca57346d2b2a71cb4d1e712fba0499d909 100644 (file)
@@ -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 command -v $(1))
 endif
 
 ifeq ($(CONFIG_CCACHE),)
index 83ac21242c6535b9bdd03e70b2b91f10161231e5..6d14140792f370b8909af6f617c6fa489480f9da 100644 (file)
@@ -52,7 +52,7 @@ endef
 
 define RequireCommand
   define Require/$(1)
-    which $(1)
+    command -pv $(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%% *}")"; \
+                               command -pv "$$$$$$$${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))"; \