diff --git a/llvm/test/tools/llvm-rc/include-paths.test b/llvm/test/tools/llvm-rc/include-paths.test --- a/llvm/test/tools/llvm-rc/include-paths.test +++ b/llvm/test/tools/llvm-rc/include-paths.test @@ -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 \ diff --git a/llvm/tools/llvm-rc/ResourceFileWriter.h b/llvm/tools/llvm-rc/ResourceFileWriter.h --- a/llvm/tools/llvm-rc/ResourceFileWriter.h +++ b/llvm/tools/llvm-rc/ResourceFileWriter.h @@ -35,7 +35,7 @@ struct WriterParams { std::vector Include; // Additional folders to search for files. - std::vector 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. }; diff --git a/llvm/tools/llvm-rc/ResourceFileWriter.cpp b/llvm/tools/llvm-rc/ResourceFileWriter.cpp --- a/llvm/tools/llvm-rc/ResourceFileWriter.cpp +++ b/llvm/tools/llvm-rc/ResourceFileWriter.cpp @@ -1553,10 +1553,11 @@ 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("error : file not found : " + Twine(File), inconvertibleErrorCode()); diff --git a/llvm/tools/llvm-rc/llvm-rc.cpp b/llvm/tools/llvm-rc/llvm-rc.cpp --- a/llvm/tools/llvm-rc/llvm-rc.cpp +++ b/llvm/tools/llvm-rc/llvm-rc.cpp @@ -142,7 +142,7 @@ 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)