aboutsummaryrefslogtreecommitdiff
path: root/winsup/testsuite/winsup.api/winsup.exp
blob: f755c82d96915c1166c056775e428502d575e086 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
source "site.exp"
source "$srcdir/winsup.api/known_bugs.tcl"

if { ! [isnative] } {
    verbose "skipping winsup.api because it's not native"
    return
}

set rv ""

set ltp_includes "-I$ltp_includes"
set ltp_libs "$ltp_libs"

set add_includes $ltp_includes
set add_libs $ltp_libs

set test_filter ""

set env(PATH) "$runtime_root:$env(PATH)"

if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } {
    set test_filter "$env(CYGWIN_TESTSUITE_TESTS)"
}

proc ws_spawn {cmd} {
    global rv
    verbose "running $cmd\n"
    try {
	set msg [exec -ignorestderr {*}$cmd "2>@1"]
	set rv 0
    } trap CHILDSTATUS {results options} {
	verbose "returned $::errorCode\n"
	set msg $results
	set rv 1
    }
    verbose -log "$msg"
    return $rv
}

verbose "Filter: $test_filter"

foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc,c}]] {
    if { $test_filter != "" && ! [regexp $test_filter $src] } {
	verbose -log "Skipping $src"
	continue
    }

    regsub "^$srcdir/$subdir/" $src "" testcase
    regsub ".c$" $testcase "" base
    regsub ".*/" $base "" basename
    regsub "/" $base "-" base

    if { [lsearch -exact $xfail_list $basename] >= 0 } {
        set xfail_expected 1
	setup_xfail "*-*-*"
    } else {
        set xfail_expected 0
	clear_xfail
    }

    if [ file exists "$srcdir/$subdir/$basename.exp" ] then {
	source "$srcdir/$subdir/$basename.exp"
    } else {
	ws_spawn "$CC -nodefaultlibs -mwin32 $CFLAGS $src $add_includes $add_libs $runtime_root/binmode.o -lgcc $runtime_root/libcygwin.a -lkernel32 -luser32 -o $base.exe"
	if { $rv } {
	    fail "$testcase (compile)"
	} else {
	    if { $verbose } {
	       set redirect_output "./$base.log"
	    } else {
	       set redirect_output /dev/null
	    }
	    file mkdir $tmpdir/$base
	    ws_spawn "$cygrun ./$base.exe $testdll_tmpdir/$base > $redirect_output"
	    file delete -force $tmpdir/$base
	    if { $rv } {
		fail "$testcase (execute)"
		if { $xfail_expected } {
		    catch { file delete "$base.exe" } err
		    if { $err != "" } {
			note "error deleting $base.exe: $err"
		    }
		}
	    } else {
		pass "$testcase"
		if { ! $xfail_expected } {
		    catch { file delete "$base.exe" } err
		    if { $err != "" } {
			note "error deleting $base.exe: $err"
		    }
		}
	    }
	}
    }
}