Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #!/usr/bin/env perl
  2.  
  3. @source_dirs = split /\n/, `find . -name '*.c' -o -name '*.S' | xargs dirname | sort | uniq`;
  4.  
  5. foreach $dir (@source_dirs) {
  6. @sources = split /\n/, `find $dir -maxdepth 1 -name '*.c' -o -name '*.S'`;
  7. # print 'dir: ', $dir, "\n";
  8.  
  9. %object_deps;
  10. $makefile_filename = $dir . '/Makefile';
  11. open $makefile, $makefile_filename or die "Could not open $makefile_filename $!";
  12. while ($line = <$makefile>) {
  13. chomp $line;
  14. if ($line =~ /^.+\.o:/) {
  15. my @deps;
  16. ($object = $line) =~ s/^(.+)\.o:.*$/$1/;
  17.  
  18. while (length($line) > 1) {
  19. @sp = split / /, $line;
  20. foreach $piece (@sp) {
  21. $piece =~ s/^\s+|\s+$//g;
  22. if ($piece =~ /\.h$/) {
  23. $piece =~ s/^.*(\/|\))([^\/]+\/.+\.h$)/$2/ if ($piece =~ /\//);
  24. push @deps, $piece;
  25. }
  26. }
  27.  
  28. $line = <$makefile>;
  29. chomp $line;
  30. }
  31. $object_deps{$object} = [ @deps ] if (scalar(@deps) > 0);
  32. }
  33. }
  34.  
  35. foreach $source (@sources) {
  36. ($object = $source) =~ s/^.*\/([^\/]+)\..$/$1/;
  37. @project_headers = `grep '^#include' < $source | sort | uniq | grep -E '/|"'`;
  38.  
  39. if (exists($object_deps{$object})) {
  40. my @missing;
  41. %object_deps_map = map { $_ => 1 } @{ $object_deps{$object} };
  42.  
  43. foreach $header (@project_headers) {
  44. $header =~ s/^.*(<|")(.+)(>|").*$/$2/;
  45. chomp $header;
  46.  
  47.  
  48. if (exists($object_deps_map{$header})) {
  49. delete $object_deps_map{$header};
  50. }
  51. else {
  52. push @missing, $header;
  53. }
  54. }
  55.  
  56. $n_missing = scalar(@missing);
  57. $n_deps = scalar(keys %object_deps_map);
  58. print $source, ':', "\n" if ($n_missing > 0 or $n_deps > 0);
  59. print "\t-", join("\n\t-", @missing), "\n" if ($n_missing > 0);
  60. print "\t+", join("\n\t+", keys %object_deps_map), "\n" if ($n_deps > 0);
  61. }
  62. elsif (scalar(@project_headers) > 0) {
  63. print $source, ' dependencies missing in makefile!', "\n";
  64. }
  65. }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement