[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-30 Thread Michał Górny via Phabricator via cfe-commits
mgorny accepted this revision.
mgorny added a comment.
This revision is now accepted and ready to land.

LGTM, presuming the tests pass for you.


https://reviews.llvm.org/D53125



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-15 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira updated this revision to Diff 169779.
thiagomacieira added a comment.

Update detection: as of Clear Linux 25620, /usr/lib/os-relaese contains 
ID_LIKE=clear-linux-os, which allows detecting not only Clear itself, but also 
Linux distributions derived from it (Clear Linux mixes).


https://reviews.llvm.org/D53125

Files:
  include/clang/Driver/Distro.h
  lib/Driver/Distro.cpp
  lib/Driver/ToolChains/Linux.cpp
  unittests/Driver/DistroTest.cpp

Index: unittests/Driver/DistroTest.cpp
===
--- unittests/Driver/DistroTest.cpp
+++ unittests/Driver/DistroTest.cpp
@@ -302,4 +302,28 @@
   ASSERT_FALSE(ArchLinux.IsDebian());
 }
 
+TEST(DistroTest, DetectClearLinux) {
+  vfs::InMemoryFileSystem ClearLinuxFileSystem;
+  ClearLinuxFileSystem.addFile("/usr/lib/os-release", 0,
+  llvm::MemoryBuffer::getMemBuffer("NAME=\"Clear Linux OS\"\n"
+   "VERSION=1\n"
+   "ID=clear-linux-os\n"
+   "ID_LIKE=clear-linux-os\n"
+   "VERSION_ID=25530\n"
+   "PRETTY_NAME=\"Clear Linux OS\"\n"
+   "ANSI_COLOR=\"1;35\"\n"
+   "HOME_URL=\"https://clearlinux.org\"\n;
+   "SUPPORT_URL=\"https://clearlinux.org\"\n;
+   "BUG_REPORT_URL=\"mailto:d...@lists.clearlinux.org\"\n"
+   "PRIVACY_POLICY_URL=\"http://www.intel.com/privacy\"\n;));
+
+  Distro ClearLinux{ClearLinuxFileSystem};
+  ASSERT_EQ(Distro(Distro::ClearLinux), ClearLinux);
+  ASSERT_TRUE(ClearLinux.IsClearLinux());
+  ASSERT_FALSE(ClearLinux.IsUbuntu());
+  ASSERT_FALSE(ClearLinux.IsRedhat());
+  ASSERT_FALSE(ClearLinux.IsOpenSUSE());
+  ASSERT_FALSE(ClearLinux.IsDebian());
+}
+
 } // end anonymous namespace
Index: lib/Driver/ToolChains/Linux.cpp
===
--- lib/Driver/ToolChains/Linux.cpp
+++ lib/Driver/ToolChains/Linux.cpp
@@ -229,17 +229,20 @@
 
   Distro Distro(D.getVFS());
 
-  if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+  if (Distro.IsAlpineLinux() || Distro.IsClearLinux() || Triple.isAndroid()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("now");
   }
 
   if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux() ||
-  Triple.isAndroid()) {
+  Distro.IsClearLinux() || Triple.isAndroid()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("relro");
   }
 
+  if (Distro.IsClearLinux())
+ExtraOpts.push_back("--copy-dt-needed-entries");
+
   if (GCCInstallation.getParentLibPath().find("opt/rh/devtoolset") !=
   StringRef::npos)
 // With devtoolset on RHEL, we want to add a bin directory that is relative
@@ -287,7 +290,7 @@
   ExtraOpts.push_back("--build-id");
 #endif
 
-  if (IsAndroid || Distro.IsOpenSUSE())
+  if (IsAndroid || Distro.IsOpenSUSE() || Distro.IsClearLinux())
 ExtraOpts.push_back("--enable-new-dtags");
 
   // The selection of paths to try here is designed to match the patterns which
Index: lib/Driver/Distro.cpp
===
--- lib/Driver/Distro.cpp
+++ lib/Driver/Distro.cpp
@@ -137,6 +137,21 @@
   if (VFS.exists("/etc/arch-release"))
 return Distro::ArchLinux;
 
