# {project_base_path:
# filepath: spec file path }
my %to_build = (); # for all packages should be built this time
+my %subptomainp = (); # dict to store map from subpack name to main pack name.
my %repo = (); # store all packages dependency in memory
my %pkgdeps = (); # direct and indirect dependency dict
my %pkgddeps = (); # direct dependency dict
subpacks => @subpacks,
filename => $spec,
};
+ #to store the map from subpack to main pack.
+ foreach my $sub_p (@{$packs{$name}->{subpacks}}) {
+ $subptomainp{$sub_p} = $name;
+ }
if (@sorted) {
#pick up the smallest source tag such as source0
# find which package does this sub-package belong to
#---------------------------------------------------------------------
sub source_of {
- my ($sub, %packs) = @_;
- foreach my $x (keys %packs) {
- my @sp = @{$packs{$x}->{subpacks}};
- if (grep $_ eq $sub, @sp ) {
- return $x;
- }
+ my ($sub, $ref_subtomain) = @_;
+ if (exists($ref_subtomain->{$sub}) )
+ {
+ #info("sub: $sub, main pack: $ref_subtomain->{$sub}");
+ return $ref_subtomain->{$sub};
}
return;
+
}
#---------------------------------------------------------------------
}
my @deps;
foreach my $depp (@bdeps) {
- my $so = source_of($depp, %to_build);
+ my $so = source_of($depp, \%subptomainp);
if (defined($so) && $name ne $so
&& (! grep($_ eq $so, @skipped))
&& (! grep($_ eq $so, @deps))) {
my @bdeps = get_deps($fn);
my @deps;
foreach my $depp (@bdeps) {
- my $so = source_of($depp, %to_build);
+ my $so = source_of($depp, \%subptomainp);
if (defined($so) && $name ne $so
&& (! grep($_ eq $so, @skipped))
&& (! grep($_ eq $so, @done))