src.hhvn.uk > hhvn.uk-scripts > file > Makeclean.rc

scripts that power hhvn.uk
Log | Files | Refs | README

Makeclean.rc (1255B)


      1 #!/bin/rc
      2 
      3 # This script will remove any deleted scripts/dirs previously copied into $1
      4 # If a directory is present, has previously been copied into $1,
      5 # but no longer contains any executable scripts, this will also be removed.
      6 
      7 bin = $1
      8 
      9 touch .installed .dirsmade
     10 installed = `$nl{cat .installed}
     11 dirsmade  = `$nl{cat .dirsmade}
     12 
     13 fn sigexit {
     14 	if (~ $clean_installed ()) {
     15 		rm .installed
     16 	} else {
     17 		{for (s in $clean_installed) { echo $s }} > .installed
     18 	}
     19 
     20 	if (~ $clean_dirsmade ()) {
     21 		rm .dirsmade
     22 	} else {
     23 		{for (d in $clean_dirsmade) { echo $d }} > .dirsmade
     24 	}
     25 }
     26 
     27 for (s in $installed) {
     28 	p = $bin/$s
     29 	if (test -f $s && test -x $s) {
     30 		clean_installed = ($clean_installed $s)
     31 	} else {
     32 		echo RM $p
     33 		rm $p
     34 		removed = ($removed $p)
     35 	}
     36 }
     37 
     38 fn check_dir_used {
     39 	d = $1 {
     40 		for (s in $clean_installed) {
     41 			ds = `$nl{dirname $s}
     42 			if (!~ $ds '.') {
     43 				p = '.'
     44 				for (e in `$nl'/'{echo $ds}) {
     45 					p = $p/$e
     46 					if (~ `$nl{echo $p | sed 's/^\.\///'} $d){
     47 						return 0
     48 					}
     49 				}
     50 			}
     51 		}
     52 	}
     53 	return 1
     54 }
     55 
     56 for (d in $dirsmade) {
     57 	p = $bin/$d
     58 	if (test -d $d && check_dir_used $d) {
     59 		clean_dirsmade = ($clean_dirsmade $d)
     60 	} else {
     61 		echo RMDIR $p
     62 		rmdir $p
     63 		removed = ($removed $p)
     64 	}
     65 }
     66 
     67 if (~ $removed ()) {
     68 	echo nothing to clean
     69 }