+  File = VFS.getBufferForFile("/etc/os-release");
+  if (!File)
+File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {
+StringRef Data = File.get()->getBuffer();
+SmallVector Lines;
+Data.split(Lines, "\n");
+Distro::DistroType Version = Distro::UnknownDistro;
+for (StringRef Line : Lines)
+  if (Version == Distro::UnknownDistro && Line.startswith("ID_LIKE="))
+Version = llvm::StringSwitch(Line.substr(7))
+  .Case("clear-linux-os", Distro::ClearLinux);
+return Version;
+  }
+
   return Distro::UnknownDistro;
 }
 
Index: include/clang/Driver/Distro.h
===
--- include/clang/Driver/Distro.h
+++ include/clang/Driver/Distro.h
@@ -28,6 +28,7 @@
 // the first and last known member in the family, e.g. IsRedHat().
 AlpineLinux,
 ArchLinux,
+ClearLinux,
 DebianLenny,
 DebianSqueeze,
 DebianWheezy,
@@ -122,6 +123,10 @@
 return DistroVal == AlpineLinux;
   }
 
+  bool IsClearLinux() const {
+return DistroVal == ClearLinux;
+  }
+
   /// @}
 };
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-15 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira marked an inline comment as done.
thiagomacieira added inline comments.



Comment at: lib/Driver/Distro.cpp:148
+for (StringRef Line : Lines)
+  if (Version == Distro::UnknownDistro && Line.startswith("ID="))
+Version = llvm::StringSwitch(Line.substr(3))

I'm changing this so we can detect Clear-derived distributions.


https://reviews.llvm.org/D53125



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-11 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira updated this revision to Diff 169236.
thiagomacieira added a comment.

Updated to check for /etc/os-release first and /usr/lib/os-release if that fails


https://reviews.llvm.org/D53125

Files:
  include/clang/Driver/Distro.h
  lib/Driver/Distro.cpp
  lib/Driver/ToolChains/Linux.cpp
  unittests/Driver/DistroTest.cpp

Index: unittests/Driver/DistroTest.cpp
===
--- unittests/Driver/DistroTest.cpp
+++ unittests/Driver/DistroTest.cpp
@@ -302,4 +302,27 @@
   ASSERT_FALSE(ArchLinux.IsDebian());
 }
 
+TEST(DistroTest, DetectClearLinux) {
+  vfs::InMemoryFileSystem ClearLinuxFileSystem;
+  ClearLinuxFileSystem.addFile("/usr/lib/os-release", 0,
+  llvm::MemoryBuffer::getMemBuffer("NAME=\"Clear Linux OS\"\n"
+   "VERSION=1\n"
+   "ID=clear-linux-os\n"
+   "VERSION_ID=25530\n"
+   "PRETTY_NAME=\"Clear Linux OS\"\n"
+   "ANSI_COLOR=\"1;35\"\n"
+   "HOME_URL=\"https://clearlinux.org\"\n;
+   "SUPPORT_URL=\"https://clearlinux.org\"\n;
+   "BUG_REPORT_URL=\"mailto:d...@lists.clearlinux.org\"\n"
+   "PRIVACY_POLICY_URL=\"http://www.intel.com/privacy\"\n;));
+
+  Distro ClearLinux{ClearLinuxFileSystem};
+  ASSERT_EQ(Distro(Distro::ClearLinux), ClearLinux);
+  ASSERT_TRUE(ClearLinux.IsClearLinux());
+  ASSERT_FALSE(ClearLinux.IsUbuntu());
+  ASSERT_FALSE(ClearLinux.IsRedhat());
+  ASSERT_FALSE(ClearLinux.IsOpenSUSE());
+  ASSERT_FALSE(ClearLinux.IsDebian());
+}
+
 } // end anonymous namespace
Index: lib/Driver/ToolChains/Linux.cpp
===
--- lib/Driver/ToolChains/Linux.cpp
+++ lib/Driver/ToolChains/Linux.cpp
@@ -229,16 +229,19 @@
 
   Distro Distro(D.getVFS());
 
-  if (Distro.IsAlpineLinux()) {
+  if (Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("now");
   }
 
-  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux()) {
+  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("relro");
   }
 
+  if (Distro.IsClearLinux())
+ExtraOpts.push_back("--copy-dt-needed-entries");
+
   if (GCCInstallation.getParentLibPath().find("opt/rh/devtoolset") !=
   StringRef::npos)
 // With devtoolset on RHEL, we want to add a bin directory that is relative
@@ -283,7 +286,7 @@
   ExtraOpts.push_back("--build-id");
 #endif
 
-  if (IsAndroid || Distro.IsOpenSUSE())
+  if (IsAndroid || Distro.IsOpenSUSE() || Distro.IsClearLinux())
 ExtraOpts.push_back("--enable-new-dtags");
 
   // The selection of paths to try here is designed to match the patterns which
Index: lib/Driver/Distro.cpp
===
--- lib/Driver/Distro.cpp
+++ lib/Driver/Distro.cpp
@@ -136,6 +136,21 @@
   if (VFS.exists("/etc/arch-release"))
 return Distro::ArchLinux;
 
+  File = VFS.getBufferForFile("/etc/os-release");
+  if (!File)
+File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {
+StringRef Data = File.get()->getBuffer();
+SmallVector Lines;
+Data.split(Lines, "\n");
+Distro::DistroType Version = Distro::UnknownDistro;
+for (StringRef Line : Lines)
+  if (Version == Distro::UnknownDistro && Line.startswith("ID="))
+Version = llvm::StringSwitch(Line.substr(3))
+  .Case("clear-linux-os", Distro::ClearLinux);
+return Version;
+  }
+
   return Distro::UnknownDistro;
 }
 
