Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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/ADT/Triple.h"
13
#include "llvm/Support/VirtualFileSystem.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
    UnknownDistro
81
  };
82
 
83
private:
84
  /// The distribution, possibly with specific version.
85
  DistroType DistroVal;
86
 
87
public:
88
  /// @name Constructors
89
  /// @{
90
 
91
  /// Default constructor leaves the distribution unknown.
92
  Distro() : DistroVal() {}
93
 
94
  /// Constructs a Distro type for specific distribution.
95
  Distro(DistroType D) : DistroVal(D) {}
96
 
97
  /// Detects the distribution using specified VFS.
98
  explicit Distro(llvm::vfs::FileSystem &VFS, const llvm::Triple &TargetOrHost);
99
 
100
  bool operator==(const Distro &Other) const {
101
    return DistroVal == Other.DistroVal;
102
  }
103
 
104
  bool operator!=(const Distro &Other) const {
105
    return DistroVal != Other.DistroVal;
106
  }
107
 
108
  bool operator>=(const Distro &Other) const {
109
    return DistroVal >= Other.DistroVal;
110
  }
111
 
112
  bool operator<=(const Distro &Other) const {
113
    return DistroVal <= Other.DistroVal;
114
  }
115
 
116
  /// @}
117
  /// @name Convenience Predicates
118
  /// @{
119
 
120
  bool IsRedhat() const {
121
    return DistroVal == Fedora || (DistroVal >= RHEL5 && DistroVal <= RHEL7);
122
  }
123
 
124
  bool IsOpenSUSE() const { return DistroVal == OpenSUSE; }
125
 
126
  bool IsDebian() const {
127
    return DistroVal >= DebianLenny && DistroVal <= DebianTrixie;
128
  }
129
 
130
  bool IsUbuntu() const {
131
    return DistroVal >= UbuntuHardy && DistroVal <= UbuntuLunar;
132
  }
133
 
134
  bool IsAlpineLinux() const { return DistroVal == AlpineLinux; }
135
 
136
  bool IsGentoo() const { return DistroVal == Gentoo; }
137
 
138
  /// @}
139
};
140
 
141
} // end namespace driver
142
} // end namespace clang
143
 
144
#endif