これは,$WRKDIR/.package_done.$PORTNAME._usr_localというクッキーをtouchしとけば,そのportのpackage作成はスルーされるので,
*_DEPENDSなport全てについて$PACKAGES/All/*にそのportの$PKGNAMEが無いかどうかを調べる
あれば ⇒ (2)
$WRKDIR/.package_done.$PORTNAME._usr_localをtouchを`make package-recursive'する前に行なう.
とりあえず↓の set-pkgbuilt を使って `set-pkgbuilt -r portdir' す れば良い.
: ${PORTSDEFAULTDIR:=/usr/ports}
: ${PORTSDIRPREFIX:=/var/ports}
: ${PORTSDIR:=$PORTSDEFAULTDIR}
: ${PACKAGESPREFIX:=$PORTSDIRPREFIX}
: ${PACKAGES:=$PACKAGESPREFIX/packages}
: ${PKGSUFX:=.pkg}
_f_get_pkgbuiltports_awk='
BEGIN {
if (ports) { split(ports, port, /[[:space:]]+/) }
found = 0
}
{
if (ports) { for (i in port) { if ($2 != port[i]) { print $0 } else { found = 1 }}} else { print $0 }
}
END {
exit ! found
}'
get-wrkdir()
{
local __function__=get-wrkdir \
__port=$1
(cd $PORTSDIR/$__port; make -VWRKDIR)
}
get-alldependslist()
{
local __port=$1
(cd $PORTSDIR/$__port; make -ki all-depends-list 2> /dev/null | egrep "^$PORTSDIR") | sed -Ee "s,^$PORTSDIR/,,"
}
set-pkgbuilt()
{
local __function__=set-pkgbuilt \
__mode=normal \
__pkgname \
__port \
__portname \
__ports \
__wrkdir
while [ $# -gt 0 ]; do
case $1 in
-r)
__mode=recursive
;;
-*)
error "unknown option '$1'"
;;
*)
break
;;
esac
shift
done
__port=$1
case $__mode in
recursive)
get-alldepends $__port | \
awk -v ports="$NONPKGBUILTPORTS" "$_f_get_pkgbuiltports_awk" | \
while read __pkgname __port; do
putdebug 1 0 __pkgname __port
__portname=$(portname $__port)
if [ -f $PACKAGES/All/$__pkgname$PKGSUFX ]; then
__wrkdir=$(get-wrkdir $__port)
runc mkdir -p $__wrkdir
runc touch $__wrkdir/.package_done.$__portname._usr_local
fi
done
;;
*)
__pkgname=$(pkgname $__port)
if $(echo "$__pkgname $__port" | \
awk -v ports="$NONPKGBUILTPORTS" "$_f_get_pkgbuiltports_awk" > /dev/null); then
return 0
fi
__portname=$(portname $__port)
if [ -f $PACKAGES/All/$__pkgname$PKGSUFX ]; then
__wrkdir=$(get-wrkdir $__port)
mkdir -p $__wrkdir
touch $__wrkdir/.package_done.$__portname._usr_local
fi
;;
esac
}