Index: include/clang/Driver/Distro.h
===
--- include/clang/Driver/Distro.h
+++ include/clang/Driver/Distro.h
@@ -28,6 +28,7 @@
 // the first and last known member in the family, e.g. IsRedHat().
 AlpineLinux,
 ArchLinux,
+ClearLinux,
 DebianLenny,
 DebianSqueeze,
 DebianWheezy,
@@ -122,6 +123,10 @@
 return DistroVal == AlpineLinux;
   }
 
+  bool IsClearLinux() const {
+return DistroVal == ClearLinux;
+  }
+
   /// @}
 };
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-11 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira added inline comments.



Comment at: lib/Driver/Distro.cpp:139
 
+  File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {

mgorny wrote:
> Technically speaking, the spec says you are supposed to read 
> `/etc/os-release` first and fall back to `/usr/lib/os-release` only if the 
> former does not exist.
You're right, I'll adapt.


https://reviews.llvm.org/D53125



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-11 Thread Michał Górny via Phabricator via cfe-commits
mgorny added inline comments.



Comment at: lib/Driver/Distro.cpp:139
 
+  File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {

Technically speaking, the spec says you are supposed to read `/etc/os-release` 
first and fall back to `/usr/lib/os-release` only if the former does not exist.


https://reviews.llvm.org/D53125



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-11 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira updated this revision to Diff 169152.

https://reviews.llvm.org/D53125

Files:
  include/clang/Driver/Distro.h
  lib/Driver/Distro.cpp
  lib/Driver/ToolChains/Linux.cpp
  unittests/Driver/DistroTest.cpp

Index: unittests/Driver/DistroTest.cpp
===
--- unittests/Driver/DistroTest.cpp
+++ unittests/Driver/DistroTest.cpp
@@ -302,4 +302,27 @@
   ASSERT_FALSE(ArchLinux.IsDebian());
 }
 
+TEST(DistroTest, DetectClearLinux) {
+  vfs::InMemoryFileSystem ClearLinuxFileSystem;
+  ClearLinuxFileSystem.addFile("/usr/lib/os-release", 0,
+  llvm::MemoryBuffer::getMemBuffer("NAME=\"Clear Linux OS\"\n"
+   "VERSION=1\n"
+   "ID=clear-linux-os\n"
+   "VERSION_ID=25530\n"
+   "PRETTY_NAME=\"Clear Linux OS\"\n"
+   "ANSI_COLOR=\"1;35\"\n"
+   "HOME_URL=\"https://clearlinux.org\"\n;
+   "SUPPORT_URL=\"https://clearlinux.org\"\n;
+   "BUG_REPORT_URL=\"mailto:d...@lists.clearlinux.org\"\n"
+   "PRIVACY_POLICY_URL=\"http://www.intel.com/privacy\"\n;));
+
+  Distro ClearLinux{ClearLinuxFileSystem};
+  ASSERT_EQ(Distro(Distro::ClearLinux), ClearLinux);
+  ASSERT_TRUE(ClearLinux.IsClearLinux());
+  ASSERT_FALSE(ClearLinux.IsUbuntu());
+  ASSERT_FALSE(ClearLinux.IsRedhat());
+  ASSERT_FALSE(ClearLinux.IsOpenSUSE());
+  ASSERT_FALSE(ClearLinux.IsDebian());
+}
+
 } // end anonymous namespace
Index: lib/Driver/ToolChains/Linux.cpp
===
--- lib/Driver/ToolChains/Linux.cpp
+++ lib/Driver/ToolChains/Linux.cpp
@@ -229,16 +229,19 @@
 
   Distro Distro(D.getVFS());
 
-  if (Distro.IsAlpineLinux()) {
+  if (Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("now");
   }
 
-  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux()) {
+  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("relro");
   }
 
+  if (Distro.IsClearLinux())
+ExtraOpts.push_back("--copy-dt-needed-entries");
+
   if (GCCInstallation.getParentLibPath().find("opt/rh/devtoolset") !=
   StringRef::npos)
 // With devtoolset on RHEL, we want to add a bin directory that is relative
@@ -283,7 +286,7 @@
   ExtraOpts.push_back("--build-id");
 #endif
 
-  if (IsAndroid || Distro.IsOpenSUSE())
+  if (IsAndroid || Distro.IsOpenSUSE() || Distro.IsClearLinux())
 ExtraOpts.push_back("--enable-new-dtags");
 
   // The selection of paths to try here is designed to match the patterns which
Index: lib/Driver/Distro.cpp
===
--- lib/Driver/Distro.cpp
+++ lib/Driver/Distro.cpp
@@ -136,6 +136,19 @@
   if (VFS.exists("/etc/arch-release"))
 return Distro::ArchLinux;
 
+  File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {
+StringRef Data = File.get()->getBuffer();
+SmallVector Lines;
+Data.split(Lines, "\n");
+Distro::DistroType Version = Distro::UnknownDistro;
+for (StringRef Line : Lines)
+  if (Version == Distro::UnknownDistro && Line.startswith("ID="))
+Version = llvm::StringSwitch(Line.substr(3))
+  .Case("clear-linux-os", Distro::ClearLinux);
+return Version;
+  }
+
   return Distro::UnknownDistro;
 }
 
Index: include/clang/Driver/Distro.h
===
--- include/clang/Driver/Distro.h
+++ include/clang/Driver/Distro.h
@@ -28,6 +28,7 @@
 // the first and last known member in the family, e.g. IsRedHat().
 AlpineLinux,
 ArchLinux,
+ClearLinux,
 DebianLenny,
 DebianSqueeze,
 DebianWheezy,
@@ -122,6 +123,10 @@
 return DistroVal == AlpineLinux;
   }
 
