Skip to content

Commit

Permalink
[Distro] Support detecting Gentoo
Browse files Browse the repository at this point in the history
Add support for distinguishing plain Gentoo distribution, and a unit
test for it.  This is going to be used to introduce distro-specific
customizations in the driver code; most notably, it is going to be used
to disable -faddrsig.

Differential Revision: https://reviews.llvm.org/D56024

llvm-svn: 350027
mgorny committed Dec 23, 2018
1 parent 0c07407 commit f241228
Showing 3 changed files with 44 additions and 0 deletions.
5 changes: 5 additions & 0 deletions clang/include/clang/Driver/Distro.h
Original file line number Diff line number Diff line change
@@ -39,6 +39,7 @@ class Distro {
RHEL6,
RHEL7,
Fedora,
Gentoo,
OpenSUSE,
UbuntuHardy,
UbuntuIntrepid,
@@ -123,6 +124,10 @@ class Distro {
return DistroVal == AlpineLinux;
}

bool IsGentoo() const {
return DistroVal == Gentoo;
}

/// @}
};

3 changes: 3 additions & 0 deletions clang/lib/Driver/Distro.cpp
Original file line number Diff line number Diff line change
@@ -138,6 +138,9 @@ static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) {
if (VFS.exists("/etc/arch-release"))
return Distro::ArchLinux;

if (VFS.exists("/etc/gentoo-release"))
return Distro::Gentoo;

return Distro::UnknownDistro;
}

