summaryrefslogtreecommitdiff
path: root/ACE/include/makeinclude/recurse.bor
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/include/makeinclude/recurse.bor')
-rw-r--r--ACE/include/makeinclude/recurse.bor213
1 files changed, 213 insertions, 0 deletions
diff --git a/ACE/include/makeinclude/recurse.bor b/ACE/include/makeinclude/recurse.bor
new file mode 100644
index 00000000000..06ccede3a3b
--- /dev/null
+++ b/ACE/include/makeinclude/recurse.bor
@@ -0,0 +1,213 @@
+#
+# $Id$
+#
+# Macros for recursive invocations of make
+#
+# Inputs:
+# ~~~~~~~
+# DIRS - list of sub-directories to invoke make in
+# MAKEFILES - list of makefiles to be run
+# NAMES - list of names of targets to be built
+#
+
+!include <$(ACE_ROOT)\include\makeinclude\make_flags.bor>
+
+# We want to avoid all of this recursion if this is a multi-target sub-make.
+!ifndef TARGET_NAME
+# This is not a multi-target sub-make ...
+
+!ifdef DIRS
+
+all: $(DIRS)
+
+# We use an extra level of make recursion to ensure the current directory is
+# automatically restored when the sub-directory is finished.
+$(DIRS):
+ @echo Entering directory $<
+ @$(MAKE) $(MAKE_FLAGS) -f&&!
+all:
+ @cd $<
+ $(MAKE) $(MAKE_FLAGS) -fMakefile.bor
+!
+
+# This ugliness is to remove extra spaces from between the items in the list.
+DIRS_CLEAN_1 = $(DIRS) $(BLANK_SPACE)
+DIRS_CLEAN_2 = $(DIRS_CLEAN_1: =%)
+DIRS_CLEAN_3 = $(DIRS_CLEAN_2:%%=%)
+DIRS_CLEAN_4 = $(DIRS_CLEAN_3:%%=%)
+DIRS_CLEAN = $(DIRS_CLEAN_4:%=.Clean )
+
+clean: $(DIRS_CLEAN)
+
+# We use an extra level of make recursion to ensure the current directory is
+# automatically restored when the sub-directory is finished.
+$(DIRS_CLEAN):
+ @echo Cleaning directory $(<:.Clean=)
+ @$(MAKE) $(MAKE_FLAGS) -f&&!
+all:
+ @cd $(<:.Clean=)
+ $(MAKE) $(MAKE_FLAGS) -fMakefile.bor clean
+!
+
+# This ugliness is to remove extra spaces from between the items in the list.
+DIRS_REALCLEAN_1 = $(DIRS) $(BLANK_SPACE)
+DIRS_REALCLEAN_2 = $(DIRS_REALCLEAN_1: =%)
+DIRS_REALCLEAN_3 = $(DIRS_REALCLEAN_2:%%=%)
+DIRS_REALCLEAN_4 = $(DIRS_REALCLEAN_3:%%=%)
+DIRS_REALCLEAN = $(DIRS_REALCLEAN_4:%=.RealClean )
+
+realclean: $(DIRS_REALCLEAN)
+
+# We use an extra level of make recursion to ensure the current directory is
+# automatically restored when the sub-directory is finished.
+$(DIRS_REALCLEAN):
+ @echo Cleaning directory $(<:.RealClean=)
+ @$(MAKE) $(MAKE_FLAGS) -f&&!
+all:
+ @cd $(<:.RealClean=)
+ $(MAKE) $(MAKE_FLAGS) -fMakefile.bor realclean
+!
+
+# This ugliness is to remove extra spaces from between the items in the list.
+DIRS_INSTALL_1 = $(DIRS) $(BLANK_SPACE)
+DIRS_INSTALL_2 = $(DIRS_INSTALL_1: =%)
+DIRS_INSTALL_3 = $(DIRS_INSTALL_2:%%=%)
+DIRS_INSTALL_4 = $(DIRS_INSTALL_3:%%=%)
+DIRS_INSTALL = $(DIRS_INSTALL_4:%=.Install )
+
+install: $(DIRS_INSTALL)
+
+# We use an extra level of make recursion to ensure the current directory is
+# automatically restored when the sub-directory is finished.
+$(DIRS_INSTALL):
+ @echo Installing directory $(<:.Install=)
+ @$(MAKE) $(MAKE_FLAGS) -f&&!
+all:
+ @cd $(<:.Install=)
+ $(MAKE) $(MAKE_FLAGS) -fMakefile.bor install
+!
+
+!endif
+
+!ifdef MAKEFILES
+
+# This ugliness is to remove extra spaces from between the items in the list.
+MAKEFILES_ALL_1 = $(MAKEFILES) $(BLANK_SPACE)
+MAKEFILES_ALL_2 = $(MAKEFILES_ALL_1: =%)
+MAKEFILES_ALL_3 = $(MAKEFILES_ALL_2:%%=%)
+MAKEFILES_ALL_4 = $(MAKEFILES_ALL_3:%%=%)
+MAKEFILES_ALL = $(MAKEFILES_ALL_4:%=.All )
+
+all: $(MAKEFILES_ALL)
+
+$(MAKEFILES_ALL):
+ $(MAKE) $(MAKE_FLAGS) -f$(<:.All=)
+
+# This ugliness is to remove extra spaces from between the items in the list.
+MAKEFILES_CLEAN_1 = $(MAKEFILES) $(BLANK_SPACE)
+MAKEFILES_CLEAN_2 = $(MAKEFILES_CLEAN_1: =%)
+MAKEFILES_CLEAN_3 = $(MAKEFILES_CLEAN_2:%%=%)
+MAKEFILES_CLEAN_4 = $(MAKEFILES_CLEAN_3:%%=%)
+MAKEFILES_CLEAN = $(MAKEFILES_CLEAN_4:%=.Clean )
+
+clean: $(MAKEFILES_CLEAN)
+
+$(MAKEFILES_CLEAN):
+ $(MAKE) $(MAKE_FLAGS) -f$(<:.Clean=) clean
+
+# This ugliness is to remove extra spaces from between the items in the list.
+MAKEFILES_REALCLEAN_1 = $(MAKEFILES) $(BLANK_SPACE)
+MAKEFILES_REALCLEAN_2 = $(MAKEFILES_REALCLEAN_1: =%)
+MAKEFILES_REALCLEAN_3 = $(MAKEFILES_REALCLEAN_2:%%=%)
+MAKEFILES_REALCLEAN_4 = $(MAKEFILES_REALCLEAN_3:%%=%)
+MAKEFILES_REALCLEAN = $(MAKEFILES_REALCLEAN_4:%=.RealClean )
+
+realclean: $(MAKEFILES_REALCLEAN)
+
+$(MAKEFILES_REALCLEAN):
+ $(MAKE) $(MAKE_FLAGS) -f$(<:.RealClean=) realclean
+
+# This ugliness is to remove extra spaces from between the items in the list.
+MAKEFILES_INSTALL_1 = $(MAKEFILES) $(BLANK_SPACE)
+MAKEFILES_INSTALL_2 = $(MAKEFILES_INSTALL_1: =%)
+MAKEFILES_INSTALL_3 = $(MAKEFILES_INSTALL_2:%%=%)
+MAKEFILES_INSTALL_4 = $(MAKEFILES_INSTALL_3:%%=%)
+MAKEFILES_INSTALL = $(MAKEFILES_INSTALL_4:%=.Install )
+
+install: $(MAKEFILES_INSTALL)
+
+$(MAKEFILES_INSTALL):
+ $(MAKE) $(MAKE_FLAGS) -f$(<:.Install=) install
+
+!endif
+
+!ifdef NAMES
+
+# This macro may be defined in the environment (e.g. the nightly build
+# scripts) so we need to remove it.
+!undef NAME
+
+# Multi-target recursion assumes Makefile.bor. For multiple targets in
+# makefiles with other names, you must set the MAKEFILE variable to the
+# name of the file.
+!ifndef MAKEFILE
+MAKEFILE = Makefile.bor
+!endif
+
+# This ugliness is to remove extra spaces from between the items in the list.
+NAMES_ALL_1 = $(NAMES) $(BLANK_SPACE)
+NAMES_ALL_2 = $(NAMES_ALL_1: =%)
+NAMES_ALL_3 = $(NAMES_ALL_2:%%=%)
+NAMES_ALL_4 = $(NAMES_ALL_3:%%=%)
+NAMES_ALL = $(NAMES_ALL_4:%=.All )
+
+all: $(NAMES_ALL)
+
+$(NAMES_ALL):
+ $(MAKE) $(MAKE_FLAGS) -f$(MAKEFILE) -DTARGET_NAME=$(<:.All=)
+
+# This ugliness is to remove extra spaces from between the items in the list.
+NAMES_CLEAN_1 = $(NAMES) $(BLANK_SPACE)
+NAMES_CLEAN_2 = $(NAMES_CLEAN_1: =%)
+NAMES_CLEAN_3 = $(NAMES_CLEAN_2:%%=%)
+NAMES_CLEAN_4 = $(NAMES_CLEAN_3:%%=%)
+NAMES_CLEAN = $(NAMES_CLEAN_4:%=.Clean )
+
+clean: $(NAMES_CLEAN)
+
+$(NAMES_CLEAN):
+ $(MAKE) $(MAKE_FLAGS) -f$(MAKEFILE) -DTARGET_NAME=$(<:.Clean=) clean
+
+# This ugliness is to remove extra spaces from between the items in the list.
+NAMES_REALCLEAN_1 = $(NAMES) $(BLANK_SPACE)
+NAMES_REALCLEAN_2 = $(NAMES_REALCLEAN_1: =%)
+NAMES_REALCLEAN_3 = $(NAMES_REALCLEAN_2:%%=%)
+NAMES_REALCLEAN_4 = $(NAMES_REALCLEAN_3:%%=%)
+NAMES_REALCLEAN = $(NAMES_REALCLEAN_4:%=.RealClean )
+
+realclean: $(NAMES_REALCLEAN)
+
+$(NAMES_REALCLEAN):
+ $(MAKE) $(MAKE_FLAGS) -f$(MAKEFILE) -DTARGET_NAME=$(<:.RealClean=) realclean
+
+# This ugliness is to remove extra spaces from between the items in the list.
+NAMES_INSTALL_1 = $(NAMES) $(BLANK_SPACE)
+NAMES_INSTALL_2 = $(NAMES_INSTALL_1: =%)
+NAMES_INSTALL_3 = $(NAMES_INSTALL_2:%%=%)
+NAMES_INSTALL_4 = $(NAMES_INSTALL_3:%%=%)
+NAMES_INSTALL = $(NAMES_INSTALL_4:%=.Install )
+
+install: $(NAMES_INSTALL)
+
+$(NAMES_INSTALL):
+ $(MAKE) $(MAKE_FLAGS) -f$(MAKEFILE) -DTARGET_NAME=$(<:.Install=) install
+
+!endif
+
+!else
+# This is a multi-target sub-make ...
+
+# Set the name of the current target.
+NAME = $(TARGET_NAME)
+
+!endif