[cfe-dev] New warning for mismatched include case

Ruben Van Boxem vanboxem.ruben at gmail.com
Mon Jul 30 09:34:39 PDT 2012


2012/7/30 Aaron Ballman <aaron at aaronballman.com>

> On Mon, Jul 30, 2012 at 12:00 PM, Jordan Rose <jordan_rose at apple.com>
> wrote:
> >
> > On Jul 28, 2012, at 5:51 AM, Ruben Van Boxem <vanboxem.ruben at gmail.com>
> wrote:
> >
> >>> I apologize for the delay. I think that it should be fairly trivial to
> detect which headers come from the SDK by looking in the registry for the
> path to the SDK. Maybe clang already supports this somewhere? I'm not very
> Windows savvy myself but I'm willing to take a crack at this if nobody else
> steps forward with more specific information.
> >>>
> >>
> >> This is unacceptable for MinGW, which uses no registry, but the same
> header names (but obviously different implementation). The MinGW(-w64)
> headers are all lower-case, some of the Windows SDK headers are
> capitalized. There is no way to detect the difference, and there is no
> "right" capitalization for these.
> >>
> >> This feature also has an effect on cross-compilation, where a Linux to
> Windows cross-compile will work case sensitive, a native Windows compile
> will not.
> >>
> >> Ruben
> >
> > It /is/ a warning, not an error. Maybe it can be off by default on
> Windows and on case-sensitive filesystems?
>
> I think it's important for it to be on by default on Windows as that's
> where I see a lot of people running into the initial problem.  They
> write their code on Windows without paying attention to capitalization
> and it works.  Then they move the code base over to the Mac or Linux
> and it stops compiling.  Having the warning early on (when they first
> write the include) would help reinforce the notion that case matters.
>

OK. Then what capitalization is "correct"? MSVS2003, MSVS2005, MSVS2008,
MSVS2010, MSVS2012 (I'm not saying all these are different, I'm saying it
really doesn't matter one bit that they use different capitalization), or
an old MinGW that maybe has some capitals as well (I don't know this for
sure), or modern MinGW-w64, where as far as I can tell, everything is
lowercase? That's the problem: there is no one right thing. The only decent
way to solve this is to keep a list of *all* headers, or exclude system
headers. This last thing would be kind of easy, because system headers are
usually included by `-i system` or similar. Otherwise, I see no one right
way to do this. perhaps all the language Standard headers can be forced
lowercase as well, but that would special case those. The Win32 API headers
differ between MSVS and MinGW, so those cannot possibly be included in this
warning whatsoever.

To conclude: if this is only for user headers, I'm fine with it, as those
should be consistent. Platform headers are unfortunately not consistent
across implementations.

Ruben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20120730/917f60e9/attachment.html>


More information about the cfe-dev mailing list