36 changes: 36 additions & 0 deletions clang/unittests/Driver/DistroTest.cpp
Original file line number Diff line number Diff line change
@@ -51,6 +51,7 @@ TEST(DistroTest, DetectUbuntu) {
ASSERT_FALSE(UbuntuTrusty.IsRedhat());
ASSERT_FALSE(UbuntuTrusty.IsOpenSUSE());
ASSERT_FALSE(UbuntuTrusty.IsDebian());
ASSERT_FALSE(UbuntuTrusty.IsGentoo());

llvm::vfs::InMemoryFileSystem UbuntuYakketyFileSystem;
UbuntuYakketyFileSystem.addFile("/etc/debian_version", 0,
@@ -80,6 +81,7 @@ TEST(DistroTest, DetectUbuntu) {
ASSERT_FALSE(UbuntuYakkety.IsRedhat());
ASSERT_FALSE(UbuntuYakkety.IsOpenSUSE());
ASSERT_FALSE(UbuntuYakkety.IsDebian());
ASSERT_FALSE(UbuntuYakkety.IsGentoo());
}

TEST(DistroTest, DetectRedhat) {
@@ -114,6 +116,7 @@ TEST(DistroTest, DetectRedhat) {
ASSERT_TRUE(Fedora25.IsRedhat());
ASSERT_FALSE(Fedora25.IsOpenSUSE());
ASSERT_FALSE(Fedora25.IsDebian());
ASSERT_FALSE(Fedora25.IsGentoo());

llvm::vfs::InMemoryFileSystem CentOS7FileSystem;
CentOS7FileSystem.addFile("/etc/system-release-cpe", 0,
@@ -150,6 +153,7 @@ TEST(DistroTest, DetectRedhat) {
ASSERT_TRUE(CentOS7.IsRedhat());
ASSERT_FALSE(CentOS7.IsOpenSUSE());
ASSERT_FALSE(CentOS7.IsDebian());
ASSERT_FALSE(CentOS7.IsGentoo());
}

TEST(DistroTest, DetectOpenSUSE) {
@@ -177,6 +181,7 @@ TEST(DistroTest, DetectOpenSUSE) {
ASSERT_FALSE(OpenSUSELeap421.IsRedhat());
ASSERT_TRUE(OpenSUSELeap421.IsOpenSUSE());
ASSERT_FALSE(OpenSUSELeap421.IsDebian());
ASSERT_FALSE(OpenSUSELeap421.IsGentoo());

llvm::vfs::InMemoryFileSystem OpenSUSE132FileSystem;
OpenSUSE132FileSystem.addFile("/etc/SuSE-release", 0,
@@ -202,6 +207,7 @@ TEST(DistroTest, DetectOpenSUSE) {
ASSERT_FALSE(OpenSUSE132.IsRedhat());
ASSERT_TRUE(OpenSUSE132.IsOpenSUSE());
ASSERT_FALSE(OpenSUSE132.IsDebian());
ASSERT_FALSE(OpenSUSE132.IsGentoo());

llvm::vfs::InMemoryFileSystem SLES10FileSystem;
SLES10FileSystem.addFile("/etc/SuSE-release", 0,
@@ -218,6 +224,7 @@ TEST(DistroTest, DetectOpenSUSE) {
ASSERT_FALSE(SLES10.IsRedhat());
ASSERT_FALSE(SLES10.IsOpenSUSE());
ASSERT_FALSE(SLES10.IsDebian());
ASSERT_FALSE(SLES10.IsGentoo());
}

TEST(DistroTest, DetectDebian) {
@@ -240,6 +247,7 @@ TEST(DistroTest, DetectDebian) {
ASSERT_FALSE(DebianJessie.IsRedhat());
ASSERT_FALSE(DebianJessie.IsOpenSUSE());
ASSERT_TRUE(DebianJessie.IsDebian());
ASSERT_FALSE(DebianJessie.IsGentoo());

llvm::vfs::InMemoryFileSystem DebianStretchSidFileSystem;
DebianStretchSidFileSystem.addFile("/etc/debian_version", 0,
@@ -258,6 +266,7 @@ TEST(DistroTest, DetectDebian) {
ASSERT_FALSE(DebianStretchSid.IsRedhat());
ASSERT_FALSE(DebianStretchSid.IsOpenSUSE());
ASSERT_TRUE(DebianStretchSid.IsDebian());
ASSERT_FALSE(DebianStretchSid.IsGentoo());
}

TEST(DistroTest, DetectExherbo) {
@@ -279,6 +288,7 @@ TEST(DistroTest, DetectExherbo) {
ASSERT_FALSE(Exherbo.IsRedhat());
ASSERT_FALSE(Exherbo.IsOpenSUSE());
ASSERT_FALSE(Exherbo.IsDebian());
ASSERT_FALSE(Exherbo.IsGentoo());
}

TEST(DistroTest, DetectArchLinux) {
@@ -300,6 +310,32 @@ TEST(DistroTest, DetectArchLinux) {
ASSERT_FALSE(ArchLinux.IsRedhat());
ASSERT_FALSE(ArchLinux.IsOpenSUSE());
ASSERT_FALSE(ArchLinux.IsDebian());
ASSERT_FALSE(ArchLinux.IsGentoo());
}

TEST(DistroTest, DetectGentoo) {
llvm::vfs::InMemoryFileSystem GentooFileSystem;
GentooFileSystem.addFile(
"/etc/gentoo-release", 0,
llvm::MemoryBuffer::getMemBuffer("Gentoo Base System release 2.6"));
GentooFileSystem.addFile(
"/etc/os-release", 0,
llvm::MemoryBuffer::getMemBuffer(
"NAME=Gentoo\n"
"ID=gentoo\n"
"PRETTY_NAME=\"Gentoo/Linux\"\n"
"ANSI_COLOR=\"1;32\"\n"
"HOME_URL=\"https://www.gentoo.org/\"\n"
"SUPPORT_URL=\"https://www.gentoo.org/support/\"\n"
"BUG_REPORT_URL=\"https://bugs.gentoo.org/\"\n"));

Distro Gentoo{GentooFileSystem};
ASSERT_EQ(Distro(Distro::Gentoo), Gentoo);
ASSERT_FALSE(Gentoo.IsUbuntu());
ASSERT_FALSE(Gentoo.IsRedhat());
ASSERT_FALSE(Gentoo.IsOpenSUSE());
ASSERT_FALSE(Gentoo.IsDebian());
ASSERT_TRUE(Gentoo.IsGentoo());
}

} // end anonymous namespace

0 comments on commit f241228

Please sign in to comment.