blob: beb86392102e6f125170b2d29b2f25a7760a3cdc [file] [log] [blame]
# ==============================================================================
# Common Perl routines for the Perl helper scripts.
# ==============================================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ==============================================================================
##########################################################################
# INCLUDED LIBRARY FILES
use File::Basename;
use XML::XPath;
#-------------------------------------------------------------------------------
# FUNCTION cmn_IniDir
# DOES Returns the directory where the initialization file is. The
# dir is application directory of the current user
sub cmn_IniDir
{
my $DirAppData='';
# The registry is the safe way of retrieving the Application data directory,
# but we let the environment variable %APPDATA% have the priority. This
# should work on every Win32 platform.
if ($ENV{'APPDATA'})
{
$DirAppData = $ENV{'APPDATA'};
}
else
{
my $Key = 'HKCU/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders';
my $Value = 'AppData';
$DirAppData = &cmn_RegGetValue ($Key, $Value);
}
return "$DirAppData\\Subversion";
}
#-------------------------------------------------------------------------------
# FUNCTION cmn_RegGetValue
# RECEIVES The Key and value.
# DOES Returns a value data from the registry. If the value is
# omitted then the default value data for the key is returned
sub cmn_RegGetValue
{
use Win32::TieRegistry;
my ($Key, $Value) = @_;
# Replace back slashes with slashes
$Key =~ s/\\/\//g;
# Do some filtering if the caller includes HKLM in stead of HKEY_LOCAL_MACHINE
# or the Win32::TieRegistry shortcut LMachine and so on
$Key =~ s/^HKCC/CConfig/;
$Key =~ s/^HKCR/Classes/;
$Key =~ s/^HKCU/CUser/;
$Key =~ s/^HKDD/DynData/;
$Key =~ s/^HKLM/LMachine/;
$Key =~ s/^HKPD/PerfData/;
$Key =~ s/^HKUS/Users/;
$Registry->Delimiter("/");
return $Registry -> {"$Key//$Value"};
}
#-------------------------------------------------------------------------------
# FUNCTION incCmn_Template
# RECEIVES An hash table with values, template name
# RETURNS The contents of the template with the received values
# DOES Reading from a template and fills in values in <%..%> tags if any
sub cmn_Template
{
my ($sFile, $sValues) = @_;
my $sFileCnt='';
local $/;
local *FH_TPL;
open (FH_TPL, "< $sFile\0") || return;
$sFileCnt = <FH_TPL>;
close (FH_TPL);
$sFileCnt =~ s{<% (.*?) %>}
{exists ( $sValues->{$1}) ? $sValues->{$1} : '' }gsex;
return $sFileCnt;
}
#-------------------------------------------------------------------------------
# FUNCTION cmn_ValuePathfile
# DOES Get and returns a ISPP variable value from a file
sub cmn_ValuePathfile
{
my $IssFile = $_[0];
my $VarISPP = $_[1];
my $RetVal='';
my $ErrNoPathFile='';
# my $IssFile = "..\\svn_dynamics.iss";
$ErrNoPathFile="ERROR: $IssFile not found. please, make sure that it's ";
$ErrNoPathFile=$ErrNoPathFile . "where it\n should to be\n";
$VarISPP = "#define " . $VarISPP;
open (FH_ISSFILE, $IssFile) || die $ErrNoPathFile;
while (<FH_ISSFILE>)
{
chomp($_);
if (/^$VarISPP/)
{
$_ =~ s/^$VarISPP//;
$_ =~ s/^\s+//;
$_ =~ s/\s+$//;
$_ =~ s/^"//;
$_ =~ s/"$//;
$RetVal = $_;
last;
}
}
close (FH_ISSFILE);
return $RetVal;
}
#FUNCTION UpdateXML
#DOES Change XML content and attributes
sub UpdateXMLFile
{
#my $XMLFile = '..\\BuildSubversion\\BuildSubversion.wixproj';
my $XMLFile = $_[0];
my $XMLPath = $_[1];
my $XMLNewValue = $_[2];
my $PINode = $_[3];
#my $XMLType = $_[3];
my $xp = XML::XPath->new(filename=>$XMLFile);
if(!$PINode) {
$xp->setNodeText($XMLPath, $XMLNewValue);
#output node by node to rebuild the file
my $nodeset = $xp->find('/');
open(MYFILE, '>'.$XMLFile);
foreach my $node ($nodeset->get_nodelist) {
print MYFILE XML::XPath::XMLParser::as_string( $node );
}
close(MYFILE);
} else {
my $XMLOut = '';
my $OrigPI = $xp->findvalue( $XMLPath );
#build the file into a string
my $nodeset = $xp->find('/');
foreach my $node ($nodeset->get_nodelist) {
$XMLOut = $XMLOut.XML::XPath::XMLParser::as_string( $node );
}
$XMLOut =~ s/$OrigPI/$XMLNewValue /;
open(MYFILE, '>'.$XMLFile);
print MYFILE "<?xml version=\"1.0\"?>\n"; #this is hard coded - ASSUMING that PI's are being handled for wxs files
print MYFILE $XMLOut;
close(MYFILE);
}
}
#-------------------------------------------------------------------------
# FUNCTION MkDirP
# DOES Making a directory. Similar to unix's mkdir -p
sub MkDirP
{
my $Dir=$_[0];
my @SubPaths;
if (! -e $Dir)
{
@SubPaths = split (/\\/, $Dir);
my $Dir2Make='';
for (@SubPaths)
{
if ($Dir2Make)
{
$Dir2Make = "$Dir2Make\\$_";
}
else
{
$Dir2Make = $_;
}
if (! -e $Dir2Make)
{
system ("mkdir $Dir2Make");
}
}
}
}
#-------------------------------------------------------------------------------
# FUNCTION PathSetupOut
# DOES Finding and returning the current svn.exe path as of
# ..\svn_iss_dyn.iss
sub PathSetupOut
{
my $PathWinIsPack='';
my $Pwd='';
# Get absolute path of the current PWD's parent
$PathWinIsPack=getcwd;
$Pwd=basename($PathWinIsPack);
$PathWinIsPack =~ s/\//\\/g;
$PathWinIsPack =~ s/\\$Pwd$//;
my $SetupOut = "$PathWinIsPack\\" . &cmn_ValuePathfile('svn_dynamics.ini', 'path_setup_out');
#Make the out dir in "$RootSvnBook\src if needed
&MkDirP ("$SetupOut") unless (-e "$SetupOut");
# if ( ! -e "../$SetupOut")
if ( ! -e "$SetupOut")
{
die "ERROR: Could not find $SetupOut in svn_dynamics.ini\n";
}
return $SetupOut;
}
1;