| Patrick Williams | f04f1ce | 2015-03-01 03:50:18 -0600 | [diff] [blame] | 1 | #!/usr/bin/env perl | 
|  | 2 |  | 
|  | 3 | use strict; | 
|  | 4 | my %seen = (); | 
|  | 5 |  | 
|  | 6 | # Generate dependency list for all 'priority' targets.  These are targets a | 
|  | 7 | # user is likely to build. | 
|  | 8 | my @priority_targets = ( "openpower-pnor" ); | 
|  | 9 | foreach my $target (@priority_targets) | 
|  | 10 | { | 
|  | 11 | next if $seen{$target}; | 
|  | 12 |  | 
|  | 13 | print "$target\n"; | 
|  | 14 | $seen{$target} = 1; | 
|  | 15 | package_deps($target, 0); | 
|  | 16 | } | 
|  | 17 |  | 
|  | 18 | # Generate dependency list for all other targets. | 
|  | 19 | packages(); | 
|  | 20 |  | 
|  | 21 | # @sub packages | 
|  | 22 | # @brief Determine all the packages that can be built. | 
|  | 23 | # | 
|  | 24 | # Skip host-* (uninteresting) and target-* (buildroot special) packages. | 
|  | 25 | sub packages | 
|  | 26 | { | 
|  | 27 | open TARGETS, "make --directory=`pwd`/buildroot O=`pwd`/output ". | 
|  | 28 | "show-targets | sed 's/^make:.*//' |"; | 
|  | 29 |  | 
|  | 30 | while (my $line = <TARGETS>) | 
|  | 31 | { | 
|  | 32 | chomp $line; | 
|  | 33 | next if ($line eq ""); | 
|  | 34 |  | 
|  | 35 | my @targets = split / /,$line; | 
|  | 36 | foreach (@targets) | 
|  | 37 | { | 
|  | 38 | next if ($seen{$_}); | 
|  | 39 | next if ($_ =~ m/^host-/); | 
|  | 40 | next if ($_ =~ m/^target-/); | 
|  | 41 |  | 
|  | 42 | print $_."\n"; | 
|  | 43 | $seen{$_} = 1; | 
|  | 44 | package_deps($_, 0); | 
|  | 45 | } | 
|  | 46 | } | 
|  | 47 |  | 
|  | 48 | close TARGETS | 
|  | 49 |  | 
|  | 50 | } | 
|  | 51 |  | 
|  | 52 | # @sub package_deps | 
|  | 53 | # @brief Collect children dependencies for a package. | 
|  | 54 | sub package_deps | 
|  | 55 | { | 
|  | 56 | my $package = shift; | 
|  | 57 | my $level = shift; | 
|  | 58 |  | 
|  | 59 | $package =~ s/-install-images//;    # Strip off -install-images subpass. | 
|  | 60 | $package =~ s/-rebuild.*//;         # Strip off -rebuild* subpass. | 
|  | 61 | $package =~ s/linux[0-9]*/linux/;   # Strip off linux version. | 
|  | 62 |  | 
|  | 63 | open DEPENDS, "make --directory=`pwd`/buildroot O=`pwd`/output ". | 
|  | 64 | "$package-show-depends | sed 's/^make:.*//' |"; | 
|  | 65 |  | 
|  | 66 | while (my $line = <DEPENDS>) | 
|  | 67 | { | 
|  | 68 | chomp $line; | 
|  | 69 | next if ($line eq ""); | 
|  | 70 |  | 
|  | 71 | my @depends = split / /,$line; | 
|  | 72 | foreach my $depend (@depends) | 
|  | 73 | { | 
|  | 74 | foreach (0..$level) | 
|  | 75 | { | 
|  | 76 | print "  "; | 
|  | 77 | } | 
|  | 78 | print $depend."\n"; | 
|  | 79 |  | 
|  | 80 | next if ($seen{$depend}); | 
|  | 81 | $seen{$depend} = 1; | 
|  | 82 | package_deps($depend, $level+1); | 
|  | 83 | } | 
|  | 84 | } | 
|  | 85 |  | 
|  | 86 | close DEPENDS; | 
|  | 87 | } |