[prev in list] [next in list] [prev in thread] [next in thread]
List: cfe-commits
Subject: Re: [PATCH] D11403: [Modules] Add Darwin-specific compatibility module map parsing hacks
From: Richard Smith <richard () metafoo ! co ! uk>
Date: 2015-08-05 21:45:08
Message-ID: ca4d8301e92782128d6ce67c8b841a19 () localhost ! localdomain
[Download RAW message or body]
rsmith added inline comments.
================
Comment at: lib/Lex/ModuleMap.cpp:1891-1908
@@ +1890,20 @@
+
+ if (ActiveModule->UsesRequiresExcludedHack) {
+ // Mark this header 'textual' (see doc comment for
+ // Module::UsesRequiresExcludedHack). Although iterating over the directory
+ // is relatively expensive, in practice this only applies to the uncommonly
+ // used Tcl module on Darwin platforms.
+ std::error_code EC;
+ for (llvm::sys::fs::recursive_directory_iterator I(Dir->getName(), EC), E;
+ I != E && !EC; I.increment(EC)) {
+ if (const FileEntry *FE = SourceMgr.getFileManager().getFile(I->path())) {
+ // FIXME: Taking the name from the FileEntry is unstable and can give
+ // different results depending on how we've previously named that file
+ // in this build.
+ Module::Header Header = {FE->getName(), FE};
+ Map.addHeader(ActiveModule, Header, ModuleMap::TextualHeader);
+ }
+ }
+ return;
+ }
+
----------------
benlangmuir wrote:
> rsmith wrote:
> > Is there a better way of handling this? If the parent directory isn't itself an \
> > umbrella directory of some module, maybe you could just ignore the umbrella \
> > directory declaration for this module entirely?
> This only affects Tcl.Private, and Tcl has an umbrella header so I don't think that \
> will work. The only other way I can think of making this work is to have a notion \
> of a *directory* that is exempt from its containing umbrella, but I'm not sure \
> that's a generally good feature and it seems like a lot more work. Let me know if \
> you have any suggestions though.
Ugh, OK. In that case:
* maybe take the file name from `I->path()` rather than `FE->getName()` (we want to \
imagine the files were named within the umbrella directory rather than some other \
way)
* sort the paths before you add them so that the serialized pcm doesn't depend on \
file system traversal order
Also, you'll be paying this file system traversal cost whenever the relevant module \
map is parsed, not only when the Tcl module is used -- and if it's the /usr/include \
module map, you'll walk this umbrella directory on every build. Just wanted to \
confirm you're OK with that.
Repository:
rL LLVM
http://reviews.llvm.org/D11403
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic