xref: /freebsd/share/mk/meta.subdir.mk (revision a2b67d4a6e364586ae7180cc4696609e8960f955)
1f974ced3SSimon J. Gerraty# SPDX-License-Identifier: BSD-2-Clause
2f974ced3SSimon J. Gerraty#
3*a2b67d4aSSimon J. Gerraty# $Id: meta.subdir.mk,v 1.15 2024/04/19 15:10:22 sjg Exp $
47750ad47SMarcel Moolenaar
57750ad47SMarcel Moolenaar#
67750ad47SMarcel Moolenaar#	@(#) Copyright (c) 2010, Simon J. Gerraty
77750ad47SMarcel Moolenaar#
87750ad47SMarcel Moolenaar#	This file is provided in the hope that it will
97750ad47SMarcel Moolenaar#	be of use.  There is absolutely NO WARRANTY.
107750ad47SMarcel Moolenaar#	Permission to copy, redistribute or otherwise
117750ad47SMarcel Moolenaar#	use this file is hereby granted provided that
127750ad47SMarcel Moolenaar#	the above copyright notice and this notice are
137750ad47SMarcel Moolenaar#	left intact.
147750ad47SMarcel Moolenaar#
157750ad47SMarcel Moolenaar#	Please send copies of changes and bug-fixes to:
167750ad47SMarcel Moolenaar#	sjg@crufty.net
177750ad47SMarcel Moolenaar#
187750ad47SMarcel Moolenaar
197750ad47SMarcel Moolenaar.if !defined(NO_SUBDIR) && !empty(SUBDIR)
207750ad47SMarcel Moolenaar.if make(destroy*) || make(clean*)
217750ad47SMarcel Moolenaar.MAKE.MODE = compat
2240b9b299SSimon J. Gerraty.if !commands(obj)
237750ad47SMarcel Moolenaar.-include <bsd.obj.mk>
247750ad47SMarcel Moolenaar.endif
257750ad47SMarcel Moolenaar.elif ${.MAKE.LEVEL} == 0
267750ad47SMarcel Moolenaar
277750ad47SMarcel Moolenaar.MAIN: all
287750ad47SMarcel Moolenaar
297750ad47SMarcel Moolenaar.if !exists(${.CURDIR}/${.MAKE.DEPENDFILE:T}) || make(gendirdeps)
307750ad47SMarcel Moolenaar# start with this
317750ad47SMarcel MoolenaarDIRDEPS = ${SUBDIR:N.WAIT:O:u:@d@${RELDIR}/$d@}
327750ad47SMarcel Moolenaar
337750ad47SMarcel Moolenaar.if make(gendirdeps)
347750ad47SMarcel Moolenaar.include <meta.autodep.mk>
357750ad47SMarcel Moolenaar.else
367750ad47SMarcel Moolenaar# this is the cunning bit
377750ad47SMarcel Moolenaar# actually it is probably a bit risky
387750ad47SMarcel Moolenaar# since we may pickup subdirs which are not relevant
397750ad47SMarcel Moolenaar# the alternative is a walk through the tree though
407750ad47SMarcel Moolenaar# which is difficult without a sub-make.
417750ad47SMarcel Moolenaar
427750ad47SMarcel Moolenaar.if defined(BOOTSTRAP_DEPENDFILES)
437750ad47SMarcel Moolenaar_find_name = ${.MAKE.MAKEFILE_PREFERENCE:@m@-o -name $m@:S,^-o,,1}
447750ad47SMarcel MoolenaarDIRDEPS = ${_subdeps:H:O:u:@d@${RELDIR}/$d@}
457750ad47SMarcel Moolenaar.elif ${.MAKE.DEPENDFILE:E} == ${MACHINE} && defined(ALL_MACHINES)
467750ad47SMarcel Moolenaar# we want to find Makefile.depend.* ie for all machines
477750ad47SMarcel Moolenaar# and turn the dirs into dir.<machine>
487750ad47SMarcel Moolenaar_find_name = -name '${.MAKE.DEPENDFILE:T:R}*'
497750ad47SMarcel MoolenaarDIRDEPS = ${_subdeps:O:u:${NIgnoreFiles}:@d@${RELDIR}/${d:H}.${d:E}@:S,.${MACHINE}$,,:S,.depend$,,}
507750ad47SMarcel Moolenaar.else
517750ad47SMarcel Moolenaar# much simpler
527750ad47SMarcel Moolenaar_find_name = -name ${.MAKE.DEPENDFILE:T}
537750ad47SMarcel Moolenaar.if ${.MAKE.DEPENDFILE:E} == ${MACHINE}
547750ad47SMarcel Moolenaar_find_name += -o -name ${.MAKE.DEPENDFILE:T:R}
557750ad47SMarcel Moolenaar.endif
567750ad47SMarcel MoolenaarDIRDEPS = ${_subdeps:H:O:u:@d@${RELDIR}/$d@}
577750ad47SMarcel Moolenaar.endif
587750ad47SMarcel Moolenaar
597750ad47SMarcel Moolenaar_subdeps != cd ${.CURDIR} && \
607750ad47SMarcel Moolenaar	find ${SUBDIR:N.WAIT} -type f \( ${_find_name} \) -print -o \
617750ad47SMarcel Moolenaar	-name .svn -prune 2> /dev/null; echo
627750ad47SMarcel Moolenaar
637750ad47SMarcel Moolenaar.if empty(_subdeps)
647750ad47SMarcel MoolenaarDIRDEPS =
657750ad47SMarcel Moolenaar.else
667750ad47SMarcel Moolenaar# clean up if needed
671e6a58edSBryan DreweryDIRDEPS := ${DIRDEPS:S,^./,,:S,/./,/,g:${SUBDIRDEPS_FILTER:Uu}}
687750ad47SMarcel Moolenaar.endif
697750ad47SMarcel Moolenaar# we just dealt with it, if we leave it defined,
707750ad47SMarcel Moolenaar# dirdeps.mk will compute some interesting combinations.
717750ad47SMarcel Moolenaar.undef ALL_MACHINES
727750ad47SMarcel Moolenaar
737750ad47SMarcel Moolenaar.include <dirdeps.mk>
747750ad47SMarcel Moolenaar.endif
757750ad47SMarcel Moolenaar.endif
767750ad47SMarcel Moolenaar.else
777750ad47SMarcel Moolenaarall: .PHONY
787750ad47SMarcel Moolenaar.endif
797750ad47SMarcel Moolenaar
807750ad47SMarcel Moolenaar.endif
81