[Box Backup-commit] COMMIT r2241 - box/trunk/infrastructure

boxbackup-dev at fluffy.co.uk boxbackup-dev at fluffy.co.uk
Thu Aug 21 11:10:56 BST 2008


Author: chris
Date: 2008-08-21 11:10:56 +0100 (Thu, 21 Aug 2008)
New Revision: 2241

Modified:
   box/trunk/infrastructure/makeparcels.pl.in
Log:
Remove built binaries and libraries in clean target, so that it behaves 
in a more conventional way, making way for a complete rebuild.

Add proper parcel dependencies in GNU make to allow rebuilding just 
those parcels whose contents have changed. "make" now does what "make 
clean" would have done before, i.e. rebuild just those files which have 
changed, and their corresponding parcels.

Use cp -p to copy files into parcel directory, so that files which have 
not changed will not cause the parcel tarball containing them to be 
rebuilt (-p is specified by POSIX 2004).


Modified: box/trunk/infrastructure/makeparcels.pl.in
===================================================================
--- box/trunk/infrastructure/makeparcels.pl.in	2008-08-21 09:59:17 UTC (rev 2240)
+++ box/trunk/infrastructure/makeparcels.pl.in	2008-08-21 10:10:56 UTC (rev 2241)
@@ -101,6 +101,7 @@
 	print MAKE "\trm -rf ",parcel_dir($parcel),"\n";
 	print MAKE "\trm -f ",parcel_target($parcel),"\n";
 }
+print MAKE "\tfind release debug -type f | xargs -r rm\n";
 print MAKE "\n";
 
 print MAKE "test:\trelease/common/test\n\nrelease/common/test:\n\t./runtest.pl ALL release\n\n";
@@ -110,19 +111,16 @@
 for my $parcel (@parcels)
 {
 	my $target = parcel_target($parcel);
-	print MAKE "build-$parcel:\t$target\n\n";
-	print MAKE $target,":\n";
-	
 	my $dir = parcel_dir($parcel);
-	print MAKE "\ttest -d $dir || mkdir $dir\n";
-	
+	my @parcel_deps;
+
 	unless ($target_windows)
 	{
 		open SCRIPT,">parcels/scripts/install-$parcel" or die
 			"Can't open installer script for $parcel for writing";
 		print SCRIPT "#!/bin/sh\n\n";
 	}
-	
+
 	for(@{$parcel_contents{$parcel}})
 	{
 		my ($type,$name,$dest) = split /\s+/;
@@ -136,20 +134,65 @@
 		if($type eq 'bin')
 		{
 			my $exeext = $platform_exe_ext;
-			print MAKE "\t(cd bin/$name; \$(MAKE) $release_flag)\n";
-			print MAKE "\tcp release/bin/$name/$name$exeext $dir\n";
+			print MAKE <<EOF;
+$dir/$name$exeext: release/bin/$name/$name$exeext
+	mkdir -p $dir
+	cp -p release/bin/$name/$name$exeext $dir
+
+.PHONY: release/bin/$name/$name$exeext
+release/bin/$name/$name$exeext:
+	(cd bin/$name; \$(MAKE) $release_flag)
+
+EOF
+			push @parcel_deps, "$dir/$name$exeext";
 		}
 		elsif ($type eq 'script')
 		{
+			my $fullpath = $name;
+			my $filename = $name;
+			# remove path from script name
+			$filename =~ s{.*/}{};
+
+			print MAKE <<EOF;
+$dir/$filename: $fullpath
+	mkdir -p $dir
+EOF
+
 			if ($optional)
 			{
-				print MAKE "\ttest -r $name " .
-					"&& cp $name $dir || true\n";
+				print MAKE "\ttest -r $fullpath " .
+					"&& cp -p $fullpath $dir || true\n";
 			}
 			else
 			{
-				print MAKE "\tcp $name $dir\n";
+				print MAKE "\tcp -p $fullpath $dir\n";
 			}
+
+			print MAKE "\n";
+
+			push @parcel_deps, "$dir/$filename";
+		}
+	}
+
+	print MAKE <<EOF;
+build-$parcel:	$target
+
+$target: @parcel_deps
+	test -d $dir || mkdir $dir
+EOF
+	
+	for(@{$parcel_contents{$parcel}})
+	{
+		my ($type,$name,$dest) = split /\s+/;
+		my $optional = '';
+
+		if ($type eq 'optional')
+		{
+			($optional,$type,$name,$dest) = split /\s+/;
+		}
+
+		if ($type eq 'script')
+		{
 			# remove path from script name
 			$name =~ s{.*/}{};
 		}




More information about the Boxbackup-commit mailing list