summaryrefslogtreecommitdiff
path: root/Makeclean.rc
diff options
context:
space:
mode:
authorHayden Hamilton <hayden@hhvn.uk>2026-05-24 13:48:38 +0100
committerHayden Hamilton <hayden@hhvn.uk>2026-05-24 13:48:38 +0100
commit216202e2cdff9623f815ac998c1b865168ff1583 (patch)
tree6cda9109acde91e328348743b76fe816e185cdd4 /Makeclean.rc
Tracked install/uninstall/clean of scripts
Diffstat (limited to 'Makeclean.rc')
-rwxr-xr-xMakeclean.rc69
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
+}