summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2017-11-03 20:09:10 +0000
committerMartin Storsjo <martin@martin.st>2017-11-03 20:09:10 +0000
commit1a9593b251cfb9afce0edf5fd72ddb692bb7c938 (patch)
tree871de7b50f0a2319ce82e6c637c6fd593a649f33
parent639ea374d672119f5d86d3b5b3badfadd530de87 (diff)
downloadbcm5719-llvm-1a9593b251cfb9afce0edf5fd72ddb692bb7c938.tar.gz
bcm5719-llvm-1a9593b251cfb9afce0edf5fd72ddb692bb7c938.zip
[llvm-ar] Support an options string that start with a dash
Some projects call $AR like "$AR -crs output input1 input2". Differential Revision: https://reviews.llvm.org/D39538 llvm-svn: 317358
-rw-r--r--llvm/test/tools/llvm-ar/default-add.test3
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp20
2 files changed, 22 insertions, 1 deletions
diff --git a/llvm/test/tools/llvm-ar/default-add.test b/llvm/test/tools/llvm-ar/default-add.test
index 88719e4efce..68e41c24910 100644
--- a/llvm/test/tools/llvm-ar/default-add.test
+++ b/llvm/test/tools/llvm-ar/default-add.test
@@ -4,7 +4,8 @@ RUN: yaml2obj %S/Inputs/coff.yaml -o %t-coff.o
RUN: rm -f %t.ar
RUN: llvm-ar crs %t.ar %t-macho.o
RUN: grep -q __.SYMDEF %t.ar
-RUN: llvm-ar crs %t.ar %t-coff.o
+Test that an option string prefixed by a dash works.
+RUN: llvm-ar -crs %t.ar %t-coff.o
RUN: grep -q __.SYMDEF %t.ar
RUN: rm -f %t.ar
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index 576265cfe59..8c19f6b6af8 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -127,6 +127,8 @@ static cl::extrahelp MoreHelp(
" [v] - be verbose about actions taken\n"
);
+static const char OptionChars[] = "dmpqrtxabiosSTucv";
+
// This enumeration delineates the kinds of operations on an archive
// that are permitted.
enum ArchiveOperation {
@@ -864,6 +866,24 @@ int main(int argc, char **argv) {
Stem.find("lib") != StringRef::npos)
return libDriverMain(makeArrayRef(argv, argc));
+ for (int i = 1; i < argc; i++) {
+ // If an argument starts with a dash and only contains chars
+ // that belong to the options chars set, remove the dash.
+ // We can't handle it after the command line options parsing
+ // is done, since it will error out on an unrecognized string
+ // starting with a dash.
+ // Make sure this doesn't match the actual llvm-ar specific options
+ // that start with a dash.
+ StringRef S = argv[i];
+ if (S.startswith("-") &&
+ S.find_first_not_of(OptionChars, 1) == StringRef::npos) {
+ argv[i]++;
+ break;
+ }
+ if (S == "--")
+ break;
+ }
+
// Have the command line options parsed and handle things
// like --help and --version.
cl::ParseCommandLineOptions(argc, argv,
OpenPOWER on IntegriCloud