diff options
Diffstat (limited to 'ACE/include/makeinclude/recurse.bor')
-rw-r--r-- | ACE/include/makeinclude/recurse.bor | 213 |
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 |