diff options
Diffstat (limited to 'Source/CPack/cmCPackIFWGenerator.cxx')
-rw-r--r-- | Source/CPack/cmCPackIFWGenerator.cxx | 909 |
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; -} |