summaryrefslogtreecommitdiff
path: root/infrastructure/makeparcels.pl.in
diff options
context:
space:
mode:
Diffstat (limited to 'infrastructure/makeparcels.pl.in')
-rwxr-xr-xinfrastructure/makeparcels.pl.in185
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'
-}