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