/usr/local/CPAN/kif/KIF/Build/alpha.pm
#!/usr/bin/perl
#
# Revision History:
#
# 26-Nov-2002 Dick Munroe (munroe@csworks.com)
# Initial Version Created.
#
# 18-May-2003 Dick Munroe (munroe@csworks.com)
# Make sure that package variables can't leak.
#
# 19-May-2003 Dick Munroe (munroe@csworks.com)
# Use Carp.
# Isolate kif related classes in a KIF namespace.
#
package KIF::Build::alpha ;
use vars qw($VERSION @ISA) ;
our $VERSION = "1.03" ;
use strict ;
use Carp ;
use File::Copy ;
use FileHandle ;
use KIF::Build ;
our @ISA = qw(KIF::Build) ;
sub new
{
my $thePackage = shift ;
my $theObject = $thePackage->SUPER::new(@_) ;
#
# Figure out what bootloader is in use by this system and
# allocate an object to be used when (or if) the boot loader
# configuration files are modified.
#
my @theBootloaderConfigurationFiles = (["/etc/aboot.conf", "/boot/etc/aboot.conf"], "/etc/milo.conf") ;
my $theBootloaderIndex ;
my $theIndex ;
my $theNumberOfBootloaders ;
for ($theIndex = 0; $theIndex < scalar(@theBootloaderConfigurationFiles); $theIndex++)
{
if (ref($theBootloaderConfigurationFiles[$theIndex]) eq "ARRAY")
{
foreach (@{$_})
{
if (-e $_)
{
$theNumberOfBootloaders++ ;
$theBootloaderIndex = $theIndex ;
last ;
} ;
} ;
}
elsif (-e $_)
{
$theNumberOfBootloaders++ ;
$theBootloaderIndex = $theIndex ;
} ;
} ;
#
# It is possible to use BOTH MILO and aboot on the same system
# Check to see if MILO was used to boot this system and choose
# MILO if necessary.
#
# FIXME this is actually NOT known to work. Can someone with
# a MILO boot configuration check to see if this is actually
# working?
#
if ($theNumberOfBootloaders > 1)
{
my $theFileHandle = new FileHandle "< /proc/cmdline" or croak "Can't open /proc/cmdline" ;
$theBootloaderIndex = 0 ;
while ($_ = $theFileHandle->getline)
{
if (m/BOOT_IMAGE/)
{
$theBootloaderIndex = 1 ;
last ;
} ;
} ;
undef $theFileHandle ;
} ;
#
# Now allocate an object used to manipulate that particular file.
#
my $theBootloader ;
$theBootloader = new Bootloader::aboot if ($theBootloaderIndex == 0) ;
$theBootloader = new Bootloader::MILO if ($theBootloaderIndex == 1) ;
croak "No bootloader object allocated" if (!defined($theBootloader)) ;
$theObject->bootloader($theBootloader) ;
return $theObject ;
} ;
sub doMovefiles
{
my $theObject = shift ;
$theObject->SUPER::doMovefiles() ;
my $theBuildDirectory = $theObject->buildDirectory() ;
my $theReleaseTag = $theObject->releaseTag() ;
if (-e "$theBuildDirectory/vmlinux")
{
$theObject->run("gzip -c $theBuildDirectory/vmlinux > /boot/vmlinuz-$theReleaseTag") ;
} ;
} ;
sub validate
{
my $theObject = shift ;
croak '/boot/vmlinuz must exist.' if (!-e '/boot/vmlinuz') ;
croak '/boot/vmlinuz must be a link.' if (!-l '/boot/vmlinuz') ;
$theObject->SUPER::validate() ;
} ;
1;