[llvm] r351305 - [llvm-rc] Support '--' for delimiting options from input paths

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 16 00:09:22 PST 2019


Author: mstorsjo
Date: Wed Jan 16 00:09:22 2019
New Revision: 351305

URL: http://llvm.org/viewvc/llvm-project?rev=351305&view=rev
Log:
[llvm-rc] Support '--' for delimiting options from input paths

This allows avoiding conflicts between paths that begin with the same
chars as some llvm-rc options (which can be used with either slashes
or dashes).

Differential Revision: https://reviews.llvm.org/D56743

Modified:
    llvm/trunk/test/tools/llvm-rc/absolute.test
    llvm/trunk/test/tools/llvm-rc/codepage.test
    llvm/trunk/test/tools/llvm-rc/cpp-output.test
    llvm/trunk/test/tools/llvm-rc/flags.test
    llvm/trunk/test/tools/llvm-rc/include-paths.test
    llvm/trunk/test/tools/llvm-rc/memoryflags-stringtable.test
    llvm/trunk/test/tools/llvm-rc/memoryflags.test
    llvm/trunk/test/tools/llvm-rc/not-expr.test
    llvm/trunk/test/tools/llvm-rc/parser-expr.test
    llvm/trunk/test/tools/llvm-rc/parser.test
    llvm/trunk/test/tools/llvm-rc/tag-accelerators.test
    llvm/trunk/test/tools/llvm-rc/tag-dialog.test
    llvm/trunk/test/tools/llvm-rc/tag-escape.test
    llvm/trunk/test/tools/llvm-rc/tag-html.test
    llvm/trunk/test/tools/llvm-rc/tag-icon-cursor.test
    llvm/trunk/test/tools/llvm-rc/tag-menu.test
    llvm/trunk/test/tools/llvm-rc/tag-stringtable.test
    llvm/trunk/test/tools/llvm-rc/tag-user.test
    llvm/trunk/test/tools/llvm-rc/tag-versioninfo.test
    llvm/trunk/test/tools/llvm-rc/tokenizer.test
    llvm/trunk/test/tools/llvm-rc/versioninfo-padding.test
    llvm/trunk/tools/llvm-rc/llvm-rc.cpp

Modified: llvm/trunk/test/tools/llvm-rc/absolute.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/absolute.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/absolute.test (original)
+++ llvm/trunk/test/tools/llvm-rc/absolute.test Wed Jan 16 00:09:22 2019
@@ -1,3 +1,3 @@
 ; RUN: touch %t.manifest
 ; RUN: echo "1 24 \"%t.manifest\"" > %t.rc
-; RUN: llvm-rc %t.rc
+; RUN: llvm-rc -- %t.rc

Modified: llvm/trunk/test/tools/llvm-rc/codepage.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/codepage.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/codepage.test (original)
+++ llvm/trunk/test/tools/llvm-rc/codepage.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /C 65001 /FO %t.utf8.res %p/Inputs/utf8.rc
+; RUN: llvm-rc /C 65001 /FO %t.utf8.res -- %p/Inputs/utf8.rc
 ; RUN: llvm-readobj %t.utf8.res | FileCheck %s --check-prefix=UTF8
 
 ; UTF8:      Resource type (int): 6

Modified: llvm/trunk/test/tools/llvm-rc/cpp-output.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/cpp-output.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/cpp-output.test (original)
+++ llvm/trunk/test/tools/llvm-rc/cpp-output.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/cpp-output.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/cpp-output.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 6

Modified: llvm/trunk/test/tools/llvm-rc/flags.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/flags.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/flags.test (original)
+++ llvm/trunk/test/tools/llvm-rc/flags.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /dry-run /FO %t %p/Inputs/empty.rc 2>&1 | FileCheck %s --allow-empty --check-prefix=FO
-; RUN: llvm-rc /dry-run /FO%t %p/Inputs/empty.rc 2>&1 | FileCheck %s --allow-empty --check-prefix=FO
+; RUN: llvm-rc /dry-run /FO %t -- %p/Inputs/empty.rc 2>&1 | FileCheck %s --allow-empty --check-prefix=FO
+; RUN: llvm-rc /dry-run /FO%t -- %p/Inputs/empty.rc 2>&1 | FileCheck %s --allow-empty --check-prefix=FO
 
 ; FO-NOT: Exactly one input file should be provided.

