/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2009 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. ============================================================================*/ #include "cmCPackRPMGenerator.h" #include "cmCPackLog.h" #include "cmSystemTools.h" //---------------------------------------------------------------------- cmCPackRPMGenerator::cmCPackRPMGenerator() { } //---------------------------------------------------------------------- cmCPackRPMGenerator::~cmCPackRPMGenerator() { } //---------------------------------------------------------------------- int cmCPackRPMGenerator::InitializeInternal() { this->SetOptionIfNotSet("CPACK_PACKAGING_INSTALL_PREFIX", "/usr"); if (cmSystemTools::IsOff(this->GetOption("CPACK_SET_DESTDIR"))) { this->SetOption("CPACK_SET_DESTDIR", "I_ON"); } return this->Superclass::InitializeInternal(); } //---------------------------------------------------------------------- int cmCPackRPMGenerator::PackageFiles() { int retval = 1; /* Digest Component grouping specification */ retval = PrepareGroupingKind(); cmCPackLogger(cmCPackLog::LOG_DEBUG, "Toplevel: " << toplevel << std::endl); /* Are we in the component packaging case */ if (SupportsComponentInstallation() & (!this->ComponentGroups.empty())) { /* Reset package file name list it will be populated during the * component packaging run*/ packageFileNames.clear(); std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); /* One Package per component CASE */ /* Iterate over components */ std::map::iterator compIt; for (compIt=this->Components.begin(); compIt!=this->Components.end(); ++compIt ) { std::string localToplevel(initialTopLevel); std::string packageFileName( cmSystemTools::GetParentDirectory(toplevel.c_str()) ); std::string outputFileName( std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME") ) +"-"+compIt->first + this->GetOutputExtension()); localToplevel += "/"+ compIt->first; /* replace the TEMP DIRECTORY with the component one */ this->SetOption("CPACK_TEMPORARY_DIRECTORY",localToplevel.c_str()); packageFileName += "/"+ outputFileName; /* replace proposed CPACK_OUTPUT_FILE_NAME */ this->SetOption("CPACK_OUTPUT_FILE_NAME",outputFileName.c_str()); /* replace the TEMPORARY package file name */ this->SetOption("CPACK_TEMPORARY_PACKAGE_FILE_NAME", packageFileName.c_str()); this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",compIt->first.c_str()); if (!this->ReadListFile("CPackRPM.cmake")) { cmCPackLogger(cmCPackLog::LOG_ERROR, "Error while execution CPackRPM.cmake" << std::endl); retval = 0; } // add the generated package to package file names list packageFileNames.push_back(packageFileName); } } /* This is the non component case */ else { if (!this->ReadListFile("CPackRPM.cmake")) { cmCPackLogger(cmCPackLog::LOG_ERROR, "Error while execution CPackRPM.cmake" << std::endl); retval = 0; } } if (!this->IsSet("RPMBUILD_EXECUTABLE")) { cmCPackLogger(cmCPackLog::LOG_ERROR, "Cannot find rpmbuild" << std::endl); retval = 0; } return retval; } bool cmCPackRPMGenerator::SupportsComponentInstallation() const { if (IsSet("CPACK_RPM_COMPONENT_INSTALL")) { return true; } else { return false; } }