xref: /xv6-public/cuth (revision 558ab49f)
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