if ![info exists verbose] {
set verbose 0
}
proc usage { } {
puts "USAGE: Clean.tcl \[options...\]"
puts "\t--verbose (-v)\t\tPrint all test output to screen"
}
proc verbose { args } {
global verbose
set newline 1
set i 0
if { [string index [lindex $args 0] 0] == "-" } {
for { set i 0 } { $i < [llength $args] } { incr i } {
if { [lindex $args $i] == "--" } {
incr i
break
} elseif { [lindex $args $i] == "-n" } {
set newline 0
} elseif { [string index [lindex $args $i] 0] == "-" } {
puts "ERROR: verbose: illegal argument: [lindex $args $i]"
return
} else {
break
}
}
if { [llength $args] == $i } {
puts "ERROR: verbose: nothing to print"
return
}
}
set level 1
if { [llength $args] > $i + 1 } {
set level [lindex $args [expr $i+1]]
}
set message [lindex $args $i]
if { $verbose >= $level } {
if { $newline } {
puts -nonewline "$message\n"
} else {
puts -nonewline "$message"
}
}
}
for { set i 0 } { $i < $argc } { incr i } {
set option [lindex $argv $i]
switch -glob -- $option {
"--*" {
}
"-*" {
set option "-$option"
}
}
switch -glob -- $option {
"--he*" { usage;
exit 0
}
"--v" -
"--verb*" { incr verbose
continue
}
}
}
verbose "Verbose level is $verbose" 2
proc cleanfiles { directory } {
set filelist ""
set allfiles [glob -nocomplain "$directory/*"]
regsub -all "$directory/" $allfiles "" allfiles
catch "set cleanfile [open "$directory/.clean" r]"
if ![info exists cleanfile] {
verbose "WARNING: no .clean file in $directory, removing the default set of \"*! core CVS RCS\"" 3
set allfiles [glob -nocomplain "$directory/*~"]
append allfiles " [glob -nocomplain "$directory/core*"]"
append allfiles " [glob -nocomplain "$directory/CVS"]"
append allfiles " [glob -nocomplain "$directory/Cvs.*"]"
append allfiles " [glob -nocomplain "$directory/*.out"]"
append allfiles " [glob -nocomplain "$directory/*.dvi"]"
append allfiles " [glob -nocomplain "$directory/*.rej"]"
append allfiles " [glob -nocomplain "$directory/*.orig"]"
append allfiles " [glob -nocomplain "$directory/*.log"]"
append allfiles " [glob -nocomplain "$directory/*.cvsignore"]"
append allfiles " [glob -nocomplain "$directory/*.tgz"]"
append allfiles " [glob -nocomplain "$directory/*.tar.gz"]"
append allfiles " [glob -nocomplain "$directory/autom4te.cache"]"
append allfiles " [glob -nocomplain "$directory/RCS"]"
append allfiles " [glob -nocomplain "$directory/.\ } else {
while { [gets $cleanfile cur_line]>=0 } {
if { [string index $cur_line 0] == "\#" } {
verbose "Ignoring comment" 2
continue
}
if { [string length $cur_line]<=0 } {
verbose "Ignoring blank line" 2
continue
}
regsub -all "\[\+\]" $cur_line "\\+" cur_line
regsub -all " $cur_line " $allfiles " " allfiles
regsub -all " $cur_line$" $allfiles " " allfiles
regsub -all "^$cur_line" $allfiles " " allfiles
}
}
set allfiles [string trimleft $allfiles]
set allfiles [string trimright $allfiles]
if { [string length $allfiles] > 0 } {
verbose "Removing \"$allfiles\" from $directory"
catch "exec rm -fr $allfiles"
} else {
verbose "Nothing to remove from $directory" 2
}
catch "close $cleanfile"
}
proc getdirs { directory } {
set dirs ""
set files [glob -nocomplain "$directory/*"]
if { [llength $files] != 0 } {
foreach j $files {
if [file isdirectory $j] {
append dirs " $j"
append dirs " [getdirs $j]"
}
}
}
return $dirs
}
cleanfiles .
foreach i [getdirs .] {
cleanfiles $i
}