xref: /freebsd/share/mk/meta.subdir.mk (revision a91a246563dffa876a52f53a98de4af9fa364c52)
1# SPDX-License-Identifier: BSD-2-Clause
2#
3# $Id: meta.subdir.mk,v 1.14 2024/02/17 17:26:57 sjg Exp $
4
5#
6#	@(#) Copyright (c) 2010, Simon J. Gerraty
7#
8#	This file is provided in the hope that it will
9#	be of use.  There is absolutely NO WARRANTY.
10#	Permission to copy, redistribute or otherwise
11#	use this file is hereby granted provided that
12#	the above copyright notice and this notice are
13#	left intact.
14#
15#	Please send copies of changes and bug-fixes to:
16#	sjg@crufty.net
17#
18
19.if !defined(NO_SUBDIR) && !empty(SUBDIR)
20.if make(destroy*) || make(clean*)
21.MAKE.MODE = compat
22.if !commands(obj)
23.-include <bsd.obj.mk>
24.endif
25.elif ${.MAKE.LEVEL} == 0
26
27.MAIN: all
28
29.if !exists(${.CURDIR}/${.MAKE.DEPENDFILE:T}) || make(gendirdeps)
30# start with this
31DIRDEPS = ${SUBDIR:N.WAIT:O:u:@d@${RELDIR}/$d@}
32
33.if make(gendirdeps)
34.include <meta.autodep.mk>
35.else
36# this is the cunning bit
37# actually it is probably a bit risky
38# since we may pickup subdirs which are not relevant
39# the alternative is a walk through the tree though
40# which is difficult without a sub-make.
41
42.if defined(BOOTSTRAP_DEPENDFILES)
43_find_name = ${.MAKE.MAKEFILE_PREFERENCE:@m@-o -name $m@:S,^-o,,1}
44DIRDEPS = ${_subdeps:H:O:u:@d@${RELDIR}/$d@}
45.elif ${.MAKE.DEPENDFILE:E} == ${MACHINE} && defined(ALL_MACHINES)
46# we want to find Makefile.depend.* ie for all machines
47# and turn the dirs into dir.<machine>
48_find_name = -name '${.MAKE.DEPENDFILE:T:R}*'
49DIRDEPS = ${_subdeps:O:u:${NIgnoreFiles}:@d@${RELDIR}/${d:H}.${d:E}@:S,.${MACHINE}$,,:S,.depend$,,}
50.else
51# much simpler
52_find_name = -name ${.MAKE.DEPENDFILE:T}
53.if ${.MAKE.DEPENDFILE:E} == ${MACHINE}
54_find_name += -o -name ${.MAKE.DEPENDFILE:T:R}
55.endif
56DIRDEPS = ${_subdeps:H:O:u:@d@${RELDIR}/$d@}
57.endif
58
59_subdeps != cd ${.CURDIR} && \
60	find ${SUBDIR:N.WAIT} -type f \( ${_find_name} \) -print -o \
61	-name .svn -prune 2> /dev/null; echo
62
63.if empty(_subdeps)
64DIRDEPS =
65.else
66# clean up if needed
67DIRDEPS := ${DIRDEPS:S,^./,,:S,/./,/,g:${SUBDIRDEPS_FILTER:Uu}}
68.endif
69# we just dealt with it, if we leave it defined,
70# dirdeps.mk will compute some interesting combinations.
71.undef ALL_MACHINES
72
73DEP_RELDIR = ${RELDIR}
74.include <dirdeps.mk>
75.endif
76.endif
77.else
78all: .PHONY
79.endif
80
81.endif
82