+  bool IsClearLinux() const {
+return DistroVal == ClearLinux;
+  }
+
   /// @}
 };
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-10 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira updated this revision to Diff 169151.
thiagomacieira added a comment.

Oops, add the missing portion of the unit test (the part that actually tests).


https://reviews.llvm.org/D53125

Files:
  include/clang/Driver/Distro.h
  lib/Driver/Distro.cpp
  lib/Driver/ToolChains/Linux.cpp
  unittests/Driver/DistroTest.cpp

Index: unittests/Driver/DistroTest.cpp
===
--- unittests/Driver/DistroTest.cpp
+++ unittests/Driver/DistroTest.cpp
@@ -302,4 +302,19 @@
   ASSERT_FALSE(ArchLinux.IsDebian());
 }
 
+TEST(DistroTest, DetectClearLinux) {
+  vfs::InMemoryFileSystem ClearLinuxFileSystem;
+  ClearLinuxFileSystem.addFile("/usr/lib/os-release", 0,
+  llvm::MemoryBuffer::getMemBuffer("NAME=\"Clear Linux OS\"\n"
+   "VERSION=1\n"
+   "ID=clear-linux-os\n"
+   "VERSION_ID=25530\n"
+   "PRETTY_NAME=\"Clear Linux OS\"\n"
+   "ANSI_COLOR=\"1;35\"\n"
+   "HOME_URL=\"https://clearlinux.org\"\n;
+   "SUPPORT_URL=\"https://clearlinux.org\"\n;
+   "BUG_REPORT_URL=\"mailto:d...@lists.clearlinux.org\"\n"
+   "PRIVACY_POLICY_URL=\"http://www.intel.com/privacy\"\n;));
+}
+
 } // end anonymous namespace
Index: lib/Driver/ToolChains/Linux.cpp
===
--- lib/Driver/ToolChains/Linux.cpp
+++ lib/Driver/ToolChains/Linux.cpp
@@ -229,16 +229,19 @@
 
   Distro Distro(D.getVFS());
 
-  if (Distro.IsAlpineLinux()) {
+  if (Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("now");
   }
 
-  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux()) {
+  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("relro");
   }
 
+  if (Distro.IsClearLinux())
+ExtraOpts.push_back("--copy-dt-needed-entries");
+
   if (GCCInstallation.getParentLibPath().find("opt/rh/devtoolset") !=
   StringRef::npos)
 // With devtoolset on RHEL, we want to add a bin directory that is relative
@@ -283,7 +286,7 @@
   ExtraOpts.push_back("--build-id");
 #endif
 
-  if (IsAndroid || Distro.IsOpenSUSE())
+  if (IsAndroid || Distro.IsOpenSUSE() || Distro.IsClearLinux())
 ExtraOpts.push_back("--enable-new-dtags");
 
   // The selection of paths to try here is designed to match the patterns which
Index: lib/Driver/Distro.cpp
===
--- lib/Driver/Distro.cpp
+++ lib/Driver/Distro.cpp
@@ -136,6 +136,19 @@
   if (VFS.exists("/etc/arch-release"))
 return Distro::ArchLinux;
 
+  File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {
+StringRef Data = File.get()->getBuffer();
+SmallVector Lines;
+Data.split(Lines, "\n");
+Distro::DistroType Version = Distro::UnknownDistro;
+for (StringRef Line : Lines)
+  if (Version == Distro::UnknownDistro && Line.startswith("ID="))
+Version = llvm::StringSwitch(Line.substr(3))
+  .Case("clear-linux-os", Distro::ClearLinux);
+return Version;
+  }
+
   return Distro::UnknownDistro;
 }
 
