<div dir="rtl"><div dir="ltr">r<span style="font-size:12.8000001907349px">243153, s</span><span style="font-size:12.8000001907349px">electing the highest version found like </span><span style="font-size:12.8000001907349px">ScanLibDirForGCCTriple.</span></div><div dir="ltr"><br></div></div><div class="gmail_extra"><div dir="ltr"><br><div class="gmail_quote">2015-07-24 21:43 GMT+03:00 Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><span class="">On Fri, Jul 24, 2015 at 4:01 AM, Yaron Keren <span dir="ltr"><<a href="mailto:yaron.keren@gmail.com" target="_blank">yaron.keren@gmail.com</a>></span> wrote:<br></span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">Author: yrnkrn<br>
Date: Fri Jul 24 06:01:45 2015<br>
New Revision: 243105<br>
<br></span>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D243105-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=G9yzCz1i9WgTq6jLyJ7r1dS-MlQ_Ifc7-gk8JAh_jLg&s=cJGA_HdoXSuD4OSFXCJGqLupkJDkQp00jM4REBkuEy8&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=243105&view=rev</a><span class=""><br>
Log:<br>
Apparently some of the bots add .svn dirs inside the test/Driver/Inputs<br>
directory structure. Try to make mingw toolchain resilient to such surprises.<br>
<br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/MinGWToolChain.cpp<br>
<br>
Modified: cfe/trunk/lib/Driver/MinGWToolChain.cpp<br></span>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Driver_MinGWToolChain.cpp-3Frev-3D243105-26r1-3D243104-26r2-3D243105-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=G9yzCz1i9WgTq6jLyJ7r1dS-MlQ_Ifc7-gk8JAh_jLg&s=HiniRaKKMLdQWxqWuBOGtL8DI-MYenQknrKhQx8S_t4&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/MinGWToolChain.cpp?rev=243105&r1=243104&r2=243105&view=diff</a><span class=""><br>
==============================================================================<br>
--- cfe/trunk/lib/Driver/MinGWToolChain.cpp (original)<br>
+++ cfe/trunk/lib/Driver/MinGWToolChain.cpp Fri Jul 24 06:01:45 2015<br>
@@ -20,28 +20,38 @@ using namespace clang::driver::toolchain<br>
 using namespace clang;<br>
 using namespace llvm::opt;<br>
<br>
+namespace {<br>
+bool findGccVersion(StringRef LibDir, std::string &GccLibDir,<br>
+                    std::string &Ver) {<br>
+  std::error_code EC;<br>
+  llvm::sys::fs::directory_iterator Entry(LibDir, EC);<br>
+  while (!EC) {<br>
+    GccLibDir = Entry->path();<br>
+    Ver = llvm::sys::path::filename(GccLibDir);<br>
+    if (Ver.size() && isdigit(Ver[0]))<br>
+      return true;<br></span></blockquote><div><br></div><div>This seems like a very questionable approach. What if there are two such directories? You appear to make an arbitrary choice between them. See Generic_GCC::GCCInstallationDetector::ScanLibDirForGCCTriple for how other toolchains handle this.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div class="h5">
+    Entry.increment(EC);<br>
+  }<br>
+  return false;<br>
+}<br>
+}<br>
+<br>
 void MinGW::findGccLibDir() {<br>
+  llvm::SmallVector<llvm::SmallString<32>, 2> Archs;<br>
+  Archs.emplace_back(getTriple().getArchName());<br>
+  Archs[0] += "-w64-mingw32";<br>
+  Archs.emplace_back("mingw32");<br>
+  Arch = "unknown";<br>
   // lib: Arch Linux, Ubuntu, Windows<br>
   // lib64: openSUSE Linux<br>
-  llvm::SmallString<1024> LibDir;<br>
   for (StringRef Lib : {"lib", "lib64"}) {<br>
-    LibDir = Base;<br>
-    llvm::sys::path::append(LibDir, Lib, "gcc");<br>
-    LibDir += llvm::sys::path::get_separator();<br>
-    std::error_code EC;<br>
-    // First look for mingw-w64.<br>
-    llvm::sys::fs::directory_iterator MingW64Entry(LibDir + Arch, EC);<br>
-    if (!EC) {<br>
-      GccLibDir = MingW64Entry->path();<br>
-      break;<br>
-    }<br></div></div>
-    // If mingw-w64 not found, try looking for <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__mingw.org&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=BSqEv9KvKMW_Ob8SyngJ70KdZISM_ASROnREeq0cCxk&m=G9yzCz1i9WgTq6jLyJ7r1dS-MlQ_Ifc7-gk8JAh_jLg&s=XDXqmdfQd3zI0O3SNj6aldkwMIPHZZ-u4s1BFXdEgJI&e=" rel="noreferrer" target="_blank">mingw.org</a>.<div><div class="h5"><br>
-    llvm::sys::fs::directory_iterator MingwOrgEntry(LibDir + "mingw32", EC);<br>
-    if (!EC) {<br>
-      GccLibDir = MingwOrgEntry->path();<br>
-      // Replace Arch with mingw32 arch.<br>
-      Arch = "mingw32";<br>
-      break;<br>
+    for (StringRef MaybeArch : Archs) {<br>
+      llvm::SmallString<1024> LibDir(Base);<br>
+      llvm::sys::path::append(LibDir, Lib, "gcc", MaybeArch);<br>
+      if (findGccVersion(LibDir, GccLibDir, Ver)) {<br>
+        Arch = MaybeArch;<br>
+        return;<br>
+      }<br>
     }<br>
   }<br>
 }<br>
@@ -50,9 +60,6 @@ MinGW::MinGW(const Driver &D, const llvm<br>
     : ToolChain(D, Triple, Args) {<br>
   getProgramPaths().push_back(getDriver().getInstalledDir());<br>
<br>
-  // Default Arch is mingw-w64.<br>
-  Arch = (getTriple().getArchName() + "-w64-mingw32").str();<br>
-<br>
 // In Windows there aren't any standard install locations, we search<br>
 // for gcc on the PATH. In Linux the base is always /usr.<br>
 #ifdef LLVM_ON_WIN32<br>
@@ -73,7 +80,6 @@ MinGW::MinGW(const Driver &D, const llvm<br>
<br>
   Base += llvm::sys::path::get_separator();<br>
   findGccLibDir();<br>
-  Ver = llvm::sys::path::filename(GccLibDir);<br>
   // GccLibDir must precede Base/lib so that the<br>
   // correct crtbegin.o ,cetend.o would be found.<br>
   getFilePaths().push_back(GccLibDir);<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
</div></div><a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></blockquote></div></div></div>