mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
Don't create an archive if, for example, we are asked to print the index.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185697 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7271ac2c03
commit
61de142984
17
test/Object/ar-create.test
Normal file
17
test/Object/ar-create.test
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
Test which operations create an archive and which don't.
|
||||||
|
|
||||||
|
RUN: touch %t
|
||||||
|
RUN: rm -f %t.foo.a
|
||||||
|
RUN: not llvm-ar p %t.foo.a %t 2>&1 | FileCheck %s
|
||||||
|
RUN: not llvm-ar d %t.foo.a %t 2>&1 | FileCheck %s
|
||||||
|
RUN: not llvm-ar m %t.foo.a %t 2>&1 | FileCheck %s
|
||||||
|
RUN: not llvm-ar t %t.foo.a %t 2>&1 | FileCheck %s
|
||||||
|
RUN: not llvm-ar x %t.foo.a %t 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
RUN: llvm-ar q %t.foo.a %t 2>&1 | FileCheck --check-prefix=CREATE %s
|
||||||
|
RUN: rm -f %t.foo.a
|
||||||
|
RUN: llvm-ar r %t.foo.a %t 2>&1 | FileCheck --check-prefix=CREATE %s
|
||||||
|
RUN: rm -f %t.foo.a
|
||||||
|
|
||||||
|
CHECK: .foo.a': No such file or directory
|
||||||
|
CREATE: creating {{.*}}.foo.a
|
@ -642,6 +642,21 @@ doReplaceOrInsert(std::string* ErrMsg) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool shouldCreateArchive(ArchiveOperation Op) {
|
||||||
|
switch (Op) {
|
||||||
|
case Print:
|
||||||
|
case Delete:
|
||||||
|
case Move:
|
||||||
|
case DisplayTable:
|
||||||
|
case Extract:
|
||||||
|
return false;
|
||||||
|
|
||||||
|
case QuickAppend:
|
||||||
|
case ReplaceOrInsert:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// main - main program for llvm-ar .. see comments in the code
|
// main - main program for llvm-ar .. see comments in the code
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
program_name = argv[0];
|
program_name = argv[0];
|
||||||
@ -665,13 +680,15 @@ int main(int argc, char **argv) {
|
|||||||
ArchiveOperation Operation = parseCommandLine();
|
ArchiveOperation Operation = parseCommandLine();
|
||||||
|
|
||||||
// Create or open the archive object.
|
// Create or open the archive object.
|
||||||
if (!llvm::sys::fs::exists(ArchiveName)) {
|
if (shouldCreateArchive(Operation) && !llvm::sys::fs::exists(ArchiveName)) {
|
||||||
// Produce a warning if we should and we're creating the archive
|
// Produce a warning if we should and we're creating the archive
|
||||||
if (!Create)
|
if (!Create)
|
||||||
errs() << argv[0] << ": creating " << ArchiveName << "\n";
|
errs() << argv[0] << ": creating " << ArchiveName << "\n";
|
||||||
TheArchive = Archive::CreateEmpty(ArchiveName, Context);
|
TheArchive = Archive::CreateEmpty(ArchiveName, Context);
|
||||||
TheArchive->writeToDisk();
|
TheArchive->writeToDisk();
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (!TheArchive) {
|
||||||
std::string Error;
|
std::string Error;
|
||||||
TheArchive = Archive::OpenAndLoad(ArchiveName, Context, &Error);
|
TheArchive = Archive::OpenAndLoad(ArchiveName, Context, &Error);
|
||||||
if (TheArchive == 0) {
|
if (TheArchive == 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user