Coverage Report

Created: 2023-05-31 04:38

/Users/buildslave/jenkins/workspace/coverage/llvm-project/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
#include "llvm/TargetParser/Triple.h"
14
15
namespace clang {
16
namespace driver {
17
18
/// Distro - Helper class for detecting and classifying Linux distributions.
19
///
20
/// This class encapsulates the clang Linux distribution detection mechanism
21
/// as well as helper functions that match the specific (versioned) results
22
/// into wider distribution classes.
23
class Distro {
24
public:
25
  enum DistroType {
26
    // Special value means that no detection was performed yet.
27
    UninitializedDistro,
28
    // NB: Releases of a particular Linux distro should be kept together
29
    // in this enum, because some tests are done by integer comparison against
30
    // the first and last known member in the family, e.g. IsRedHat().
31
    AlpineLinux,
32
    ArchLinux,
33
    DebianLenny,
34
    DebianSqueeze,
35
    DebianWheezy,
36
    DebianJessie,
37
    DebianStretch,
38
    DebianBuster,
39
    DebianBullseye,
40
    DebianBookworm,
41
    DebianTrixie,
42
    Exherbo,
43
    RHEL5,
44
    RHEL6,
45
    RHEL7,
46
    Fedora,
47
    Gentoo,
48
    OpenSUSE,
49
    UbuntuHardy,
50
    UbuntuIntrepid,
51
    UbuntuJaunty,
52
    UbuntuKarmic,
53
    UbuntuLucid,
54
    UbuntuMaverick,
55
    UbuntuNatty,
56
    UbuntuOneiric,
57
    UbuntuPrecise,
58
    UbuntuQuantal,
59
    UbuntuRaring,
60
    UbuntuSaucy,
61
    UbuntuTrusty,
62
    UbuntuUtopic,
63
    UbuntuVivid,
64
    UbuntuWily,
65
    UbuntuXenial,
66
    UbuntuYakkety,
67
    UbuntuZesty,
68
    UbuntuArtful,
69
    UbuntuBionic,
70
    UbuntuCosmic,
71
    UbuntuDisco,
72
    UbuntuEoan,
73
    UbuntuFocal,
74
    UbuntuGroovy,
75
    UbuntuHirsute,
76
    UbuntuImpish,
77
    UbuntuJammy,
78
    UbuntuKinetic,
79
    UbuntuLunar,
80
    UbuntuMantic,
81
    UnknownDistro
82
  };
83
84
private:
85
  /// The distribution, possibly with specific version.
86
  DistroType DistroVal;
87
88
public:
89
  /// @name Constructors
90
  /// @{
91
92
  /// Default constructor leaves the distribution unknown.
93
0
  Distro() : DistroVal() {}
94
95
  /// Constructs a Distro type for specific distribution.
96
14.9k
  Distro(DistroType D) : DistroVal(D) {}
97
98
  /// Detects the distribution using specified VFS.
99
  explicit Distro(llvm::vfs::FileSystem &VFS, const llvm::Triple &TargetOrHost);
100
101
14.9k
  bool operator==(const Distro &Other) const {
102
14.9k
    return DistroVal == Other.DistroVal;
103
14.9k
  }
104
105
0
  bool operator!=(const Distro &Other) const {
106
0
    return DistroVal != Other.DistroVal;
107
0
  }
108
109
0
  bool operator>=(const Distro &Other) const {
110
0
    return DistroVal >= Other.DistroVal;
111
0
  }
112
113
0
  bool operator<=(const Distro &Other) const {
114
0
    return DistroVal <= Other.DistroVal;
115
0
  }
116
117
  /// @}
118
  /// @name Convenience Predicates
119
  /// @{
120
121
  bool IsRedhat() const {
122
    return DistroVal == Fedora || (DistroVal >= RHEL5 && DistroVal <= RHEL7);
123
  }
124
125
9.65k
  bool IsOpenSUSE() const { return DistroVal == OpenSUSE; }
126
127
21.8k
  bool IsDebian() const {
128
21.8k
    return DistroVal >= DebianLenny && 
DistroVal <= DebianTrixie21.8k
;
129
21.8k
  }
130
131
26.9k
  bool IsUbuntu() const {
132
26.9k
    return DistroVal >= UbuntuHardy && 
DistroVal <= UbuntuMantic26.9k
;
133
26.9k
  }
134
135
10.1k
  bool IsAlpineLinux() const { return DistroVal == AlpineLinux; }
136
137
28.2k
  bool IsGentoo() const { return DistroVal == Gentoo; }
138
139
  /// @}
140
};
141
142
} // end namespace driver
143
} // end namespace clang
144
145
#endif