1e880dd64SWolfram Schneider#!/bin/sh 2e880dd64SWolfram Schneider# Copyright (c) Feb 2024 Wolfram Schneider <wosch@FreeBSD.org> 3e880dd64SWolfram Schneider# SPDX-License-Identifier: BSD-2-Clause 4e880dd64SWolfram Schneider# 5e880dd64SWolfram Schneider# stale-symlink-buildworld.sh - check for stale symlinks on a FreeBSD system 6e880dd64SWolfram Schneider# 7*c77ca9a7SWolfram Schneider# The purpose of this script is to detect stale symlinks, report them to 8*c77ca9a7SWolfram Schneider# stderr and exit with a non-zero status. All other cases are ignored, 9*c77ca9a7SWolfram Schneider# such as no symlinks, missing directories, permission problems, etc. 10e880dd64SWolfram Schneider# 11*c77ca9a7SWolfram Schneider# You can run the script before or after `make installworld', or any other 12*c77ca9a7SWolfram Schneider# make targets thats installs files. 13*c77ca9a7SWolfram Schneider# 14*c77ca9a7SWolfram Schneider# You can also check your local ports with: 15*c77ca9a7SWolfram Schneider# 16*c77ca9a7SWolfram Schneider# env STALE_SYMLINK_BUILDWORLD_DIRS=/usr/local ./stale-symlink-buildworld.sh 17*c77ca9a7SWolfram Schneider 18e880dd64SWolfram Schneider 19e880dd64SWolfram SchneiderPATH="/bin:/usr/bin"; export PATH 20e880dd64SWolfram Schneider 21e880dd64SWolfram Schneider: ${ncpu=$(nproc)} 22e880dd64SWolfram Schneider 23ccb03656SWolfram Schneiderobj_dir_prefix=${MAKEOBJDIRPREFIX:="/usr/obj"} 24ccb03656SWolfram Schneider 25e880dd64SWolfram Schneider# check other directories as well 26ccb03656SWolfram Schneider: ${STALE_SYMLINK_BUILDWORLD_DIRS=$obj_dir_prefix} 27e880dd64SWolfram Schneider 28e880dd64SWolfram Schneidertrap 'rm -f $script' 0 29e880dd64SWolfram Schneiderscript=$(mktemp -t stale-symlink) 30e880dd64SWolfram Schneiderchmod u+x $script 31e880dd64SWolfram Schneider 32e880dd64SWolfram Schneider# create a temporary shell script to check for stale symbolic links 33e880dd64SWolfram Schneidercat << 'EOF' > $script 34e880dd64SWolfram Schneiderfile="$1" 35e880dd64SWolfram Schneider 36e880dd64SWolfram Schneiderif [ ! -e "$file" ]; then 37e880dd64SWolfram Schneider echo "stale symlink detected: $(ls -ld $file)" >&2 38e880dd64SWolfram Schneider exit 1 39e880dd64SWolfram Schneiderelse 40e880dd64SWolfram Schneider exit 0 41e880dd64SWolfram Schneiderfi 42e880dd64SWolfram SchneiderEOF 43e880dd64SWolfram Schneider 44e880dd64SWolfram Schneiderfind -s -H \ 45e880dd64SWolfram Schneider /bin \ 46e880dd64SWolfram Schneider /boot \ 47e880dd64SWolfram Schneider /etc \ 48e880dd64SWolfram Schneider /lib \ 49e880dd64SWolfram Schneider /libexec \ 50e880dd64SWolfram Schneider /sbin \ 51e880dd64SWolfram Schneider /usr/bin \ 52e880dd64SWolfram Schneider /usr/include \ 53e880dd64SWolfram Schneider /usr/lib \ 54e880dd64SWolfram Schneider /usr/lib32 \ 55e880dd64SWolfram Schneider /usr/libdata \ 56e880dd64SWolfram Schneider /usr/libexec \ 57e880dd64SWolfram Schneider /usr/sbin \ 58e880dd64SWolfram Schneider /usr/src \ 59e880dd64SWolfram Schneider /usr/share \ 60e880dd64SWolfram Schneider $STALE_SYMLINK_BUILDWORLD_DIRS \ 61e880dd64SWolfram Schneider -type l \ 62e880dd64SWolfram Schneider -print0 | xargs -n1 -0 -P${ncpu} $script 63e880dd64SWolfram Schneider 64e880dd64SWolfram Schneider#EOF 65