diff --git a/llvm/docs/CommandGuide/llvm-ar.rst b/llvm/docs/CommandGuide/llvm-ar.rst --- a/llvm/docs/CommandGuide/llvm-ar.rst +++ b/llvm/docs/CommandGuide/llvm-ar.rst @@ -201,10 +201,8 @@ .. option:: T - When creating or modifying an archive, this option specifies that the - ``archive`` will be thin. By default, archives are not created as thin - archives and when modifying a thin archive, it will be converted to a regular - archive. + Alias for ``--thin``. In many ar implementations ``T`` has a different + meaning, as specified by X/Open System interface. .. option:: v @@ -281,6 +279,12 @@ ``posix`` or ``windows``. The default when on Windows is ``windows``, otherwise the default is ``posix``. +.. option:: --thin + + When creating or modifying an archive, this option specifies that the + ``archive`` will be thin. By default, archives are not created as thin archives + and when modifying a thin archive, it will be converted to a regular archive. + .. option:: --version Display the version of the :program:`llvm-ar` executable. diff --git a/llvm/test/tools/llvm-ar/thin-archive.test b/llvm/test/tools/llvm-ar/thin-archive.test --- a/llvm/test/tools/llvm-ar/thin-archive.test +++ b/llvm/test/tools/llvm-ar/thin-archive.test @@ -6,11 +6,15 @@ Test that modules can be added with absolute paths when the archive is created using an absolute path -RUN: llvm-ar rTc %t/absolute-1.ar %t/foo/elf.o %t/delete.o %t/foo/bar/elf.o -RUN: llvm-ar dT %t/absolute-1.ar delete.o +RUN: llvm-ar rc --thin %t/absolute-1a.ar %t/foo/elf.o %t/delete.o %t/foo/bar/elf.o +RUN: llvm-ar --thin d %t/absolute-1a.ar delete.o -RUN: FileCheck -input-file=%t/absolute-1.ar --check-prefixes=THIN,CHECK %s -DPATH=%/t/ -RUN: llvm-ar t %t/absolute-1.ar | FileCheck %s -DPATH=%/t/ +RUN: FileCheck --input-file=%t/absolute-1a.ar --check-prefixes=THIN,CHECK %s -DPATH=%/t/ +RUN: llvm-ar t %t/absolute-1a.ar | FileCheck %s -DPATH=%/t/ + +RUN: llvm-ar rTc %t/absolute-1b.ar %t/foo/elf.o %t/delete.o %t/foo/bar/elf.o +RUN: llvm-ar dT %t/absolute-1b.ar delete.o +RUN: cmp %t/absolute-1a.ar %t/absolute-1b.ar These tests must be run in %t/foo. cd %t is included on each line to make debugging this test case easier. diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp --- a/llvm/tools/llvm-ar/llvm-ar.cpp +++ b/llvm/tools/llvm-ar/llvm-ar.cpp @@ -90,6 +90,7 @@ --rsp-quoting - quoting style for response files =posix - posix =windows - windows + --thin - create a thin archive --version - print the version and exit @ - read options from @@ -118,7 +119,7 @@ [P] - use full names when matching (implied for thin archives) [s] - create an archive index (cf. ranlib) [S] - do not build a symbol table - [T] - create a thin archive + [T] - deprecated, use --thin instead [u] - update only [files] newer than archive contents [U] - use actual timestamps and uids/gids [v] - be verbose about actions taken @@ -390,8 +391,6 @@ break; case 'T': Thin = true; - // Thin archives store path names, so P should be forced. - CompareFullPath = true; break; case 'L': AddLibrary = true; @@ -407,6 +406,10 @@ } } + // Thin archives store path names, so P should be forced. + if (Thin) + CompareFullPath = true; + // At this point, the next thing on the command line must be // the archive name. getArchive(); @@ -1202,6 +1205,11 @@ continue; } + if (strcmp(*ArgIt, "--thin") == 0) { + Thin = true; + continue; + } + Match = matchFlagWithArg("format", ArgIt, Argv); if (Match) { FormatType = StringSwitch(Match)