176 lines
4.2 KiB
Perl
176 lines
4.2 KiB
Perl
|
use strict;
|
||
|
use IO::File;
|
||
|
|
||
|
#
|
||
|
# genbldno.pl
|
||
|
#
|
||
|
# Arguments: none
|
||
|
#
|
||
|
# Purpose: generate a file called __bldnum__ and binplace to the source tree.
|
||
|
# the contents of this file will be a reference to the master build
|
||
|
# build number as specified by %SDXROOT%\published\sdk\inc\ntverp.h
|
||
|
# in the form "BUILDNUMBER=2257\n"
|
||
|
#
|
||
|
# Returns: 0 if success, non-zero otherwise
|
||
|
#
|
||
|
|
||
|
my( $BuildNumber, $QfeNumber );
|
||
|
my( $BldnumFileName ) = $ENV{ "SDXROOT" } . "\\__bldnum__";
|
||
|
my( $QfenumFileName ) = $ENV{ "SDXROOT" } . "\\__qfenum__";
|
||
|
|
||
|
# use unless as GetBuildNumber returns zero on failure
|
||
|
unless ( $BuildNumber = &GetBuildNumber ) {
|
||
|
print( "Failed to generate build number, exiting ...\n" );
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
# use if as GenerateBldnumFile returns zero for success
|
||
|
if ( &GenerateNumFile( $BldnumFileName, $BuildNumber, "BUILDNUMBER" ) ) {
|
||
|
print( "Failed to generate $BldnumFileName, exiting ...\n" );
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
|
||
|
# use unless as GetQfeNumber returns zero on failure
|
||
|
unless ( $QfeNumber = &GetQfeNumber ) {
|
||
|
print( "Failed to generate qfe number, exiting ...\n" );
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
# Generate the qfe number file from ntverp.h
|
||
|
if ( &GenerateNumFile( $QfenumFileName, $QfeNumber, "QFEBUILDNUMBER" ) ) {
|
||
|
print( "Failed to generate $QfenumFileName, exiting ...\n" );
|
||
|
exit( 1 );
|
||
|
}
|
||
|
|
||
|
# if we're here, we returned successfully
|
||
|
exit( 0 );
|
||
|
|
||
|
|
||
|
|
||
|
#
|
||
|
# GetBuildNumber
|
||
|
#
|
||
|
# Arguments: none
|
||
|
#
|
||
|
# Purpose: parse ntverp.h from published, return the build number
|
||
|
#
|
||
|
# Returns: the build number if successful, zero otherwise
|
||
|
#
|
||
|
sub GetBuildNumber
|
||
|
{
|
||
|
|
||
|
# find the file
|
||
|
my( $VerFile ) = $ENV{ "SDXROOT" } . "\\published\\sdk\\inc\\ntverp.h";
|
||
|
if ( ! -e $VerFile ) {
|
||
|
print( "$VerFile does not exist ...\n" );
|
||
|
return( 0 );
|
||
|
}
|
||
|
|
||
|
# parse the file
|
||
|
if ( -e $VerFile ) {
|
||
|
# open the file
|
||
|
if ( defined( my $fh = new IO::File $VerFile, "r" ) ) {
|
||
|
my( $ThisLine );
|
||
|
# read through the file
|
||
|
while ( $ThisLine = <$fh> ) {
|
||
|
# see if this is the build number defining line
|
||
|
if ( $ThisLine =~ /#define VER_PRODUCTBUILD\s*\/\* NT \*\/\s*(\d*)/ ) {
|
||
|
# $1 is now the build number
|
||
|
undef( $fh );
|
||
|
return( $1 );
|
||
|
}
|
||
|
}
|
||
|
undef( $fh );
|
||
|
} else {
|
||
|
print( "Failed to open $VerFile ...\n" );
|
||
|
return( 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# if we're here, we didn't find a build number in the VerFile
|
||
|
print( "Failed to find a build number in $VerFile ..." );
|
||
|
return( 0 );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
#
|
||
|
# GetQfeNumber
|
||
|
#
|
||
|
# Arguments: none
|
||
|
#
|
||
|
# Purpose: parse ntverp.h from published, return the qfe number
|
||
|
#
|
||
|
# Returns: the qfe number if successful, zero otherwise
|
||
|
#
|
||
|
sub GetQfeNumber
|
||
|
{
|
||
|
|
||
|
# find the file
|
||
|
my( $VerFile ) = $ENV{ "SDXROOT" } . "\\published\\sdk\\inc\\ntverp.h";
|
||
|
if ( ! -e $VerFile ) {
|
||
|
print( "$VerFile does not exist ...\n" );
|
||
|
return( 0 );
|
||
|
}
|
||
|
|
||
|
# parse the file
|
||
|
if ( -e $VerFile ) {
|
||
|
# open the file
|
||
|
if ( defined( my $fh = new IO::File $VerFile, "r" ) ) {
|
||
|
my( $ThisLine );
|
||
|
# read through the file
|
||
|
while ( $ThisLine = <$fh> ) {
|
||
|
# see if this is the qfe number defining line
|
||
|
if ( $ThisLine =~ /#define VER_PRODUCTBUILD_QFE\s*(\d*)/ ) {
|
||
|
# $1 is now the build number
|
||
|
undef( $fh );
|
||
|
return( $1 );
|
||
|
}
|
||
|
}
|
||
|
undef( $fh );
|
||
|
} else {
|
||
|
print( "Failed to open $VerFile ...\n" );
|
||
|
return( 0 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# if we're here, we didn't find a qfe number in the VerFile
|
||
|
print( "Failed to find a qfe number in $VerFile ..." );
|
||
|
return( 0 );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
#
|
||
|
# GenerateNumFile
|
||
|
#
|
||
|
# Arguments: $NumFileName, $Number, $NumberType
|
||
|
#
|
||
|
# Purpose: write the build number to the binplaced build number file, in
|
||
|
# the following format: "$NumberType=2250"
|
||
|
#
|
||
|
# Returns: 0 if successful, non-zero otherwise
|
||
|
#
|
||
|
sub GenerateNumFile
|
||
|
{
|
||
|
|
||
|
# get passed args
|
||
|
my( $NumFileName, $Number, $NumberType ) = @_;
|
||
|
|
||
|
# open the file for write
|
||
|
if ( defined( my $fh = new IO::File $NumFileName, "w" ) ) {
|
||
|
print( $fh "$NumberType=$Number\n" );
|
||
|
# success
|
||
|
undef( $fh );
|
||
|
return( 0 );
|
||
|
}
|
||
|
|
||
|
# if we're here, we didn't create the file
|
||
|
print( "Failed to write $NumFileName ..." );
|
||
|
return( 1 );
|
||
|
|
||
|
}
|
||
|
|
||
|
|