Index: include/clang/Driver/Distro.h
===
--- include/clang/Driver/Distro.h
+++ include/clang/Driver/Distro.h
@@ -28,6 +28,7 @@
 // the first and last known member in the family, e.g. IsRedHat().
 AlpineLinux,
 ArchLinux,
+ClearLinux,
 DebianLenny,
 DebianSqueeze,
 DebianWheezy,
@@ -122,6 +123,10 @@
 return DistroVal == AlpineLinux;
   }
 
+  bool IsClearLinux() const {
+return DistroVal == ClearLinux;
+  }
+
   /// @}
 };
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D53125: Detect Clear Linux and apply Clear's default linker options

2018-10-10 Thread Thiago Macieira via Phabricator via cfe-commits
thiagomacieira created this revision.
thiagomacieira added reviewers: mgorny, erichkeane.
Herald added subscribers: cfe-commits, srhines.

/usr/lib/os-release is the official path of /etc/os-release (the latter is 
usually a symlink to the former)


Repository:
  rC Clang

https://reviews.llvm.org/D53125

Files:
  include/clang/Driver/Distro.h
  lib/Driver/Distro.cpp
  lib/Driver/ToolChains/Linux.cpp
  unittests/Driver/DistroTest.cpp

Index: unittests/Driver/DistroTest.cpp
===
--- unittests/Driver/DistroTest.cpp
+++ unittests/Driver/DistroTest.cpp
@@ -302,4 +302,19 @@
   ASSERT_FALSE(ArchLinux.IsDebian());
 }
 
