1*558ab49fSrsc#!/usr/bin/perl 2*558ab49fSrsc 3*558ab49fSrsc$| = 1; 4*558ab49fSrsc 5*558ab49fSrscsub writefile($@){ 6*558ab49fSrsc my ($file, @lines) = @_; 7*558ab49fSrsc 8*558ab49fSrsc sleep(1); 9*558ab49fSrsc open(F, ">$file") || die "open >$file: $!"; 10*558ab49fSrsc print F @lines; 11*558ab49fSrsc close(F); 12*558ab49fSrsc} 13*558ab49fSrsc 14*558ab49fSrsc# Cut out #include lines that don't contribute anything. 15*558ab49fSrscfor($i=0; $i<@ARGV; $i++){ 16*558ab49fSrsc $file = $ARGV[$i]; 17*558ab49fSrsc if(!open(F, $file)){ 18*558ab49fSrsc print STDERR "open $file: $!\n"; 19*558ab49fSrsc next; 20*558ab49fSrsc } 21*558ab49fSrsc @lines = <F>; 22*558ab49fSrsc close(F); 23*558ab49fSrsc 24*558ab49fSrsc $obj = "$file.o"; 25*558ab49fSrsc $obj =~ s/\.c\.o$/.o/; 26*558ab49fSrsc system("touch $file"); 27*558ab49fSrsc 28*558ab49fSrsc if(system("make CC='gcc -Werror' $obj >/dev/null 2>\&1") != 0){ 29*558ab49fSrsc print STDERR "make $obj failed: $rv\n"; 30*558ab49fSrsc next; 31*558ab49fSrsc } 32*558ab49fSrsc 33*558ab49fSrsc system("cp $file =$file"); 34*558ab49fSrsc for($j=@lines-1; $j>=0; $j--){ 35*558ab49fSrsc if($lines[$j] =~ /^#include/){ 36*558ab49fSrsc $old = $lines[$j]; 37*558ab49fSrsc $lines[$j] = "/* CUT-H */\n"; 38*558ab49fSrsc writefile($file, @lines); 39*558ab49fSrsc if(system("make CC='gcc -Werror' $obj >/dev/null 2>\&1") != 0){ 40*558ab49fSrsc $lines[$j] = $old; 41*558ab49fSrsc }else{ 42*558ab49fSrsc print STDERR "$file $old"; 43*558ab49fSrsc } 44*558ab49fSrsc } 45*558ab49fSrsc } 46*558ab49fSrsc writefile($file, grep {!/CUT-H/} @lines); 47*558ab49fSrsc system("rm =$file"); 48*558ab49fSrsc} 49