| # Test the 'N' count parameter. |
| |
| # Get a temp clean cwd to extract into. |
| RUN: rm -rf %t && mkdir -p %t && cd %t |
| |
| RUN: mkdir -p %t/x %t/y %t/z |
| RUN: echo hello > %t/x/foo.txt |
| RUN: echo cool > %t/y/foo.txt |
| RUN: echo world > %t/z/foo.txt |
| RUN: echo fizz > %t/x/bar.txt |
| RUN: echo buzz > %t/y/bar.txt |
| RUN: echo fizbuz > %t/z/bar.txt |
| RUN: llvm-ar rc %t/archive.a %t/x/foo.txt %t/y/foo.txt %t/z/foo.txt \ |
| RUN: %t/x/bar.txt %t/y/bar.txt %t/z/bar.txt |
| RUN: llvm-ar t %t/archive.a | FileCheck %s --check-prefix=LIST-MEMBERS |
| |
| # Make sure we set it up correctly. |
| LIST-MEMBERS: foo.txt |
| LIST-MEMBERS-NEXT: foo.txt |
| LIST-MEMBERS-NEXT: foo.txt |
| LIST-MEMBERS-NEXT: bar.txt |
| LIST-MEMBERS-NEXT: bar.txt |
| LIST-MEMBERS-NEXT: bar.txt |
| |
| # Must be a number. |
| RUN: not llvm-ar xN abc %t/archive.a foo.txt 2>&1 | FileCheck %s --check-prefix=ERR-NOT-NUM |
| RUN: not llvm-ar xN 0x1 %t/archive.a foo.txt 2>&1 | FileCheck %s --check-prefix=ERR-NOT-NUM |
| # Only three members named foo, so 1 <= N <= 3. |
| RUN: not llvm-ar xN 0 %t/archive.a foo.txt 2>&1 | FileCheck %s --check-prefix=ERR-NOT-POS |
| RUN: not llvm-ar xN 4 %t/archive.a foo.txt 2>&1 | FileCheck %s --check-prefix=ERR-NOT-FOUND |
| # N only applies to x/d. |
| RUN: not llvm-ar rN 1 %t/archive.a foo.txt 2>&1 | FileCheck %s --check-prefix=ERR-BAD-OP |
| |
| ERR-NOT-NUM: error: value for [count] must be numeric |
| ERR-NOT-POS: error: value for [count] must be positive |
| ERR-BAD-OP: error: the 'N' modifier can only be specified with the 'x' or 'd' operations |
| ERR-NOT-FOUND: error: 'foo.txt' was not found |
| |
| # Extract individual items. |
| |
| RUN: rm -f foo.txt bar.txt |
| RUN: llvm-ar xN 1 %t/archive.a foo.txt bar.txt |
| RUN: cat %t/foo.txt | FileCheck %s --check-prefix=FOO-1 |
| RUN: cat %t/bar.txt | FileCheck %s --check-prefix=BAR-1 |
| |
| RUN: rm -f foo.txt bar.txt |
| RUN: llvm-ar xN 2 %t/archive.a foo.txt bar.txt |
| RUN: cat %t/foo.txt | FileCheck %s --check-prefix=FOO-2 |
| RUN: cat %t/bar.txt | FileCheck %s --check-prefix=BAR-2 |
| |
| RUN: rm -f foo.txt bar.txt |
| RUN: llvm-ar xN 3 %t/archive.a foo.txt bar.txt |
| RUN: cat %t/foo.txt | FileCheck %s --check-prefix=FOO-3 |
| RUN: cat %t/bar.txt | FileCheck %s --check-prefix=BAR-3 |
| |
| # Delete individual items. |
| |
| # Deleting the second member named foo means the new second member of the |
| # archive is what used to be the third element. |
| RUN: rm -f foo.txt bar.txt |
| RUN: llvm-ar dN 2 %t/archive.a foo.txt |
| RUN: llvm-ar xN 2 %t/archive.a foo.txt bar.txt |
| RUN: cat %t/foo.txt | FileCheck %s --check-prefix=FOO-3 |
| RUN: cat %t/bar.txt | FileCheck %s --check-prefix=BAR-2 |
| |
| # Deleting the first member from *both* archives means the new first member |
| # named foo is the what used to be the third member, and the new first member |
| # named bar is what used to be the second member. |
| RUN: rm -f foo.txt bar.txt |
| RUN: llvm-ar dN 1 %t/archive.a foo.txt bar.txt |
| RUN: llvm-ar xN 1 %t/archive.a foo.txt bar.txt |
| RUN: cat %t/foo.txt | FileCheck %s --check-prefix=FOO-3 |
| RUN: cat %t/bar.txt | FileCheck %s --check-prefix=BAR-2 |
| |
| FOO-1: hello |
| FOO-2: cool |
| FOO-3: world |
| BAR-1: fizz |
| BAR-2: buzz |
| BAR-3: fizbuz |