clang
3.9.0
|
#include "clang/Lex/ModuleMap.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/LexDiagnostic.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/LiteralSupport.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/FileSystem.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include <stdlib.h>
#include "clang/Basic/TokenKinds.def"
Go to the source code of this file.
Classes | |
struct | clang::MMToken |
A token in a module map file. More... | |
class | clang::ModuleMapParser |
Namespaces | |
clang | |
Dataflow Directional Tag Classes. | |
Macros | |
#define | KEYWORD(Keyword, Conditions) .Case(#Keyword, true) |
#define | ALIAS(Keyword, AliasOf, Conditions) .Case(Keyword, true) |
Enumerations | |
enum | AttributeKind |
Enumerates the known attributes. More... | |
Functions | |
static StringRef | sanitizeFilenameAsIdentifier (StringRef Name, SmallVectorImpl< char > &Buffer) |
"Sanitize" a filename so that it can be used as an identifier. More... | |
static bool | isBuiltinHeader (StringRef FileName) |
Determine whether the given file name is the name of a builtin header, supplied by Clang to replace, override, or augment existing system headers. More... | |
static bool | violatesPrivateInclude (Module *RequestingModule, const FileEntry *IncFileEnt, ModuleMap::KnownHeader Header) |
static Module * | getTopLevelOrNull (Module *M) |
static bool | isBetterKnownHeader (const ModuleMap::KnownHeader &New, const ModuleMap::KnownHeader &Old) |
static void | inferFrameworkLink (Module *Mod, const DirectoryEntry *FrameworkDir, FileManager &FileMgr) |
For a framework module, infer the framework against which we should link. More... | |
static Module::HeaderKind | headerRoleToKind (ModuleMap::ModuleHeaderRole Role) |
static bool | shouldAddRequirement (Module *M, StringRef Feature, bool &IsRequiresExcludedHack) |
Whether to add the requirement Feature to the module M . More... | |
static void | appendSubframeworkPaths (Module *Mod, SmallVectorImpl< char > &Path) |
Append to Paths the set of paths needed to get to the subframework in which the given module lives. More... | |
static int | compareModuleHeaders (const Module::Header *A, const Module::Header *B) |
static std::string | formatModuleId (const ModuleId &Id) |
Format a module-id into a string. More... | |
#define ALIAS | ( | Keyword, | |
AliasOf, | |||
Conditions | |||
) | .Case(Keyword, true) |
#define KEYWORD | ( | Keyword, | |
Conditions | |||
) | .Case(#Keyword, true) |
enum AttributeKind |
Enumerates the known attributes.
Definition at line 1283 of file ModuleMap.cpp.
|
static |
Append to Paths
the set of paths needed to get to the subframework in which the given module lives.
Definition at line 1700 of file ModuleMap.cpp.
References I, clang::Module::IsFramework, clang::Module::Name, and clang::Module::Parent.
|
static |
Definition at line 1885 of file ModuleMap.cpp.
References clang::Module::Header::NameAsWritten.
|
static |
Definition at line 233 of file ModuleMap.cpp.
References clang::Module::getTopLevelModule().
Referenced by clang::ModuleMap::diagnoseHeaderInclusion().
|
static |
Definition at line 778 of file ModuleMap.cpp.
References clang::Module::HK_Normal, clang::Module::HK_Private, clang::Module::HK_PrivateTextual, clang::Module::HK_Textual, clang::ModuleMap::NormalHeader, clang::ModuleMap::PrivateHeader, and clang::ModuleMap::TextualHeader.
Referenced by clang::ModuleMap::addHeader().
|
static |
For a framework module, infer the framework against which we should link.
Definition at line 563 of file ModuleMap.cpp.
References clang::FileManager::getFile(), clang::DirectoryEntry::getName(), clang::Module::IsFramework, clang::Module::isSubFramework(), clang::Module::LinkLibraries, and clang::Module::Name.
|
static |
Definition at line 308 of file ModuleMap.cpp.
References clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::isAvailable(), clang::ModuleMap::PrivateHeader, and clang::ModuleMap::TextualHeader.
Referenced by clang::ModuleMap::findModuleForHeader().
|
static |
Determine whether the given file name is the name of a builtin header, supplied by Clang to replace, override, or augment existing system headers.
Definition at line 147 of file ModuleMap.cpp.
References FileName.
|
static |
"Sanitize" a filename so that it can be used as an identifier.
Definition at line 108 of file ModuleMap.cpp.
References I, clang::isDigit(), clang::isIdentifierBody(), clang::isValidIdentifier(), and clang::Name.
Referenced by clang::ModuleMap::isHeaderUnavailableInModule().
|
static |
Whether to add the requirement Feature
to the module M
.
This preserves backwards compatibility for two hacks in the Darwin system module map files:
The use of 'requires excluded' to make headers non-modular, which should really be mapped to 'textual' now that we have this feature. We drop the 'excluded' requirement, and set IsRequiresExcludedHack
to true. Later, this bit will be used to map all the headers inside this module to 'textual'.
This affects Darwin.C.excluded (for assert.h) and Tcl.Private.
Definition at line 1625 of file ModuleMap.cpp.
References clang::Module::fullModuleNameIs().
|
static |
Definition at line 210 of file ModuleMap.cpp.
References clang::ModuleMap::KnownHeader::getModule(), clang::ModuleMap::KnownHeader::getRole(), clang::Module::Headers, clang::Module::HK_Private, clang::Module::HK_PrivateTextual, clang::ModuleMap::KnownHeader::isAccessibleFrom(), and clang::ModuleMap::PrivateHeader.
Referenced by clang::ModuleMap::diagnoseHeaderInclusion().