Add ZIP archive format and LZMA compress support to libarchive-wrapper
This will be needed to use cmArchiveWrire in cmCPackArchiveGenerator with the same feature set as before. Note that adding zip support to libarchive-wrapper would also makes it easy to add a new -E zip command to cmake commands.
This commit is contained in:
parent
4663356079
commit
b50c15915a
|
@ -47,7 +47,7 @@ struct cmArchiveWrite::Callback
|
|||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c):
|
||||
cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c, Type t):
|
||||
Stream(os),
|
||||
Archive(archive_write_new()),
|
||||
Disk(archive_read_disk_new()),
|
||||
|
@ -79,14 +79,50 @@ cmArchiveWrite::cmArchiveWrite(std::ostream& os, Compress c):
|
|||
return;
|
||||
}
|
||||
break;
|
||||
case CompressLZMA:
|
||||
if(archive_write_set_compression_lzma(this->Archive) != ARCHIVE_OK)
|
||||
{
|
||||
this->Error = "archive_write_set_compression_lzma: ";
|
||||
this->Error += archive_error_string(this->Archive);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
};
|
||||
archive_read_disk_set_standard_lookup(this->Disk);
|
||||
#if !defined(_WIN32) || defined(__CYGWIN__)
|
||||
if (archive_read_disk_set_standard_lookup(this->Disk) != ARCHIVE_OK)
|
||||
{
|
||||
this->Error = "archive_read_disk_set_standard_lookup: ";
|
||||
this->Error += archive_error_string(this->Archive);
|
||||
return;;
|
||||
}
|
||||
#endif
|
||||
switch (t)
|
||||
{
|
||||
case TypeZIP:
|
||||
if(archive_write_set_format_zip(this->Archive) != ARCHIVE_OK)
|
||||
{
|
||||
this->Error = "archive_write_set_format_zip: ";
|
||||
this->Error += archive_error_string(this->Archive);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case TypeTAR:
|
||||
if(archive_write_set_format_pax_restricted(this->Archive) != ARCHIVE_OK)
|
||||
{
|
||||
this->Error = "archive_write_set_format_pax_restricted: ";
|
||||
this->Error += archive_error_string(this->Archive);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// do not pad the last block!!
|
||||
if (archive_write_set_bytes_in_last_block(this->Archive, 1))
|
||||
{
|
||||
this->Error = "archive_write_set_bytes_in_last_block: ";
|
||||
this->Error += archive_error_string(this->Archive);
|
||||
return;
|
||||
}
|
||||
|
||||
if(archive_write_open(
|
||||
this->Archive, this, 0,
|
||||
|
|
|
@ -32,11 +32,19 @@ public:
|
|||
{
|
||||
CompressNone,
|
||||
CompressGZip,
|
||||
CompressBZip2
|
||||
CompressBZip2,
|
||||
CompressLZMA
|
||||
};
|
||||
|
||||
/** Archive Type */
|
||||
enum Type
|
||||
{
|
||||
TypeTAR,
|
||||
TypeZIP
|
||||
};
|
||||
|
||||
/** Construct with output stream to which to write archive. */
|
||||
cmArchiveWrite(std::ostream& os, Compress c = CompressNone);
|
||||
cmArchiveWrite(std::ostream& os, Compress c = CompressNone, Type = TypeTAR);
|
||||
~cmArchiveWrite();
|
||||
|
||||
/**
|
||||
|
|
|
@ -1732,7 +1732,8 @@ bool cmSystemTools::CreateTar(const char* outFileName,
|
|||
}
|
||||
cmArchiveWrite a(fout, (gzip? cmArchiveWrite::CompressGZip :
|
||||
(bzip2? cmArchiveWrite::CompressBZip2 :
|
||||
cmArchiveWrite::CompressNone)));
|
||||
cmArchiveWrite::CompressNone)),
|
||||
cmArchiveWrite::TypeTAR);
|
||||
a.SetVerbose(verbose);
|
||||
for(std::vector<cmStdString>::const_iterator i = files.begin();
|
||||
i != files.end(); ++i)
|
||||
|
|
Loading…
Reference in New Issue