mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 19:29:31 +00:00
capture the error output from the exec option. This generally will capture the stderr messages generated by the tools. This information is then printed if the test fails. This helps to recognize more quickly what the error was. Otherwise, this information is lost. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28385 91177308-0d34-0410-b5e6-96231b3b80d8
132 lines
3.1 KiB
Plaintext
132 lines
3.1 KiB
Plaintext
proc llvm-runtest { programs objdir srcdir subdir target_triplet llvmgcc llvmgxx prcontext llvmgcc_version} {
|
|
|
|
|
|
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 -emit-llvm" new_runline
|
|
|
|
#replace %llvmgxx with actual path to llvmg++
|
|
regsub -all {%llvmgxx} $new_runline "$llvmgxx -emit-llvm" 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
|
|
} elseif { [regexp {llvmgcc(([0-9]+)|([0-9]+[.][0-9]+))} $target match submatch submatch2] } {
|
|
if { [regexp ^($submatch)$|^(($submatch)(\.)) $llvmgcc_version 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} errmsg ]
|
|
|
|
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$errmsg\n$result"
|
|
}
|
|
XFAIL {
|
|
xfail "$test: \n$errmsg\n$result"
|
|
}
|
|
default {
|
|
file delete $output
|
|
fail "$test: $result"
|
|
}
|
|
}
|
|
} else {
|
|
switch $outcome {
|
|
XFAIL {
|
|
xpass "$test"
|
|
}
|
|
default {
|
|
pass "$test"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|