121 lines
4.0 KiB
C++
121 lines
4.0 KiB
C++
/*============================================================================
|
|
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<std::string, cmCPackComponent>::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;
|
|
}
|
|
}
|
|
|