[U-Boot] [PATCH] Makefile: Do not create empty autoconf.mk on error

Masahiro Yamada yamada.m at jp.panasonic.com
Fri Nov 29 09:14:56 CET 2013


The build rules of
  - include/autoconf.mk.dep
  - include/autoconf.mk
  - include/spl-autoconf.mk
  - include/tpl-autoconf.mk
were wrong.

They created empty files (which are never updated)
if an error occurrs during preprocessing.

Signed-off-by: Masahiro Yamada <yamada.m at jp.panasonic.com>
---

Before this commit, Makefile created empty files such as
  - include/autoconf.mk
  - include/spl-autoconf.mk
  - include/tpl-autoconf.mk
  - include/autoconf.mk.dep
on error.

For example, try "make" with a wrong CROSS_COMPILE like this:

    $ make mrproper
    $ make omap4_panda_config
    Configuring for omap4_panda board...
    $ make CROSS_COMPILE=foobar- all
    ---<snip>---
    /bin/bash: foobar-gcc: command not found
    make[1]: *** [lib/asm-offsets.s] Error 127

Of cource, make failed.

And just check include/autoconf.mk,  include/spl-autoconf.mk, etc.
They exist and are all empty.

And then, try "make" with a correct CROSS_COMPILE:

    $ make CROSS_COMPILE=arm-linux-gnueabi- all

make will proceed with empty include/autoconf.mk and fail.

A build rule of include/autoconf.mk is absolutely wrong:

$(obj)include/autoconf.mk: $(obj)include/config.h
	@$(XECHO) Generating $@ ; \
	set -e ; \
	: Extract the config macros ; \
	$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
		sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
	mv $@.tmp $@

This code does not work as we expect on error
because it does not detect the error of $(CPP).
An error usually occurrs during $(CPP), whereas sed always succeeds.
( "set -e" is also meaningless, here. )
A empty include/autoconf.mk is created on error.
(And it is never updated because it is newer than include/config.h)

FYI:
A pipe return the exit status of the last command.
For example,

    $ command1 | command2

returns exit status of "command2", not "command1".


 Makefile | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/Makefile b/Makefile
index a2fb037..21c96cb 100644
--- a/Makefile
+++ b/Makefile
@@ -637,36 +637,33 @@ checkdtc:
 # to regenerate the autoconf.mk file.
 $(obj)include/autoconf.mk.dep: $(obj)include/config.h include/common.h
 	@$(XECHO) Generating $@ ; \
-	set -e ; \
 	: Generate the dependancies ; \
 	$(CC) -x c -DDO_DEPS_ONLY -M $(CFLAGS) $(CPPFLAGS) \
-		-MQ $(obj)include/autoconf.mk include/common.h > $@
+		-MQ $(obj)include/autoconf.mk include/common.h > $@ || \
+		rm $@
 
 $(obj)include/autoconf.mk: $(obj)include/config.h
 	@$(XECHO) Generating $@ ; \
-	set -e ; \
 	: Extract the config macros ; \
-	$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h | \
-		sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
-	mv $@.tmp $@
+	$(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
+		sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ || \
+		rm $@.tmp
 
 # Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
 $(obj)include/tpl-autoconf.mk: $(obj)include/config.h
 	@$(XECHO) Generating $@ ; \
-	set -e ; \
 	: Extract the config macros ; \
 	$(CPP) $(CFLAGS) -DCONFIG_TPL_BUILD  -DCONFIG_SPL_BUILD\
-			-DDO_DEPS_ONLY -dM include/common.h | \
-	sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
-	mv $@.tmp $@
+			-DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
+		sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ || \
+		rm $@.tmp
 
 $(obj)include/spl-autoconf.mk: $(obj)include/config.h
 	@$(XECHO) Generating $@ ; \
-	set -e ; \
 	: Extract the config macros ; \
-	$(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h | \
-	sed -n -f tools/scripts/define2mk.sed > $@.tmp && \
-	mv $@.tmp $@
+	$(CPP) $(CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h > $@.tmp && \
+		sed -n -f tools/scripts/define2mk.sed $@.tmp > $@ || \
+		rm $@.tmp
 
 $(obj)include/generated/generic-asm-offsets.h:	$(obj)include/autoconf.mk.dep \
 	$(obj)include/spl-autoconf.mk \
-- 
1.8.3.2



More information about the U-Boot mailing list