Changeset View
Changeset View
Standalone View
Standalone View
head/Mk/Scripts/check-stagedir.sh
Show First 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | for option in DOCS EXAMPLES; do | ||||
*\ ${option}\ *) want_option=1 ;; | *\ ${option}\ *) want_option=1 ;; | ||||
esac | esac | ||||
[ ${want_option} -eq 0 ] && \ | [ ${want_option} -eq 0 ] && \ | ||||
sed_portdocsexamples="${sed_portdocsexamples} /^%%PORT${option}%%/d;" | sed_portdocsexamples="${sed_portdocsexamples} /^%%PORT${option}%%/d;" | ||||
done | done | ||||
unset PORT_OPTIONS | unset PORT_OPTIONS | ||||
fi | fi | ||||
sed_plist_sub=$(echo "${PLIST_SUB_SED}" | /bin/sh ${SCRIPTSDIR}/plist_sub_sed_sort.sh) | sed_plist_sub=$(mktemp -t sed_plist_sub) | ||||
# We only exit 0 or exit 1 | |||||
trap "rm -f ${sed_plist_sub}" EXIT 1 | |||||
echo "${PLIST_SUB_SED}" | /bin/sh ${SCRIPTSDIR}/plist_sub_sed_sort.sh ${sed_plist_sub} | |||||
unset PLIST_SUB_SED | unset PLIST_SUB_SED | ||||
# Used for generate_plist | # Used for generate_plist | ||||
sed_files_gen="s!^${PREFIX}/!!g; ${sed_plist_sub} \ | sed_files_gen="${sed_portdocsexamples} /^share\/licenses/d; \ | ||||
${sed_portdocsexamples} /^share\/licenses/d; \ | |||||
\#${LOCALBASE}/lib/debug#d;" | \#${LOCALBASE}/lib/debug#d;" | ||||
sed_dirs_gen="s!^${PREFIX}/!!g; ${sed_plist_sub} s,^,@dir ,; \ | sed_dirs_gen="s,^,@dir ,; \ | ||||
${sed_portdocsexamples} \ | ${sed_portdocsexamples} \ | ||||
/^@dir share\/licenses/d;" | /^@dir share\/licenses/d;" | ||||
# These prevent ignoring DOCS/EXAMPLES dirs with sed_portdocsexamples | # These prevent ignoring DOCS/EXAMPLES dirs with sed_portdocsexamples | ||||
sed_files="s!^${PREFIX}/!!g; ${sed_plist_sub} /^share\/licenses/d; \ | sed_files="/^share\/licenses/d; \ | ||||
\#${LOCALBASE}/lib/debug#d;" | \#${LOCALBASE}/lib/debug#d;" | ||||
sed_dirs="s!^${PREFIX}/!!g; ${sed_plist_sub} s,^,@dir ,; \ | sed_dirs="s,^,@dir ,; \ | ||||
/^@dir share\/licenses/d;" | /^@dir share\/licenses/d;" | ||||
} | } | ||||
# Generate plist from staged files | # Generate plist from staged files | ||||
generate_plist() { | generate_plist() { | ||||
: >${WRKDIR}/.staged-plist | : >${WRKDIR}/.staged-plist | ||||
### HANDLE FILES | ### HANDLE FILES | ||||
find ${STAGEDIR} -type f -o -type l | sort | \ | find ${STAGEDIR} -type f -o -type l | sort | \ | ||||
sed -e "s,${STAGEDIR},," >${WRKDIR}/.staged-files | sed -e "s,${STAGEDIR},," >${WRKDIR}/.staged-files | ||||
comm -13 ${WRKDIR}/.plist-files ${WRKDIR}/.staged-files | \ | comm -13 ${WRKDIR}/.plist-files ${WRKDIR}/.staged-files | \ | ||||
sed -e "${sed_files_gen}" \ | sed -e "s!^${PREFIX}/!!g;" -f "${sed_plist_sub}" -e "${sed_files_gen}" \ | ||||
>>${WRKDIR}/.staged-plist || : | >>${WRKDIR}/.staged-plist || : | ||||
### HANDLE DIRS | ### HANDLE DIRS | ||||
cat ${WRKDIR}/.plist-dirs-unsorted ${WRKDIR}/.mtree \ | cat ${WRKDIR}/.plist-dirs-unsorted ${WRKDIR}/.mtree \ | ||||
| sort -u >${WRKDIR}/.traced-dirs | | sort -u >${WRKDIR}/.traced-dirs | ||||
find ${STAGEDIR} -type d | sed -e "s,^${STAGEDIR},,;/^$/d" | sort \ | find ${STAGEDIR} -type d | sed -e "s,^${STAGEDIR},,;/^$/d" | sort \ | ||||
>${WRKDIR}/.staged-dirrms-sorted | >${WRKDIR}/.staged-dirrms-sorted | ||||
find -s -d ${STAGEDIR}${PREFIX} -type d -empty | sed -e "s,^${STAGEDIR},,;\,^${PREFIX}$,d;/^$/d" \ | find -s -d ${STAGEDIR}${PREFIX} -type d -empty | sed -e "s,^${STAGEDIR},,;\,^${PREFIX}$,d;/^$/d" \ | ||||
>${WRKDIR}/.staged-dirs-dfs | >${WRKDIR}/.staged-dirs-dfs | ||||
find -s -d ${STAGEDIR} -type d ! -path "${STAGEDIR}${PREFIX}/*" | sed -e "s,^${STAGEDIR},,;\,^${PREFIX}$,d;/^$/d" \ | find -s -d ${STAGEDIR} -type d ! -path "${STAGEDIR}${PREFIX}/*" | sed -e "s,^${STAGEDIR},,;\,^${PREFIX}$,d;/^$/d" \ | ||||
>>${WRKDIR}/.staged-dirs-dfs | >>${WRKDIR}/.staged-dirs-dfs | ||||
sort ${WRKDIR}/.staged-dirs-dfs >${WRKDIR}/.staged-dirs-sorted | sort ${WRKDIR}/.staged-dirs-dfs >${WRKDIR}/.staged-dirs-sorted | ||||
awk '{print FNR, $0}' ${WRKDIR}/.staged-dirs-dfs \ | awk '{print FNR, $0}' ${WRKDIR}/.staged-dirs-dfs \ | ||||
>${WRKDIR}/.staged-dirs-dfs-sorted | >${WRKDIR}/.staged-dirs-dfs-sorted | ||||
# Find all staged dirs and then sort them by depth-first (find -d -s) | # Find all staged dirs and then sort them by depth-first (find -d -s) | ||||
comm -13 ${WRKDIR}/.traced-dirs ${WRKDIR}/.staged-dirs-sorted \ | comm -13 ${WRKDIR}/.traced-dirs ${WRKDIR}/.staged-dirs-sorted \ | ||||
| sort_dfs | sed "${sed_dirs_gen}" \ | | sort_dfs | sed -e "s!^${PREFIX}/!!g;" -f "${sed_plist_sub}" -e "${sed_dirs_gen}" \ | ||||
>>${WRKDIR}/.staged-plist || : | >>${WRKDIR}/.staged-plist || : | ||||
} | } | ||||
# Check for files in STAGEDIR missing from plist | # Check for files in STAGEDIR missing from plist | ||||
check_orphans_from_plist() { | check_orphans_from_plist() { | ||||
local ret=0 | local ret=0 | ||||
echo "===> Checking for items in STAGEDIR missing from pkg-plist" | echo "===> Checking for items in STAGEDIR missing from pkg-plist" | ||||
Show All 37 Lines | |||||
} | } | ||||
# Check for items in plist not in STAGEDIR (pkg lstat(2) errors) | # Check for items in plist not in STAGEDIR (pkg lstat(2) errors) | ||||
check_missing_plist_items() { | check_missing_plist_items() { | ||||
local ret=0 | local ret=0 | ||||
echo "===> Checking for items in pkg-plist which are not in STAGEDIR" | echo "===> Checking for items in pkg-plist which are not in STAGEDIR" | ||||
: >${WRKDIR}/.invalid-plist-missing | : >${WRKDIR}/.invalid-plist-missing | ||||
comm -23 ${WRKDIR}/.plist-files-no-comments ${WRKDIR}/.staged-files | \ | comm -23 ${WRKDIR}/.plist-files-no-comments ${WRKDIR}/.staged-files | \ | ||||
sed -e "${sed_files}" \ | sed -e "s!^${PREFIX}/!!g;" -f "${sed_plist_sub}" -e "${sed_files}" \ | ||||
>>${WRKDIR}/.invalid-plist-missing || : | >>${WRKDIR}/.invalid-plist-missing || : | ||||
# Look for directories, then sort them by DFS. Must create the dirs | # Look for directories, then sort them by DFS. Must create the dirs | ||||
# so find -ds can be used to sort them. | # so find -ds can be used to sort them. | ||||
rm -rf ${WRKDIR}/.missing-dirs > /dev/null 2>&1 || : | rm -rf ${WRKDIR}/.missing-dirs > /dev/null 2>&1 || : | ||||
mkdir ${WRKDIR}/.missing-dirs | mkdir ${WRKDIR}/.missing-dirs | ||||
comm -23 ${WRKDIR}/.plist-dirs-sorted-no-comments \ | comm -23 ${WRKDIR}/.plist-dirs-sorted-no-comments \ | ||||
${WRKDIR}/.staged-dirrms-sorted > ${WRKDIR}/.missing-plist-dirs | ${WRKDIR}/.staged-dirrms-sorted > ${WRKDIR}/.missing-plist-dirs | ||||
# Creates the dirs in WRKDIR/.missing-dirs and ensure spaces are | # Creates the dirs in WRKDIR/.missing-dirs and ensure spaces are | ||||
# quoted. | # quoted. | ||||
sed -e "s,^,${WRKDIR}/.missing-dirs," \ | sed -e "s,^,${WRKDIR}/.missing-dirs," \ | ||||
-e 's,^\(.*\)$,"\1",' \ | -e 's,^\(.*\)$,"\1",' \ | ||||
${WRKDIR}/.missing-plist-dirs | xargs mkdir -p | ${WRKDIR}/.missing-plist-dirs | xargs mkdir -p | ||||
find -d -s ${WRKDIR}/.missing-dirs | \ | find -d -s ${WRKDIR}/.missing-dirs | \ | ||||
sed -e "s,^${WRKDIR}/.missing-dirs,," | \ | sed -e "s,^${WRKDIR}/.missing-dirs,," | \ | ||||
while read -r dir; do \ | while read -r dir; do \ | ||||
grep -x "${dir}" ${WRKDIR}/.missing-plist-dirs || :; done | \ | grep -x "${dir}" ${WRKDIR}/.missing-plist-dirs || :; done | \ | ||||
sed "${sed_dirs}" \ | sed -e "s!^${PREFIX}/!!g;" -f "${sed_plist_sub}" -e "${sed_dirs}" \ | ||||
>>${WRKDIR}/.invalid-plist-missing || : | >>${WRKDIR}/.invalid-plist-missing || : | ||||
rm -rf ${WRKDIR}/.missing-dirs | rm -rf ${WRKDIR}/.missing-dirs | ||||
if [ -s "${WRKDIR}/.invalid-plist-missing" ]; then | if [ -s "${WRKDIR}/.invalid-plist-missing" ]; then | ||||
ret=1 | ret=1 | ||||
while read -r line; do | while read -r line; do | ||||
echo "Error: Missing: ${line}" >&2 | echo "Error: Missing: ${line}" >&2 | ||||
done < ${WRKDIR}/.invalid-plist-missing | done < ${WRKDIR}/.invalid-plist-missing | ||||
fi | fi | ||||
▲ Show 20 Lines • Show All 70 Lines • Show Last 20 Lines |