If we try to build using external dtc using

> make DTC=dtc

we get a confusing error like

> make[2]: *** No rule to make target 'arch/x86/dts/bayleybay.dtb',
> needed by 'dtbs'.  Stop.

Workaround is to use

> make DTC=$( which dtc )

which gives make a full path, so the dependency
is satisfied.

This was introduced by commit d50af66
kbuild: add dtc as dependency on .dtb file

This patch checks that DTC is an absolute path
and fails early if not.

We also replace `which` in `scripts/dtc-version.sh`
with POSIXy `command -v`.

Signed-off-by: Richard Marko <s...@48.io>
---
 Makefile               | 21 +++++++++++++--------
 scripts/dtc-version.sh |  2 +-
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/Makefile b/Makefile
index b204a50043..9649f88722 100644
--- a/Makefile
+++ b/Makefile
@@ -2014,18 +2014,23 @@ scripts_dtc: scripts_basic
        $(Q)if test "$(DTC)" = "$(DTC_INTREE)"; then \
                $(MAKE) $(build)=scripts/dtc; \
        else \
-               if ! $(DTC) -v >/dev/null; then \
-                       echo '*** Failed to check dtc version: $(DTC)'; \
+               if [ ! "$(DTC)" = "$(wildcard $(DTC))" ]; then \
+                       echo "*** DTC is not an absolute path"; \
                        false; \
                else \
-                       if test "$(call dtc-version)" -lt $(DTC_MIN_VERSION); 
then \
-                               echo '*** Your dtc is too old, please upgrade 
to dtc $(DTC_MIN_VERSION) or newer'; \
+                       if ! $(DTC) -v >/dev/null; then \
+                               echo '*** Failed to check dtc version: $(DTC)'; 
\
                                false; \
                        else \
-                               if [ -n "$(CONFIG_PYLIBFDT)" ]; then \
-                                       if ! echo "import libfdt" | $(PYTHON3) 
2>/dev/null; then \
-                                               echo '*** pylibfdt does not 
seem to be available with $(PYTHON3)'; \
-                                               false; \
+                               if test "$(call dtc-version)" -lt 
$(DTC_MIN_VERSION); then \
+                                       echo '*** Your dtc is too old, please 
upgrade to dtc $(DTC_MIN_VERSION) or newer'; \
+                                       false; \
+                               else \
+                                       if [ -n "$(CONFIG_PYLIBFDT)" ]; then \
+                                               if ! echo "import libfdt" | 
$(PYTHON3) 2>/dev/null; then \
+                                                       echo '*** pylibfdt does 
not seem to be available with $(PYTHON3)'; \
+                                                       false; \
+                                               fi; \
                                        fi; \
                                fi; \
                        fi; \
diff --git a/scripts/dtc-version.sh b/scripts/dtc-version.sh
index 53ff868bcd..1e2f0c8a8b 100755
--- a/scripts/dtc-version.sh
+++ b/scripts/dtc-version.sh
@@ -15,7 +15,7 @@ if [ ${#dtc} -eq 0 ]; then
        exit 1
 fi
 
-if ! which $dtc >/dev/null ; then
+if ! command -v $dtc >/dev/null ; then
        echo "Error: Cannot find dtc: $dtc"
        exit 1
 fi
-- 
2.42.0

Reply via email to