+TEST(DistroTest, DetectClearLinux) {
+  vfs::InMemoryFileSystem ClearLinuxFileSystem;
+  ClearLinuxFileSystem.addFile("/usr/lib/os-release", 0,
+  llvm::MemoryBuffer::getMemBuffer("NAME=\"Clear Linux OS\"\n"
+   "VERSION=1\n"
+   "ID=clear-linux-os\n"
+   "VERSION_ID=25530\n"
+   "PRETTY_NAME=\"Clear Linux OS\"\n"
+   "ANSI_COLOR=\"1;35\"\n"
+   "HOME_URL=\"https://clearlinux.org\"\n;
+   "SUPPORT_URL=\"https://clearlinux.org\"\n;
+   "BUG_REPORT_URL=\"mailto:d...@lists.clearlinux.org\"\n"
+   "PRIVACY_POLICY_URL=\"http://www.intel.com/privacy\"\n;));
+}
+
 } // end anonymous namespace
Index: lib/Driver/ToolChains/Linux.cpp
===
--- lib/Driver/ToolChains/Linux.cpp
+++ lib/Driver/ToolChains/Linux.cpp
@@ -229,16 +229,19 @@
 
   Distro Distro(D.getVFS());
 
-  if (Distro.IsAlpineLinux()) {
+  if (Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("now");
   }
 
-  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux()) {
+  if (Distro.IsOpenSUSE() || Distro.IsUbuntu() || Distro.IsAlpineLinux() || Distro.IsClearLinux()) {
 ExtraOpts.push_back("-z");
 ExtraOpts.push_back("relro");
   }
 
+  if (Distro.IsClearLinux())
+ExtraOpts.push_back("--copy-dt-needed-entries");
+
   if (GCCInstallation.getParentLibPath().find("opt/rh/devtoolset") !=
   StringRef::npos)
 // With devtoolset on RHEL, we want to add a bin directory that is relative
@@ -283,7 +286,7 @@
   ExtraOpts.push_back("--build-id");
 #endif
 
-  if (IsAndroid || Distro.IsOpenSUSE())
+  if (IsAndroid || Distro.IsOpenSUSE() || Distro.IsClearLinux())
 ExtraOpts.push_back("--enable-new-dtags");
 
   // The selection of paths to try here is designed to match the patterns which
Index: lib/Driver/Distro.cpp
===
--- lib/Driver/Distro.cpp
+++ lib/Driver/Distro.cpp
@@ -136,6 +136,19 @@
   if (VFS.exists("/etc/arch-release"))
 return Distro::ArchLinux;
 
+  File = VFS.getBufferForFile("/usr/lib/os-release");
+  if (File) {
+StringRef Data = File.get()->getBuffer();
+SmallVector Lines;
+Data.split(Lines, "\n");
+Distro::DistroType Version = Distro::UnknownDistro;
+for (StringRef Line : Lines)
+  if (Version == Distro::UnknownDistro && Line.startswith("ID="))
+Version = llvm::StringSwitch(Line.substr(3))
+  .Case("clear-linux-os", Distro::ClearLinux);
+return Version;
+  }
+
   return Distro::UnknownDistro;
 }
 
Index: include/clang/Driver/Distro.h
===
--- include/clang/Driver/Distro.h
+++ include/clang/Driver/Distro.h
@@ -28,6 +28,7 @@
 // the first and last known member in the family, e.g. IsRedHat().
 AlpineLinux,
 ArchLinux,
+ClearLinux,
 DebianLenny,
 DebianSqueeze,
 DebianWheezy,
@@ -122,6 +123,10 @@
 return DistroVal == AlpineLinux;
   }
 
+  bool IsClearLinux() const {
+return DistroVal == ClearLinux;
+  }
+
   /// @}
 };
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits