svn commit: samba r15287 - in
branches/SAMBA_4_0/source/build/smb_build: .
jelmer at samba.org
jelmer at samba.org
Wed Apr 26 16:31:41 GMT 2006
Author: jelmer
Date: 2006-04-26 16:31:40 +0000 (Wed, 26 Apr 2006)
New Revision: 15287
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15287
Log:
Simplify dependency detection code
Modified:
branches/SAMBA_4_0/source/build/smb_build/dot.pl
branches/SAMBA_4_0/source/build/smb_build/input.pm
branches/SAMBA_4_0/source/build/smb_build/output.pm
Changeset:
Modified: branches/SAMBA_4_0/source/build/smb_build/dot.pl
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/dot.pl 2006-04-26 16:23:32 UTC (rev 15286)
+++ branches/SAMBA_4_0/source/build/smb_build/dot.pl 2006-04-26 16:31:40 UTC (rev 15287)
@@ -13,7 +13,8 @@
my $res = "digraph samba4 {\n";
foreach my $part (values %{$depend}) {
- foreach my $elem (@{$part->{REQUIRED_SUBSYSTEMS}}) {
+ foreach my $elem (@{$part->{PUBLIC_DEPENDENCIES}},
+ @{$part->{PRIVATE_DEPENDENCIES}}) {
$res .= "\t\"$part->{NAME}\" -> \"$elem\";\n";
}
}
Modified: branches/SAMBA_4_0/source/build/smb_build/input.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/input.pm 2006-04-26 16:23:32 UTC (rev 15286)
+++ branches/SAMBA_4_0/source/build/smb_build/input.pm 2006-04-26 16:31:40 UTC (rev 15287)
@@ -118,29 +118,35 @@
$bin->{OUTPUT_TYPE} = "BINARY";
}
-my $level = "";
-
-sub calc_unique_deps($$$$)
+sub calc_unique_deps($$$$$$)
{
- sub calc_unique_deps($$$$);
- my ($name, $deps, $udeps, $withlibs) = @_;
+ sub calc_unique_deps($$$$$$);
+ my ($name, $INPUT, $deps, $udeps, $withlibs, $busy) = @_;
- print "$level-> $name\n" if ($ENV{SMB_BUILD_VERBOSE});
- $level.=" ";
+ foreach my $n (@$deps) {
+ if (grep (/^$n$/, @$busy)) {
+ print "($name) BUSY: $n, list: " . join(',', @$busy) . "\n";
+ # die("Recursive dependency for $dep->{NAME}");
+ next;
+ }
+ next if (grep /^$n$/, @$udeps);
+ my $dep = $INPUT->{$n};
- foreach my $dep (@{$deps}) {
- next if defined($udeps->{$$dep->{NAME}});
-
- if (defined ($$dep->{OUTPUT_TYPE}) &&
- ($withlibs or ($$dep->{OUTPUT_TYPE} eq "OBJ_LIST") or ($$dep->{OUTPUT_TYPE} eq "MERGEDOBJ") or ($$dep->{OUTPUT_TYPE} eq "STATIC_LIBRARY"))) {
- $udeps->{$$dep->{NAME}} = "BUSY";
- calc_unique_deps($$dep->{NAME}, $$dep->{DEPENDENCIES}, $udeps, $withlibs);
+ if (defined ($dep->{OUTPUT_TYPE}) &&
+ ($withlibs or
+ ($dep->{OUTPUT_TYPE} eq "OBJ_LIST") or
+ ($dep->{OUTPUT_TYPE} eq "MERGEDOBJ") or
+ ($dep->{OUTPUT_TYPE} eq "STATIC_LIBRARY"))) {
+ push (@$busy, $dep->{NAME});
+ calc_unique_deps($dep->{NAME}, $INPUT, $dep->{PUBLIC_DEPENDENCIES}, $udeps, $withlibs, $busy);
+ calc_unique_deps($dep->{NAME}, $INPUT, $dep->{PRIVATE_DEPENDENCIES}, $udeps, $withlibs, $busy);
+ pop (@$busy);
}
- $udeps->{$$dep->{NAME}} = $$dep;
+ # FIXME: Insert at the right position
+ push (@{$udeps}, $dep->{NAME});
+
}
-
- $level = substr($level, 1);
}
sub check($$$$$)
@@ -191,31 +197,19 @@
check_binary($INPUT, $part) if ($part->{TYPE} eq "BINARY");
}
- my %depend = %$INPUT;
-
- foreach my $part (values %depend) {
-
- # Generate list of dependencies
- $part->{DEPENDENCIES} = [];
-
- foreach my $key (@{$part->{PUBLIC_DEPENDENCIES}},
- @{$part->{PRIVATE_DEPENDENCIES}}) {
- die("$part->{NAME} has undefined dependency $key\n") if not defined($depend{$key});
- push (@{$part->{DEPENDENCIES}}, \$depend{$key});
- }
+ foreach my $part (values %$INPUT) {
+ $part->{UNIQUE_DEPENDENCIES} = [];
+ calc_unique_deps($part->{NAME}, $INPUT, $part->{PUBLIC_DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES}, 0, []);
+ calc_unique_deps($part->{NAME}, $INPUT, $part->{PRIVATE_DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES}, 0, []);
}
- foreach my $part (values %depend) {
- $part->{UNIQUE_DEPENDENCIES} = {};
- calc_unique_deps($part->{NAME}, $part->{DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES}, 0);
+ foreach my $part (values %$INPUT) {
+ $part->{UNIQUE_DEPENDENCIES_ALL} = [];
+ calc_unique_deps($part->{NAME}, $INPUT, $part->{PUBLIC_DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES_ALL}, 1, []);
+ calc_unique_deps($part->{NAME}, $INPUT, $part->{PRIVATE_DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES_ALL}, 1, []);
}
- foreach my $part (values %depend) {
- $part->{UNIQUE_DEPENDENCIES_ALL} = {};
- calc_unique_deps($part->{NAME}, $part->{DEPENDENCIES}, $part->{UNIQUE_DEPENDENCIES_ALL}, 1);
- }
-
- return \%depend;
+ return $INPUT;
}
1;
Modified: branches/SAMBA_4_0/source/build/smb_build/output.pm
===================================================================
--- branches/SAMBA_4_0/source/build/smb_build/output.pm 2006-04-26 16:23:32 UTC (rev 15286)
+++ branches/SAMBA_4_0/source/build/smb_build/output.pm 2006-04-26 16:31:40 UTC (rev 15287)
@@ -147,7 +147,8 @@
foreach $part (values %{$depend}) {
next if not defined($part->{OUTPUT_TYPE});
- foreach my $elem (values %{$part->{UNIQUE_DEPENDENCIES_ALL}}) {
+ foreach (@{$part->{UNIQUE_DEPENDENCIES_ALL}}) {
+ my $elem = $depend->{$_};
next if $elem == $part;
push(@{$part->{PUBLIC_CFLAGS}}, @{$elem->{CPPFLAGS}}) if defined(@{$elem->{CPPFLAGS}});
@@ -156,7 +157,8 @@
# Always import the CFLAGS and CPPFLAGS of the unique dependencies
- foreach my $elem (values %{$part->{UNIQUE_DEPENDENCIES}}) {
+ foreach (@{$part->{UNIQUE_DEPENDENCIES}}) {
+ my $elem = $depend->{$_};
next if $elem == $part;
push(@{$part->{LINK_LIST}}, $elem->{OUTPUT}) if defined($elem->{OUTPUT});
More information about the samba-cvs
mailing list