From 6dfc818394d302d5966431fc72b4150777780b79 Mon Sep 17 00:00:00 2001 From: Eric NOULARD Date: Wed, 23 Mar 2011 18:28:05 +0100 Subject: [PATCH] CPack fix #11930 and simplifies component packaging options --- Source/CPack/cmCPackArchiveGenerator.cxx | 49 ++--- Source/CPack/cmCPackArchiveGenerator.h | 2 +- Source/CPack/cmCPackDebGenerator.cxx | 193 +++++++----------- Source/CPack/cmCPackDebGenerator.h | 6 +- Source/CPack/cmCPackGenerator.cxx | 27 +-- Source/CPack/cmCPackGenerator.h | 5 - Source/CPack/cmCPackRPMGenerator.cxx | 144 ++++++------- Source/CPack/cmCPackRPMGenerator.h | 6 +- Tests/CMakeLists.txt | 1 - .../MyLibCPackConfig-AllGroupsInOne.cmake.in | 22 -- .../RunCPackVerifyResult.cmake | 41 ++-- 11 files changed, 193 insertions(+), 303 deletions(-) delete mode 100644 Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in diff --git a/Source/CPack/cmCPackArchiveGenerator.cxx b/Source/CPack/cmCPackArchiveGenerator.cxx index b629c635d..55d989056 100644 --- a/Source/CPack/cmCPackArchiveGenerator.cxx +++ b/Source/CPack/cmCPackArchiveGenerator.cxx @@ -207,7 +207,7 @@ int cmCPackArchiveGenerator::PackageComponents(bool ignoreGroup) } //---------------------------------------------------------------------- -int cmCPackArchiveGenerator::PackageComponentsAllInOne(bool allComponent) +int cmCPackArchiveGenerator::PackageComponentsAllInOne() { // reset the package file names packageFileNames.clear(); @@ -221,38 +221,15 @@ int cmCPackArchiveGenerator::PackageComponentsAllInOne(bool allComponent) << std::endl); DECLARE_AND_OPEN_ARCHIVE(packageFileNames[0],archive); - // The ALL GROUP in ONE package case - if (! allComponent) { - // iterate over the component groups - std::map::iterator compGIt; - for (compGIt=this->ComponentGroups.begin(); - compGIt!=this->ComponentGroups.end(); ++compGIt) - { - cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: " - << compGIt->first - << std::endl); - // now iterate over the component of this group - std::vector::iterator compIt; - for (compIt=(compGIt->second).Components.begin(); - compIt!=(compGIt->second).Components.end(); - ++compIt) - { - // Add the files of this component to the archive - addOneComponentToArchive(archive,*compIt); - } - } - } - // The ALL COMPONENT in ONE package case - else + // The ALL COMPONENTS in ONE package case + std::map::iterator compIt; + for (compIt=this->Components.begin();compIt!=this->Components.end(); + ++compIt ) { - std::map::iterator compIt; - for (compIt=this->Components.begin();compIt!=this->Components.end(); - ++compIt ) - { - // Add the files of this component to the archive - addOneComponentToArchive(archive,&(compIt->second)); - } + // Add the files of this component to the archive + addOneComponentToArchive(archive,&(compIt->second)); } + // archive goes out of scope so it will finalized and closed. return 1; } @@ -265,19 +242,17 @@ int cmCPackArchiveGenerator::PackageFiles() if (SupportsComponentInstallation()) { // CASE 1 : COMPONENT ALL-IN-ONE package - // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested + // If ALL COMPONENTS in ONE package has been requested // then the package file is unique and should be open here. - if (allComponentInOne || - (allGroupInOne && (!this->ComponentGroups.empty())) - ) + if (allComponentInOne) { - return PackageComponentsAllInOne(allComponentInOne); + return PackageComponentsAllInOne(); } // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one) // There will be 1 package for each component group // however one may require to ignore component group and // in this case you'll get 1 package for each component. - else if ((!this->ComponentGroups.empty()) || (ignoreComponentGroup)) + else { return PackageComponents(ignoreComponentGroup); } diff --git a/Source/CPack/cmCPackArchiveGenerator.h b/Source/CPack/cmCPackArchiveGenerator.h index dc172579a..b1bbb8363 100644 --- a/Source/CPack/cmCPackArchiveGenerator.h +++ b/Source/CPack/cmCPackArchiveGenerator.h @@ -65,7 +65,7 @@ protected: * Special case of component install where all * components will be put in a single installer. */ - int PackageComponentsAllInOne(bool allComponent); + int PackageComponentsAllInOne(); virtual const char* GetOutputExtension() = 0; cmArchiveWrite::Compress Compress; cmArchiveWrite::Type Archive; diff --git a/Source/CPack/cmCPackDebGenerator.cxx b/Source/CPack/cmCPackDebGenerator.cxx index ca2185c58..82038e9cf 100644 --- a/Source/CPack/cmCPackDebGenerator.cxx +++ b/Source/CPack/cmCPackDebGenerator.cxx @@ -50,6 +50,62 @@ int cmCPackDebGenerator::InitializeInternal() return this->Superclass::InitializeInternal(); } +//---------------------------------------------------------------------- +int cmCPackDebGenerator::PackageOnePack(std::string initialTopLevel, + std::string packageName) + { + int retval = 1; + // Begin the archive for this pack + std::string localToplevel(initialTopLevel); + std::string packageFileName( + cmSystemTools::GetParentDirectory(toplevel.c_str()) + ); + std::string outputFileName( + std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) + +"-"+packageName + this->GetOutputExtension() + ); + + localToplevel += "/"+ packageName; + /* 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()); + // Tell CPackDeb.cmake the name of the component GROUP. + this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",packageName.c_str()); + if (!this->ReadListFile("CPackDeb.cmake")) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Error while execution CPackDeb.cmake" << std::endl); + retval = 0; + return retval; + } + + cmsys::Glob gl; + std::string findExpr(this->GetOption("WDIR")); + findExpr += "/*"; + gl.RecurseOn(); + if ( !gl.FindFiles(findExpr) ) + { + cmCPackLogger(cmCPackLog::LOG_ERROR, + "Cannot find any files in the installed directory" << std::endl); + return 0; + } + packageFiles = gl.GetFiles(); + + int res = createDeb(); + if (res != 1) + { + retval = 0; + } + // add the generated package to package file names list + packageFileNames.push_back(packageFileName); + return retval; +} + //---------------------------------------------------------------------- int cmCPackDebGenerator::PackageComponents(bool ignoreGroup) { @@ -71,53 +127,24 @@ int cmCPackDebGenerator::PackageComponents(bool ignoreGroup) << compGIt->first << std::endl); // Begin the archive for this group - std::string localToplevel(initialTopLevel); - std::string packageFileName( - cmSystemTools::GetParentDirectory(toplevel.c_str()) - ); - std::string outputFileName( - std::string(this->GetOption("CPACK_PACKAGE_FILE_NAME")) - +"-"+compGIt->first + this->GetOutputExtension() - ); - - localToplevel += "/"+ compGIt->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()); - // Tell CPackDeb.cmake the name of the component GROUP. - this->SetOption("CPACK_DEB_PACKAGE_COMPONENT",compGIt->first.c_str()); - if (!this->ReadListFile("CPackDeb.cmake")) + retval &= PackageOnePack(initialTopLevel,compGIt->first); + } + // Handle Orphan components (components not belonging to any groups) + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + // Does the component belong to a group? + if (compIt->second.Group==NULL) { - cmCPackLogger(cmCPackLog::LOG_ERROR, - "Error while execution CPackDeb.cmake" << std::endl); - retval = 0; - return retval; + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Component <" + << compIt->second.Name + << "> does not belong to any group, package it separately." + << std::endl); + // Begin the archive for this orphan component + retval &= PackageOnePack(initialTopLevel,compIt->first); } - - cmsys::Glob gl; - std::string findExpr(this->GetOption("WDIR")); - findExpr += "/*"; - gl.RecurseOn(); - if ( !gl.FindFiles(findExpr) ) - { - cmCPackLogger(cmCPackLog::LOG_ERROR, - "Cannot find any files in the installed directory" << std::endl); - return 0; - } - packageFiles = gl.GetFiles(); - - int res = createDeb(); - if (res != 1) - { - retval = 0; - } - // add the generated package to package file names list - packageFileNames.push_back(packageFileName); } } // CPACK_COMPONENTS_IGNORE_GROUPS is set @@ -128,59 +155,14 @@ int cmCPackDebGenerator::PackageComponents(bool ignoreGroup) 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_DEB_PACKAGE_COMPONENT",compIt->first.c_str()); - if (!this->ReadListFile("CPackDeb.cmake")) - { - cmCPackLogger(cmCPackLog::LOG_ERROR, - "Error while execution CPackDeb.cmake" << std::endl); - retval = 0; - return retval; - } - cmsys::Glob gl; - std::string findExpr(this->GetOption("WDIR")); - findExpr += "/*"; - gl.RecurseOn(); - if ( !gl.FindFiles(findExpr) ) - { - cmCPackLogger(cmCPackLog::LOG_ERROR, - "Cannot find any files in the installed directory" << std::endl); - return 0; - } - packageFiles = gl.GetFiles(); - - int res = createDeb(); - if (res != 1) - { - retval = 0; - } - // add the generated package to package file names list - packageFileNames.push_back(packageFileName); + retval &= PackageOnePack(initialTopLevel,compIt->first); } } return retval; } //---------------------------------------------------------------------- -int cmCPackDebGenerator::PackageComponentsAllInOne(bool allComponent) +int cmCPackDebGenerator::PackageComponentsAllInOne() { int retval = 1; std::string compInstDirName; @@ -189,15 +171,7 @@ int cmCPackDebGenerator::PackageComponentsAllInOne(bool allComponent) packageFileNames.clear(); std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); - // all GROUP in one vs all COMPONENT in one - if (allComponent) - { - compInstDirName = "ALL_COMPONENTS_IN_ONE"; - } - else - { - compInstDirName = "ALL_GROUPS_IN_ONE"; - } + compInstDirName = "ALL_COMPONENTS_IN_ONE"; cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging all groups in one package..." @@ -266,17 +240,15 @@ int cmCPackDebGenerator::PackageFiles() // CASE 1 : COMPONENT ALL-IN-ONE package // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested // then the package file is unique and should be open here. - if (allComponentInOne || - (allGroupInOne && (!this->ComponentGroups.empty())) - ) + if (allComponentInOne) { - return PackageComponentsAllInOne(allComponentInOne); + return PackageComponentsAllInOne(); } // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one) // There will be 1 package for each component group // however one may require to ignore component group and // in this case you'll get 1 package for each component. - else if ((!this->ComponentGroups.empty()) || (ignoreComponentGroup)) + else { return PackageComponents(ignoreComponentGroup); } @@ -601,14 +573,7 @@ std::string cmCPackDebGenerator::GetComponentInstallDirNameSuffix( cmSystemTools::UpperCase(componentName) + "_GROUP"; if (NULL != GetOption(groupVar.c_str())) { - if (allGroupInOne) - { - return std::string("ALL_GROUPS_IN_ONE"); - } - else - { - return std::string(GetOption(groupVar.c_str())); - } + return std::string(GetOption(groupVar.c_str())); } else { diff --git a/Source/CPack/cmCPackDebGenerator.h b/Source/CPack/cmCPackDebGenerator.h index de1ea77b1..f536c474e 100644 --- a/Source/CPack/cmCPackDebGenerator.h +++ b/Source/CPack/cmCPackDebGenerator.h @@ -33,6 +33,10 @@ public: protected: virtual int InitializeInternal(); + /** + * This method factors out the work done in component packaging case. + */ + int PackageOnePack(std::string initialToplevel, std::string packageName); /** * The method used to package files when component * install is used. This will create one @@ -43,7 +47,7 @@ protected: * Special case of component install where all * components will be put in a single installer. */ - int PackageComponentsAllInOne(bool allComponent); + int PackageComponentsAllInOne(); virtual int PackageFiles(); virtual const char* GetOutputExtension() { return ".deb"; } virtual bool SupportsComponentInstallation() const; diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx index c343acfbd..691092f54 100644 --- a/Source/CPack/cmCPackGenerator.cxx +++ b/Source/CPack/cmCPackGenerator.cxx @@ -36,7 +36,6 @@ cmCPackGenerator::cmCPackGenerator() this->GeneratorVerbose = false; this->MakefileMap = 0; this->Logger = 0; - this->allGroupInOne = false; this->allComponentInOne = false; this->ignoreComponentGroup = false; } @@ -1266,15 +1265,12 @@ int cmCPackGenerator::PrepareGroupingKind() { // The default behavior is to create 1 package by component group // unless the user asked to put all COMPONENTS in a single package - allGroupInOne = (NULL != - (this->GetOption( - "CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE"))); - allComponentInOne = (NULL != - (this->GetOption( - "CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE"))); - ignoreComponentGroup = (NULL != - (this->GetOption( - "CPACK_COMPONENTS_IGNORE_GROUPS"))); + allComponentInOne = (NULL != (this->GetOption( + "CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE")) + ); + ignoreComponentGroup = (NULL != (this->GetOption( + "CPACK_COMPONENTS_IGNORE_GROUPS")) + ); std::string groupingType; @@ -1288,11 +1284,7 @@ int cmCPackGenerator::PrepareGroupingKind() cmCPackLogger(cmCPackLog::LOG_VERBOSE, "[" << this->Name << "]" << " requested component grouping = "<< groupingType <Name << "]" << " requested component grouping type <"<< groupingType - << "> UNKNOWN not in (ALL_GROUPS_IN_ONE," - "ALL_COMPONENTS_IN_ONE,IGNORE)" < UNKNOWN not in (ALL_COMPONENTS_IN_ONE,IGNORE)" + << std::endl); } } cmCPackLogger(cmCPackLog::LOG_VERBOSE, "[" << this->Name << "]" << " requested component grouping = (" - << "ALL_GROUPS_IN_ONE=" << allGroupInOne << ", ALL_COMPONENTS_IN_ONE=" << allComponentInOne << ", IGNORE_GROUPS=" << ignoreComponentGroup << ")" diff --git a/Source/CPack/cmCPackGenerator.h b/Source/CPack/cmCPackGenerator.h index 0497d1c86..9549d0b53 100644 --- a/Source/CPack/cmCPackGenerator.h +++ b/Source/CPack/cmCPackGenerator.h @@ -122,7 +122,6 @@ protected: /** * Prepare requested grouping kind from CPACK_xxx vars - * CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE * CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE * CPACK_COMPONENTS_IGNORE_GROUPS * or @@ -238,10 +237,6 @@ protected: */ std::map Components; std::map ComponentGroups; - /** - * If true All component groups will be put in a single package. - */ - bool allGroupInOne; /** * If true All component will be put in a single package. */ diff --git a/Source/CPack/cmCPackRPMGenerator.cxx b/Source/CPack/cmCPackRPMGenerator.cxx index 0b0c6b186..c926be6ed 100644 --- a/Source/CPack/cmCPackRPMGenerator.cxx +++ b/Source/CPack/cmCPackRPMGenerator.cxx @@ -49,6 +49,45 @@ int cmCPackRPMGenerator::InitializeInternal() return this->Superclass::InitializeInternal(); } +//---------------------------------------------------------------------- +int cmCPackRPMGenerator::PackageOnePack(std::string initialToplevel, + std::string packageName) +{ + int retval = 1; + // Begin the archive for this pack + std::string localToplevel(initialToplevel); + std::string packageFileName( + cmSystemTools::GetParentDirectory(toplevel.c_str()) + ); + std::string outputFileName( + GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), + packageName, + true) + + this->GetOutputExtension() + ); + + localToplevel += "/"+ packageName; + /* 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()); + // Tell CPackRPM.cmake the name of the component NAME. + this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",packageName.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); + return retval; +} + //---------------------------------------------------------------------- int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup) { @@ -69,37 +108,23 @@ int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup) cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging component group: " << compGIt->first << std::endl); - // Begin the archive for this group - std::string localToplevel(initialTopLevel); - std::string packageFileName( - cmSystemTools::GetParentDirectory(toplevel.c_str()) - ); - std::string outputFileName( - GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), - compGIt->first, - true) - + this->GetOutputExtension() - ); - - localToplevel += "/"+ compGIt->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()); - // Tell CPackRPM.cmake the name of the component GROUP. - this->SetOption("CPACK_RPM_PACKAGE_COMPONENT",compGIt->first.c_str()); - if (!this->ReadListFile("CPackRPM.cmake")) + retval &= PackageOnePack(initialTopLevel,compGIt->first); + } + // Handle Orphan components (components not belonging to any groups) + std::map::iterator compIt; + for (compIt=this->Components.begin(); + compIt!=this->Components.end(); ++compIt ) + { + // Does the component belong to a group? + if (compIt->second.Group==NULL) { - cmCPackLogger(cmCPackLog::LOG_ERROR, - "Error while execution CPackRPM.cmake" << std::endl); - retval = 0; + cmCPackLogger(cmCPackLog::LOG_VERBOSE, + "Component <" + << compIt->second.Name + << "> does not belong to any group, package it separately." + << std::endl); + retval &= PackageOnePack(initialTopLevel,compIt->first); } - // add the generated package to package file names list - packageFileNames.push_back(packageFileName); } } // CPACK_COMPONENTS_IGNORE_GROUPS is set @@ -110,42 +135,14 @@ int cmCPackRPMGenerator::PackageComponents(bool ignoreGroup) 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( - GetComponentPackageFileName(this->GetOption("CPACK_PACKAGE_FILE_NAME"), - compIt->first, - false) - + 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); + retval &= PackageOnePack(initialTopLevel,compIt->first); } } return retval; } //---------------------------------------------------------------------- -int cmCPackRPMGenerator::PackageComponentsAllInOne(bool allComponent) +int cmCPackRPMGenerator::PackageComponentsAllInOne() { int retval = 1; std::string compInstDirName; @@ -154,15 +151,7 @@ int cmCPackRPMGenerator::PackageComponentsAllInOne(bool allComponent) packageFileNames.clear(); std::string initialTopLevel(this->GetOption("CPACK_TEMPORARY_DIRECTORY")); - // all GROUP in one vs all COMPONENT in one - if (allComponent) - { - compInstDirName = "ALL_COMPONENTS_IN_ONE"; - } - else - { - compInstDirName = "ALL_GROUPS_IN_ONE"; - } + compInstDirName = "ALL_COMPONENTS_IN_ONE"; cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Packaging all groups in one package..." @@ -214,19 +203,17 @@ int cmCPackRPMGenerator::PackageFiles() /* Are we in the component packaging case */ if (SupportsComponentInstallation()) { // CASE 1 : COMPONENT ALL-IN-ONE package - // If ALL GROUPS or ALL COMPONENTS in ONE package has been requested + // If ALL COMPONENTS in ONE package has been requested // then the package file is unique and should be open here. - if (allComponentInOne || - (allGroupInOne && (!this->ComponentGroups.empty())) - ) + if (allComponentInOne) { - return PackageComponentsAllInOne(allComponentInOne); + return PackageComponentsAllInOne(); } // CASE 2 : COMPONENT CLASSICAL package(s) (i.e. not all-in-one) // There will be 1 package for each component group // however one may require to ignore component group and // in this case you'll get 1 package for each component. - else if ((!this->ComponentGroups.empty()) || (ignoreComponentGroup)) + else { return PackageComponents(ignoreComponentGroup); } @@ -278,14 +265,7 @@ std::string cmCPackRPMGenerator::GetComponentInstallDirNameSuffix( cmSystemTools::UpperCase(componentName) + "_GROUP"; if (NULL != GetOption(groupVar.c_str())) { - if (allGroupInOne) - { - return std::string("ALL_GROUPS_IN_ONE"); - } - else - { - return std::string(GetOption(groupVar.c_str())); - } + return std::string(GetOption(groupVar.c_str())); } else { diff --git a/Source/CPack/cmCPackRPMGenerator.h b/Source/CPack/cmCPackRPMGenerator.h index 7c2e434da..4883a0d60 100644 --- a/Source/CPack/cmCPackRPMGenerator.h +++ b/Source/CPack/cmCPackRPMGenerator.h @@ -38,6 +38,10 @@ public: protected: virtual int InitializeInternal(); virtual int PackageFiles(); + /** + * This method factors out the work done in component packaging case. + */ + int PackageOnePack(std::string initialToplevel, std::string packageName); /** * The method used to package files when component * install is used. This will create one @@ -48,7 +52,7 @@ protected: * Special case of component install where all * components will be put in a single installer. */ - int PackageComponentsAllInOne(bool allComponent); + int PackageComponentsAllInOne(); virtual const char* GetOutputExtension() { return ".rpm"; } virtual bool SupportsComponentInstallation() const; virtual std::string GetComponentInstallDirNameSuffix( diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 77c5752ca..016b213ac 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -583,7 +583,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ list(APPEND CWAYLST "OnePackPerGroup") list(APPEND CWAYLST "IgnoreGroup") list(APPEND CWAYLST "AllInOne") - list(APPEND CWAYLST "AllGroupsInOne") foreach(CPackGen ${GENLST}) set(CPackRun_CPackGen "-DCPackGen=${CPackGen}") foreach(CPackComponentWay ${CWAYLST}) diff --git a/Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in b/Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in deleted file mode 100644 index 85626be61..000000000 --- a/Tests/CPackComponentsForAll/MyLibCPackConfig-AllGroupsInOne.cmake.in +++ /dev/null @@ -1,22 +0,0 @@ -# -# Activate component packaging -# -if(CPACK_GENERATOR MATCHES "ZIP") - set(CPACK_ARCHIVE_COMPONENT_INSTALL "ON") -endif(CPACK_GENERATOR MATCHES "ZIP") - -if(CPACK_GENERATOR MATCHES "RPM") - set(CPACK_RPM_COMPONENT_INSTALL "ON") -endif(CPACK_GENERATOR MATCHES "RPM") - -if(CPACK_GENERATOR MATCHES "DEB") - set(CPACK_DEB_COMPONENT_INSTALL "ON") -endif(CPACK_GENERATOR MATCHES "DEB") - -# -# Choose grouping way -# -set(CPACK_COMPONENTS_ALL_GROUPS_IN_ONE_PACKAGE 1) -#set(CPACK_COMPONENTS_GROUPING) -#set(CPACK_COMPONENTS_IGNORE_GROUPS 1) -#set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1) diff --git a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake index ae0ee1a0f..77a1979a6 100644 --- a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake +++ b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake @@ -37,38 +37,37 @@ if(CPackGen MATCHES "ZIP") set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.zip") if (${CPackComponentWay} STREQUAL "default") set(expected_count 1) - endif(${CPackComponentWay} STREQUAL "default") - if (${CPackComponentWay} STREQUAL "OnePackPerGroup") + elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup") set(expected_count 3) - endif (${CPackComponentWay} STREQUAL "OnePackPerGroup") - if (${CPackComponentWay} STREQUAL "IgnoreGroup") + elseif (${CPackComponentWay} STREQUAL "IgnoreGroup") set(expected_count 4) - endif (${CPackComponentWay} STREQUAL "IgnoreGroup") - if (${CPackComponentWay} STREQUAL "AllInOne") + elseif (${CPackComponentWay} STREQUAL "AllInOne") set(expected_count 1) - endif (${CPackComponentWay} STREQUAL "AllInOne") - if (${CPackComponentWay} STREQUAL "AllGroupsInOne") - set(expected_count 1) - endif (${CPackComponentWay} STREQUAL "AllGroupsInOne") + endif () elseif (CPackGen MATCHES "RPM") set(config_verbose -D "CPACK_RPM_PACKAGE_DEBUG=1") set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.rpm") if (${CPackComponentWay} STREQUAL "default") set(expected_count 1) - endif (${CPackComponentWay} STREQUAL "default") - if (${CPackComponentWay} STREQUAL "OnePackPerGroup") - set(expected_count 2) - endif (${CPackComponentWay} STREQUAL "OnePackPerGroup") - if (${CPackComponentWay} STREQUAL "IgnoreGroup") + elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup") + set(expected_count 3) + elseif (${CPackComponentWay} STREQUAL "IgnoreGroup") set(expected_count 4) - endif (${CPackComponentWay} STREQUAL "IgnoreGroup") - if (${CPackComponentWay} STREQUAL "AllInOne") + elseif (${CPackComponentWay} STREQUAL "AllInOne") set(expected_count 1) - endif (${CPackComponentWay} STREQUAL "AllInOne") - if (${CPackComponentWay} STREQUAL "AllGroupsInOne") + endif () +elseif (CPackGen MATCHES "DEB") + set(expected_file_mask "${CPackComponentsForAll_BINARY_DIR}/MyLib-*.deb") + if (${CPackComponentWay} STREQUAL "default") set(expected_count 1) - endif (${CPackComponentWay} STREQUAL "AllGroupsInOne") -endif(CPackGen MATCHES "ZIP") + elseif (${CPackComponentWay} STREQUAL "OnePackPerGroup") + set(expected_count 3) + elseif (${CPackComponentWay} STREQUAL "IgnoreGroup") + set(expected_count 4) + elseif (${CPackComponentWay} STREQUAL "AllInOne") + set(expected_count 1) + endif () +endif() # clean-up previously CPack generated files if(expected_file_mask)