From 454e66e7683c3404c4ea80e7ded77746bbb9d455 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Mon, 22 Jan 2007 20:43:00 +0000 Subject: [PATCH] Added support for compilation of the whole tree from any subdirectory. darcs-hash:20070122204301-f2ef6-88b206453c326a930f9997903d56ff4e8fa2754c.gz --- snippets/base | 17 ++++++++++++++++- tests/whole_tree/Makefile | 14 ++++++++++++++ tests/whole_tree/Makefile.omk | 1 + tests/whole_tree/rules | 1 + tests/whole_tree/runtest | 8 ++++++++ tests/whole_tree/subdir/Makefile | 14 ++++++++++++++ tests/whole_tree/subdir/Makefile.omk | 0 7 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/whole_tree/Makefile create mode 100644 tests/whole_tree/Makefile.omk create mode 100644 tests/whole_tree/rules create mode 100755 tests/whole_tree/runtest create mode 100644 tests/whole_tree/subdir/Makefile create mode 100644 tests/whole_tree/subdir/Makefile.omk diff --git a/snippets/base b/snippets/base index f64adfd..606c696 100644 --- a/snippets/base +++ b/snippets/base @@ -8,6 +8,7 @@ # # input variables # V .. if set to 1, full command text is shown else short form is used +# W .. whole tree - if set to 1, make is always called from the top-level directory # SUBDIRS .. list of subdirectories intended for make from actual directory # default_CONFIG .. list of default config assignments CONFIG_XXX=y/n ... @@ -18,8 +19,23 @@ endif .PHONY: all default check-make-ver +ifdef W + ifeq ("$(origin W)", "command line") + OMK_WHOLE_TREE:=$(W) + endif +endif +ifndef OMK_WHOLE_TREE + OMK_WHOLE_TREE:=0 +endif + +ifneq ($(OMK_WHOLE_TREE),1) all: check-make-ver default @echo "Compilation finished" +else +# Run make in the top-level directory +all: + @$(MAKE) -C $(MAKERULES_DIR) OMK_SERIALIZE_INCLUDED=n SOURCES_DIR=$(MAKERULES_DIR) RELATIVE_DIR="" $(MAKECMDGOALS) W=0 +endif #========================= # Include the config file @@ -96,7 +112,6 @@ include $(SOURCES_DIR)/Makefile.omk OMK_INCLUDED := 1 endif - check-make-ver: @GOOD_MAKE_VERSION=`echo $(MAKE_VERSION) | sed -n -e 's/^[4-9]\..*\|^3\.9[0-9].*\|^3\.8[1-9].*/y/p'` ; \ if [ x$$GOOD_MAKE_VERSION != xy ] ; then \ diff --git a/tests/whole_tree/Makefile b/tests/whole_tree/Makefile new file mode 100644 index 0000000..f595272 --- /dev/null +++ b/tests/whole_tree/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/tests/whole_tree/Makefile.omk b/tests/whole_tree/Makefile.omk new file mode 100644 index 0000000..c77e8bb --- /dev/null +++ b/tests/whole_tree/Makefile.omk @@ -0,0 +1 @@ +$(shell echo "Top-level executed" > toplevel.mark) diff --git a/tests/whole_tree/rules b/tests/whole_tree/rules new file mode 100644 index 0000000..9b5e7bf --- /dev/null +++ b/tests/whole_tree/rules @@ -0,0 +1 @@ +snip:base diff --git a/tests/whole_tree/runtest b/tests/whole_tree/runtest new file mode 100755 index 0000000..7fd21c6 --- /dev/null +++ b/tests/whole_tree/runtest @@ -0,0 +1,8 @@ +#!/bin/sh + +. $OMK_TESTSROOT/functions.sh + +touch config.omk-default +make -C subdir W=1 || canttest + +[ -f 'toplevel.mark' ] || error "Toplevel make was not called". diff --git a/tests/whole_tree/subdir/Makefile b/tests/whole_tree/subdir/Makefile new file mode 100644 index 0000000..f595272 --- /dev/null +++ b/tests/whole_tree/subdir/Makefile @@ -0,0 +1,14 @@ +# Generic directory or leaf node makefile for OCERA make framework + +ifndef MAKERULES_DIR +MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) ) +endif + +ifeq ($(MAKERULES_DIR),) +all : default +.DEFAULT:: + @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n" +else +include $(MAKERULES_DIR)/Makefile.rules +endif + diff --git a/tests/whole_tree/subdir/Makefile.omk b/tests/whole_tree/subdir/Makefile.omk new file mode 100644 index 0000000..e69de29 -- 2.39.2