mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-04 23:50:27 +00:00
548bfc56eb
Merge commit '507951f55039f9d1ceae507d510f8cb68225fbc5'
138 lines
2.9 KiB
Makefile
138 lines
2.9 KiB
Makefile
# SPDX-License-Identifier: BSD-2-Clause
|
|
#
|
|
# $Id: subdir.mk,v 1.24 2024/04/10 01:47:23 sjg Exp $
|
|
#
|
|
# @(#) Copyright (c) 2002-2024, 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 SUBDIR=@auto replace that with each subdir that has
|
|
# a [Mm]akefile.
|
|
#
|
|
# Unless SUBDIR_MUST_EXIST is defined, missing subdirs
|
|
# are ignored (to allow for sparse checkout).
|
|
#
|
|
# If you use _SUBDIRUSE for a target you may need to add it to
|
|
# SUBDIR_TARGETS.
|
|
|
|
# should be set properly in sys.mk
|
|
_this ?= ${.PARSEFILE:S,bsd.,,}
|
|
|
|
.if !target(__${_this}__)
|
|
__${_this}__: .NOTMAIN
|
|
|
|
.if defined(SUBDIR)
|
|
|
|
.if ${.MAKE.LEVEL} == 0 && ${MK_DIRDEPS_BUILD:Uno} == "yes"
|
|
.include <meta.subdir.mk>
|
|
# keep everyone happy
|
|
_SUBDIRUSE:
|
|
.elif !commands(_SUBDIRUSE) && !defined(NO_SUBDIR) && !defined(NOSUBDIR)
|
|
.-include <local.subdir.mk>
|
|
.if !target(.MAIN)
|
|
.MAIN: all
|
|
.endif
|
|
|
|
ECHO_DIR ?= echo
|
|
.ifdef SUBDIR_MUST_EXIST
|
|
MISSING_DIR=echo "Missing ===> ${.CURDIR}/$$_dir"; exit 1
|
|
.else
|
|
MISSING_DIR=echo "Skipping ===> ${.CURDIR}/$$_dir"; exit 0
|
|
.endif
|
|
|
|
# the actual implementation
|
|
# our target should be of the form ${_target}-${_dir}
|
|
_SUBDIR_USE: .USE
|
|
@Exists() { test -f $$1; }; \
|
|
_dir=${.TARGET:C/^.*-//} \
|
|
_target=${.TARGET:C/-.*//:S/real//:S/.depend/depend/}; \
|
|
if ! Exists ${.CURDIR}/$$_dir/[mM]akefile; then \
|
|
${MISSING_DIR}; \
|
|
fi; \
|
|
if test X"${_THISDIR_}" = X""; then \
|
|
_nextdir_="$$_dir"; \
|
|
else \
|
|
_nextdir_="$${_THISDIR_}/$$_dir"; \
|
|
fi; \
|
|
${ECHO_DIR} "===> $${_nextdir_} ($$_target)"; \
|
|
(cd ${.CURDIR}/$$_dir && \
|
|
${.MAKE} _THISDIR_="$${_nextdir_}" $$_target)
|
|
|
|
.if !target(install)
|
|
.if !target(beforeinstall)
|
|
beforeinstall:
|
|
.endif
|
|
.if !target(afterinstall)
|
|
afterinstall:
|
|
.endif
|
|
install: maninstall
|
|
maninstall: afterinstall
|
|
afterinstall: realinstall
|
|
realinstall: beforeinstall _SUBDIRUSE
|
|
.endif
|
|
|
|
# the interface from others
|
|
# this may require additions to SUBDIR_TAREGTS
|
|
_SUBDIRUSE: .USE subdir-${.TARGET:C/-.*//:S/real//:S/.depend/depend/}
|
|
|
|
SUBDIR_TARGETS += \
|
|
all \
|
|
clean \
|
|
cleandir \
|
|
includes \
|
|
install \
|
|
depend \
|
|
lint \
|
|
obj \
|
|
tags \
|
|
etags
|
|
|
|
.if ${SUBDIR} == "@auto"
|
|
SUBDIR = ${echo ${.CURDIR}/*/[Mm]akefile:L:sh:H:T:O:N\*}
|
|
.endif
|
|
|
|
__subdirs =
|
|
.for d in ${SUBDIR}
|
|
.if $d != ".WAIT" && exists(${.CURDIR}/$d.${MACHINE})
|
|
__subdirs += $d.${MACHINE}
|
|
.else
|
|
__subdirs += $d
|
|
.endif
|
|
.endfor
|
|
|
|
.for t in ${SUBDIR_TARGETS:O:u}
|
|
__subdir_$t =
|
|
.for d in ${__subdirs}
|
|
.if $d == ".WAIT"
|
|
__subdir_$t += $d
|
|
.elif !commands($t-$d)
|
|
$t-$d: .PHONY .MAKE _SUBDIR_USE
|
|
__subdir_$t += $t-$d
|
|
.endif
|
|
.endfor
|
|
subdir-$t: .PHONY ${__subdir_$t}
|
|
$t: subdir-$t
|
|
.endfor
|
|
|
|
.else
|
|
_SUBDIRUSE:
|
|
.endif # SUBDIR
|
|
|
|
.include <own.mk>
|
|
.if make(destroy*)
|
|
.include <obj.mk>
|
|
.endif
|
|
.endif
|
|
# make sure this exists
|
|
all:
|
|
|
|
.endif
|