11 #include "llvm/ADT/SmallVector.h"
12 #include "llvm/ADT/StringRef.h"
13 #include "llvm/ADT/StringSwitch.h"
14 #include "llvm/ADT/Triple.h"
15 #include "llvm/Support/ErrorOr.h"
16 #include "llvm/Support/Host.h"
17 #include "llvm/Support/MemoryBuffer.h"
18 #include "llvm/Support/Threading.h"
21 using namespace clang;
24 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
File =
25 VFS.getBufferForFile(
"/etc/os-release");
27 File = VFS.getBufferForFile(
"/usr/lib/os-release");
32 File.get()->getBuffer().split(Lines,
"\n");
36 for (StringRef
Line : Lines)
38 Version = llvm::StringSwitch<Distro::DistroType>(
Line.substr(3))
52 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
File =
53 VFS.getBufferForFile(
"/etc/lsb-release");
58 File.get()->getBuffer().split(Lines,
"\n");
61 for (StringRef
Line : Lines)
63 Line.startswith(
"DISTRIB_CODENAME="))
64 Version = llvm::StringSwitch<Distro::DistroType>(
Line.substr(17))
113 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
File =
114 VFS.getBufferForFile(
"/etc/redhat-release");
117 StringRef Data =
File.get()->getBuffer();
118 if (Data.startswith(
"Fedora release"))
120 if (Data.startswith(
"Red Hat Enterprise Linux") ||
121 Data.startswith(
"CentOS") || Data.startswith(
"Scientific Linux")) {
122 if (Data.contains(
"release 7"))
124 else if (Data.contains(
"release 6"))
126 else if (Data.contains(
"release 5"))
133 File = VFS.getBufferForFile(
"/etc/debian_version");
135 StringRef Data =
File.get()->getBuffer();
138 if (!Data.split(
'.').first.getAsInteger(10, MajorVersion)) {
139 switch (MajorVersion) {
160 return llvm::StringSwitch<Distro::DistroType>(Data.split(
"\n").first)
172 File = VFS.getBufferForFile(
"/etc/SuSE-release");
174 StringRef Data =
File.get()->getBuffer();
176 Data.split(Lines,
"\n");
177 for (
const StringRef &
Line : Lines) {
178 if (!
Line.trim().startswith(
"VERSION"))
180 std::pair<StringRef, StringRef> SplitLine =
Line.split(
'=');
183 std::pair<StringRef, StringRef> SplitVer =
184 SplitLine.second.trim().split(
'.');
189 if (!SplitVer.first.getAsInteger(10, Version) && Version > 10)
197 if (VFS.exists(
"/etc/gentoo-release"))
204 const llvm::Triple &TargetOrHost) {
207 if (!TargetOrHost.isOSLinux())
211 const bool onRealFS = (llvm::vfs::getRealFileSystem() == &VFS);
217 llvm::Triple HostTriple(llvm::sys::getProcessTriple());
218 if (!HostTriple.isOSLinux() && onRealFS)
233 : DistroVal(
GetDistro(VFS, TargetOrHost)) {}