<div dir="rtl"><div dir="ltr">MingW does use InitHeaderSearch to populate the include directories. Frankly, between the C, C++ headers and the hardcoded version directories it's a big mess.</div><div dir="ltr"><br></div>

<div dir="ltr">Regrading the MingW version, practically I found three popular distributions. </div><div dir="ltr"><br></div><div dir="ltr">1) <a href="http://www.mingw.org/">http://www.mingw.org/</a></div><div dir="ltr">
2) <a href="http://tdm-gcc.tdragon.net/">http://tdm-gcc.tdragon.net/</a></div>
<div dir="ltr">3) <a href="http://sourceforge.net/projects/mingwbuilds/">http://sourceforge.net/projects/mingwbuilds/</a></div><div dir="ltr"><br></div><div dir="ltr">The first two are quite easy to support since they are installed to a fixed default directory. Code for the C includes would be:</div>

<div dir="ltr"><div dir="ltr"><font face="courier new, monospace">      AddPath("c:/mingw/include", System, false); </font></div><div>and</div><div><div><font face="courier new, monospace">      AddPath("c:/TDM-GCC-32/include", System, false); </font></div>

</div><div>respectively.  Library code would be similar.</div><div><br></div></div><div dir="ltr">mingw-builds is smarter installing into different directories based on gcc version, thread package and EH method. So that you can have multiple versions of mingw-builds installed and choose between them by changing the PATH only. I wrote some not-very-elegant code (below) for the C includes of mingw-builds, I think it's not committed to svn.</div>

<div dir="ltr"><br></div><div dir="ltr">For C++ headers, a decision to be made is if the clang+MingW uses by default libstdc++ or libcxx headers and if libcxx, where it is to be found. This may be changed later by the user with -nostdinc and such but it is an headache of flags. Maybe a command line flag?</div>

<div dir="ltr"><br></div><div dir="ltr">Yaron</div><div dir="ltr"><br></div><div dir="ltr"><span style="font-family:'courier new',monospace">      // mingw-builds include path.</span><br></div><div dir="ltr"><div dir="ltr">

<font face="courier new, monospace">      // Recursively search all dirs for i686-w64-mingw32, include below.</font></div><div dir="ltr"><font face="courier new, monospace">      llvm::error_code EC;</font></div><div dir="ltr">

<font face="courier new, monospace">      for (llvm::sys::fs::recursive_directory_iterator</font></div><div dir="ltr"><font face="courier new, monospace">               Dir("c:\\Program Files (x86)\\mingw-builds", EC),</font></div>

<div dir="ltr"><font face="courier new, monospace">           DirEnd;</font></div><div dir="ltr"><font face="courier new, monospace">           Dir != DirEnd && !EC; Dir.increment(EC)) {</font></div><div dir="ltr">

<font face="courier new, monospace">        std::string DirName = Dir->path();</font></div><div dir="ltr"><font face="courier new, monospace">        if (llvm::sys::fs::is_directory(DirName)) {</font></div><div dir="ltr">

<font face="courier new, monospace">          if (DirName.find("i686-w64-mingw32") != std::string::npos) {</font></div><div dir="ltr"><font face="courier new, monospace">            SmallString<512> P = DirName;</font></div>

<div dir="ltr"><font face="courier new, monospace">            llvm::sys::path::append(P, "include");</font></div><div dir="ltr"><font face="courier new, monospace">            AddPath(P.str(), System, false);</font></div>

<div dir="ltr"><font face="courier new, monospace">            // Stop searching upon first find.</font></div><div dir="ltr"><font face="courier new, monospace">            break;</font></div><div dir="ltr"><font face="courier new, monospace">          }</font></div>

<div dir="ltr"><font face="courier new, monospace">        }</font></div><div dir="ltr"><font face="courier new, monospace">      }</font></div><div dir="ltr"><font face="courier new, monospace">  </font></div></div><div dir="ltr">

<br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr"><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div dir="ltr">2013/10/16 Edward Meewis <span dir="ltr"><<a href="mailto:ed@extraordinarymachine.nl" target="_blank">ed@extraordinarymachine.nl</a>></span></div>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi G M,<div class="im"><br>
<br>
On 15/10/2013 22:56, G M wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Edward<div class="im"><br>
On Wed, Oct 16, 2013 at 9:40 AM, Edward Meewis <<a href="mailto:ed@extraordinarymachine.nl" target="_blank">ed@extraordinarymachine.nl</a> <mailto:<a href="mailto:ed@extraordinarymachine.nl" target="_blank">ed@<u></u>extraordinarymachine.nl</a>>> wrote:<br>


<br>
    Hi,<br>
<br>
    I was looking into polishing up the header inclusion for FreeBSD,<br>
    due to some cmake build issues I have when building the the latest<br>
    libcxx with the latest clang.<br>
<br>
I'm curious what the cmake issues are.<br>
</div></blockquote>
<br>
I build clang ToT and libcxx with the previous clang-ToT, using the previous libcxx. Sometimes the introduction of new macros, e.g., _LIB_WEAK, breaks the build. The cause is subtle: I have to point CXX to -I/usr/local/include/c++/v1, but when libcxx is build this needs to be overridden to $MYLIBCXXLIB/include when libcxx is built. -nostdcxxinc is no help here, because I had to set it explicitly.<br>


I can work around it by pointing the build to $MYLIBCXXLIB/include, but that's not very nice. New headers with old libraries usually spell disaster.<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
    It seems that the InitHeaderSearch is almost obsolete, I think<br>
    that most of the header search path information has moved to the<br>
    Frontend/Tool(Chain)(s) files.<br>
<br>
    It turns out that (naively) removing InitHeaderSearc.cpp broke the<br>
    CPP init and consequently 'diagtool'.<br>
<br>
I think InitHeaderSearch is needed by mingw tool chain at least, maybe others.  It could be cleaned up but the functionality is needed for now.<br>
<br>
<br>
    Is it worth while to move CPP to the ToolChain infra?<br>
<br>
What does that mean in practice?<br>
</blockquote>
<br></div>
Don't know yet. I guess defining a mingw toolchain in ToolChains, that includes the necessary funtionality, but the miriad of MinGW versions scares me a bit.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thanks<br>
</blockquote><div class="HOEnZb"><div class="h5">
<br>
______________________________<u></u>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div>