Mimic gcc behaviour with regard to response files.

llvm-svn: 62688
This commit is contained in:
Mikhail Glushenkov 2009-01-21 13:14:02 +00:00
parent 1a0c083748
commit 6a4f729dc9
2 changed files with 29 additions and 14 deletions

View File

@ -78,8 +78,24 @@ options intended for developers.
Print version information and exit.
=item B<@>I<file>
Read command-line options from I<file>. The options read are inserted
in place of the original @I<file> option. If I<file> does not exist, or
cannot be read, then the option will be treated literally, and not
removed.
Options in I<file> are separated by whitespace. A whitespace character
may be included in an option by surrounding the entire option in
either single or double quotes. Any character (including a backslash)
may be included by prefixing the character to be included with a
backslash. The file may itself contain additional @I<file> options;
any such options will be processed recursively.
=back
=head2 Control Options
By default, LLVMC is built with some standard configuration libraries

View File

@ -388,23 +388,22 @@ static void ExpandResponseFiles(int argc, char** argv,
// Check that the response file is not empty (mmap'ing empty
// files can be problematic).
const sys::FileStatus *FileStat = respFile.getFileStatus();
if (!FileStat)
continue;
if (FileStat->getSize() == 0)
continue;
if (FileStat && FileStat->getSize() != 0) {
// Mmap the response file into memory.
OwningPtr<MemoryBuffer>
respFilePtr(MemoryBuffer::getFile(respFile.c_str()));
// Mmap the response file into memory.
OwningPtr<MemoryBuffer>
respFilePtr(MemoryBuffer::getFile(respFile.c_str()));
if (respFilePtr == 0)
continue;
ParseCStringVector(newArgv, respFilePtr->getBufferStart());
}
else {
newArgv.push_back(strdup(arg));
// If we could open the file, parse its contents, otherwise
// pass the @file option verbatim.
// TODO: support recursion.
if (respFilePtr != 0) {
ParseCStringVector(newArgv, respFilePtr->getBufferStart());
continue;
}
}
}
newArgv.push_back(strdup(arg));
}
}