summaryrefslogtreecommitdiff
path: root/mk/bsd.utils.mk
blob: 6f4ea74e85a8d0156a61c729a730f2666a30431f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# $NetBSD: bsd.utils.mk,v 1.14 2022/04/13 22:02:36 rillig Exp $
#
# This Makefile fragment is included by bsd.pkg.mk and defines utility
# and otherwise miscellaneous variables and targets.
#

# DEPENDS_TYPE
#	Used by the "show-depends-pkgpaths" target to specify which
#	class of direct dependencies to output.  The special value "all"
#	means to output every dependency.
#
#	Possible:
#		all		= build
#				+ TEST_DEPENDS (if PKGSRC_RUN_TEST)
#				+ install
#		build		= BOOTSTRAP_DEPENDS
#				+ TOOL_DEPENDS
#				+ BUILD_DEPENDS
#		install		= DEPENDS
#		package		XXX: same as install?
#
#	Default:
#		all
#
# Keywords: depends dependencies
DEPENDS_TYPE?=  all
.if !empty(DEPENDS_TYPE:Mbuild) || !empty(DEPENDS_TYPE:Mall)
_ALL_DEPENDS+=	${BOOTSTRAP_DEPENDS} ${BUILD_DEPENDS} ${TOOL_DEPENDS}
.  if !empty(PKGSRC_RUN_TEST:M[yY][eE][sS])
_ALL_DEPENDS+=	${TEST_DEPENDS}
.  endif
.endif
.if !empty(DEPENDS_TYPE:Minstall) || !empty(DEPENDS_TYPE:Mpackage) || \
    !empty(DEPENDS_TYPE:Mall)
_ALL_DEPENDS+=	${DEPENDS}
.endif

# _PKG_PATHS_CMD canonicalizes package paths so that they're relative to
# ${PKGSRCDIR} and also verifies that they exist within pkgsrc.
#
_PKG_PATHS_CMD=								\
	${PKGSRC_SETENV} ECHO=${TOOLS_ECHO:Q} PKGSRCDIR=${PKGSRCDIR:Q}	\
		PWD_CMD=${TOOLS_PWD_CMD:Q} TEST=${TOOLS_TEST:Q}		\
	${SH} ${.CURDIR}/../../mk/scripts/pkg_path

# show-depends-dirs:
# show-depends-pkgpaths:
#	Lists the PKGPATH of all direct dependencies of the current
#	package.
#
#	Parameters:
#		PKGSRC_RUN_TEST
#			Whether to include test dependencies as well.
#
#	See also:
#		show-depends
#		show-depends-recursive
#
# Keywords: depends dependencies
.PHONY: show-depends-dirs show-depends-pkgpaths
show-depends-dirs show-depends-pkgpaths:
	@${_PKG_PATHS_CMD} ${_ALL_DEPENDS:C/^[^:]*://:O:u}

# _DEPENDS_WALK_CMD holds the command (sans arguments) to walk the
# dependency graph for a package.
#
# XXX Need to handle TOOL_DEPENDS/BUILD_DEPENDS split and cross-compilation.
#
_DEPENDS_WALK_MAKEFLAGS?=	${MAKEFLAGS}
_DEPENDS_WALK_CMD=							\
	${PKGSRC_SETENV} ECHO=${TOOLS_ECHO:Q} MAKE=${MAKE:Q}		\
		MAKEFLAGS=${_DEPENDS_WALK_MAKEFLAGS:Q}			\
		PKGSRCDIR=${PKGSRCDIR:Q} TEST=${TOOLS_TEST:Q}		\
	${AWK} -f ${.CURDIR}/../../mk/scripts/depends-depth-first.awk --

# show-depends-recursive:
#	Lists the PKGPATH of all direct or indirect dependencies of the
#	current package.
#
#	Parameters:
#		DEPENDS_TYPE
#			all, build, install or package
#		PKGSRC_RUN_TEST
#			Whether to include test dependencies as well.
#
#	See also:
#		show-depends
#		show-depends-pkgpaths
#
# Keywords: depends dependencies recursive indirect transitive
show-depends-recursive: .PHONY
	${RUN} ${_DEPENDS_WALK_CMD} ${PKGPATH}