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