// 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;
+ // If we could open the file, parse its contents, otherwise
+ // pass the @file option verbatim.
- ParseCStringVector(newArgv, respFilePtr->getBufferStart());
- }
- else {
- newArgv.push_back(strdup(arg));
+ // TODO: we should also support recursive loading of response files,
+ // since this is how gcc behaves. (From their man page: "The file may
+ // itself contain additional @file options; any such options will be
+ // processed recursively.")
+
+ if (respFilePtr != 0) {
+ ParseCStringVector(newArgv, respFilePtr->getBufferStart());
+ continue;
+ }
+ }
}
+ newArgv.push_back(strdup(arg));
}
}
return O.error(": '" + Arg +
"' is invalid value for boolean argument! Try 0 or 1");
}
+ if (IsInvertable && strncmp(ArgName+1, "no-", 3) == 0)
+ Value = !Value;
return false;
}
if (Arg == "" || Arg == "true" || Arg == "TRUE" || Arg == "True" ||
Arg == "1") {
Value = BOU_TRUE;
- } else if (Arg == "false" || Arg == "FALSE" || Arg == "False" || Arg == "0") {
+ } else if (Arg == "false" || Arg == "FALSE"
+ || Arg == "False" || Arg == "0") {
Value = BOU_FALSE;
} else {
return O.error(": '" + Arg +