summaryrefslogtreecommitdiffstats
path: root/runtime/probes/build
blob: ac9994a9ae824424f084cd4f22cb02078f86e3d7 (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
#!/usr/bin/tclsh
# -*- tcl -*-

# simple script to do a make or "make clean" in each probe directory

proc usage {} {
  puts "Usage: build \[clean\]"
  exit
}

set clean 0

foreach arg $argv {
  if {$arg == "clean"} {
    set clean 1
  } else {
    usage
  }
}

set dirs {shellsnoop test4 where_func scf}

foreach i $dirs {
  cd $i
  if {$clean} {
    puts "Cleaning $i"
    if {[catch {exec make clean >& compile.errors} res]} {
      [exec cat compile.errors]
      exit
    }
  } else {
    puts "Building $i"
    if {[catch {exec make >& compile.errors} res]} {
      puts "\n------------ Compile error in $i -------------------\n"
      if {[catch {open compile.errors r} fd]} {
	puts "Compile failed for unknown reasons"
	exit
      }
      while {[gets $fd line] >= 0} {
	puts $line
      }
      close $fd
      exit 
    } else {
      if {![catch {open compile.errors r} fd]} {
	# search for warnings
	set bad 0
	while {[gets $fd line] >= 0} {
	  if {[regexp {[^W]*([A-Za-z][A-Za-z0-9_]*)[^\"]*\"([^\"]*)} $line match warn var]} {
	    if {$warn == "Warning"} {
	      switch $var {
		_stp_ctrl_unregister -
		_stp_ctrl_register -
		relay_subbufs_consumed -
		_stp_ctrl_send -
		relay_open -
		relayfs_create_dir -
		relayfs_remove_dir -
		relay_close {}
		default {
		  if {$bad == 0} {
		    puts "\n------------ Unexpected Warnings in $i -------------------\n"
		  }
		  puts $line
		  set bad 1
		}
	      }
	    }
	  }
	}
	close $fd
      }
      if {$bad} {
	exit
      }
    }
  }
  catch {exec /bin/rm compile.errors}
  cd ..
}