# -*- makefile -*- # vim:set ts=8 sw=8 sts=8 noet: # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # The purpose of this file is to pull in non-recursive targets when performing # a partial tree (not top-level) build. This will allow people to continue to # build individual directories while some of the targets may not be normally # defined in that make file. # # Non-recursive targets are attached to existing make targets. The # NONRECURSIVE_TARGETS variable lists the make targets that modified. For # each target in this list, the NONRECURSIVE_TARGET_ variable will # contain a list of partial variable names. We will then look in variables # named NONRECURSIVE_TARGETS___* for information describing # how to evaluate non-recursive make targets. # # Targets are defined by the following variables: # # FILE - The make file to evaluate. This is equivalent to # |make -f | # DIRECTORY - The directory whose Makefile to evaluate. This is # equivalent to |make -C |. # TARGETS - Targets to evaluate in that make file. # # Only 1 of FILE or DIRECTORY may be defined. # # For example: # # NONRECURSIVE_TARGETS = export libs # NONRECURSIVE_TARGETS_export = headers # NONRECURSIVE_TARGETS_export_headers_FILE = /path/to/exports.mk # NONRECURSIVE_TARGETS_export_headers_TARGETS = $(DIST)/include/foo.h $(DIST)/include/bar.h # NONRECURSIVE_TARGETS_libs = cppsrcs # NONRECURSIVE_TARGETS_libs_cppsrcs_DIRECTORY = $(DEPTH)/foo # NONRECURSIVE_TARGETS_libs_cppsrcs_TARGETS = /path/to/foo.o /path/to/bar.o # # Will get turned into the following: # # exports:: # $(MAKE) -C $(DEPTH) -f /path/to/exports.mk $(DIST)/include/foo.h $(DIST)/include/bar.h # # libs:: # $(MAKE) -C $(DEPTH)/foo /path/to/foo.o /path/to/bar.o ifndef INCLUDED_NONRECURSIVE_MK define define_nonrecursive_target $(1):: $$(MAKE) -C $(or $(4),$$(DEPTH)) $(addprefix -f ,$(3)) $(2) endef $(foreach target,$(NONRECURSIVE_TARGETS), \ $(foreach entry,$(NONRECURSIVE_TARGETS_$(target)), \ $(eval $(call define_nonrecursive_target, \ $(target), \ $(NONRECURSIVE_TARGETS_$(target)_$(entry)_TARGETS), \ $(NONRECURSIVE_TARGETS_$(target)_$(entry)_FILE), \ $(NONRECURSIVE_TARGETS_$(target)_$(entry)_DIRECTORY), \ )) \ ) \ ) INCLUDED_NONRECURSIVE_MK := 1 endif