diff options
author | Chris Wilson <chris+github@qwirx.com> | 2008-08-21 10:10:56 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2008-08-21 10:10:56 +0000 |
commit | 616e3411c7c1ea9aa98b80b4a77ecefbc1ca4a20 (patch) | |
tree | 0a25fee270e7866650dabe7ab90788ddb5c3468a /infrastructure/makeparcels.pl.in | |
parent | b2fa3dbac6254dd6862c11fc53125a83c9c9b2fc (diff) |
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).
Diffstat (limited to 'infrastructure/makeparcels.pl.in')
-rwxr-xr-x | infrastructure/makeparcels.pl.in | 65 |
1 files changed, 54 insertions, 11 deletions
diff --git a/infrastructure/makeparcels.pl.in b/infrastructure/makeparcels.pl.in index 125ff346..33c72d4c 100755 --- a/infrastructure/makeparcels.pl.in +++ b/infrastructure/makeparcels.pl.in @@ -101,6 +101,7 @@ for my $parcel (@parcels) 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 @@ my $release_flag = BoxPlatform::make_flag('RELEASE'); 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 @@ for my $parcel (@parcels) 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{.*/}{}; } |