diff options
author | Ben Summers <ben@fluffy.co.uk> | 2005-10-14 08:50:54 +0000 |
---|---|---|
committer | Ben Summers <ben@fluffy.co.uk> | 2005-10-14 08:50:54 +0000 |
commit | 99f8ce096bc5569adbfea1911dbcda24c28d8d8b (patch) | |
tree | 049c302161fea1f2f6223e1e8f3c40d9e8aadc8b /infrastructure/makeparcels.pl |
Box Backup 0.09 with a few tweeks
Diffstat (limited to 'infrastructure/makeparcels.pl')
-rwxr-xr-x | infrastructure/makeparcels.pl | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/infrastructure/makeparcels.pl b/infrastructure/makeparcels.pl new file mode 100755 index 00000000..6cd3e8f2 --- /dev/null +++ b/infrastructure/makeparcels.pl @@ -0,0 +1,166 @@ +#!/usr/bin/perl + +use strict; +use lib 'infrastructure'; +use BoxPlatform; + +my $os_suffix = ''; +if($build_os eq 'OpenBSD') +{ + $os_suffix = `uname -r`; + $os_suffix =~ tr/0-9//cd; +} + +my @parcels; +my %parcel_contents; + +open PARCELS,"parcels.txt" or die "Can't open parcels file"; +{ + my $cur_parcel = ''; + while(<PARCELS>) + { + chomp; s/#.+\Z//; s/\s+\Z//; s/\s+/ /g; + next unless m/\S/; + + # omit bits on some platforms? + next if m/\AEND-OMIT/; + if(m/\AOMIT:(.+)/) + { + if($1 eq $build_os) + { + while(<PARCELS>) + { + last if m/\AEND-OMIT/; + } + } + next; + } + + # new parcel, or a new parcel definition? + if(m/\A\s+(.+)\Z/) + { + push @{$parcel_contents{$cur_parcel}},$1 + } + else + { + $cur_parcel = $_; + push @parcels,$_; + } + } +} +close PARCELS; + +# create parcels directory +mkdir "parcels",0755; +mkdir "parcels/scripts",0755; + +# write master makefile + +open MAKE,">Makefile" or die "Can't open master Makefile for writing"; + +print MAKE <<__E; +# +# AUTOMATICALLY GENERATED FILE +# do not edit! +# +# + +__E + +print MAKE "all:\t",join(' ',map {parcel_target($_)} @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 "\n"; + +print MAKE "test:\trelease/common/test\n\nrelease/common/test:\n\t./runtest.pl ALL release\n\n"; + +my $release_flag = BoxPlatform::make_flag('RELEASE'); + +for my $parcel (@parcels) +{ + my $target = parcel_target($parcel); + print MAKE $target,":\n"; + + my $dir = parcel_dir($parcel); + print MAKE "\tmkdir $dir\n"; + + 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) = split /\s+/; + + if($type eq 'bin') + { + my $exeext = ($build_os eq 'CYGWIN')?'.exe':''; + print MAKE "\t(cd bin/$name; $make_command $release_flag)\n"; + print MAKE "\tcp release/bin/$name/$name$exeext $dir\n"; + } + elsif ($type eq 'script') + { + print MAKE "\tcp $name $dir\n"; + # remove path from script name + $name =~ m~/([^/]+)\Z~; + $name = $1; + } + + print SCRIPT "install $name $install_into_dir\n"; + } + + close SCRIPT; + + chmod 0755,"parcels/scripts/install-$parcel"; + + my $root = parcel_root($parcel); + print MAKE "\tcp parcels/scripts/install-$parcel $dir\n"; + print MAKE "\t(cd parcels; tar cf - $root | gzip -9 - > $root.tgz )\n"; + + print MAKE "\n"; + + print MAKE "install-$parcel:\n"; + print MAKE "\t(cd $dir; ./install-$parcel)\n\n"; +} + +print MAKE <<__E; +install: + cat local/install.msg + +__E + +close MAKE; + +open INSTALLMSG,">local/install.msg" or die "Can't open install message file for writing"; +print INSTALLMSG <<__E; + +Parcels need to be installed separately, and as root. Type one of the following: + +__E + +for(@parcels) +{ + print INSTALLMSG " make install-".$_."\n"; +} +print INSTALLMSG "\n"; + +close INSTALLMSG; + +sub parcel_root +{ + $product_name.'-'.$product_version.'-'.$_[0].'-'.$build_os.$os_suffix +} + +sub parcel_dir +{ + 'parcels/'.parcel_root($_[0]) +} + +sub parcel_target +{ + parcel_dir($_[0]).'.tgz' +} |