[git commit master 1/1] fix make O=dir build

Denys Vlasenko vda.linux at googlemail.com
Thu Jul 8 23:25:36 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=1883cb174619cfc90ca86da08598f470d3a11315
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 scripts/Makefile.build     |    7 ++++++-
 scripts/gen_build_files.sh |    7 ++++++-
 scripts/test_make_O        |   11 +++++++++++
 3 files changed, 23 insertions(+), 2 deletions(-)
 create mode 100755 scripts/test_make_O

diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index f343818..5685b5b 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -13,8 +13,13 @@ __build:
 include scripts/Kbuild.include
 
 # The filename Kbuild has precedence over Makefile
+# bbox: we also try to include Kbuild file in obj tree first
 kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))
-include $(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, $(kbuild-dir)/Makefile)
+include $(if $(wildcard $(src)/Kbuild), $(src)/Kbuild, \
+		$(if $(wildcard $(kbuild-dir)/Kbuild), $(kbuild-dir)/Kbuild, \
+			$(kbuild-dir)/Makefile \
+		) \
+	)
 
 include scripts/Makefile.lib
 
diff --git a/scripts/gen_build_files.sh b/scripts/gen_build_files.sh
index a98f509..9681587 100755
--- a/scripts/gen_build_files.sh
+++ b/scripts/gen_build_files.sh
@@ -4,6 +4,8 @@ test $# -ge 2 || { echo "Syntax: $0 SRCTREE OBJTREE"; exit 1; }
 
 # cd to objtree
 cd -- "$2" || { echo "Syntax: $0 SRCTREE OBJTREE"; exit 1; }
+# In separate objtree build, include/ might not exist yet
+mkdir include 2>/dev/null
 
 srctree="$1"
 
@@ -46,10 +48,12 @@ if test x"$new" != x"$old"; then
 fi
 
 # (Re)generate */Kbuild and */Config.in
-find -type d | while read -r d; do
+{ cd -- "$srctree" && find -type d; } | while read -r d; do
 	d="${d#./}"
+
 	src="$srctree/$d/Kbuild.src"
 	dst="$d/Kbuild"
+	mkdir -p -- "$d" 2>/dev/null
 	if test -f "$src"; then
 		#echo "  CHK     $dst"
 
@@ -69,6 +73,7 @@ find -type d | while read -r d; do
 
 	src="$srctree/$d/Config.src"
 	dst="$d/Config.in"
+	mkdir -p -- "$d" 2>/dev/null
 	if test -f "$src"; then
 		#echo "  CHK     $dst"
 
diff --git a/scripts/test_make_O b/scripts/test_make_O
new file mode 100755
index 0000000..a0ee6a8
--- /dev/null
+++ b/scripts/test_make_O
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+b=`basename $PWD`
+test "${b#busybox}" != "$b" || { echo "Must be run in busybox tree"; exit 1; }
+
+rm -rf ../testdir_make_O.$$
+mkdir ../testdir_make_O.$$
+odir=`cd ../testdir_make_O.$$ && pwd`
+test -d "$odir" || exit 1
+
+make O="$odir" $MAKEOPTS "$@" defconfig busybox 2>&1 | tee test_make_O.log
-- 
1.7.1



More information about the busybox-cvs mailing list