2 # vim:set ts=8 sw=8 sts=8 noet:
4 # This Source Code Form is subject to the terms of the Mozilla Public
5 # License, v. 2.0. If a copy of the MPL was not distributed with this
6 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 # The purpose of this file is to pull in non-recursive targets when performing
9 # a partial tree (not top-level) build. This will allow people to continue to
10 # build individual directories while some of the targets may not be normally
11 # defined in that make file.
13 # Non-recursive targets are attached to existing make targets. The
14 # NONRECURSIVE_TARGETS variable lists the make targets that modified. For
15 # each target in this list, the NONRECURSIVE_TARGET_<target> variable will
16 # contain a list of partial variable names. We will then look in variables
17 # named NONRECURSIVE_TARGETS_<target>_<fragment>_* for information describing
18 # how to evaluate non-recursive make targets.
20 # Targets are defined by the following variables:
22 # FILE - The make file to evaluate. This is equivalent to
24 # DIRECTORY - The directory whose Makefile to evaluate. This is
25 # equivalent to |make -C <DIRECTORY>|.
26 # TARGETS - Targets to evaluate in that make file.
28 # Only 1 of FILE or DIRECTORY may be defined.
32 # NONRECURSIVE_TARGETS = export libs
33 # NONRECURSIVE_TARGETS_export = headers
34 # NONRECURSIVE_TARGETS_export_headers_FILE = /path/to/exports.mk
35 # NONRECURSIVE_TARGETS_export_headers_TARGETS = $(DIST)/include/foo.h $(DIST)/include/bar.h
36 # NONRECURSIVE_TARGETS_libs = cppsrcs
37 # NONRECURSIVE_TARGETS_libs_cppsrcs_DIRECTORY = $(DEPTH)/foo
38 # NONRECURSIVE_TARGETS_libs_cppsrcs_TARGETS = /path/to/foo.o /path/to/bar.o
40 # Will get turned into the following:
43 # $(MAKE) -C $(DEPTH) -f /path/to/exports.mk $(DIST)/include/foo.h $(DIST)/include/bar.h
46 # $(MAKE) -C $(DEPTH)/foo /path/to/foo.o /path/to/bar.o
48 ifndef INCLUDED_NONRECURSIVE_MK
50 define define_nonrecursive_target
52 $$(MAKE
) -C
$(or
$(4),$$(DEPTH
)) $(addprefix -f
,$(3)) $(2)
55 $(foreach target
,$(NONRECURSIVE_TARGETS
), \
56 $(foreach entry
,$(NONRECURSIVE_TARGETS_
$(target
)), \
57 $(eval
$(call define_nonrecursive_target
, \
59 $(NONRECURSIVE_TARGETS_
$(target
)_
$(entry
)_TARGETS
), \
60 $(NONRECURSIVE_TARGETS_
$(target
)_
$(entry
)_FILE
), \
61 $(NONRECURSIVE_TARGETS_
$(target
)_
$(entry
)_DIRECTORY
), \
66 INCLUDED_NONRECURSIVE_MK
:= 1