#!/bin/sh
#Posted Feb.25,2015 to FreeBSD-current ML by Mark Millard
#Modified by Tomoaki AOKI to generate upgrading script for pkg_replace.
# Define files to (temporarily) generate.
OLDLIB="base_ossl-fips"
CHECKPREFIX1="/usr/lib/ossl-modules/fips"
CHECKFORRE1="${CHECKPREFIX1}[^ ]*\.so"
# CHECKPREFIX2="/lib/libnv"
# CHECKFORRE2="${CHECKPREFIX2}[^ ]*\.so\.0"
# CHECKPREFIX3="/usr/lib32/libcrypto"
# CHECKFORRE3="${CHECKPREFIX3}[^ ]*\.so\.111"
# CHECKPREFIX4="/usr/lib32/libssl"
# CHECKFORRE4="${CHECKPREFIX4}[^ ]*\.so\.111"
DETECTED="/tmp/${OLDLIB}deps0"
NeedUpdate="/tmp/${OLDLIB}deps"
ActualScript="/tmp/rebuild_${OLDLIB}_deps.sh"
# Define pre processing procedure if needed (optional).
PreUpdate="CurDir=\`pwd\`"
# Define port updating program of your choice.
UpdateProgram="pkg_replace -l /usr/ports/${OLDLIB}_deps-\`date \"+%Y%m%d%H%M%S\"\`.log -c -m 'WITH+=NVIDIA,NVIDIA_GL DISABLE_VULNERABILITIES=yes' -v -W -w -b -f"
# Define post processing procedure if needed (optional).
PostUpdate="cd \${CurDir} && portsclean -C"
if [ -f ${DETECTED} ] ; then
rm ${DETECTED}
fi
if [ -f ${NeedUpdate} ] ; then
rm ${NeedUpdate}
fi
## Replacing single quotes with double quotes for egrep allowed using shell variable.
find /usr/local/*bin* /usr/local/lib* -type f \
| xargs ldd -f '%p %A\n' 2>&1 | grep "^${CHECKFORRE1}" | cut -w -f2 \
| xargs ldd -a | egrep "(^/.*:$| ${CHECKFORRE1} )" \
| grep -B1 " ${CHECKPREFIX1}" | grep "^/.*:$" | sed -e's;:$;;' \
| xargs pkg which -q -o | sort -u > ${DETECTED}
# find /usr/local/*bin* /usr/local/lib* -type f \
# | xargs ldd -f '%p %A\n' 2>&1 | grep "^${CHECKFORRE2}" | cut -w -f2 \
# | xargs ldd -a | egrep "(^/.*:$| ${CHECKFORRE2} )" \
# | grep -B1 " ${CHECKPREFIX2}" | grep "^/.*:$" | sed -e's;:$;;' \
# | xargs pkg which -q -o | sort -u >> ${DETECTED}
# find /usr/local/*bin* /usr/local/lib* -type f \
# | xargs ldd -f '%p %A\n' 2>&1 | grep "^${CHECKFORRE3}" | cut -w -f2 \
# | xargs ldd -a | egrep "(^/.*:$| ${CHECKFORRE3} )" \
# | grep -B1 " ${CHECKPREFIX3}" | grep "^/.*:$" | sed -e's;:$;;' \
# | xargs pkg which -q -o | sort -u >> ${DETECTED}
# find /usr/local/*bin* /usr/local/lib* -type f \
# | xargs ldd -f '%p %A\n' 2>&1 | grep "^${CHECKFORRE4}" | cut -w -f2 \
# | xargs ldd -a | egrep "(^/.*:$| ${CHECKFORRE4} )" \
# | grep -B1 " ${CHECKPREFIX4}" | grep "^/.*:$" | sed -e's;:$;;' \
# | xargs pkg which -q -o | sort -u >> ${DETECTED}
# Remove duplicate.
cat ${DETECTED} | sort | uniq > ${NeedUpdate}
# Generate actual script. if you want other options, other update tool, rewrite as you like.
echo "#!/bin/sh" > ${ActualScript}
echo ${PreUpdate} >> ${ActualScript}
echo -n ${UpdateProgram} >> ${ActualScript}
cat ${NeedUpdate} | while read TARGET
do
# The line containing only "the" means that no port origin is detected.
if [ "the" = ${TARGET} ] ; then
continue
fi
echo -n " " >> ${ActualScript}
echo -n ${TARGET} >> ${ActualScript}
done
echo "" >> ${ActualScript}
echo ${PostUpdate} >> ${ActualScript}
chmod 754 ${ActualScript}
echo "The actual script is generated as ${ActualScript}."
echo "If you don\'t want huge port like libreoffice, chromium etc., manually remove"
echo "them from generated script."
echo "Intentionally kept temporary file ${NeedUpdate} for ease of confirmation."
echo "Note that the line containing only \"the\" means that no port origin is detected"
echo "for any of binaries."