pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/mk Add two targets, pbulk-index and pbulk-index-item.
details: https://anonhg.NetBSD.org/pkgsrc/rev/85e22f74d540
branches: trunk
changeset: 528607:85e22f74d540
user: joerg <joerg%pkgsrc.org@localhost>
date: Wed May 09 23:33:51 2007 +0000
description:
Add two targets, pbulk-index and pbulk-index-item.
pbulk-index-item prints a number of variables used by the parallel bulk
build code during either the build, the report or the upload phase.
pbulk-index checks whether multiple versions of the current package
could be build (e.g. because multiple Python versions are supported) and
uses pbulk-index-item for each possible combination.
Thanks to David Laight for explaining the different between using :[#]
in the body of a make target and in a clause of an .if.
Powered-by: Google SoC 2007.
diffstat:
mk/bsd.pkg.mk | 6 ++-
mk/bsd.pkg.subdir.mk | 4 +-
mk/pbulk/pbulk-index.mk | 101 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 108 insertions(+), 3 deletions(-)
diffs (143 lines):
diff -r 019276f89551 -r 85e22f74d540 mk/bsd.pkg.mk
--- a/mk/bsd.pkg.mk Wed May 09 23:21:11 2007 +0000
+++ b/mk/bsd.pkg.mk Wed May 09 23:33:51 2007 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.pkg.mk,v 1.1910 2007/04/01 19:02:14 kristerw Exp $
+# $NetBSD: bsd.pkg.mk,v 1.1911 2007/05/09 23:33:51 joerg Exp $
#
# This file is in the public domain.
#
@@ -812,6 +812,10 @@
${_PKG_SILENT}${_PKG_DEBUG}${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.endfor
+.if make(pbulk-index) || make(pbulk-index-item)
+.include "${.PARSEDIR}/pbulk/pbulk-index.mk"
+.endif
+
.if defined(PKG_DEVELOPER)
. include "${.PARSEDIR}/misc/developer.mk"
.endif
diff -r 019276f89551 -r 85e22f74d540 mk/bsd.pkg.subdir.mk
--- a/mk/bsd.pkg.subdir.mk Wed May 09 23:21:11 2007 +0000
+++ b/mk/bsd.pkg.subdir.mk Wed May 09 23:33:51 2007 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.pkg.subdir.mk,v 1.65 2006/07/27 21:46:45 jlam Exp $
+# $NetBSD: bsd.pkg.subdir.mk,v 1.66 2007/05/09 23:33:52 joerg Exp $
# Derived from: FreeBSD Id: bsd.port.subdir.mk,v 1.19 1997/03/09 23:10:56 wosch Exp
# from: @(#)bsd.subdir.mk 5.9 (Berkeley) 2/1/91
#
@@ -90,7 +90,7 @@
show-downlevel show-pkgsrc-dir show-var show-vars \
bulk-install bulk-package fetch-list-one-pkg \
fetch-list-recursive update clean-update lint \
- check-vulnerable \
+ check-vulnerable pbulk-index \
${PKG_MISC_TARGETS}
.if !target(__target)
.PHONY: ${__target}
diff -r 019276f89551 -r 85e22f74d540 mk/pbulk/pbulk-index.mk
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mk/pbulk/pbulk-index.mk Wed May 09 23:33:51 2007 +0000
@@ -0,0 +1,101 @@
+# $NetBSD: pbulk-index.mk,v 1.1 2007/05/09 23:33:52 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:
+ @${_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}
+.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
Home |
Main Index |
Thread Index |
Old Index