| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*=========================================================================
- Program: CMake - Cross-Platform Makefile Generator
- Module: $RCSfile$
- Language: C++
- Date: $Date$
- Version: $Revision$
- Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
- See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices for more information.
- =========================================================================*/
- #include "cmCPackZIPGenerator.h"
- #include "cmSystemTools.h"
- #include "cmGeneratedFileStream.h"
- #include "cmCPackLog.h"
- #include <cmsys/SystemTools.hxx>
- //----------------------------------------------------------------------
- cmCPackZIPGenerator::cmCPackZIPGenerator()
- {
- }
- //----------------------------------------------------------------------
- cmCPackZIPGenerator::~cmCPackZIPGenerator()
- {
- }
- //----------------------------------------------------------------------
- int cmCPackZIPGenerator::InitializeInternal()
- {
- this->SetOptionIfNotSet("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", "1");
- this->ReadListFile("CPackZIP.cmake");
- if ((!this->IsSet("ZIP_EXECUTABLE"))
- || (!this->IsSet("CPACK_ZIP_COMMAND")))
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find a suitable ZIP program"
- << std::endl);
- return 0;
- }
- return this->Superclass::InitializeInternal();
- }
- //----------------------------------------------------------------------
- int cmCPackZIPGenerator::CompressFiles(const char* outFileName,
- const char* toplevel, const std::vector<std::string>& files)
- {
- std::string tempFileName;
- tempFileName = toplevel;
- tempFileName += "/winZip.filelist";
- bool needQuotesInFile = cmSystemTools::IsOn(
- this->GetOption("CPACK_ZIP_NEED_QUOTES"));
- std::string cmd = this->GetOption("CPACK_ZIP_COMMAND");
- cmsys::SystemTools::ReplaceString(cmd, "<ARCHIVE>", outFileName);
- cmsys::SystemTools::ReplaceString(cmd, "<FILELIST>", "winZip.filelist");
- { // the scope is needed for cmGeneratedFileStream
- cmGeneratedFileStream out(tempFileName.c_str());
- std::vector<std::string>::const_iterator fileIt;
- for ( fileIt = files.begin(); fileIt != files.end(); ++ fileIt )
- {
- if ( needQuotesInFile )
- {
- out << "\"";
- }
- out << cmSystemTools::RelativePath(toplevel, fileIt->c_str());
- if ( needQuotesInFile )
- {
- out << "\"";
- }
- out << std::endl;
- }
- }
- std::string output;
- int retVal = -1;
- int res = cmSystemTools::RunSingleCommand(cmd.c_str(), &output,
- &retVal, toplevel, this->GeneratorVerbose, 0);
- if ( !res || retVal )
- {
- std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
- tmpFile += "/CompressZip.log";
- cmGeneratedFileStream ofs(tmpFile.c_str());
- ofs << "# Run command: " << cmd.c_str() << std::endl
- << "# Output:" << std::endl
- << output.c_str() << std::endl;
- cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running zip command: "
- << cmd.c_str() << std::endl
- << "Please check " << tmpFile.c_str() << " for errors" << std::endl);
- return 0;
- }
- return 1;
- }
|