diff mbox

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

Message ID 1385712896-16764-1-git-send-email-yamada.m@jp.panasonic.com
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Masahiro Yamada Nov. 29, 2013, 8:14 a.m. UTC
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@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(-)

Comments

Masahiro Yamada Dec. 2, 2013, 6:18 a.m. UTC | #1
Hi.

I noticed a trivial problem of this patch:
   include/{autoconf.mk.tmp,spl-autoconf.mk.tmp,tpl-autoconf.mk.tmp} remain on
success.

I posted v2 to fix this issue.


Best Regards
Masahiro Yamada
diff mbox

Patch

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 \