xref: /freebsd/tools/build/stale-symlink-buildworld.sh (revision c77ca9a72c9934c407852f00d88cba09f5c9e31f)
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