clang  8.0.0svn
Distro.h
Go to the documentation of this file.
1 //===--- Distro.h - Linux distribution detection support --------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_CLANG_DRIVER_DISTRO_H
11 #define LLVM_CLANG_DRIVER_DISTRO_H
12 
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  // NB: Releases of a particular Linux distro should be kept together
27  // in this enum, because some tests are done by integer comparison against
28  // the first and last known member in the family, e.g. IsRedHat().
66  };
67 
68 private:
69  /// The distribution, possibly with specific version.
70  DistroType DistroVal;
71 
72 public:
73  /// @name Constructors
74  /// @{
75 
76  /// Default constructor leaves the distribution unknown.
77  Distro() : DistroVal() {}
78 
79  /// Constructs a Distro type for specific distribution.
80  Distro(DistroType D) : DistroVal(D) {}
81 
82  /// Detects the distribution using specified VFS.
83  explicit Distro(llvm::vfs::FileSystem &VFS);
84 
85  bool operator==(const Distro &Other) const {
86  return DistroVal == Other.DistroVal;
87  }
88 
89  bool operator!=(const Distro &Other) const {
90  return DistroVal != Other.DistroVal;
91  }
92 
93  bool operator>=(const Distro &Other) const {
94  return DistroVal >= Other.DistroVal;
95  }
96 
97  bool operator<=(const Distro &Other) const {
98  return DistroVal <= Other.DistroVal;
99  }
100 
101  /// @}
102  /// @name Convenience Predicates
103  /// @{
104 
105  bool IsRedhat() const {
106  return DistroVal == Fedora || (DistroVal >= RHEL5 && DistroVal <= RHEL7);
107  }
108 
109  bool IsOpenSUSE() const {
110  return DistroVal == OpenSUSE;
111  }
112 
113  bool IsDebian() const {
114  return DistroVal >= DebianLenny && DistroVal <= DebianBuster;
115  }
116 
117  bool IsUbuntu() const {
118  return DistroVal >= UbuntuHardy && DistroVal <= UbuntuCosmic;
119  }
120 
121  bool IsAlpineLinux() const {
122  return DistroVal == AlpineLinux;
123  }
124 
125  /// @}
126 };
127 
128 } // end namespace driver
129 } // end namespace clang
130 
131 #endif
bool operator==(const Distro &Other) const
Definition: Distro.h:85
bool IsOpenSUSE() const
Definition: Distro.h:109
Distro - Helper class for detecting and classifying Linux distributions.
Definition: Distro.h:23
bool operator!=(const Distro &Other) const
Definition: Distro.h:89
Distro()
Default constructor leaves the distribution unknown.
Definition: Distro.h:77
bool IsDebian() const
Definition: Distro.h:113
Distro(DistroType D)
Constructs a Distro type for specific distribution.
Definition: Distro.h:80
bool IsAlpineLinux() const
Definition: Distro.h:121
Dataflow Directional Tag Classes.
bool operator<=(const Distro &Other) const
Definition: Distro.h:97
bool IsRedhat() const
Definition: Distro.h:105
bool IsUbuntu() const
Definition: Distro.h:117
bool operator>=(const Distro &Other) const
Definition: Distro.h:93