Modified: llvm/trunk/test/tools/llvm-rc/include-paths.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/include-paths.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/include-paths.test (original)
+++ llvm/trunk/test/tools/llvm-rc/include-paths.test Wed Jan 16 00:09:22 2019
@@ -1,21 +1,21 @@
 ; Should find the bitmap if it is in the same folder as the rc file.
 ; RUN: rm -f %t.include.res
-; RUN: llvm-rc /FO %t.include.res %p/Inputs/include.rc
+; RUN: llvm-rc /FO %t.include.res -- %p/Inputs/include.rc
 ; RUN: llvm-readobj %t.include.res | FileCheck --check-prefix=FOUND %s
 
 ; Try including files without quotes.
 ; RUN: rm -f %t.noquotes.res
-; RUN: llvm-rc /FO %t.noquotes.res %p/Inputs/include-noquotes.rc
+; RUN: llvm-rc /FO %t.noquotes.res -- %p/Inputs/include-noquotes.rc
 ; RUN: llvm-readobj %t.noquotes.res | FileCheck --check-prefix=FOUND %s
 
 ; Should find the bitmap if the folder is explicitly specified.
 ; RUN: rm -f %t.nested-include.res
-; RUN: llvm-rc /FO %t.nested-include.res /I %p/Inputs/nested %p/Inputs/deep-include.rc
+; 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
 
 ; 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 \
+; RUN: not llvm-rc /FO %t.nested-include.res -- %p/Inputs/deep-include.rc 2>&1 \
 ; RUN:   | FileCheck --check-prefix=MISSING %s
 
 ; Should find the bitmap if the process's current working directory
@@ -24,7 +24,7 @@
 ; failure of other tests if run first.
 ; RUN: rm -f %t.nested-include.res
 ; RUN: cd %p/Inputs/nested
-; RUN: llvm-rc /FO %t.nested-include.res %p/Inputs/include.rc
+; RUN: llvm-rc /FO %t.nested-include.res -- %p/Inputs/include.rc
 ; RUN: llvm-readobj %t.nested-include.res | FileCheck --check-prefix=FOUND %s
 
 FOUND:      Resource type (int): 2

Modified: llvm/trunk/test/tools/llvm-rc/memoryflags-stringtable.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/memoryflags-stringtable.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/memoryflags-stringtable.test (original)
+++ llvm/trunk/test/tools/llvm-rc/memoryflags-stringtable.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/memoryflags-stringtable.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/memoryflags-stringtable.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 6

Modified: llvm/trunk/test/tools/llvm-rc/memoryflags.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/memoryflags.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/memoryflags.test (original)
+++ llvm/trunk/test/tools/llvm-rc/memoryflags.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/memoryflags.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/memoryflags.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 1

Modified: llvm/trunk/test/tools/llvm-rc/not-expr.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/not-expr.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/not-expr.test (original)
+++ llvm/trunk/test/tools/llvm-rc/not-expr.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/not-expr.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/not-expr.rc
 ; RUN: llvm-readobj %t | FileCheck %s --check-prefix=NOTEXPR
 
 ; NOTEXPR: Resource type (int): 5

Modified: llvm/trunk/test/tools/llvm-rc/parser-expr.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/parser-expr.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/parser-expr.test (original)
+++ llvm/trunk/test/tools/llvm-rc/parser-expr.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /dry-run /V %p/Inputs/parser-expr.rc | FileCheck %s
+; RUN: llvm-rc /dry-run /V -- %p/Inputs/parser-expr.rc | FileCheck %s
 
 ; CHECK:  Language: 5, Sublanguage: 1
 ; CHECK-NEXT:  Language: 3, Sublanguage: 2

