diff --git a/t/src/checkdepend.t b/t/src/checkdepend.t index d7b2f10..0c2ef36 100644 --- a/t/src/checkdepend.t +++ b/t/src/checkdepend.t @@ -1,6 +1,5 @@ #! perl - -# Copyright (C) 2009-2010, Parrot Foundation. +# Copyright (C) 2009-2011, Parrot Foundation. use strict; use warnings; @@ -10,6 +9,8 @@ use Fatal qw(open); use File::Find; use File::Spec; use Test::More; +use lib qw( lib ); +use Parrot::Config; =head1 NAME @@ -48,7 +49,7 @@ if (! -e 'Makefile') { exit; } -my @incfiles = []; +my @incfiles = (); find( { wanted => \&wanted, no_chdir => 1 }, qw/src compilers include frontend/ ); @@ -57,6 +58,8 @@ our %deps; foreach my $file (sort grep /\.[hc]$/, @incfiles) { # skip pmcs - we don't handle inheritance correctly next if $file =~ m{^src/(?:dyn)?pmc/}; + next if ($file eq 'src/nci/extra_thunks.c' and + ! defined $Parrot::Config::PConfig_Temp{PARROT_HAS_EXTRA_NCI_THUNKS}); open my $fh, '<', $file; my $guts; @@ -102,6 +105,50 @@ foreach my $file (sort grep /\.[hc]$/, @incfiles) { } } +our $rules = []; +get_rules('Makefile', $rules); + +#expand all variables +our %vars; +foreach (@$rules) { + #expand any known variables + while ($_->{line} =~ /\$\(([A-Z_]+)\)/) { + my $var_name = $1; + if (exists $vars{$var_name}) { + $_->{line} =~ s/\$\($var_name\)/$vars{$var_name}/g; + } + else { + $_->{line} =~ s/\$\($var_name\)//g; + } + } + + #store any new definitions + if ($_->{line} =~ /^(\w+)\s+=\s+(.*)$/) { + $vars{$1} = $2; + } +} + +if (@ARGV && $ARGV[0] eq '--dump') { + print "$_->{line}\n" for (@$rules); + exit 0; +} + +my $test_count = grep {/\.(c)$/} (keys %deps); +plan( tests => $test_count ); + +my @files = keys %deps; +@files = @ARGV if @ARGV; + +check_files($rules, \@files, '.c', $vars{O}); + +##### SUBROUTINES ##### + +sub wanted { + if ($File::Find::name =~ /\.(c|h)$/) { + push @incfiles, $File::Find::name; + } +} + sub get_rules { my ($filename, $rules) = @_; @@ -129,18 +176,23 @@ sub get_rules { # Convert all \-newline continuations into single lines for ease of # processing. Leave blank lines to keep line numbers accurate. - if (exists $rules->[$escape_start]{line} && + if ( + exists $rules->[$escape_start]{line} && $rules->[$escape_start]{line} !~ /\\$/ && - $rules->[$global_line_num]{line} =~ /\\$/) { - + $rules->[$global_line_num]{line} =~ /\\$/ + ) { $escape_start = $global_line_num; } - if ($rules->[$escape_start]{line} && $rules->[$escape_start]{line} =~ /\\$/ && - $escape_start != $global_line_num) { + if ( + $rules->[$escape_start]{line} && + $rules->[$escape_start]{line} =~ /\\$/ && + $escape_start != $global_line_num + ) { $rules->[$escape_start]{line} =~ s/\\$//; - $rules->[$escape_start]{line} .= $rules->[$global_line_num]{line}; + $rules->[$escape_start]{line} + .= $rules->[$global_line_num]{line}; $rules->[$global_line_num]{line} = ''; } @@ -151,50 +203,6 @@ sub get_rules { close $mf; } -our $rules = []; -get_rules('Makefile', $rules); - -#expand all variables -our %vars; -foreach (@$rules) { - #expand any known variables - while ($_->{line} =~ /\$\(([A-Z_]+)\)/) { - my $var_name = $1; - if (exists $vars{$var_name}) { - $_->{line} =~ s/\$\($var_name\)/$vars{$var_name}/g; - } - else { - $_->{line} =~ s/\$\($var_name\)//g; - } - } - - #store any new definitions - if ($_->{line} =~ /^(\w+)\s+=\s+(.*)$/) { - $vars{$1} = $2; - } -} - -if (@ARGV && $ARGV[0] eq '--dump') { - print "$_->{line}\n" for (@$rules); - exit 0; -} - -my $test_count = grep {/\.(c)$/} (keys %deps); - -plan( tests => $test_count ); - -#foreach my $header (sort grep {/\.h$/} (keys %deps)) { -# # static headers shouldn't depend on anything else. -# if ($rules =~ /^$header\s*:\s*(.*)\s*$/m) { -# #is("", $1, "$header should have no dependencies"); -# } -#} - -my @files = keys %deps; -@files = @ARGV if @ARGV; - -check_files($rules, \@files, '.c', $vars{O}); - sub check_files { my ($rules, $possible_files, $src_ext, $obj_ext) = @_; @@ -227,7 +235,6 @@ sub check_files { } } - sub collapse_path { my $path = shift; return $path unless defined $path; @@ -260,12 +267,10 @@ sub get_deps { } } } - return keys %all_deps; } # I'd rather use Test::Differences, but this lets us skip a dependency. - sub is_list_same { my $got = shift; my $exp = shift; @@ -273,7 +278,6 @@ sub is_list_same { # keep track of the number of times something appears to # avoid redundant includes) - my(%got, %exp); for my $file (@$got) { $got{$file}++ }; for my $file (@$exp) { $exp{$file}++ }; @@ -310,12 +314,6 @@ sub is_list_same { return; } -sub wanted { - if ($File::Find::name =~ /\.(c|h)$/) { - push @incfiles, $File::Find::name; - } -} - # Local Variables: # mode: cperl # cperl-indent-level: 4