blob: e2f35cd6201834dec465d12f8a8fdeee2f8a60a8 [file] [log] [blame]
#!perl
################################################################################
# FILE set_version.pl
# PURPOSE Setting version info on misc. files for WiX Setup
# ====================================================================
# 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 strict;
use Cwd;
use Win32;
require 'cmn.pl';
use File::Basename;
################################################################################
# FUNCTION DECLARATIONS
sub Main;
sub PathSetupOut;
sub PathSvn;
sub SetVerSvnIss;
sub SetVersion;
sub SvnVersion;
################################################################################
# CONSTANTS AND GLOBAL VARIABLES
my $g_AutoRun='';
##########################################################################
# PROGRAM ENTRANCE
Main;
################################################################################
# FUNCTION DEFINITIONS
#-------------------------------------------------------------------------------
# FUNCTION Main
# DOES This is the program's main function
sub Main
{
my $Arg=$ARGV[0];
if ($Arg eq "-a")
{
$g_AutoRun="y";
}
my ($SvnVersion, $SvnRevision) = &SetVersion;
my $PathSetupOut = &PathSetupOut;
if (! $g_AutoRun)
{
print "Setting version $SvnVersion and revision $SvnRevision on...\n";
}
#Set version info on svn.iss
&SetVerSvnIss($SvnVersion, $SvnRevision);
}
#-------------------------------------------------------------------------------
# FUNCTION PathSvn
# DOES Finding and returning the current svn.exe path as of
# ..\svn_dynamics.iss
sub PathSvn
{
my $RetVal = '';
my $path_svn = '';
my $path_svnclient = '';
my $ErrMsg = '';
my @paths;
$path_svn = &cmn_ValuePathfile('svn_dynamics.ini', 'path_svn');
$path_svnclient = &cmn_ValuePathfile('svn_dynamics.ini', 'path_svnclient');
# Let's check if we find svn.exe in $path_svn\bin and set $path_svnclient
if (-e "$path_svn\\bin\\svn.exe")
{
$path_svnclient = "$path_svn\\bin";
}
else
{
$path_svnclient = &cmn_ValuePathfile('svn_dynamics.ini', 'path_svnclient');
}
# If we can't find svn.exe in $path_svnclient, then we assume that the
# template variable 'path_svn' is embedded in the template variable
# 'path_svnclient'. Something like this in svn_dynamics.iss:
# #define path_svnclient (path_svn + "bin")
unless (-e "$path_svnclient\\svn.exe")
{
@paths = ($path_svnclient =~ /(\w+)/g);
$path_svn = &cmn_ValuePathfile('svn_dynamics.ini', $paths[0]);
$path_svnclient = "$path_svn\\$paths[1]";
$path_svnclient =~ s/\\\\/\\/g;
}
$ErrMsg="ERROR: File not found: Could not find svn.exe in:\n $path_svnclient\n";
$ErrMsg=$ErrMsg . "Please, check that the path_svnclient variable in the ";
$ErrMsg=$ErrMsg . "svn_dynamics.ini\n";
$ErrMsg=$ErrMsg . "file is correct and try again\n";
if (-e "$path_svnclient\\svn.exe")
{
$RetVal="$path_svnclient\\svn.exe";
}
else
{
die $ErrMsg;
}
return $RetVal;
}
#-------------------------------------------------------------------------------
# FUNCTION SetVersion
# DOES Gets and returns version info from userinput
sub SetVersion
{
my ($SvnVersion, $SvnRevision) = &SvnVersion;
my ($InputVersion, $InputRevision)='';
$SvnRevision = "unset" if (! $SvnRevision);
if (! $g_AutoRun)
{
print "\nsvn.exe that's mentioned in your svn_dynamics.ini file have ",
"told me that the\n",
"version you want to make a distro from is $SvnVersion and that the ",
"revision is\n",
"$SvnRevision. You can confirm this by hitting the ENTER button ",
"(wich then sets the numbers\n",
"inside the brackets) or write some new data followed by the ENTER",
" button.\n\n",
"Please, make sure that svn.ini is not opened by another ",
"applications before you continue:\n\n";
print " Version [$SvnVersion]: ";
chomp ($InputVersion = <STDIN>);
if ($InputVersion)
{
$SvnVersion = $InputVersion;
}
$SvnRevision = "" if ($SvnRevision eq "unset");
print " Revision [$SvnRevision]: ";
chomp ($InputRevision = <STDIN>);
if ($InputRevision)
{
$SvnRevision = $InputRevision;
}
}
return ($SvnVersion, $SvnRevision);
}
#-------------------------------------------------------------------------------
# FUNCTION SetVerSvnIss
# DOES Setting version info on svn.iss
sub SetVerSvnIss
{
my ($SvnVersion, $SvnRevision) = @_;
my $SvnPreTxtRevision='';
my $IssFileCnt='';
$SvnPreTxtRevision='-r' if ($SvnRevision);
print " svn_version.ini in the Inno Setup directory.\n" if (! $g_AutoRun);
open (FH_ISSFILE, 'svn_version.ini') || die "ERROR: Could not open svn_version.ini";
while (<FH_ISSFILE>)
{
chomp($_);
if ($IssFileCnt)
{
$IssFileCnt="$IssFileCnt\n";
}
if (/^#define svn_version/)
{
$IssFileCnt= $IssFileCnt . "#define svn_version \"$SvnVersion\"";
}
elsif (/^#define svn_revision/)
{
$IssFileCnt= $IssFileCnt . "#define svn_revision \"$SvnRevision\"";
}
elsif (/^#define svn_pretxtrevision/)
{
$IssFileCnt= $IssFileCnt . "#define svn_pretxtrevision \"$SvnPreTxtRevision\"";
}
else
{
$IssFileCnt= $IssFileCnt . $_;
}
}
close (FH_ISSFILE);
$IssFileCnt="$IssFileCnt\n";
open (FH_ISSFILE, ">" . 'svn_version.ini')
|| die "ERROR: Could not open svn_version.ini";
print FH_ISSFILE $IssFileCnt;
close (FH_ISSFILE);
}
#-------------------------------------------------------------------------------
# FUNCTION SvnVersion
# DOES Getting and returns the version and revision number from the svn.exe
# as of the binary to include in the distro
sub SvnVersion
{
my $Svn = &PathSvn;
my @SvnVerOut;
my $SvnRetVal='';
my ($SvnVersion, $SvnRevision) ='';
$Svn = "\"$Svn\"";
$SvnRetVal = `$Svn --version`;
@SvnVerOut = split(/\n/, $SvnRetVal);
for (@SvnVerOut)
{
if (/svn, version /)
{
$SvnRetVal = $_;
last;
}
}
$SvnRetVal =~ s/svn, version //s;
if ($SvnRetVal =~ /.+\(r.+\)/)
{
$SvnRetVal =~ s/(^.*)\).*/$1/;
($SvnVersion, $SvnRevision) = split (/\(/, $1);
}
else
{
$SvnRetVal =~ s/([\d]?\.[\d]{1,2}\.[\d]{1,2})/$1/;
$SvnVersion = $SvnRetVal;
}
$SvnVersion =~ s/^\s+//;
$SvnVersion =~ s/\s+$//;
$SvnRevision =~ s/r//;
$SvnRevision =~ s/dev build/_dev-build/;
return ($SvnVersion, $SvnRevision);
}