pkgsrc/mk/pbulk/pbulk-index.mk

141 lines
4.6 KiB
Makefile

# $NetBSD: pbulk-index.mk,v 1.28 2023/02/12 04:13:33 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 lua mysql php postgresql python ruby
_PBULK_MULTI_LIST.apache= PKG_APACHE_ACCEPTED
_PBULK_MULTI_VAR.apache= PKG_APACHE
_PBULK_MULTI_DEFAULT.apache= PKG_APACHE_DEFAULT
_PBULK_MULTI_LIST.lua= _LUA_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.lua= LUA_VERSION_REQD
_PBULK_MULTI_DEFAULT.lua= LUA_VERSION_DEFAULT
_PBULK_MULTI_LIST.mysql= MYSQL_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.mysql= MYSQL_VERSION_REQD
_PBULK_MULTI_DEFAULT.mysql= MYSQL_VERSION_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.postgresql= PGSQL_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.postgresql= PGSQL_VERSION_REQD
_PBULK_MULTI_DEFAULT.postgresql= PGSQL_VERSION_DEFAULT
_PBULK_MULTI_LIST.python= _PYTHON_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.python= PYTHON_VERSION_REQD
_PBULK_MULTI_DEFAULT.python= PYTHON_VERSION_DEFAULT
_PBULK_MULTI_LIST.ruby= _RUBY_VERSIONS_ACCEPTED
_PBULK_MULTI_VAR.ruby= RUBY_VERSION_REQD
_PBULK_MULTI_DEFAULT.ruby= RUBY_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.
.if !defined(NO_MULTI_PKG)
. for _t in ${_PBULK_MULTI}
. if defined(${_PBULK_MULTI_LIST.${_t}}) && !empty(${_PBULK_MULTI_LIST.${_t}})
. if ${${_PBULK_MULTI_LIST.${_t}}:[\#]} != 1 || \
!empty(${_PBULK_MULTI_LIST.${_t}}:N${_PBULK_MULTI_DEFAULT.${_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
. endif
. endfor
.endif
.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 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_SCAN_DEPENDS= ${.MAKE.MAKEFILES}
.if defined(PBULK_CACHE_DIRECTORY)
_PBULK_SCAN_DEPENDS:= ${_PBULK_SCAN_DEPENDS:N${PBULK_CACHE_DIRECTORY}/*}
.endif
.if defined(SCAN_DEPENDS_SKIP)
. for _dir_ in ${SCAN_DEPENDS_SKIP}
_PBULK_SCAN_DEPENDS:= ${_PBULK_SCAN_DEPENDS:N${_dir_}}
. endfor
.endif
pbulk-index-item:
${RUN} { \
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}; \
echo "BOOTSTRAP_PKG="${BOOTSTRAP_PKG}; \
echo "USERGROUP_PHASE="${USERGROUP_PHASE:Q}; \
echo "SCAN_DEPENDS="${_PBULK_SCAN_DEPENDS:O:u:Q}; \
[ -z ${PBULK_WEIGHT:Q} ] || echo "PBULK_WEIGHT="${PBULK_WEIGHT:Q}; \
}
.if defined(_PBULK_MULTI_NEEDED)
${RUN} { \
printf "MULTI_VERSION="; \
${_PBULK_MULTI_NEEDED:@_t@ \
printf " %s=%s" ${_PBULK_MULTI_VAR.${_t}:Q} ${_PBULK_MULTI_VALUE_${_t}:Q}; \
@} \
printf "\n"; \
}
.endif
pbulk-save-wrkdir:
${RUN} [ ! -d ${WRKDIR} ] || cd ${WRKDIR} && ${TAR} cfz ${INTO:Q} .