Reapply r278457 with test fixed to not abouse fs case sensitivity.
When the VFS uses a YAML file, the real file path for a
virtual file is described in the "external-contents" field. Example:
...
{
'type': 'file',
'name': 'a.h',
'external-contents': '/a/b/c/a.h'
}
Currently, when parsing umbrella directories, we use
vfs::recursive_directory_iterator to gather the header files to generate the
equivalent modules for. If the external contents for a header does not exist,
we currently are unable to build a module, since the VFS
vfs::recursive_directory_iterator will fail when it finds an entry without a
reliable real path.
Since the YAML file could be prepared ahead of time and shared among
different compiler invocations, an entry might not yet have a reliable
path in 'external-contents', breaking the iteration.
Give the VFS the capability to skip such entries whenever
'ignore-non-existent-contents' property is set in the YAML file.
rdar://problem/27531549
llvm-svn: 278543
40 lines
912 B
YAML
40 lines
912 B
YAML
{
|
|
'version': 0,
|
|
'case-sensitive': 'false',
|
|
'ignore-non-existent-contents': 'true',
|
|
'roots': [
|
|
{
|
|
'type': 'directory',
|
|
'name': "VDIR/Bar.framework/Headers",
|
|
'contents': [
|
|
{
|
|
'type': 'file',
|
|
'name': "A.h",
|
|
'external-contents': "OUT_DIR/Bar.framework/Headers/A.h"
|
|
},
|
|
{
|
|
'type': 'file',
|
|
'name': "B.h",
|
|
'external-contents': "OUT_DIR/Bar.framework/Headers/B.h"
|
|
},
|
|
{
|
|
'type': 'file',
|
|
'name': "C.h",
|
|
'external-contents': "OUT_DIR/Bar.framework/Headers/C.h"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
'type': 'directory',
|
|
'name': "VDIR/Bar.framework/Modules",
|
|
'contents': [
|
|
{
|
|
'type': 'file',
|
|
'name': "module.modulemap",
|
|
'external-contents': "OUT_DIR/Bar.framework/Modules/module.modulemap"
|
|
}
|
|
]
|
|
},
|
|
]
|
|
}
|