| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- #include "cmCPackNuGetGenerator.h"
- #include "cmAlgorithms.h"
- #include "cmCPackComponentGroup.h"
- #include "cmCPackLog.h"
- #include "cmSystemTools.h"
- #include <algorithm>
- #include <iterator>
- #include <map>
- #include <ostream>
- #include <string>
- #include <utility>
- #include <vector>
- bool cmCPackNuGetGenerator::SupportsComponentInstallation() const
- {
- return IsOn("CPACK_NUGET_COMPONENT_INSTALL");
- }
- int cmCPackNuGetGenerator::PackageFiles()
- {
- cmCPackLogger(cmCPackLog::LOG_DEBUG, "Toplevel: " << toplevel << std::endl);
- /* Reset package file name list it will be populated after the
- * `CPackNuGet.cmake` run */
- packageFileNames.clear();
- /* Are we in the component packaging case */
- if (WantsComponentInstallation()) {
- if (componentPackageMethod == ONE_PACKAGE) {
- // CASE 1 : COMPONENT ALL-IN-ONE package
- // Meaning that all per-component pre-installed files
- // goes into the single package.
- this->SetOption("CPACK_NUGET_ALL_IN_ONE", "TRUE");
- SetupGroupComponentVariables(true);
- } else {
- // 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.
- SetupGroupComponentVariables(componentPackageMethod ==
- ONE_PACKAGE_PER_COMPONENT);
- }
- } else {
- // CASE 3 : NON COMPONENT package.
- this->SetOption("CPACK_NUGET_ORDINAL_MONOLITIC", "TRUE");
- }
- auto retval = this->ReadListFile("Internal/CPack/CPackNuGet.cmake");
- if (retval) {
- AddGeneratedPackageNames();
- } else {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Error while execution CPackNuGet.cmake" << std::endl);
- }
- return retval;
- }
- void cmCPackNuGetGenerator::SetupGroupComponentVariables(bool ignoreGroup)
- {
- // The default behavior is to have one package by component group
- // unless CPACK_COMPONENTS_IGNORE_GROUP is specified.
- if (!ignoreGroup) {
- std::vector<std::string> groups;
- for (auto const& compG : this->ComponentGroups) {
- cmCPackLogger(cmCPackLog::LOG_VERBOSE,
- "Packaging component group: " << compG.first << std::endl);
- groups.push_back(compG.first);
- auto compGUp =
- cmSystemTools::UpperCase(cmSystemTools::MakeCidentifier(compG.first));
- // Collect components for this group
- std::vector<std::string> components;
- std::transform(begin(compG.second.Components),
- end(compG.second.Components),
- std::back_inserter(components),
- [](cmCPackComponent const* comp) { return comp->Name; });
- this->SetOption("CPACK_NUGET_" + compGUp + "_GROUP_COMPONENTS",
- cmJoin(components, ";").c_str());
- }
- if (!groups.empty()) {
- this->SetOption("CPACK_NUGET_GROUPS", cmJoin(groups, ";").c_str());
- }
- // Handle Orphan components (components not belonging to any groups)
- std::vector<std::string> components;
- for (auto const& comp : this->Components) {
- // Does the component belong to a group?
- if (comp.second.Group == nullptr) {
- cmCPackLogger(
- cmCPackLog::LOG_VERBOSE,
- "Component <"
- << comp.second.Name
- << "> does not belong to any group, package it separately."
- << std::endl);
- components.push_back(comp.first);
- }
- }
- if (!components.empty()) {
- this->SetOption("CPACK_NUGET_COMPONENTS",
- cmJoin(components, ";").c_str());
- }
- } else {
- std::vector<std::string> components;
- components.reserve(this->Components.size());
- std::transform(begin(this->Components), end(this->Components),
- std::back_inserter(components),
- [](std::pair<std::string, cmCPackComponent> const& comp) {
- return comp.first;
- });
- this->SetOption("CPACK_NUGET_COMPONENTS", cmJoin(components, ";").c_str());
- }
- }
- void cmCPackNuGetGenerator::AddGeneratedPackageNames()
- {
- const char* const files_list = this->GetOption("GEN_CPACK_OUTPUT_FILES");
- if (!files_list) {
- cmCPackLogger(
- cmCPackLog::LOG_ERROR,
- "Error while execution CPackNuGet.cmake: No NuGet package has generated"
- << std::endl);
- return;
- }
- // add the generated packages to package file names list
- std::string fileNames{ files_list };
- const char sep = ';';
- std::string::size_type pos1 = 0;
- std::string::size_type pos2 = fileNames.find(sep, pos1 + 1);
- while (pos2 != std::string::npos) {
- packageFileNames.push_back(fileNames.substr(pos1, pos2 - pos1));
- pos1 = pos2 + 1;
- pos2 = fileNames.find(sep, pos1 + 1);
- }
- packageFileNames.push_back(fileNames.substr(pos1, pos2 - pos1));
- }
|