1*b1cdbd2cSJim Jagielski#**************************************************************
2*b1cdbd2cSJim Jagielski#
3*b1cdbd2cSJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski#  distributed with this work for additional information
6*b1cdbd2cSJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski#  "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski#  with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski#
11*b1cdbd2cSJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski#
13*b1cdbd2cSJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski#  software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski#  KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski#  specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski#  under the License.
19*b1cdbd2cSJim Jagielski#
20*b1cdbd2cSJim Jagielski#**************************************************************
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielskipackage installer::patch::Version;
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski
25*b1cdbd2cSJim Jagielski=head1 NAME
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski    package installer::patch::Version - Functions for handling version numbers.
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski=cut
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski
32*b1cdbd2cSJim Jagielski
33*b1cdbd2cSJim Jagielski# We handle version numbers that consist of three parts: major, minor and micro version number.
34*b1cdbd2cSJim Jagielskimy $VersionPartCount = 3;
35*b1cdbd2cSJim Jagielski
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski=head2 StringToNumberArray($version_string)
39*b1cdbd2cSJim Jagielski
40*b1cdbd2cSJim Jagielski    Convert a version string (where the individual parts are separated by '.') into an array of three numbers.
41*b1cdbd2cSJim Jagielski    Missing numbers are filled with 0.
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski    Returns an array with three elements (major, minor, micro).
44*b1cdbd2cSJim Jagielski=cut
45*b1cdbd2cSJim Jagielskisub StringToNumberArray ($)
46*b1cdbd2cSJim Jagielski{
47*b1cdbd2cSJim Jagielski    my ($version_string) = @_;
48*b1cdbd2cSJim Jagielski
49*b1cdbd2cSJim Jagielski    my @version_parts = split(/\./, $version_string);
50*b1cdbd2cSJim Jagielski    while (scalar @version_parts < $VersionPartCount)
51*b1cdbd2cSJim Jagielski    {
52*b1cdbd2cSJim Jagielski        push @version_parts, "0";
53*b1cdbd2cSJim Jagielski    }
54*b1cdbd2cSJim Jagielski    return @version_parts;
55*b1cdbd2cSJim Jagielski}
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski
58*b1cdbd2cSJim Jagielski
59*b1cdbd2cSJim Jagielski
60*b1cdbd2cSJim Jagielski=head2 ArrayToDirectoryName (@)
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski    Return a directory name (without any path) for the given array of version numbers.
63*b1cdbd2cSJim Jagielski
64*b1cdbd2cSJim Jagielski=cut
65*b1cdbd2cSJim Jagielskisub ArrayToDirectoryName (@)
66*b1cdbd2cSJim Jagielski{
67*b1cdbd2cSJim Jagielski    return "v-".join("-", @_);
68*b1cdbd2cSJim Jagielski}
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski=head2 ArrayToNoDotName (@)
73*b1cdbd2cSJim Jagielski
74*b1cdbd2cSJim Jagielski    This symply creates a version array (A,B,C) into a version string
75*b1cdbd2cSJim Jagielski    "ABC" with no dots between major, minor and micro version number.
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski=cut
78*b1cdbd2cSJim Jagielskisub ArrayToNoDotName (@)
79*b1cdbd2cSJim Jagielski{
80*b1cdbd2cSJim Jagielski    return join("", @_);
81*b1cdbd2cSJim Jagielski}
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski=head2 IsMajorVersion ($version_string)
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski    Return 1 if $version_string is a major version, ie. ?.0.0
89*b1cdbd2cSJim Jagielski    Return 0 otherwise.
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski=cut
92*b1cdbd2cSJim Jagielskisub IsMajorVersion ($)
93*b1cdbd2cSJim Jagielski{
94*b1cdbd2cSJim Jagielski    my ($version_string) = @_;
95*b1cdbd2cSJim Jagielski    my @version = installer::patch::Version::StringToNumberArray($version_string);
96*b1cdbd2cSJim Jagielski    for (my $index=1; $index<$VersionPartCount; ++$index)
97*b1cdbd2cSJim Jagielski    {
98*b1cdbd2cSJim Jagielski        return 0 if $version[$index] ne "0";
99*b1cdbd2cSJim Jagielski    }
100*b1cdbd2cSJim Jagielski    return 1;
101*b1cdbd2cSJim Jagielski}
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski1;
106