Modified: llvm/trunk/test/tools/llvm-rc/parser.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/parser.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/parser.test (original)
+++ llvm/trunk/test/tools/llvm-rc/parser.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /dry-run /V %p/Inputs/parser-correct-everything.rc | FileCheck %s --check-prefix PGOOD
+; RUN: llvm-rc /dry-run /V -- %p/Inputs/parser-correct-everything.rc | FileCheck %s --check-prefix PGOOD
 
 ; PGOOD:  Icon (meh): "hello.bmp"
 ; PGOOD-NEXT:  Icon (Icon): "Icon"

Modified: llvm/trunk/test/tools/llvm-rc/tag-accelerators.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-accelerators.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-accelerators.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-accelerators.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/tag-accelerators.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/tag-accelerators.rc
 ; RUN: llvm-readobj %t | FileCheck %s --check-prefix=ACCELERATORS
 
 ; ACCELERATORS: Resource type (int): 9

Modified: llvm/trunk/test/tools/llvm-rc/tag-dialog.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-dialog.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-dialog.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-dialog.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/tag-dialog.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/tag-dialog.rc
 ; RUN: llvm-readobj %t | FileCheck %s --check-prefix=DIALOG
 
 ; DIALOG: Resource type (int): 5

Modified: llvm/trunk/test/tools/llvm-rc/tag-escape.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-escape.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-escape.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-escape.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/tag-escape.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/tag-escape.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 4

Modified: llvm/trunk/test/tools/llvm-rc/tag-html.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-html.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-html.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-html.test Wed Jan 16 00:09:22 2019
@@ -1,6 +1,6 @@
 ; RUN: rm -rf %t && mkdir %t && cd %t
 ; RUN: cp %p/Inputs/webpage*.html .
-; RUN: llvm-rc /FO %t/tag-html.res %p/Inputs/tag-html.rc
+; RUN: llvm-rc /FO %t/tag-html.res -- %p/Inputs/tag-html.rc
 ; RUN: llvm-readobj %t/tag-html.res | FileCheck %s --check-prefix HTML
 
 ; HTML: Resource type (int): 23

Modified: llvm/trunk/test/tools/llvm-rc/tag-icon-cursor.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-icon-cursor.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-icon-cursor.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-icon-cursor.test Wed Jan 16 00:09:22 2019
@@ -1,7 +1,7 @@
 ; RUN: rm -rf %t
 ; RUN: mkdir %t
 
-; RUN: llvm-rc /FO %t/tag-icon-cursor.res %p/Inputs/tag-icon-cursor.rc
+; RUN: llvm-rc /FO %t/tag-icon-cursor.res -- %p/Inputs/tag-icon-cursor.rc
 ; RUN: llvm-readobj %t/tag-icon-cursor.res | FileCheck %s
 
 ; CHECK: Resource type (int): 1

Modified: llvm/trunk/test/tools/llvm-rc/tag-menu.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-menu.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-menu.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-menu.test Wed Jan 16 00:09:22 2019
@@ -1,9 +1,9 @@
-; RUN: llvm-rc /FO %t %p/Inputs/tag-menu.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/tag-menu.rc
 ; RUN: llvm-readobj %t | FileCheck %s --check-prefix=MENU
 
 ; Test running llvm-rc without an explicit output file.
 ; RUN: cp %p/Inputs/tag-menu.rc %t.implicit.rc
-; RUN: llvm-rc %t.implicit.rc
+; RUN: llvm-rc -- %t.implicit.rc
 ; RUN: llvm-readobj %t.implicit.res | FileCheck --check-prefix=MENU %s
 
 ; MENU: Resource type (int): 4

