diff --git a/tools/build/stale-symlink-buildworld.sh b/tools/build/stale-symlink-buildworld.sh index 32ebc1f9d66d..acc3fb0baaf2 100755 --- a/tools/build/stale-symlink-buildworld.sh +++ b/tools/build/stale-symlink-buildworld.sh @@ -1,55 +1,64 @@ #!/bin/sh # Copyright (c) Feb 2024 Wolfram Schneider # SPDX-License-Identifier: BSD-2-Clause # # stale-symlink-buildworld.sh - check for stale symlinks on a FreeBSD system # -# You can run the script before or after `make installworld' +# The purpose of this script is to detect stale symlinks, report them to +# stderr and exit with a non-zero status. All other cases are ignored, +# such as no symlinks, missing directories, permission problems, etc. # +# You can run the script before or after `make installworld', or any other +# make targets thats installs files. +# +# You can also check your local ports with: +# +# env STALE_SYMLINK_BUILDWORLD_DIRS=/usr/local ./stale-symlink-buildworld.sh + PATH="/bin:/usr/bin"; export PATH : ${ncpu=$(nproc)} obj_dir_prefix=${MAKEOBJDIRPREFIX:="/usr/obj"} # check other directories as well : ${STALE_SYMLINK_BUILDWORLD_DIRS=$obj_dir_prefix} trap 'rm -f $script' 0 script=$(mktemp -t stale-symlink) chmod u+x $script # create a temporary shell script to check for stale symbolic links cat << 'EOF' > $script file="$1" if [ ! -e "$file" ]; then echo "stale symlink detected: $(ls -ld $file)" >&2 exit 1 else exit 0 fi EOF find -s -H \ /bin \ /boot \ /etc \ /lib \ /libexec \ /sbin \ /usr/bin \ /usr/include \ /usr/lib \ /usr/lib32 \ /usr/libdata \ /usr/libexec \ /usr/sbin \ /usr/src \ /usr/share \ $STALE_SYMLINK_BUILDWORLD_DIRS \ -type l \ -print0 | xargs -n1 -0 -P${ncpu} $script #EOF