diff options
| author | Hayden Hamilton <hayden@hhvn.uk> | 2026-05-24 13:48:38 +0100 |
|---|---|---|
| committer | Hayden Hamilton <hayden@hhvn.uk> | 2026-05-24 13:48:38 +0100 |
| commit | 216202e2cdff9623f815ac998c1b865168ff1583 (patch) | |
| tree | 6cda9109acde91e328348743b76fe816e185cdd4 /Makeclean.rc | |
Tracked install/uninstall/clean of scripts
Diffstat (limited to 'Makeclean.rc')
| -rwxr-xr-x | Makeclean.rc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Makeclean.rc b/Makeclean.rc new file mode 100755 index 0000000..d2d138f --- /dev/null +++ b/Makeclean.rc @@ -0,0 +1,69 @@ +#!/bin/rc + +# This script will remove any deleted scripts/dirs previously copied into $1 +# If a directory is present, has previously been copied into $1, +# but no longer contains any executable scripts, this will also be removed. + +bin = $1 + +touch .installed .dirsmade +installed = `$nl{cat .installed} +dirsmade = `$nl{cat .dirsmade} + +fn sigexit { + if (~ $clean_installed ()) { + rm .installed + } else { + {for (s in $clean_installed) { echo $s }} > .installed + } + + if (~ $clean_dirsmade ()) { + rm .dirsmade + } else { + {for (d in $clean_dirsmade) { echo $d }} > .dirsmade + } +} + +for (s in $installed) { + p = $bin/$s + if (test -f $s && test -x $s) { + clean_installed = ($clean_installed $s) + } else { + echo RM $p + rm $p + removed = ($removed $p) + } +} + +fn check_dir_used { + d = $1 { + for (s in $clean_installed) { + ds = `$nl{dirname $s} + if (!~ $ds '.') { + p = '.' + for (e in `$nl'/'{echo $ds}) { + p = $p/$e + if (~ `$nl{echo $p | sed 's/^\.\///'} $d){ + return 0 + } + } + } + } + } + return 1 +} + +for (d in $dirsmade) { + p = $bin/$d + if (test -d $d && check_dir_used $d) { + clean_dirsmade = ($clean_dirsmade $d) + } else { + echo RMDIR $p + rmdir $p + removed = ($removed $p) + } +} + +if (~ $removed ()) { + echo nothing to clean +} |