summaryrefslogtreecommitdiff
path: root/mk/pbulk/pbulk-index.mk
blob: 4f4fa4f9737ebd04ea03d915fd1a13287a66b47c (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
93
94
95
96
97
98
99
100
101
102
103
104
105
#	$NetBSD: pbulk-index.mk,v 1.8 2008/04/18 12:24:21 joerg Exp $

# This Makefile fragment is included by bsd.pkg.mk and provides all
# variables and targets related to the parallel bulk build
# tree-scanning code.
#
# The following are the "public" targets provided by this module:
#
#	pbulk-index
#	pbulk-index-item

#
# _PBULK_MULTI lists the multi-package variable.
# For each class the following variables are provided:
#	_PBULK_MULTI_LIST.foo enumerates the supported settings
#	_PBULK_MULTI_VAR.foo forces a specific version
#	_PBULK_MULTI_DEFAULT.foo contains the default value

_PBULK_MULTI?=	apache php python

_PBULK_MULTI_LIST.apache=	PKG_APACHE_ACCEPTED
_PBULK_MULTI_VAR.apache=	PKG_APACHE
_PBULK_MULTI_DEFAULT.apache=	PKG_APACHE_DEFAULT

_PBULK_MULTI_LIST.php=		PHP_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.php=		PHP_VERSION_REQD
_PBULK_MULTI_DEFAULT.php=	PHP_VERSION_DEFAULT

_PBULK_MULTI_LIST.python=	_PYTHON_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.python=	PYTHON_VERSION_REQD
_PBULK_MULTI_DEFAULT.python=	PYTHON_VERSION_DEFAULT

.PHONY: pbulk-index pbulk-index-item

# Find all classes with more than one supported setting.
# Undefined list variables are handled like a single default value,
# empty list variables are checked afterwards.
#
# For each such class, reorder the supported values to list
# the default value first.  This is important for packages that
# don't follow the module naming conventions.

.for _t in ${_PBULK_MULTI}
.  if ${${_PBULK_MULTI_LIST.${_t}}:Unone:[\#]} != 1 && !empty(${_PBULK_MULTI_LIST.${_t}})
_PBULK_MULTI_NEEDED:=	${_t} ${_PBULK_MULTI_NEEDED}
_PBULK_SORTED_LIST.${_t}:= \
	${${_PBULK_MULTI_LIST.${_t}}:M${${_PBULK_MULTI_DEFAULT.${_t}}}} \
	${${_PBULK_MULTI_LIST.${_t}}:N${${_PBULK_MULTI_DEFAULT.${_t}}}}
.  endif
.endfor

.if !defined(_PBULK_MULTI_NEEDED)
# No multi-package handling needed, directly print the item.
pbulk-index: pbulk-index-item
.else
#
# Use an ODE for loop to compute the carthesian product of
# the support settings.  This expands to something like
#
#	for apache in apache13 apache2; do \
#		_PBULK_MULTI_VALUE.apache=$apache; \
#		export _PBULK_MULTI_VALUE.apache; \
#		PKG_APACHE=$apache; \
#		export PKG_APACHE; \
#		for php in 4 5; do \
#		_PBULK_MULTI_VALUE.php=$php; \
#		export _PBULK_MULTI_VALUE.php; \
#		PHP_VERSION_REQD=$php; \
#		export PHP_VERSION_REQD;
#
# Because the ODE expansion happens in the same shell instance,
# make gets the environment variables in the inner-most loop.
# A second ODE for loop is used to close the shell for loops.
#
pbulk-index:
	@set -e; ${_PBULK_MULTI_NEEDED:@._t.@\
		for ${._t.} in ${_PBULK_SORTED_LIST.${._t.}}; do \
			_PBULK_MULTI_VALUE_${._t.}=$$${._t.}; \
			export _PBULK_MULTI_VALUE_${._t.}; \
			${_PBULK_MULTI_VAR.${._t.}}=$$${._t.}; \
			export ${_PBULK_MULTI_VAR.${._t.}};@} \
	${MAKE} pbulk-index-item \
		${_PBULK_MULTI_NEEDED:@._t.@;done@}
.endif

pbulk-index-item:
	@echo "PKGNAME="${PKGNAME:Q}
	@echo "ALL_DEPENDS="${_ALL_DEPENDS:Q}
	@echo "PKG_SKIP_REASON="${PKG_SKIP_REASON:Q}
	@echo "PKG_FAIL_REASON="${PKG_FAIL_REASON:Q}
	@echo "NO_BIN_ON_FTP="${NO_BIN_ON_FTP:Q}
	@echo "RESTRICTED="${RESTRICTED:Q}
	@echo "CATEGORIES="${CATEGORIES:Q}
	@echo "MAINTAINER="${MAINTAINER:Q}
	@echo "USE_DESTDIR="${_USE_DESTDIR:Q}
.if defined(_PBULK_MULTI_NEEDED)
	@printf "MULTI_VERSION="
.for _t in ${_PBULK_MULTI_NEEDED}
	@printf " %s=%s" ${_PBULK_MULTI_VAR.${_t}:Q} ${_PBULK_MULTI_VALUE_${_t}:Q}
.endfor
	@printf "\n"
.endif

pbulk-save-wrkdir:
	${RUN} cd ${WRKDIR} && ${TAR} cfz ${INTO:Q} .