Modified: llvm/trunk/test/tools/llvm-rc/tag-stringtable.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-stringtable.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-stringtable.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-stringtable.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/tag-stringtable-basic.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/tag-stringtable-basic.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 6

Modified: llvm/trunk/test/tools/llvm-rc/tag-user.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-user.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-user.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-user.test Wed Jan 16 00:09:22 2019
@@ -2,7 +2,7 @@
 ; RUN: mkdir %t
 ; RUN: cd %t
 ; RUN: cp %p/Inputs/bitmap.bmp .
-; RUN: llvm-rc /FO %t/tag-user.res %p/Inputs/tag-user.rc
+; RUN: llvm-rc /FO %t/tag-user.res -- %p/Inputs/tag-user.rc
 ; RUN: llvm-readobj %t/tag-user.res | FileCheck %s
 
 ; CHECK:      Resource type (int): 500

Modified: llvm/trunk/test/tools/llvm-rc/tag-versioninfo.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tag-versioninfo.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tag-versioninfo.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tag-versioninfo.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/tag-versioninfo.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/tag-versioninfo.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 16

Modified: llvm/trunk/test/tools/llvm-rc/tokenizer.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/tokenizer.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/tokenizer.test (original)
+++ llvm/trunk/test/tools/llvm-rc/tokenizer.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: not llvm-rc /V /FO %t.res %p/Inputs/tokens.rc | FileCheck %s
+; RUN: not llvm-rc /V /FO %t.res -- %p/Inputs/tokens.rc | FileCheck %s
 ; llvm-rc fails now on this sample because it is an invalid resource file
 ; script. We silence the error message and just analyze the output.
 

Modified: llvm/trunk/test/tools/llvm-rc/versioninfo-padding.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-rc/versioninfo-padding.test?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-rc/versioninfo-padding.test (original)
+++ llvm/trunk/test/tools/llvm-rc/versioninfo-padding.test Wed Jan 16 00:09:22 2019
@@ -1,4 +1,4 @@
-; RUN: llvm-rc /FO %t %p/Inputs/versioninfo-padding.rc
+; RUN: llvm-rc /FO %t -- %p/Inputs/versioninfo-padding.rc
 ; RUN: llvm-readobj %t | FileCheck %s
 
 ; CHECK:      Resource type (int): 16

Modified: llvm/trunk/tools/llvm-rc/llvm-rc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-rc/llvm-rc.cpp?rev=351305&r1=351304&r2=351305&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-rc/llvm-rc.cpp (original)
+++ llvm/trunk/tools/llvm-rc/llvm-rc.cpp Wed Jan 16 00:09:22 2019
@@ -31,6 +31,7 @@
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/raw_ostream.h"
 
+#include <algorithm>
 #include <system_error>
 
 using namespace llvm;
@@ -85,7 +86,10 @@ int main(int Argc, const char **Argv) {
 
   RcOptTable T;
   unsigned MAI, MAC;
-  ArrayRef<const char *> ArgsArr = makeArrayRef(Argv + 1, Argc - 1);
+  const char **DashDash = std::find_if(
+      Argv + 1, Argv + Argc, [](StringRef Str) { return Str == "--"; });
+  ArrayRef<const char *> ArgsArr = makeArrayRef(Argv + 1, DashDash);
+
   opt::InputArgList InputArgs = T.ParseArgs(ArgsArr, MAI, MAC);
 
   // The tool prints nothing when invoked with no command-line arguments.
@@ -97,6 +101,8 @@ int main(int Argc, const char **Argv) {
   const bool BeVerbose = InputArgs.hasArg(OPT_VERBOSE);
 
   std::vector<std::string> InArgsInfo = InputArgs.getAllArgValues(OPT_INPUT);
+  if (DashDash != Argv + Argc)
+    InArgsInfo.insert(InArgsInfo.end(), DashDash + 1, Argv + Argc);
   if (InArgsInfo.size() != 1) {
     fatalError("Exactly one input file should be provided.");
   }




More information about the llvm-commits mailing list