06b9b3e0ad
Quite a lot of churn on style, but lots of good work refactoring complicated functions and lots more unit-tests. Thanks mostly to rillig at NetBSD Some interesting entries from ChangeLog o .MAKE.{UID,GID} represent uid and gid running make. o allow env var MAKE_OBJDIR_CHECK_WRITABLE=no to skip writable checks in InitObjdir. Explicit .OBJDIR target always allows read-only directory. o add more unit tests for META MODE Merge commit '8e11a9b4250be3c3379c45fa820bff78d99d5946' into main Change-Id: I464fd4c013067f0915671c1ccc96d2d8090b2b9c
80 lines
2.1 KiB
Makefile
80 lines
2.1 KiB
Makefile
# $Id: meta.subdir.mk,v 1.13 2021/01/05 22:24:37 sjg Exp $
|
|
|
|
#
|
|
# @(#) Copyright (c) 2010, Simon J. Gerraty
|
|
#
|
|
# This file is provided in the hope that it will
|
|
# be of use. There is absolutely NO WARRANTY.
|
|
# Permission to copy, redistribute or otherwise
|
|
# use this file is hereby granted provided that
|
|
# the above copyright notice and this notice are
|
|
# left intact.
|
|
#
|
|
# Please send copies of changes and bug-fixes to:
|
|
# sjg@crufty.net
|
|
#
|
|
|
|
.if !defined(NO_SUBDIR) && !empty(SUBDIR)
|
|
.if make(destroy*) || make(clean*)
|
|
.MAKE.MODE = compat
|
|
.if !commands(obj)
|
|
.-include <bsd.obj.mk>
|
|
.endif
|
|
.elif ${.MAKE.LEVEL} == 0
|
|
|
|
.MAIN: all
|
|
|
|
.if !exists(${.CURDIR}/${.MAKE.DEPENDFILE:T}) || make(gendirdeps)
|
|
# start with this
|
|
DIRDEPS = ${SUBDIR:N.WAIT:O:u:@d@${RELDIR}/$d@}
|
|
|
|
.if make(gendirdeps)
|
|
.include <meta.autodep.mk>
|
|
.else
|
|
# this is the cunning bit
|
|
# actually it is probably a bit risky
|
|
# since we may pickup subdirs which are not relevant
|
|
# the alternative is a walk through the tree though
|
|
# which is difficult without a sub-make.
|
|
|
|
.if defined(BOOTSTRAP_DEPENDFILES)
|
|
_find_name = ${.MAKE.MAKEFILE_PREFERENCE:@m@-o -name $m@:S,^-o,,1}
|
|
DIRDEPS = ${_subdeps:H:O:u:@d@${RELDIR}/$d@}
|
|
.elif ${.MAKE.DEPENDFILE:E} == ${MACHINE} && defined(ALL_MACHINES)
|
|
# we want to find Makefile.depend.* ie for all machines
|
|
# and turn the dirs into dir.<machine>
|
|
_find_name = -name '${.MAKE.DEPENDFILE:T:R}*'
|
|
DIRDEPS = ${_subdeps:O:u:${NIgnoreFiles}:@d@${RELDIR}/${d:H}.${d:E}@:S,.${MACHINE}$,,:S,.depend$,,}
|
|
.else
|
|
# much simpler
|
|
_find_name = -name ${.MAKE.DEPENDFILE:T}
|
|
.if ${.MAKE.DEPENDFILE:E} == ${MACHINE}
|
|
_find_name += -o -name ${.MAKE.DEPENDFILE:T:R}
|
|
.endif
|
|
DIRDEPS = ${_subdeps:H:O:u:@d@${RELDIR}/$d@}
|
|
.endif
|
|
|
|
_subdeps != cd ${.CURDIR} && \
|
|
find ${SUBDIR:N.WAIT} -type f \( ${_find_name} \) -print -o \
|
|
-name .svn -prune 2> /dev/null; echo
|
|
|
|
.if empty(_subdeps)
|
|
DIRDEPS =
|
|
.else
|
|
# clean up if needed
|
|
DIRDEPS := ${DIRDEPS:S,^./,,:S,/./,/,g:${SUBDIRDEPS_FILTER:Uu}}
|
|
.endif
|
|
# we just dealt with it, if we leave it defined,
|
|
# dirdeps.mk will compute some interesting combinations.
|
|
.undef ALL_MACHINES
|
|
|
|
DEP_RELDIR = ${RELDIR}
|
|
.include <dirdeps.mk>
|
|
.endif
|
|
.endif
|
|
.else
|
|
all: .PHONY
|
|
.endif
|
|
|
|
.endif
|