[llvm-rc] Fix handling of the /X option to match its documentation and rc.exe

This matches how it's documented in the option listing.

Differential Revision: https://reviews.llvm.org/D100754
This commit is contained in:
Martin Storsjö 2021-04-16 13:30:47 +03:00
parent cb1128134a
commit 73cda4d183
4 changed files with 17 additions and 6 deletions

View File

@ -13,6 +13,16 @@
; RUN: llvm-rc /FO %t.nested-include.res /I %p/Inputs/nested -- %p/Inputs/deep-include.rc
; RUN: llvm-readobj %t.nested-include.res | FileCheck --check-prefix=FOUND %s
; The include dir can be specified via the INCLUDE env var too.
; RUN: rm -f %t.nested-include.res
; RUN: env INCLUDE=%p/Inputs/nested llvm-rc /FO %t.nested-include.res -- %p/Inputs/deep-include.rc
; RUN: llvm-readobj %t.nested-include.res | FileCheck --check-prefix=FOUND %s
; Specifying the /X option should make it ignore the INCLUDE variable.
; RUN: rm -f %t.nested-include.res
; RUN: not env INCLUDE=%p/Inputs/nested llvm-rc /X /FO %t.nested-include.res -- %p/Inputs/deep-include.rc 2>&1 \
; RUN: | FileCheck --check-prefix=MISSING %s
; Otherwise, it should not find the bitmap.
; RUN: rm -f %t.nested-include.res
; RUN: not llvm-rc /FO %t.nested-include.res -- %p/Inputs/deep-include.rc 2>&1 \

View File

@ -1553,10 +1553,11 @@ ResourceFileWriter::loadFile(StringRef File) const {
Path, /*IsText=*/false, /*RequiresNullTerminator=*/false));
}
if (auto Result =
llvm::sys::Process::FindInEnvPath("INCLUDE", File, Params.NoInclude))
return errorOrToExpected(MemoryBuffer::getFile(
*Result, /*IsText=*/false, /*RequiresNullTerminator=*/false));
if (!Params.NoInclude) {
if (auto Result = llvm::sys::Process::FindInEnvPath("INCLUDE", File))
return errorOrToExpected(MemoryBuffer::getFile(
*Result, /*IsText=*/false, /*RequiresNullTerminator=*/false));
}
return make_error<StringError>("error : file not found : " + Twine(File),
inconvertibleErrorCode());

View File

@ -35,7 +35,7 @@ enum CodePage {
struct WriterParams {
std::vector<std::string> Include; // Additional folders to search for files.
std::vector<std::string> NoInclude; // Folders to exclude from file search.
bool NoInclude; // Ignore the INCLUDE variable.
StringRef InputFilePath; // The full path of the input file.
int CodePage = CpAcp; // The codepage for interpreting characters.
};

View File

@ -142,7 +142,7 @@ int main(int Argc, const char **Argv) {
llvm::sys::fs::make_absolute(InputFile);
Params.InputFilePath = InputFile;
Params.Include = InputArgs.getAllArgValues(OPT_includepath);
Params.NoInclude = InputArgs.getAllArgValues(OPT_noinclude);
Params.NoInclude = InputArgs.hasArg(OPT_noinclude);
if (InputArgs.hasArg(OPT_codepage)) {
if (InputArgs.getLastArgValue(OPT_codepage)