clang  19.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 
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.
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 
86 private:
87  /// The distribution, possibly with specific version.
88  DistroType DistroVal;
89 
90 public:
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
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.