| proc llvm-runtest { programs objdir srcdir subdir target_triplet llvmgcc llvmgxx prcontext} { |
| |
| set timeout 60 |
| |
| set path [file join $objdir $subdir] |
| |
| #Make Output Directory if it does not exist already |
| if { [file exists path] } { |
| cd $path |
| } else { |
| file mkdir $path |
| cd $path |
| } |
| |
| file mkdir Output |
| |
| foreach test $programs { |
| |
| #Should figure out best way to set the timeout |
| #set timeout 40 |
| |
| set filename [file tail $test] |
| set output [file join Output $filename.out] |
| set script $output.script |
| set outcome PASS |
| set tmpFile testscript. |
| append tmpFile $filename .tmp |
| |
| #set hasRunline bool to check if testcase has a runline |
| set hasRunline 0 |
| |
| #check if script files exists, and delete if it does |
| if { [file exists $script] } { |
| file delete $script |
| } |
| |
| #create script file and write run line out to it |
| set scriptFileId [open $script w 0700] |
| set testFileId [ open $test r] |
| foreach line [split [read $testFileId] \n] { |
| |
| #see if this is our run line |
| if {[regexp {RUN:(.+)} $line match runline]} { |
| set runline |
| set hasRunline 1 |
| |
| #replace %s with filename |
| regsub -all {%s} $runline $test new_runline |
| |
| #replace %t with temp filenames |
| regsub -all {%t} $new_runline [file join Output $tmpFile] new_runline |
| |
| #replace %prcontext with prcontext.tcl (Must replace before %p) |
| regsub -all {%prcontext} $new_runline $prcontext new_runline |
| |
| #replace %p with path to source, |
| regsub -all {%p} $new_runline [file join $srcdir $subdir] new_runline |
| |
| #replace %llvmgcc with actual path to llvmgcc |
| regsub -all {%llvmgcc} $new_runline $llvmgcc new_runline |
| |
| #replace %llvmgxx with actual path to llvmg++ |
| regsub -all {%llvmgxx} $new_runline $llvmgxx new_runline |
| |
| puts $scriptFileId $new_runline |
| } elseif {[regexp {XFAIL:[ *](.+)} $line match targets]} { |
| set targets |
| |
| |
| #split up target if more then 1 specified |
| foreach target [split $targets ,] { |
| if { [regexp {\*} $target match] } { |
| set outcome XFAIL |
| } elseif { [regexp $target $target_triplet match] } { |
| set outcome XFAIL |
| } |
| |
| } |
| } |
| |
| } |
| |
| close $testFileId |
| close $scriptFileId |
| |
| |
| if { $hasRunline == 0 } { |
| fail "$test: \nDoes not have a RUN line\n" |
| } else { |
| |
| #run script and catch errors |
| set retval [ catch {exec /bin/sh $script >& $output} ] |
| |
| if { $retval == 1 } { |
| #Get output |
| set outputFile [open $output {RDONLY}] |
| set result [read $outputFile] |
| close $outputFile |
| file delete $outputFile |
| |
| switch $outcome { |
| PASS { |
| file delete $output |
| fail "$test: \n$result" |
| } |
| XFAIL { |
| xfail "$test: \n$result" |
| } |
| default { |
| file delete $output |
| fail "$test: $result" |
| } |
| } |
| } else { |
| switch $outcome { |
| XFAIL { |
| xpass "$test" |
| } |
| default { |
| pass "$test"} |
| } |
| } |
| } |
| } |
| } |
| |
| |