diff options
Diffstat (limited to 'infrastructure/makeparcels.pl.in')
-rwxr-xr-x | infrastructure/makeparcels.pl.in | 185 |
1 files changed, 147 insertions, 38 deletions
diff --git a/infrastructure/makeparcels.pl.in b/infrastructure/makeparcels.pl.in index 125ff346..e9e240db 100755 --- a/infrastructure/makeparcels.pl.in +++ b/infrastructure/makeparcels.pl.in @@ -98,71 +98,194 @@ print MAKE "all:\t",join(' ',map {"build-".$_} @parcels),"\n\n"; print MAKE "clean:\n"; for my $parcel (@parcels) { - print MAKE "\trm -rf ",parcel_dir($parcel),"\n"; - print MAKE "\trm -f ",parcel_target($parcel),"\n"; + print MAKE "\trm -rf ", BoxPlatform::parcel_dir($parcel), "\n"; + print MAKE "\trm -f ", BoxPlatform::parcel_target($parcel), "\n"; } -print MAKE "\n"; -print MAKE "test:\trelease/common/test\n\nrelease/common/test:\n\t./runtest.pl ALL release\n\n"; +if ($build_os eq 'CYGWIN') +{ + print MAKE "\tfind release debug -type f | xargs -r rm -f\n"; +} +else +{ + print MAKE "\tfind release debug -type f -exec rm -f {} \\;\n"; +} + +print MAKE <<__END_OF_FRAGMENT; + \$(MAKE) -C docs clean + +test: release/common/test + +release/common/test: + ./runtest.pl ALL release + +.PHONY: docs +docs: + \$(MAKE) -C docs + +__END_OF_FRAGMENT 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 $target = BoxPlatform::parcel_target($parcel); + my $dir = BoxPlatform::parcel_dir($parcel); + 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+/; - my $optional = ''; + my @args = split /\s+/; + + my ($type,$name,$dest) = @args; + my $optional = 0; + my $install = 1; if ($type eq 'optional') { - ($optional,$type,$name,$dest) = split /\s+/; + $optional = 1; + shift @args; + ($type,$name,$dest) = @args; + } + + if ($type eq 'noinstall') + { + $install = 0; + shift @args; + ($type,$name,$dest) = @args; } 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"; + } + elsif($type eq 'man') + { + print MAKE <<EOF; +$dir/${name}.gz: docs/man/${name}.gz + mkdir -p $dir + cp -p docs/man/${name}.gz $dir + +EOF + # Releases have the docs pre-made, but users + # may want to rebuild them for some reason. + print MAKE <<EOF; +.PHONY: docs/man/${name}.gz +docs/man/${name}.gz: + \$(MAKE) -C docs man/${name}.gz + +EOF + push @parcel_deps, "$dir/${name}.gz"; + } + } + + print MAKE <<EOF; +build-$parcel: $target + +$target: @parcel_deps + test -d $dir || mkdir $dir +EOF + + for(@{$parcel_contents{$parcel}}) + { + my @args = split /\s+/; + + my ($type,$name,$dest) = @args; + + my $optional = 0; + my $install = 1; + + if ($type eq 'optional') + { + $optional = 1; + shift @args; + ($type,$name,$dest) = @args; + } + + if ($type eq 'noinstall') + { + $install = 0; + shift @args; + ($type,$name,$dest) = @args; + } + + + if ($type eq 'script') + { # remove path from script name $name =~ s{.*/}{}; } - unless ($target_windows) + if ($type eq 'man') + { + $name =~ /([0-9])$/; + $dest = "man/man$1"; + $name =~ s/$/\.gz/; + } + + if ($install and not $target_windows) { my $local_install_dir = $install_into_dir; if (defined $dest) { - $local_install_dir = "@prefix@/$dest"; + if ($dest =~ m,^/,) + { + # Don't add $prefix if $dest is a literal path + $local_install_dir = $dest; + } + else + { + $local_install_dir = "@prefix@/$dest"; + } } + print SCRIPT "mkdir -p " . + "\${DESTDIR}$local_install_dir/\n"; print SCRIPT "install $name " . - "\$DESTDIR$local_install_dir\n"; + "\${DESTDIR}$local_install_dir\n"; } } @@ -172,7 +295,7 @@ for my $parcel (@parcels) chmod 0755,"parcels/scripts/install-$parcel"; } - my $root = parcel_root($parcel); + my $root = BoxPlatform::parcel_root($parcel); unless ($target_windows) { @@ -213,17 +336,3 @@ print INSTALLMSG "\n"; close INSTALLMSG; -sub parcel_root -{ - $product_name.'-'.$product_version.'-'.$_[0].'-'.$target_os -} - -sub parcel_dir -{ - 'parcels/'.parcel_root($_[0]) -} - -sub parcel_target -{ - parcel_dir($_[0]).'.tgz' -} |