Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
################################################################################ CLASS BuildFile# Processes & Stores information from the build.pl file### By convention all members/methods that begin with an '_' are private.################################################################################package DeployUtils::BuildFile;use strict;use File::Basename;use DeployUtils::Logger;#==============================================================================# Constructor#==============================================================================sub new{my $obclass = shift;my $class = ref($obclass) || $obclass;my $buildFile = shift;$buildFile = "build.pl" if ( ! defined($buildFile) );LogDebug("BuildFile::new Instantiating new object of class $class");bless my $self = {_FILENAME => $buildFile,_BUILDNAME => "",_BUILDNAME_LC => "",_BUILDVERSION => "",_PLATFORMS => [],_INTERFACE => "",_DIRTREE => [],_PREVVERSION => "",_DPKGARCHIVE => {}} => ( $class );$self->_buildInfo();return($self);} # newsub _buildInfo{my $self = shift;my $temp;open( BUILD, $self->{_FILENAME}) || LogError("Cannot Open $self->{_FILENAME}");nextline:while ( <BUILD> ){chomp;goto nextline if ( /^\s*(\#|$)/ );if ( /BuildName\s*\(\s*[\'\"](.+?)[\'\"]\s*,\s*[\'\"](.+?)[\'\"]/){$self->{_BUILDNAME} = $self->{_BUILDNAME_LC} = $1;$self->{_BUILDNAME_LC} =~ tr/A-Z/a-z/;$self->{_BUILDVERSION} = $2;LogDebug("BuildFile::_buildInfo Set BuildName = $self->{_BUILDNAME}");LogDebug("BuildFile::_buildInfo Set BuildNameLc = $self->{_BUILDNAME_LC}");LogDebug("BuildFile::_buildInfo Set BuildVersion = $self->{_BUILDVERSION}");}elsif ( /(BuildPkgArchive|LinkPkgArchive)\s*\(\s*\'([^\'\"]*)\'\s*,\s*\'([^\'\"]*).*$/ ){my ( $type, $module, $version ) = ( $1, $2, $3 );LogError("BuildFile::_buildInfo Duplicate Dpkg_Archive found $module") if ( defined($self->{_DPKGARCHIVE}{$module}) );# we assume the version string could contain the following# format types## N.N.N.pp# N.N.N.ppp# N.N.N.pppp# N.N.N# beta# beta.ppp# *.cots# *.singapore#my ( $proj, $versionNum ) = ( "", "");if ( $version =~ m/^([0-9]*\.[0-9]*\.[0-9]*)\.([a-z]{2,4})$/ ) # N.N.N.pp, N.N.N.ppp, N.N.N.pppp{$versionNum = "$1";$proj = "$2";}elsif ( $version =~ m/^[0-9]*\.[0-9]*\.[0-9]*$/ ) # N.N.N{$versionNum = "$version";}elsif ( $version =~ m/^[aA-zZ]*\.[a-z][a-z][a-z]$/ ) # beta.ppp{($versionNum, $proj) = split /\./, $version;}elsif ( $version =~ m/^[aA-zZ]*$/ ) # beta{$versionNum = "$version";}elsif ( $version =~ m/^(.*)\.(cots|singapore)$/ ) # *.cots, #.singapore{$versionNum = "$1";$proj = "$2";}else{# here we just assume the version is the version# what else can we do...$versionNum = $version;}$self->{_DPKGARCHIVE}{$module}{type} = $type;$self->{_DPKGARCHIVE}{$module}{version} = $versionNum;$self->{_DPKGARCHIVE}{$module}{versionFull} = $version;$self->{_DPKGARCHIVE}{$module}{proj} = $proj;LogDebug("BuildFile::_buildInfo Set Added dpkg Archive $module = $type, $versionNum, $proj");}elsif ( /BuildPlatforms\s*\(\s*(.*)\s*\)/ ){$temp = $1;$temp =~ s/[\'\"]//g;$temp =~ s/\s//g;push(@{$self->{_PLATFORMS}}, split(",", $temp));LogDebug("BuildFile::_buildInfo Set Platforms $temp");}elsif ( /BuildInterface\s*\(\s*[\'\"](.+?)[\'\"]/ ){$self->{_INTERFACE} = $1;LogDebug("BuildFile::_buildInfo Set Interface to $self->{_INTERFACE}");}elsif ( /BuildDirTree\s*\(\s*(.*)\s*\)/ ){$temp = $1;$temp =~ s/[\'\"]//g;$temp =~ s/\s//g;push(@{$self->{_DIRTREE}}, split(",", $temp));LogDebug("BuildFile::_buildInfo Set DirTree to $temp");}elsif ( /BuildPreviousVersion\s*\(\s*[\'\"](.+?)[\'\"]/ ){$self->{_PREVVERSION} = $1;LogDebug("BuildFile::_buildInfo Set BuildPrevVersion = $self->{_PREVVERSION}");}}}#==============================================================================# dumpSelf, debugging member to dump selfs hash#==============================================================================sub dumpSelf{use Data::Dumper;my $self = shift;print Data::Dumper->Dump([$self], [ref($self)]);} # dumpSelf# Returns the buildName as a stringsub getBuildName{my $self = shift;return $self->{_BUILDNAME};}# Returns the buildName in Lower case as a stringsub getBuildNameLc{my $self = shift;return $self->{_BUILDNAME_LC};}# Returns the buildVersion as a stringsub getBuildVersion{my $self = shift;return $self->{_BUILDVERSION};}# Returns the Interface as a stringsub getInterface{my $self = shift;return $self->{_INTERFACE};}# Returns the previous Version as a stringsub getPreviousVersion{my $self = shift;return $self->{_PREVVERSION};}# Returns an array containing the platforms definedsub getPlatforms{my $self = shift;return @{$self->{_PLATFORMS}};}# Returns an array containing the DirTreesub getDirTree{my $self = shift;return @{$self->{_DIRTREE}};}# returns a list of Modules in the DpkgArchive Hashsub getDpkgArchiveList{my $self = shift;return sort keys %{$self->{_DPKGARCHIVE}};}# returns a reference to a hash that contains the details of for the module passed# The hash contains keys for type, version, projsub getDpkgArchiveInfo{my $self = shift;my $module = shift;if ( ! defined($module) || ! defined($self->{_DPKGARCHIVE}{$module}) ){return undef;}else{return \%{$self->{_DPKGARCHIVE}{$module}};}}# Returns a complete copy of the DPKG_Archive hashsub getDpkgArchiveHash{my $self = shift;return %{$self->{_DPKGARCHIVE}};}sub getDpkgArchiveType{my $self = shift;my $module = shift;if ( ! defined($module) || ! defined($self->{_DPKGARCHIVE}{$module}) ){return undef;}else{return $self->{_DPKGARCHIVE}{$module}{type};}}sub getDpkgArchiveVersionNum{my $self = shift;my $module = shift;if ( ! defined($module) || ! defined($self->{_DPKGARCHIVE}{$module}) ){return undef;}else{return $self->{_DPKGARCHIVE}{$module}{version};}}sub getDpkgArchiveVersionFull{my $self = shift;my $module = shift;if ( ! defined($module) || ! defined($self->{_DPKGARCHIVE}{$module}) ){return undef;}else{return $self->{_DPKGARCHIVE}{$module}{versionFull};}}sub getDpkgArchiveVersionProj{my $self = shift;my $module = shift;if ( ! defined($module) || ! defined($self->{_DPKGARCHIVE}{$module}) ){return undef;}else{return $self->{_DPKGARCHIVE}{$module}{proj};}}1;