Changeset 2241

Show
Ignore:
Timestamp:
21/08/2008 11:10:56 (5 months ago)
Author:
chris
Message:

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).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • box/trunk/infrastructure/makeparcels.pl.in

    r2064 r2241  
    102102        print MAKE "\trm -f ",parcel_target($parcel),"\n"; 
    103103} 
     104print MAKE "\tfind release debug -type f | xargs -r rm\n"; 
    104105print MAKE "\n"; 
    105106 
     
    111112{ 
    112113        my $target = parcel_target($parcel); 
    113         print MAKE "build-$parcel:\t$target\n\n"; 
    114         print MAKE $target,":\n"; 
    115          
    116114        my $dir = parcel_dir($parcel); 
    117         print MAKE "\ttest -d $dir || mkdir $dir\n"; 
    118          
     115        my @parcel_deps; 
     116 
    119117        unless ($target_windows) 
    120118        { 
     
    123121                print SCRIPT "#!/bin/sh\n\n"; 
    124122        } 
     123 
     124        for(@{$parcel_contents{$parcel}}) 
     125        { 
     126                my ($type,$name,$dest) = split /\s+/; 
     127                my $optional = ''; 
     128 
     129                if ($type eq 'optional') 
     130                { 
     131                        ($optional,$type,$name,$dest) = split /\s+/; 
     132                } 
     133 
     134                if($type eq 'bin') 
     135                { 
     136                        my $exeext = $platform_exe_ext; 
     137                        print MAKE <<EOF; 
     138$dir/$name$exeext: release/bin/$name/$name$exeext 
     139        mkdir -p $dir 
     140        cp -p release/bin/$name/$name$exeext $dir 
     141 
     142.PHONY: release/bin/$name/$name$exeext 
     143release/bin/$name/$name$exeext: 
     144        (cd bin/$name; \$(MAKE) $release_flag) 
     145 
     146EOF 
     147                        push @parcel_deps, "$dir/$name$exeext"; 
     148                } 
     149                elsif ($type eq 'script') 
     150                { 
     151                        my $fullpath = $name; 
     152                        my $filename = $name; 
     153                        # remove path from script name 
     154                        $filename =~ s{.*/}{}; 
     155 
     156                        print MAKE <<EOF; 
     157$dir/$filename: $fullpath 
     158        mkdir -p $dir 
     159EOF 
     160 
     161                        if ($optional) 
     162                        { 
     163                                print MAKE "\ttest -r $fullpath " . 
     164                                        "&& cp -p $fullpath $dir || true\n"; 
     165                        } 
     166                        else 
     167                        { 
     168                                print MAKE "\tcp -p $fullpath $dir\n"; 
     169                        } 
     170 
     171                        print MAKE "\n"; 
     172 
     173                        push @parcel_deps, "$dir/$filename"; 
     174                } 
     175        } 
     176 
     177        print MAKE <<EOF; 
     178build-$parcel:  $target 
     179 
     180$target: @parcel_deps 
     181        test -d $dir || mkdir $dir 
     182EOF 
    125183         
    126184        for(@{$parcel_contents{$parcel}}) 
     
    134192                } 
    135193 
    136                 if($type eq 'bin') 
    137                 { 
    138                         my $exeext = $platform_exe_ext; 
    139                         print MAKE "\t(cd bin/$name; \$(MAKE) $release_flag)\n"; 
    140                         print MAKE "\tcp release/bin/$name/$name$exeext $dir\n"; 
    141                 } 
    142                 elsif ($type eq 'script') 
    143                 { 
    144                         if ($optional) 
    145                         { 
    146                                 print MAKE "\ttest -r $name " . 
    147                                         "&& cp $name $dir || true\n"; 
    148                         } 
    149                         else 
    150                         { 
    151                                 print MAKE "\tcp $name $dir\n"; 
    152                         } 
     194                if ($type eq 'script') 
     195                { 
    153196                        # remove path from script name 
    154197                        $name =~ s{.*/}{};