CPack Authorize DISPLAY_NAME usage in component package

Second (last) part fix of feature request #11814
This commit is contained in:
Eric NOULARD 2011-02-22 23:49:49 +01:00
parent 8c450f6287
commit 4deb308e82
4 changed files with 72 additions and 11 deletions

View File

@ -121,9 +121,11 @@ int cmCPackArchiveGenerator::PackageComponents(bool ignoreGroup)
<< std::endl); << std::endl);
// Begin the archive for this group // Begin the archive for this group
std::string packageFileName= std::string(toplevel); std::string packageFileName= std::string(toplevel);
packageFileName += "/" packageFileName += "/"+
+std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
+"-"+compGIt->first + this->GetOutputExtension(); compGIt->first,
true)
+ this->GetOutputExtension();
// open a block in order to automatically close archive // open a block in order to automatically close archive
// at the end of the block // at the end of the block
{ {
@ -154,9 +156,11 @@ int cmCPackArchiveGenerator::PackageComponents(bool ignoreGroup)
std::string packageFileName = std::string(toplevel); std::string packageFileName = std::string(toplevel);
localToplevel += "/"+ compIt->first; localToplevel += "/"+ compIt->first;
packageFileName += "/" packageFileName += "/"+
+std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
+"-"+compIt->first + this->GetOutputExtension(); compIt->first,
false)
+ this->GetOutputExtension();
{ {
DECLARE_AND_OPEN_ARCHIVE(packageFileName,archive); DECLARE_AND_OPEN_ARCHIVE(packageFileName,archive);
// Add the files of this component to the archive // Add the files of this component to the archive

View File

@ -1309,10 +1309,51 @@ int cmCPackGenerator::PrepareGroupingKind()
return 1; return 1;
} }
//----------------------------------------------------------------------
std::string cmCPackGenerator::GetComponentInstallDirNameSuffix( std::string cmCPackGenerator::GetComponentInstallDirNameSuffix(
const std::string& componentName) { const std::string& componentName) {
return componentName; return componentName;
} }
//----------------------------------------------------------------------
std::string cmCPackGenerator::GetComponentPackageFileName(
const std::string& initialPackageFileName,
const std::string& groupOrComponentName,
bool isGroupName) {
/*
* the default behavior is to use the
* component [group] name as a suffix
*/
std::string suffix="-"+groupOrComponentName;
/* check if we should use DISPLAY name */
std::string dispNameVar = "CPACK_"+Name+"_USE_DISPLAY_NAME_IN_FILENAME";
if (IsOn(dispNameVar.c_str()))
{
/* the component Group case */
if (isGroupName)
{
std::string groupDispVar = "CPACK_COMPONENT_GROUP_"
+ cmSystemTools::UpperCase(groupOrComponentName) + "_DISPLAY_NAME";
const char* groupDispName = GetOption(groupDispVar.c_str());
if (groupDispName)
{
suffix = "-"+std::string(groupDispName);
}
}
/* the [single] component case */
else
{
std::string dispVar = "CPACK_COMPONENT_"
+ cmSystemTools::UpperCase(groupOrComponentName) + "_DISPLAY_NAME";
const char* dispName = GetOption(dispVar.c_str());
if(dispName)
{
suffix = "-"+std::string(dispName);
}
}
}
return initialPackageFileName + suffix;
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
bool cmCPackGenerator::SupportsComponentInstallation() const bool cmCPackGenerator::SupportsComponentInstallation() const

View File

@ -144,6 +144,19 @@ protected:
virtual std::string GetComponentInstallDirNameSuffix( virtual std::string GetComponentInstallDirNameSuffix(
const std::string& componentName); const std::string& componentName);
/**
* CPack specific generator may mangle CPACK_PACKAGE_FILE_NAME
* with CPACK_COMPONENT_xxxx_<NAME>_DISPLAY_NAME if
* CPACK_<GEN>_USE_DISPLAY_NAME_IN_FILENAME is ON.
* @param[in] initialPackageFileName
* @param[in] groupOrComponentName
* @param[in] isGroupName
*/
virtual std::string GetComponentPackageFileName(
const std::string& initialPackageFileName,
const std::string& groupOrComponentName,
bool isGroupName);
/** /**
* Package the list of files and/or components which * Package the list of files and/or components which
* has been prepared by the beginning of DoPackage. * has been prepared by the beginning of DoPackage.

View File

@ -60,8 +60,10 @@ int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup)
cmSystemTools::GetParentDirectory(toplevel.c_str()) cmSystemTools::GetParentDirectory(toplevel.c_str())
); );
std::string outputFileName( std::string outputFileName(
std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
+"-"+compGIt->first + this->GetOutputExtension() compGIt->first,
true)
+ this->GetOutputExtension()
); );
localToplevel += "/"+ compGIt->first; localToplevel += "/"+ compGIt->first;
@ -98,9 +100,10 @@ int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup)
cmSystemTools::GetParentDirectory(toplevel.c_str()) cmSystemTools::GetParentDirectory(toplevel.c_str())
); );
std::string outputFileName( std::string outputFileName(
std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME") GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"),
) compIt->first,
+"-"+compIt->first + this->GetOutputExtension()); false)
+ this->GetOutputExtension());
localToplevel += "/"+ compIt->first; localToplevel += "/"+ compIt->first;
/* replace the TEMP DIRECTORY with the component one */ /* replace the TEMP DIRECTORY with the component one */