11 #include "llvm/ADT/SmallVector.h"
12 #include "llvm/ADT/StringRef.h"
13 #include "llvm/ADT/StringSwitch.h"
14 #include "llvm/Support/ErrorOr.h"
15 #include "llvm/Support/MemoryBuffer.h"
17 using namespace clang::driver;
18 using namespace clang;
21 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =
24 StringRef Data = File.get()->getBuffer();
26 Data.split(Lines,
"\n");
28 for (StringRef
Line : Lines)
30 Version = llvm::StringSwitch<Distro::DistroType>(
Line.substr(17))
58 StringRef Data = File.get()->getBuffer();
59 if (Data.startswith(
"Fedora release"))
61 if (Data.startswith(
"Red Hat Enterprise Linux") ||
62 Data.startswith(
"CentOS") ||
63 Data.startswith(
"Scientific Linux")) {
64 if (Data.find(
"release 7") != StringRef::npos)
66 else if (Data.find(
"release 6") != StringRef::npos)
68 else if (Data.find(
"release 5") != StringRef::npos)
76 StringRef Data = File.get()->getBuffer();
79 if (!Data.split(
'.').first.getAsInteger(10, MajorVersion)) {
80 switch (MajorVersion) {
95 return llvm::StringSwitch<Distro::DistroType>(Data.split(
"\n").first)
105 StringRef Data = File.get()->getBuffer();
107 Data.split(Lines,
"\n");
108 for (
const StringRef&
Line : Lines) {
109 if (!
Line.trim().startswith(
"VERSION"))
111 std::pair<StringRef, StringRef> SplitLine =
Line.split(
'=');
114 std::pair<StringRef, StringRef> SplitVer = SplitLine.second.trim().split(
'.');
119 if (!SplitVer.first.getAsInteger(10, Version) && Version > 10)
126 if (VFS.
exists(
"/etc/exherbo-release"))
129 if (VFS.
exists(
"/etc/arch-release"))
static Distro::DistroType DetectDistro(vfs::FileSystem &VFS)
The virtual file system interface.
Distro()
Default constructor leaves the distribution unknown.
bool exists(const Twine &Path)
Check whether a file exists. Provided for convenience.
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > getBufferForFile(const Twine &Name, int64_t FileSize=-1, bool RequiresNullTerminator=true, bool IsVolatile=false)
This is a convenience method that opens a file, gets its content and then closes the file...