# $SIG{__DIE__} = \&Carp::confess;
$VERSION = '3.017'; # $Id: //depot/Tk8/Tk/MakeDepend.pm#17 $
my ($inc,$dep,@include) = @_;
foreach my $dir (@include)
scan_file($path,$dep) unless exists $dep->{$path};
warn "Cannot find '$inc' assume made\n";
return !term() if s/^\s*!//;
return exists($define{$1}) if s/^\s*defined\s*\(([_A-Za-z][_\w]*)\)//;
return $1 if s/^\s*(\d+)//;
return $define{$1} || 0 if s/^\s*([_A-Za-z][_\w]*)//;
warn "Missing ')'\n" unless s/^\s*\)//;
'>=' => 2, '<=' => 2, '<' => 2, '>' => 2,
#printf STDERR "%d# expr . $_\n";
while (/^\s*(&&|\|\||>=?|<=?|==|!=)/)
last unless ($pri{$op} >= $pri);
# printf STDERR "%d# $lhs $op . $_\n";
my $rhs = expression($pri{$op}) || 0;
if ($key eq 'ifdef' || $key eq 'ifndef')
if ($expr =~ /^\s*(\w+)/)
my $val = exists $define{$1};
$val = !$val if ($key eq 'ifndef');
# printf STDERR "%d from $key $expr\n",$val;
my $val = expression(0) != 0;
warn "trailing: $_" if /\S/;
# printf STDERR "%d from $key $expr\n",$val;
open($file,"<$file") || die "Cannot open $file:$!";
my ($srcdir) = $file =~ m#^(.*)[\\/][^\\/]*$#;
$srcdir = '.' unless defined $srcdir;
$_ .= <$file> while (s/\\\n/ /);
if (/^\s*#\s*(\w+)\s*(.*?)\s*$/)
$live = do_if($key,$rest);
$live = ($live) ? 0 : $stack[-1];
die "$file:$.: Mismatched #endif\n";
do_include($1,$dep,$srcdir,@include) if $rest =~ /^"(.*)"/;
if ($rest =~ /^\s*([_A-Za-z][\w_]*)\s*(.*)$/)
$val =~ s#\s*/\*.*?\*/\s*# #g;
warn "ignore '$key $rest'\n";
if ($rest =~ /^\s*([_A-Za-z][\w_]*)/)
elsif ($key =~ /^(line|pragma)$/)
warn "ignore '$key $rest'\n";
# printf STDERR "$file:$.: %d $key $rest\n",$live if ($ol != $live);
warn "$file:$.: unclosed #if\n";
push @include, $Config{'usrinc'}
if (defined $Config{'usrinc'} and $Config{'usrinc'} ne '');
my %def = ('__STDC__' => 1 );
# force /usr/include to be last element of @include
splice @include, $#include, 0, $1;
elsif (/^-D([^=]+)(?:=(.*))?$/)
warn "Finding dependancies for $file\n";
my $str = "\n$base\$(OBJ_EXT) : $base.c";
my @dep = (sort(keys %dep));
if (length($str)+length($dep) > 70)