#!/bin/sh

AWK=/usr/bin/awk
ECHO=/bin/echo
EGREP=/usr/bin/egrep
FILE=/usr/bin/file
FIND=/usr/bin/find
GREP=/usr/bin/grep
LDD=/usr/bin/ldd
PKG_INFO=/usr/sbin/pkg_info
RM=/bin/rm
SED=/usr/bin/sed
SORT=/usr/bin/sort
TOUCH=/usr/bin/touch
UNAME=/usr/bin/uname
UNIQ=/usr/bin/uniq
XARGS=/usr/bin/xargs

LOCALDIR=/usr/local
PORTSDIR=/usr/ports
PKGDIR=pkg
TMPDIR=/tmp
X11DIR=/usr/X11R6

BINLIST=${TMPDIR}/.binlist.$$
PLIST=PLIST

trap "${RM} -f ${BINLIST} ; exit 1" 2

should_update_binary() {
	( ${LDD} "${binary}" | ${EGREP} -w 'libc.so.[123]' ) 2>/dev/null >/dev/null
	if [ $? = 0 ]; then
		should_update=1
	else
		should_update=0
	fi
}

binaries=`( ${PKG_INFO} -aL 2>/dev/null ) | ${EGREP} '^/' | ${SORT} | ${UNIQ} | ${XARGS} ${FILE} | ${EGREP} 'executable.*FreeBSD.*dynamically' | ${AWK} -F ':' '{print $1}'`
binupdates=''
${TOUCH} ${BINLIST}
for binary in ${binaries}; do
	should_update_binary
	if [ ${should_update} = 1 ]; then
		${ECHO} ${binary} | ${SED} -e "s@^${LOCALDIR}/@@" -e "s@^${X11DIR}/@@" >> ${BINLIST}
	fi
done

if [ -L ${PORTSDIR} ]; then
	PORTSDIR="${PORTSDIR}/."
fi
${FIND} ${PORTSDIR} -name "${PLIST}" -o -name "${PLIST}".`${UNAME} -m` | ${XARGS} ${GREP} -w -f ${BINLIST} | ${SED} -e "s@^${PORTSDIR}/@@" -e "s@/${PKGDIR}/.*@@" | ${SORT} | ${UNIQ}
${RM} -f ${BINLIST}
