Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- @source_dirs = split /\n/, `find . -name '*.c' -o -name '*.S' | xargs dirname | sort | uniq`;
- foreach $dir (@source_dirs) {
- @sources = split /\n/, `find $dir -maxdepth 1 -name '*.c' -o -name '*.S'`;
- # print 'dir: ', $dir, "\n";
- %object_deps;
- $makefile_filename = $dir . '/Makefile';
- open $makefile, $makefile_filename or die "Could not open $makefile_filename $!";
- while ($line = <$makefile>) {
- chomp $line;
- if ($line =~ /^.+\.o:/) {
- my @deps;
- ($object = $line) =~ s/^(.+)\.o:.*$/$1/;
- while (length($line) > 1) {
- @sp = split / /, $line;
- foreach $piece (@sp) {
- $piece =~ s/^\s+|\s+$//g;
- if ($piece =~ /\.h$/) {
- $piece =~ s/^.*(\/|\))([^\/]+\/.+\.h$)/$2/ if ($piece =~ /\//);
- push @deps, $piece;
- }
- }
- $line = <$makefile>;
- chomp $line;
- }
- $object_deps{$object} = [ @deps ] if (scalar(@deps) > 0);
- }
- }
- foreach $source (@sources) {
- ($object = $source) =~ s/^.*\/([^\/]+)\..$/$1/;
- @project_headers = `grep '^#include' < $source | sort | uniq | grep -E '/|"'`;
- if (exists($object_deps{$object})) {
- my @missing;
- %object_deps_map = map { $_ => 1 } @{ $object_deps{$object} };
- foreach $header (@project_headers) {
- $header =~ s/^.*(<|")(.+)(>|").*$/$2/;
- chomp $header;
- if (exists($object_deps_map{$header})) {
- delete $object_deps_map{$header};
- }
- else {
- push @missing, $header;
- }
- }
- $n_missing = scalar(@missing);
- $n_deps = scalar(keys %object_deps_map);
- print $source, ':', "\n" if ($n_missing > 0 or $n_deps > 0);
- print "\t-", join("\n\t-", @missing), "\n" if ($n_missing > 0);
- print "\t+", join("\n\t+", keys %object_deps_map), "\n" if ($n_deps > 0);
- }
- elsif (scalar(@project_headers) > 0) {
- print $source, ' dependencies missing in makefile!', "\n";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement