xref: /petsc/lib/petsc/bin/maint/abi-compliance-checker/modules/Internals/Path.pm (revision e8b6250908b962c387f7ab2e7b38caaa661b5fa1)
1*5a4f3cb3SJunchao Zhang###########################################################################
2*5a4f3cb3SJunchao Zhang# A module with functions to handle paths
3*5a4f3cb3SJunchao Zhang#
4*5a4f3cb3SJunchao Zhang# Copyright (C) 2017-2018 Andrey Ponomarenko's ABI Laboratory
5*5a4f3cb3SJunchao Zhang#
6*5a4f3cb3SJunchao Zhang# Written by Andrey Ponomarenko
7*5a4f3cb3SJunchao Zhang#
8*5a4f3cb3SJunchao Zhang# This library is free software; you can redistribute it and/or
9*5a4f3cb3SJunchao Zhang# modify it under the terms of the GNU Lesser General Public
10*5a4f3cb3SJunchao Zhang# License as published by the Free Software Foundation; either
11*5a4f3cb3SJunchao Zhang# version 2.1 of the License, or (at your option) any later version.
12*5a4f3cb3SJunchao Zhang#
13*5a4f3cb3SJunchao Zhang# This library is distributed in the hope that it will be useful,
14*5a4f3cb3SJunchao Zhang# but WITHOUT ANY WARRANTY; without even the implied warranty of
15*5a4f3cb3SJunchao Zhang# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16*5a4f3cb3SJunchao Zhang# Lesser General Public License for more details.
17*5a4f3cb3SJunchao Zhang#
18*5a4f3cb3SJunchao Zhang# You should have received a copy of the GNU Lesser General Public
19*5a4f3cb3SJunchao Zhang# License along with this library; if not, write to the Free Software
20*5a4f3cb3SJunchao Zhang# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21*5a4f3cb3SJunchao Zhang# MA  02110-1301 USA
22*5a4f3cb3SJunchao Zhang###########################################################################
23*5a4f3cb3SJunchao Zhanguse strict;
24*5a4f3cb3SJunchao Zhanguse Cwd qw(realpath);
25*5a4f3cb3SJunchao Zhang
26*5a4f3cb3SJunchao Zhangsub pathFmt(@)
27*5a4f3cb3SJunchao Zhang{
28*5a4f3cb3SJunchao Zhang    my $Path = shift(@_);
29*5a4f3cb3SJunchao Zhang    my $Fmt = $In::Opt{"OS"};
30*5a4f3cb3SJunchao Zhang    if(@_) {
31*5a4f3cb3SJunchao Zhang        $Fmt = shift(@_);
32*5a4f3cb3SJunchao Zhang    }
33*5a4f3cb3SJunchao Zhang
34*5a4f3cb3SJunchao Zhang    $Path=~s/[\/\\]+\.?\Z//g;
35*5a4f3cb3SJunchao Zhang    if($Fmt eq "windows")
36*5a4f3cb3SJunchao Zhang    {
37*5a4f3cb3SJunchao Zhang        $Path=~s/\//\\/g;
38*5a4f3cb3SJunchao Zhang        $Path = lc($Path);
39*5a4f3cb3SJunchao Zhang    }
40*5a4f3cb3SJunchao Zhang    else
41*5a4f3cb3SJunchao Zhang    { # forward slash to pass into MinGW GCC
42*5a4f3cb3SJunchao Zhang        $Path=~s/\\/\//g;
43*5a4f3cb3SJunchao Zhang    }
44*5a4f3cb3SJunchao Zhang
45*5a4f3cb3SJunchao Zhang    $Path=~s/[\/\\]+\Z//g;
46*5a4f3cb3SJunchao Zhang
47*5a4f3cb3SJunchao Zhang    return $Path;
48*5a4f3cb3SJunchao Zhang}
49*5a4f3cb3SJunchao Zhang
50*5a4f3cb3SJunchao Zhangsub getAbsPath($)
51*5a4f3cb3SJunchao Zhang{ # abs_path() should NOT be called for absolute inputs
52*5a4f3cb3SJunchao Zhang  # because it can change them
53*5a4f3cb3SJunchao Zhang    my $Path = $_[0];
54*5a4f3cb3SJunchao Zhang    if(not isAbsPath($Path)) {
55*5a4f3cb3SJunchao Zhang        $Path = abs_path($Path);
56*5a4f3cb3SJunchao Zhang    }
57*5a4f3cb3SJunchao Zhang    return pathFmt($Path);
58*5a4f3cb3SJunchao Zhang}
59*5a4f3cb3SJunchao Zhang
60*5a4f3cb3SJunchao Zhangsub realpath_F($)
61*5a4f3cb3SJunchao Zhang{
62*5a4f3cb3SJunchao Zhang    my $Path = $_[0];
63*5a4f3cb3SJunchao Zhang    return pathFmt(realpath($Path));
64*5a4f3cb3SJunchao Zhang}
65*5a4f3cb3SJunchao Zhang
66*5a4f3cb3SJunchao Zhangsub classifyPath($)
67*5a4f3cb3SJunchao Zhang{
68*5a4f3cb3SJunchao Zhang    my $Path = $_[0];
69*5a4f3cb3SJunchao Zhang    if($Path=~/[\*\+\(\[\|]/)
70*5a4f3cb3SJunchao Zhang    { # pattern
71*5a4f3cb3SJunchao Zhang        return ($Path, "Pattern");
72*5a4f3cb3SJunchao Zhang    }
73*5a4f3cb3SJunchao Zhang    elsif($Path=~/[\/\\]/)
74*5a4f3cb3SJunchao Zhang    { # directory or relative path
75*5a4f3cb3SJunchao Zhang        return (pathFmt($Path), "Path");
76*5a4f3cb3SJunchao Zhang    }
77*5a4f3cb3SJunchao Zhang    else {
78*5a4f3cb3SJunchao Zhang        return ($Path, "Name");
79*5a4f3cb3SJunchao Zhang    }
80*5a4f3cb3SJunchao Zhang}
81*5a4f3cb3SJunchao Zhang
82*5a4f3cb3SJunchao Zhangsub join_P($$)
83*5a4f3cb3SJunchao Zhang{
84*5a4f3cb3SJunchao Zhang    my $S = "/";
85*5a4f3cb3SJunchao Zhang    if($In::Opt{"OS"} eq "windows") {
86*5a4f3cb3SJunchao Zhang        $S = "\\";
87*5a4f3cb3SJunchao Zhang    }
88*5a4f3cb3SJunchao Zhang    return join($S, @_);
89*5a4f3cb3SJunchao Zhang}
90*5a4f3cb3SJunchao Zhang
91*5a4f3cb3SJunchao Zhangreturn 1;
92