summaryrefslogtreecommitdiffstats
path: root/Source/CPack/cmCPackIFWGenerator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/CPack/cmCPackIFWGenerator.cxx')
-rw-r--r--Source/CPack/cmCPackIFWGenerator.cxx909
1 files changed, 0 insertions, 909 deletions
diff --git a/Source/CPack/cmCPackIFWGenerator.cxx b/Source/CPack/cmCPackIFWGenerator.cxx
deleted file mode 100644
index 3a7f539..0000000
--- a/Source/CPack/cmCPackIFWGenerator.cxx
+++ /dev/null
@@ -1,909 +0,0 @@
-/*============================================================================
- 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 "cmCPackIFWGenerator.h"
-
-#include "cmGlobalGenerator.h"
-#include "cmLocalGenerator.h"
-#include "cmSystemTools.h"
-#include "cmMakefile.h"
-#include "cmGeneratedFileStream.h"
-#include "cmCPackLog.h"
-#include "cmCPackComponentGroup.h"
-#include "cmTimestamp.h"
-
-#include <cmsys/SystemTools.hxx>
-#include <cmsys/Glob.hxx>
-#include <cmsys/Directory.hxx>
-#include <cmsys/RegularExpression.hxx>
-#include <cmXMLSafe.h>
-
-//----------------------------------------------------------------------
-cmCPackIFWGenerator::cmCPackIFWGenerator()
-{
-}
-
-//----------------------------------------------------------------------
-cmCPackIFWGenerator::~cmCPackIFWGenerator()
-{
-}
-
-//----------------------------------------------------------------------
-int cmCPackIFWGenerator::PackageFiles()
-{
- cmCPackLogger(cmCPackLog::LOG_OUTPUT, "- Configuration" << std::endl);
-
- if (!IfwCreateConfigFile())
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "CPack error: Could not create IFW \"config.xml\" file."
- << std::endl);
- return false;
- }
-
- if (Components.empty() && !IfwCreatePackageFile())
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "CPack error: Could not create IFW "
- "\"root/meta/package.xml\" file."
- << std::endl);
- return false;
- }
-
- std::string ifwTLD = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
- std::string ifwTmpFile = ifwTLD;
- ifwTmpFile += "/IFWOutput.log";
-
- std::set<std::string> ifwDependsComponents;
- std::string ifwBinaryComponents;
- std::string ifwDownloadedComponents;
-
- // Create groups meta information
- std::map<std::string, cmCPackComponentGroup>::iterator groupIt;
- for(groupIt = this->ComponentGroups.begin();
- groupIt != this->ComponentGroups.end();
- ++groupIt
- )
- {
- std::string macroPrefix = "CPACK_IFW_COMPONENT_GROUP_"
- + cmsys::SystemTools::UpperCase(groupIt->second.Name);
-
- std::string groupId = IfwGetGroupId(&groupIt->second);
-
- if(!ifwBinaryComponents.empty()) ifwBinaryComponents += ",";
- ifwBinaryComponents += groupId;
-
- std::string pkgMetaDir = this->toplevel + "/packages/"
- + groupId
- + "/meta";
-
- std::string pkgXmlFileName = pkgMetaDir
- + "/package.xml";
-
- cmGeneratedFileStream pkgXml(pkgXmlFileName.data());
- pkgXml << "<?xml version=\"1.0\"?>" << std::endl;
- pkgXml << "<Package>" << std::endl;
- pkgXml << " <DisplayName>" << groupIt->second.DisplayName
- << "</DisplayName>" << std::endl;
- pkgXml << " <Description>" << groupIt->second.Description
- << "</Description>" << std::endl;
- pkgXml << " <Name>" << groupId << "</Name>" << std::endl;
-
- // Version
- const char* ifwPackageVersion = this->GetOption("CPACK_PACKAGE_VERSION");
- const char* ifwGroupVersion = this->GetOption(macroPrefix + "_VERSION");
- pkgXml << " <Version>"
- << (ifwGroupVersion ? ifwGroupVersion : ifwPackageVersion)
- << "</Version>" << std::endl;
- pkgXml << " <ReleaseDate>" << IfwCreateCurrentDate()
- << "</ReleaseDate>" << std::endl;
-
- // Licenses
- std::vector<std::string> licenses;
- if(IfwParseLicenses(licenses, macroPrefix + "_LICENSES", pkgMetaDir))
- {
- pkgXml << " <Licenses>" << std::endl;
- for(size_t i = 0; i < licenses.size(); i += 2)
- {
- pkgXml << " <License "
- << "name=\"" << licenses[i] << "\" "
- << "file=\"" << licenses[i + 1] << "\" "
- << "/>" <<std::endl;
- }
- pkgXml << " </Licenses>" << std::endl;
- }
-
- // Priority
- if(const char* ifwGroupPriority =
- this->GetOption(macroPrefix + "_PRIORITY"))
- {
- pkgXml << " <SortingPriority>" << ifwGroupPriority
- << "</SortingPriority>" << std::endl;
- }
- pkgXml << "</Package>" << std::endl;
- }
-
- // Create components meta information
- std::map<std::string, cmCPackComponent>::iterator compIt;
- for (compIt = this->Components.begin();
- compIt != this->Components.end();
- ++compIt)
- {
- // Component id
- std::string ifwCompId = IfwGetComponentId(&compIt->second);
-
- std::string pkgMetaDir = this->toplevel + "/"
- + GetComponentInstallDirNamePrefix(compIt->second.Name)
- + ifwCompId + "/meta";
- std::string pkgXmlFileName = pkgMetaDir + "/package.xml";
- cmGeneratedFileStream pkgXml(pkgXmlFileName.data());
-
- // Check IFW version for component
- std::string macroPrefix = "CPACK_IFW_COMPONENT_"
- + cmsys::SystemTools::UpperCase(compIt->second.Name);
-
- pkgXml << "<?xml version=\"1.0\"?>" << std::endl;
- pkgXml << "<Package>" << std::endl;
- pkgXml << " <DisplayName>" << compIt->second.DisplayName
- << "</DisplayName>" << std::endl;
- pkgXml << " <Description>" << compIt->second.Description
- << "</Description>" << std::endl;
- pkgXml << " <Name>" << ifwCompId << "</Name>" << std::endl;
-
- // Version
- const char* ifwPackageVersion = this->GetOption("CPACK_PACKAGE_VERSION");
- const char* ifwCompVersion =
- this->GetOption(macroPrefix + "_VERSION");
- pkgXml << " <Version>"
- << (ifwCompVersion ? ifwCompVersion : ifwPackageVersion)
- << "</Version>" << std::endl;
-
- pkgXml << " <ReleaseDate>" << IfwCreateCurrentDate()
- << "</ReleaseDate>" << std::endl;
-
- // Script
- const char* ifwCompScript =
- this->GetOption(macroPrefix + "_SCRIPT");
- if (ifwCompScript)
- {
- // Copy file
- std::string ifwCompScriptFile = pkgMetaDir + "/operations.qs";
- cmsys::SystemTools::CopyFileIfDifferent(ifwCompScript,
- ifwCompScriptFile.data());
- pkgXml << " <Script>" << "operations.qs" << "</Script>" << std::endl;
- }
-
- // Check dependencies
- std::set<std::string> compDepSet;
- // CMake dependencies
- if (!compIt->second.Dependencies.empty())
- {
- std::vector<cmCPackComponent *>::iterator depCompIt;
- for(depCompIt = compIt->second.Dependencies.begin();
- depCompIt != compIt->second.Dependencies.end();
- ++depCompIt)
- {
- compDepSet.insert(IfwGetComponentId(*depCompIt));
- }
- }
- // QtIFW dependencies
- if(const char *ifwCompDepsStr = this->GetOption(macroPrefix + "_DEPENDS"))
- {
- std::vector<std::string> ifwCompDepsVector;
- cmSystemTools::ExpandListArgument(ifwCompDepsStr,
- ifwCompDepsVector);
- for(std::vector<std::string>::iterator
- depCompIt = ifwCompDepsVector.begin();
- depCompIt != ifwCompDepsVector.end(); ++depCompIt)
- {
- compDepSet.insert(*depCompIt);
- ifwDependsComponents.insert(*depCompIt);
- }
- }
-
- // Write dependencies
- if (!compDepSet.empty())
- {
- pkgXml << " <Dependencies>";
- std::set<std::string>::iterator it = compDepSet.begin();
- pkgXml << *it;
- ++it;
- while(it != compDepSet.end())
- {
- pkgXml << "," << *it;
- ++it;
- }
- pkgXml << "</Dependencies>" << std::endl;
- }
-
- // Licenses
- std::vector<std::string> licenses;
- if(IfwParseLicenses(licenses, macroPrefix + "_LICENSES", pkgMetaDir))
- {
- pkgXml << " <Licenses>" << std::endl;
- for(size_t i = 0; i < licenses.size(); i += 2)
- {
- pkgXml << " <License "
- << "name=\"" << licenses[i] << "\" "
- << "file=\"" << licenses[i + 1] << "\" "
- << "/>" <<std::endl;
- }
- pkgXml << " </Licenses>" << std::endl;
- }
-
- // TODO: Check how enable virtual component (now it's allways disabled)
- if (compIt->second.IsRequired) {
- pkgXml << " <ForcedInstallation>true</ForcedInstallation>"
- << std::endl;
- } else if (compIt->second.IsDisabledByDefault) {
- pkgXml << " <Default>false</Default>" << std::endl;
- } else if (compIt->second.IsHidden) {
- pkgXml << " <Virtual>true</Virtual>" << std::endl;
- } else {
- pkgXml << " <Default>true</Default>" << std::endl;
- }
-
- // Priority
- if(const char* ifwCompPriority =
- this->GetOption(macroPrefix + "_PRIORITY"))
- {
- pkgXml << " <SortingPriority>" << ifwCompPriority
- << "</SortingPriority>" << std::endl;
- }
-
- pkgXml << "</Package>" << std::endl;
-
- // Downloaded
- if (compIt->second.IsDownloaded)
- {
- if (!ifwDownloadedComponents.empty()) ifwDownloadedComponents += ",";
- ifwDownloadedComponents += ifwCompId;
- }
- else
- {
- if (!ifwBinaryComponents.empty()) ifwBinaryComponents += ",";
- ifwBinaryComponents += ifwCompId;
- }
- }
-
- // Run repogen
- if (!ifwDownloadSite.empty())
- {
- std::string ifwCmd = ifwRepoGen;
- ifwCmd += " -c " + this->toplevel + "/config/config.xml";
- ifwCmd += " -p " + this->toplevel + "/packages";
-
- if(!ifwPkgsDirsVector.empty())
- {
- for(std::vector<std::string>::iterator it = ifwPkgsDirsVector.begin();
- it != ifwPkgsDirsVector.end(); ++it)
- {
- ifwCmd += " -p " + *it;
- }
- }
-
- if (!ifwOnlineOnly && !ifwDownloadedComponents.empty()) {
- ifwCmd += " -i " + ifwDownloadedComponents;
- }
- ifwCmd += " " + this->toplevel + "/repository";
- cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Execute: " << ifwCmd
- << std::endl);
- std::string output;
- int retVal = 1;
- cmCPackLogger(cmCPackLog::LOG_OUTPUT,
- "- Generate repository" << std::endl);
- bool res = cmSystemTools::RunSingleCommand(
- ifwCmd.c_str(), &output, &retVal, 0, this->GeneratorVerbose, 0);
- if ( !res || retVal )
- {
- cmGeneratedFileStream ofs(ifwTmpFile.c_str());
- ofs << "# Run command: " << ifwCmd << std::endl
- << "# Output:" << std::endl
- << output << std::endl;
- cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running IFW command: "
- << ifwCmd << std::endl
- << "Please check " << ifwTmpFile << " for errors"
- << std::endl);
- return 0;
- }
- }
-
- // Run binary creator
- {
- std::string ifwCmd = ifwBinCreator;
- ifwCmd += " -c " + this->toplevel + "/config/config.xml";
- ifwCmd += " -p " + this->toplevel + "/packages";
-
- if(!ifwPkgsDirsVector.empty())
- {
- for(std::vector<std::string>::iterator it = ifwPkgsDirsVector.begin();
- it != ifwPkgsDirsVector.end(); ++it)
- {
- ifwCmd += " -p " + *it;
- }
- }
-
- if (ifwOnlineOnly)
- {
- ifwCmd += " --online-only";
- }
- else if (!ifwDownloadedComponents.empty() && !ifwDownloadSite.empty())
- {
- ifwCmd += " -e " + ifwDownloadedComponents;
- }
- else if (!ifwDependsComponents.empty())
- {
- ifwCmd += " -i ";
- std::set<std::string>::iterator it = ifwDependsComponents.begin();
- ifwCmd += *it;
- ++it;
- while(it != ifwDependsComponents.end())
- {
- ifwCmd += "," + (*it);
- ++it;
- }
-
- ifwCmd += "," + ifwBinaryComponents;
- }
- // TODO: set correct name for multipackages
- if (this->packageFileNames.size() > 0)
- {
- ifwCmd += " " + packageFileNames[0];
- }
- else
- {
- ifwCmd += " installer";
- }
- cmCPackLogger(cmCPackLog::LOG_VERBOSE, "Execute: " << ifwCmd
- << std::endl);
- std::string output;
- int retVal = 1;
- cmCPackLogger(cmCPackLog::LOG_OUTPUT, "- Generate package" << std::endl);
- bool res = cmSystemTools::RunSingleCommand(
- ifwCmd.c_str(), &output, &retVal, 0, this->GeneratorVerbose, 0);
- if ( !res || retVal )
- {
- cmGeneratedFileStream ofs(ifwTmpFile.c_str());
- ofs << "# Run command: " << ifwCmd << std::endl
- << "# Output:" << std::endl
- << output << std::endl;
- cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem running IFW command: "
- << ifwCmd << std::endl
- << "Please check " << ifwTmpFile << " for errors"
- << std::endl);
- return 0;
- }
- }
-
- return 1;
-}
-
-//----------------------------------------------------------------------
-const char *cmCPackIFWGenerator::GetPackagingInstallPrefix()
-{
- const char *defPrefix = cmCPackGenerator::GetPackagingInstallPrefix();
-
- std::string tmpPref = defPrefix ? defPrefix : "";
-
- if(this->Components.empty())
- {
- tmpPref += "packages/root/data";
- }
-
- this->SetOption("CPACK_IFW_PACKAGING_INSTALL_PREFIX", tmpPref.c_str());
-
- return this->GetOption("CPACK_IFW_PACKAGING_INSTALL_PREFIX");
-}
-
-//----------------------------------------------------------------------
-const char *cmCPackIFWGenerator::GetOutputExtension()
-{
- const char *suffix = this->GetOption("CMAKE_EXECUTABLE_SUFFIX");
- return suffix ? suffix : "";
-}
-
-//----------------------------------------------------------------------
-std::string cmCPackIFWGenerator::IfwGetGroupId(cmCPackComponentGroup *group)
-{
- std::string ifwGroupId;
- std::string ifwGroupName;
- std::list<cmCPackComponentGroup*> groups;
- while(group)
- {
- groups.push_front(group);
- group = group->ParentGroup;
- }
- std::list<cmCPackComponentGroup*>::iterator it = groups.begin();
- if(it != groups.end())
- {
- ifwGroupId = IfwGetGroupName(*it);
- ++it;
- }
- while(it != groups.end())
- {
- ifwGroupName = IfwGetGroupName(*it);
-
- if(ifwResolveDuplicateNames)
- {
- if(ifwGroupName.substr(0, ifwGroupId.size()) == ifwGroupId)
- {
- ifwGroupId = ifwGroupName;
- ++it;
- continue;
- }
- }
-
- ifwGroupId += "." + ifwGroupName;
-
- ++it;
- }
-
- return ifwGroupId;
-}
-
-//----------------------------------------------------------------------
-std::string cmCPackIFWGenerator::IfwGetComponentId(cmCPackComponent *component)
-{
- std::string ifwCompId;
- if(component) {
- ifwCompId = IfwGetGroupId(component->Group);
- if(!ifwCompId.empty()) ifwCompId += ".";
- std::string ifwCompName = IfwGetComponentName(component);
- if(ifwResolveDuplicateNames &&
- (ifwCompName.substr(0, ifwCompId.size()) == ifwCompId))
- {
- ifwCompId = ifwCompName;
- }
- else
- {
- ifwCompId += ifwCompName;
- }
- }
- return ifwCompId;
-}
-
-//----------------------------------------------------------------------
-std::string cmCPackIFWGenerator::IfwGetGroupName(cmCPackComponentGroup *group)
-{
- std::string ifwGroupName = group->Name;
- if(const char* name =
- this->GetOption("CPACK_IFW_COMPONENT_GROUP_"
- + cmsys::SystemTools::UpperCase(group->Name) + "_NAME"))
- {
- ifwGroupName = name;
- }
- return ifwGroupName;
-}
-
-//----------------------------------------------------------------------
-std::string
-cmCPackIFWGenerator::IfwGetComponentName(cmCPackComponent *component)
-{
- return IfwGetComponentName(component->Name);
-}
-
-//----------------------------------------------------------------------
-std::string
-cmCPackIFWGenerator::IfwGetComponentName(const std::string &componentName)
-{
- std::string ifwCompName = componentName;
- if(const char* name =
- this->GetOption("CPACK_IFW_COMPONENT_"
- + cmsys::SystemTools::UpperCase(componentName) + "_NAME"))
- {
- ifwCompName = name;
- }
- return ifwCompName;
-}
-
-//----------------------------------------------------------------------
-int cmCPackIFWGenerator::InitializeInternal()
-{
- // Search Qt Installer Framework tools
-
- if(!this->IsOn("CPACK_IFW_BINARYCREATOR_EXECUTABLE_FOUND") ||
- !this->IsOn("CPACK_IFW_REPOGEN_EXECUTABLE_FOUND"))
- {
- this->ReadListFile("CPackIFW.cmake");
- }
-
- // Look 'binarycreator' executable (needs)
-
- if(this->IsOn("CPACK_IFW_BINARYCREATOR_EXECUTABLE_FOUND"))
- {
- const char *ifwBinCreatorStr =
- this->GetOption("CPACK_IFW_BINARYCREATOR_EXECUTABLE");
- ifwBinCreator = ifwBinCreatorStr ? ifwBinCreatorStr : "";
- }
- else
- {
- ifwBinCreator = "";
- }
-
- if (ifwBinCreator.empty())
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Cannot find QtIFW compiler \"binarycreator\": "
- "likely it is not installed, or not in your PATH"
- << std::endl);
- return 0;
- }
-
- // Look 'repogen' executable (optional)
-
- if(this->IsOn("CPACK_IFW_REPOGEN_EXECUTABLE_FOUND"))
- {
- const char *ifwRepoGenStr =
- this->GetOption("CPACK_IFW_REPOGEN_EXECUTABLE");
- ifwRepoGen = ifwRepoGenStr ? ifwRepoGenStr : "";
- }
- else
- {
- ifwRepoGen = "";
- }
-
- // // Variables that Change Behavior
-
- // Resolve duplicate names
- ifwResolveDuplicateNames = this->IsOn("CPACK_IFW_RESOLVE_DUPLICATE_NAMES");
-
- // Additional packages dirs
- ifwPkgsDirsVector.clear();
- if(const char* dirs = this->GetOption("CPACK_IFW_PACKAGES_DIRECTORIES"))
- {
- cmSystemTools::ExpandListArgument(dirs,
- ifwPkgsDirsVector);
- }
-
- // Remote repository
-
- if (const char *site = this->GetOption("CPACK_DOWNLOAD_SITE"))
- {
- ifwDownloadSite = site;
- }
-
- ifwOnlineOnly = this->IsOn("CPACK_DOWNLOAD_ALL") ? true : false;
-
- if (!ifwDownloadSite.empty() && ifwRepoGen.empty()) {
- cmCPackLogger(cmCPackLog::LOG_ERROR,
- "Cannot find QtIFW repository generator \"repogen\": "
- "likely it is not installed, or not in your PATH"
- << std::endl);
- return 0;
- }
-
- return this->Superclass::InitializeInternal();
-}
-
-//----------------------------------------------------------------------
-std::string
-cmCPackIFWGenerator::GetComponentInstallDirNamePrefix(
- const std::string& /*componentName*/)
-{
- return "packages/";
-}
-
-//----------------------------------------------------------------------
-std::string
-cmCPackIFWGenerator::GetComponentInstallDirNameSuffix(
- const std::string& componentName)
-{
- std::map<std::string, cmCPackComponent>::iterator
- compIt = this->Components.find(componentName);
-
- cmCPackComponent *comp =
- compIt != this->Components.end() ? &compIt->second : 0;
-
- const std::string prefix = GetComponentInstallDirNamePrefix(componentName);
- const std::string suffix = "/data";
-
- if (componentPackageMethod == ONE_PACKAGE_PER_COMPONENT) {
- return prefix + IfwGetComponentId(comp) + suffix;
- }
-
- if (componentPackageMethod == ONE_PACKAGE) {
- return std::string(prefix + "ALL_COMPONENTS_IN_ONE" + suffix);
- }
-
- return prefix + IfwGetComponentId(comp) + suffix;
-}
-
-//----------------------------------------------------------------------
-bool cmCPackIFWGenerator::GetListOfSubdirectories(
- const char* topdir, std::vector<std::string>& dirs)
-{
- cmsys::Directory dir;
- dir.Load(topdir);
- size_t fileNum;
- for (fileNum = 0; fileNum < dir.GetNumberOfFiles(); ++fileNum)
- {
- if (strcmp(dir.GetFile(static_cast<unsigned long>(fileNum)),".") &&
- strcmp(dir.GetFile(static_cast<unsigned long>(fileNum)),".."))
- {
- cmsys_stl::string fullPath = topdir;
- fullPath += "/";
- fullPath += dir.GetFile(static_cast<unsigned long>(fileNum));
- if(cmsys::SystemTools::FileIsDirectory(fullPath.c_str()) &&
- !cmsys::SystemTools::FileIsSymlink(fullPath.c_str()))
- {
- if (!this->GetListOfSubdirectories(fullPath.c_str(), dirs))
- {
- return false;
- }
- }
- }
- }
- dirs.push_back(topdir);
- return true;
-}
-
-//----------------------------------------------------------------------
-enum cmCPackGenerator::CPackSetDestdirSupport
-cmCPackIFWGenerator::SupportsSetDestdir() const
-{
- return cmCPackGenerator::SETDESTDIR_SHOULD_NOT_BE_USED;
-}
-
-//----------------------------------------------------------------------
-bool cmCPackIFWGenerator::SupportsAbsoluteDestination() const
-{
- return false;
-}
-
-//----------------------------------------------------------------------
-bool cmCPackIFWGenerator::SupportsComponentInstallation() const
-{
- return true;
-}
-
-//----------------------------------------------------------------------
-int cmCPackIFWGenerator::IfwCreateConfigFile()
-{
- cmGeneratedFileStream cfg((this->toplevel + "/config/config.xml").data());
-
- std::string ifwPkgName;
- if (const char *name = this->GetOption("CPACK_PACKAGE_NAME"))
- {
- ifwPkgName = name;
- }
- else
- {
- ifwPkgName = "Your package";
- }
-
- std::string pkgTitle;
- if (const char *title = this->GetOption("CPACK_IFW_PACKAGE_TITLE"))
- {
- pkgTitle = title;
- }
- else if (const char *description =
- this->GetOption("CPACK_PACKAGE_DESCRIPTION_SUMMARY"))
- {
- pkgTitle = description;
- }
- else
- {
- pkgTitle = "Your package description";
- }
-
- std::string ifwPkgVersion;
- if (const char *version = this->GetOption("CPACK_PACKAGE_VERSION"))
- {
- ifwPkgVersion = version;
- }
- else
- {
- ifwPkgVersion = "1.0.0";
- }
-
- const char *ifwPkgInstDir =
- this->GetOption("CPACK_PACKAGE_INSTALL_DIRECTORY");
- const char *ifwTargetDir =
- this->GetOption("CPACK_IFW_TARGET_DIRECTORY");
- const char *ifwAdminTargetDir =
- this->GetOption("CPACK_IFW_ADMIN_TARGET_DIRECTORY");
-
- cfg << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl;
- cfg << "<Installer>" << std::endl;
- cfg << " <Name>" << cmXMLSafe(ifwPkgName).str() << "</Name>" << std::endl;
- cfg << " <Version>" << ifwPkgVersion << "</Version>" << std::endl;
- cfg << " <Title>" << cmXMLSafe(pkgTitle).str() << "</Title>"
- << std::endl;
-
- // Publisher
- std::string ifwPublisher;
- if(const char *publisher = GetOption("CPACK_IFW_PACKAGE_PUBLISHER"))
- {
- ifwPublisher = publisher;
- }
- else if(const char *vendor = GetOption("CPACK_PACKAGE_VENDOR"))
- {
- ifwPublisher = vendor;
- }
- if(!ifwPublisher.empty())
- {
- cfg << " <Publisher>" << cmXMLSafe(ifwPublisher).str()
- << "</Publisher>" << std::endl;
- }
-
- // ProductUrl
- if(const char *url = GetOption("CPACK_IFW_PRODUCT_URL"))
- {
- cfg << " <ProductUrl>" << url << "</ProductUrl>" << std::endl;
- }
-
- // ApplicationIcon
- const char *pkgApplicationIcon = GetOption("CPACK_IFW_PACKAGE_ICON");
- if(pkgApplicationIcon && cmSystemTools::FileExists(pkgApplicationIcon))
- {
- std::string name = cmSystemTools::GetFilenameName(pkgApplicationIcon);
- std::string path = this->toplevel + "/config/" + name;
- name = cmSystemTools::GetFilenameWithoutExtension(name);
- cmsys::SystemTools::CopyFileIfDifferent(pkgApplicationIcon, path.data());
- cfg << " <InstallerApplicationIcon>" << name
- << "</InstallerApplicationIcon>" << std::endl;
- }
-
- // WindowIcon
- const char *pkgWindowIcon = GetOption("CPACK_IFW_PACKAGE_WINDOW_ICON");
- if(pkgWindowIcon && cmSystemTools::FileExists(pkgWindowIcon))
- {
- std::string name = cmSystemTools::GetFilenameName(pkgWindowIcon);
- std::string path = this->toplevel + "/config/" + name;
- cmsys::SystemTools::CopyFileIfDifferent(pkgWindowIcon, path.data());
- cfg << " <InstallerWindowIcon>" << name
- << "</InstallerWindowIcon>" << std::endl;
- }
-
- // Logo
- const char *pkgLogo = GetOption("CPACK_IFW_PACKAGE_LOGO");
- if(pkgLogo && cmSystemTools::FileExists(pkgLogo))
- {
- std::string name = cmSystemTools::GetFilenameName(pkgLogo);
- std::string path = this->toplevel + "/config/" + name;
- cmsys::SystemTools::CopyFileIfDifferent(pkgLogo, path.data());
- cfg << " <Logo>" << name << "</Logo>" << std::endl;
- }
-
- // Default target directory for installation
- if (ifwTargetDir)
- {
- cfg << " <TargetDir>" << ifwTargetDir << "</TargetDir>" << std::endl;
- }
- else if (ifwPkgInstDir)
- {
- cfg << " <TargetDir>@ApplicationsDir@/" << ifwPkgInstDir
- << "</TargetDir>" << std::endl;
- }
- else
- {
- cfg << " <TargetDir>@RootDir@/usr/local</TargetDir>" << std::endl;
- }
-
- // Default target directory for installation with administrator rights
- if (ifwAdminTargetDir)
- {
- cfg << " <AdminTargetDir>" << ifwAdminTargetDir
- << "</AdminTargetDir>" << std::endl;
- }
-
- if (!ifwDownloadSite.empty())
- {
- cfg << " <RemoteRepositories>" << std::endl;
- cfg << " <Repository>" << std::endl;
- cfg << " <Url>" << ifwDownloadSite << "</Url>" << std::endl;
- // These properties can now be set from "cpack_configure_downloads"
- // <Enabled>1</Enabled>
- // <Username>user</Username>
- // <Password>password</Password>
- // <DisplayName>Example repository</DisplayName>
- cfg << " </Repository>" << std::endl;
- cfg << " </RemoteRepositories>" << std::endl;
- }
-
- // CPack IFW default policy
- cfg << " <!-- CPack IFW default policy -->" << std::endl;
- cfg << " <AllowNonAsciiCharacters>true</AllowNonAsciiCharacters>"
- << std::endl;
- cfg << " <AllowSpaceInPath>true</AllowSpaceInPath>" << std::endl;
-
- cfg << "</Installer>" << std::endl;
-
- return 1;
-}
-
-//----------------------------------------------------------------------
-// Create default package file
-int cmCPackIFWGenerator::IfwCreatePackageFile()
-{
- std::string ifwPkgName;
- if (const char *name = this->GetOption("CPACK_PACKAGE_NAME"))
- {
- ifwPkgName = name;
- }
- else
- {
- ifwPkgName = "Your package";
- }
-
- std::string ifwPkgDescription;
- if (const char *name = this->GetOption("CPACK_PACKAGE_DESCRIPTION_SUMMARY"))
- {
- ifwPkgDescription = name;
- }
- else
- {
- ifwPkgDescription = "Your package description";
- }
-
- cmGeneratedFileStream
- pkgXml((this->toplevel + "/packages/root/meta/package.xml").data());
- pkgXml << "<?xml version=\"1.0\"?>" << std::endl;
- pkgXml << "<Package>" << std::endl;
-
- pkgXml << " <DisplayName>" << ifwPkgName << "</DisplayName>" << std::endl;
- pkgXml << " <Description>" << ifwPkgDescription
- << "</Description>" << std::endl;
- pkgXml << " <Name>" << "root" << "</Name>" << std::endl;
- pkgXml << " <Version>" << this->GetOption("CPACK_PACKAGE_VERSION")
- << "</Version>" << std::endl;
- pkgXml << " <ReleaseDate>" << IfwCreateCurrentDate() << "</ReleaseDate>"
- << std::endl;
-
- pkgXml << " <ForcedInstallation>true</ForcedInstallation>" << std::endl;
- pkgXml << " <Default>true</Default>" << std::endl;
-
- pkgXml << "</Package>" << std::endl;
-
- return 1;
-}
-
-//----------------------------------------------------------------------
-std::string cmCPackIFWGenerator::IfwCreateCurrentDate()
-{
- cmTimestamp timestamp;
- return timestamp.CurrentTime("%Y-%m-%d", false);
-}
-
-//----------------------------------------------------------------------
-bool cmCPackIFWGenerator::IfwParseLicenses(std::vector<std::string> &licenses,
- const std::string &variable,
- const std::string &metaDir)
-{
- if (const char *option = this->GetOption(variable))
- {
- if(!licenses.empty()) licenses.clear();
- cmSystemTools::ExpandListArgument( option, licenses );
- }
- else
- {
- return false;
- }
-
- if ( licenses.size() % 2 != 0 )
- {
- cmCPackLogger(cmCPackLog::LOG_ERROR, variable
- << " should contain pairs of <display_name> and <file_path>."
- << std::endl);
- return false;
- }
-
- for(size_t i = 1; i < licenses.size(); i += 2)
- {
- std::string name = cmSystemTools::GetFilenameName(licenses[i]);
- std::string path = metaDir + "/" + name;
- cmsys::SystemTools::CopyFileIfDifferent(licenses[i].data(), path.data());
- licenses[i] = name;
- }
-
- return licenses.size() > 1;
-}