# # 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) -$(MAKEFLAGS) $(MAKE_FLAGS) -f&&! all: @cd $< $(MAKE) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(MAKE_FLAGS) -f&&! all: @cd $(<:.Clean=) $(MAKE) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(MAKE_FLAGS) -f&&! all: @cd $(<:.RealClean=) $(MAKE) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(MAKE_FLAGS) -f&&! all: @cd $(<:.Install=) $(MAKE) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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) -$(MAKEFLAGS) $(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