| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2010 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #ifndef cmArchiveWrite_h
- #define cmArchiveWrite_h
- #include "cmStandardIncludes.h"
- #if !defined(CMAKE_BUILD_WITH_CMAKE)
- # error "cmArchiveWrite not allowed during bootstrap build!"
- #endif
- /** \class cmArchiveWrite
- * \brief Wrapper around libarchive for writing.
- *
- */
- class cmArchiveWrite
- {
- typedef void (cmArchiveWrite::* safe_bool)();
- void safe_bool_true() {}
- public:
- /** Compression type. */
- enum Compress
- {
- CompressNone,
- CompressCompress,
- CompressGZip,
- CompressBZip2,
- CompressLZMA,
- CompressXZ
- };
- /** Archive Type */
- enum Type
- {
- TypeTAR,
- TypeZIP
- };
- /** Construct with output stream to which to write archive. */
- cmArchiveWrite(std::ostream& os, Compress c = CompressNone, Type = TypeTAR);
- ~cmArchiveWrite();
- /**
- * Add a path (file or directory) to the archive. Directories are
- * added recursively. The "path" must be readable on disk, either
- * full path or relative to current working directory. The "skip"
- * value indicates how many leading bytes from the input path to
- * skip. The remaining part of the input path is appended to the
- * "prefix" value to construct the final name in the archive.
- */
- bool Add(std::string path, size_t skip = 0, const char* prefix = 0);
- /** Returns true if there has been no error. */
- operator safe_bool() const
- { return this->Okay()? &cmArchiveWrite::safe_bool_true : 0; }
- /** Returns true if there has been an error. */
- bool operator!() const { return !this->Okay(); }
- /** Return the error string; empty if none. */
- std::string GetError() const { return this->Error; }
- // TODO: More general callback instead of hard-coding calls to
- // std::cout.
- void SetVerbose(bool v) { this->Verbose = v; }
- private:
- bool Okay() const { return this->Error.empty(); }
- bool AddPath(const char* path, size_t skip, const char* prefix);
- bool AddFile(const char* file, size_t skip, const char* prefix);
- bool AddData(const char* file, size_t size);
- struct Callback;
- friend struct Callback;
- class Entry;
- std::ostream& Stream;
- struct archive* Archive;
- struct archive* Disk;
- bool Verbose;
- std::string Error;
- };
- #endif
|