clang 20.0.0git
Distro.h
Go to the documentation of this file.
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
15namespace clang {
16namespace 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.
23class Distro {
24public:
26 // Special value means that no detection was performed yet.
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().
84 };
85
86private:
87 /// The distribution, possibly with specific version.
88 DistroType DistroVal;
89
90public:
91 /// @name Constructors
92 /// @{
93
94 /// Default constructor leaves the distribution unknown.
95 Distro() : DistroVal() {}
96
97 /// Constructs a Distro type for specific distribution.
98 Distro(DistroType D) : DistroVal(D) {}
99
100 /// Detects the distribution using specified VFS.
101 explicit Distro(llvm::vfs::FileSystem &VFS, const llvm::Triple &TargetOrHost);
102
103 bool operator==(const Distro &Other) const {
104 return DistroVal == Other.DistroVal;
105 }
106
107 bool operator!=(const Distro &Other) const {
108 return DistroVal != Other.DistroVal;
109 }
110
111 bool operator>=(const Distro &Other) const {
112 return DistroVal >= Other.DistroVal;
113 }
114
115 bool operator<=(const Distro &Other) const {
116 return DistroVal <= Other.DistroVal;
117 }
118
119 /// @}
120 /// @name Convenience Predicates
121 /// @{
122
123 bool IsRedhat() const {
124 return DistroVal == Fedora || (DistroVal >= RHEL5 && DistroVal <= RHEL7);
125 }
126
127 bool IsOpenSUSE() const { return DistroVal == OpenSUSE; }
128
129 bool IsDebian() const {
130 return DistroVal >= DebianLenny && DistroVal <= DebianTrixie;
131 }
132
133 bool IsUbuntu() const {
134 return DistroVal >= UbuntuHardy && DistroVal <= UbuntuOracular;
135 }
136
137 bool IsAlpineLinux() const { return DistroVal == AlpineLinux; }
138
139 bool IsGentoo() const { return DistroVal == Gentoo; }
140
141 /// @}
142};
143
144} // end namespace driver
145} // end namespace clang
146
147#endif
const Decl * D
Distro - Helper class for detecting and classifying Linux distributions.
Definition: Distro.h:23
bool IsDebian() const
Definition: Distro.h:129
Distro()
Default constructor leaves the distribution unknown.
Definition: Distro.h:95
bool IsOpenSUSE() const
Definition: Distro.h:127
bool IsGentoo() const
Definition: Distro.h:139
Distro(DistroType D)
Constructs a Distro type for specific distribution.
Definition: Distro.h:98
bool operator!=(const Distro &Other) const
Definition: Distro.h:107
bool operator==(const Distro &Other) const
Definition: Distro.h:103
bool IsAlpineLinux() const
Definition: Distro.h:137
bool IsRedhat() const
Definition: Distro.h:123
bool operator<=(const Distro &Other) const
Definition: Distro.h:115
bool operator>=(const Distro &Other) const
Definition: Distro.h:111
bool IsUbuntu() const
Definition: Distro.h:133
The JSON file list parser is used to communicate input to InstallAPI.
@ Other
Other implicit parameter.