Coverage Report

Created: 2019-02-20 00:17

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/Driver/Distro.h
Line
Count
Source (jump to first uncovered line)
1
//===--- Distro.h - Linux distribution detection support --------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_CLANG_DRIVER_DISTRO_H
10
#define LLVM_CLANG_DRIVER_DISTRO_H
11
12
#include "llvm/Support/VirtualFileSystem.h"
13
14
namespace clang {
15
namespace driver {
16
17
/// Distro - Helper class for detecting and classifying Linux distributions.
18
///
19
/// This class encapsulates the clang Linux distribution detection mechanism
20
/// as well as helper functions that match the specific (versioned) results
21
/// into wider distribution classes.
22
class Distro {
23
public:
24
  enum DistroType {
25
    // NB: Releases of a particular Linux distro should be kept together
26
    // in this enum, because some tests are done by integer comparison against
27
    // the first and last known member in the family, e.g. IsRedHat().
28
    AlpineLinux,
29
    ArchLinux,
30
    DebianLenny,
31
    DebianSqueeze,
32
    DebianWheezy,
33
    DebianJessie,
34
    DebianStretch,
35
    DebianBuster,
36
    Exherbo,
37
    RHEL5,
38
    RHEL6,
39
    RHEL7,
40
    Fedora,
41
    Gentoo,
42
    OpenSUSE,
43
    UbuntuHardy,
44
    UbuntuIntrepid,
45
    UbuntuJaunty,
46
    UbuntuKarmic,
47
    UbuntuLucid,
48
    UbuntuMaverick,
49
    UbuntuNatty,
50
    UbuntuOneiric,
51
    UbuntuPrecise,
52
    UbuntuQuantal,
53
    UbuntuRaring,
54
    UbuntuSaucy,
55
    UbuntuTrusty,
56
    UbuntuUtopic,
57
    UbuntuVivid,
58
    UbuntuWily,
59
    UbuntuXenial,
60
    UbuntuYakkety,
61
    UbuntuZesty,
62
    UbuntuArtful,
63
    UbuntuBionic,
64
    UbuntuCosmic,
65
    UbuntuDisco,
66
    UnknownDistro
67
  };
68
69
private:
70
  /// The distribution, possibly with specific version.
71
  DistroType DistroVal;
72
73
public:
74
  /// @name Constructors
75
  /// @{
76
77
  /// Default constructor leaves the distribution unknown.
78
  Distro() : DistroVal() {}
79
80
  /// Constructs a Distro type for specific distribution.
81
8.20k
  Distro(DistroType D) : DistroVal(D) {}
82
83
  /// Detects the distribution using specified VFS.
84
  explicit Distro(llvm::vfs::FileSystem &VFS);
85
86
8.20k
  bool operator==(const Distro &Other) const {
87
8.20k
    return DistroVal == Other.DistroVal;
88
8.20k
  }
89
90
0
  bool operator!=(const Distro &Other) const {
91
0
    return DistroVal != Other.DistroVal;
92
0
  }
93
94
0
  bool operator>=(const Distro &Other) const {
95
0
    return DistroVal >= Other.DistroVal;
96
0
  }
97
98
0
  bool operator<=(const Distro &Other) const {
99
0
    return DistroVal <= Other.DistroVal;
100
0
  }
101
102
  /// @}
103
  /// @name Convenience Predicates
104
  /// @{
105
106
5.42k
  bool IsRedhat() const {
107
5.42k
    return DistroVal == Fedora || 
(5.42k
DistroVal >= RHEL55.42k
&&
DistroVal <= RHEL75.41k
);
108
5.42k
  }
109
110
10.6k
  bool IsOpenSUSE() const {
111
10.6k
    return DistroVal == OpenSUSE;
112
10.6k
  }
113
114
30.3k
  bool IsDebian() const {
115
30.3k
    return DistroVal >= DebianLenny && 
DistroVal <= DebianBuster30.3k
;
116
30.3k
  }
117
118
33.3k
  bool IsUbuntu() const {
119
33.3k
    return DistroVal >= UbuntuHardy && 
DistroVal <= UbuntuDisco33.3k
;
120
33.3k
  }
121
122
8.45k
  bool IsAlpineLinux() const {
123
8.45k
    return DistroVal == AlpineLinux;
124
8.45k
  }
125
126
7.94k
  bool IsGentoo() const {
127
7.94k
    return DistroVal == Gentoo;
128
7.94k
  }
129
130
  /// @}
131
};
132
133
} // end namespace driver
134
} // end namespace clang
135
136
#endif