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