mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 10:50:16 -06:00
Merge topic 'cpack-ifw-updates'
ed9684a2CPackIFW: Added support for multiple repositoriesf9f74874CPackIFW: Search algorithm update
This commit is contained in:
@@ -56,7 +56,7 @@ int cmCPackIFWGenerator::PackageFiles()
|
||||
ifwTmpFile += "/IFWOutput.log";
|
||||
|
||||
// Run repogen
|
||||
if (!DownloadSite.empty())
|
||||
if (!Installer.Repositories.empty())
|
||||
{
|
||||
std::string ifwCmd = RepoGen;
|
||||
ifwCmd += " -c " + this->toplevel + "/config/config.xml";
|
||||
@@ -128,7 +128,7 @@ int cmCPackIFWGenerator::PackageFiles()
|
||||
{
|
||||
ifwCmd += " --online-only";
|
||||
}
|
||||
else if (!DownloadedPackages.empty() && !DownloadSite.empty())
|
||||
else if (!DownloadedPackages.empty() && !Installer.Repositories.empty())
|
||||
{
|
||||
ifwCmd += " -e ";
|
||||
std::set<cmCPackIFWPackage*>::iterator it
|
||||
@@ -223,23 +223,25 @@ int cmCPackIFWGenerator::InitializeInternal()
|
||||
{
|
||||
// Search Qt Installer Framework tools
|
||||
|
||||
if(!this->IsOn("CPACK_IFW_BINARYCREATOR_EXECUTABLE_FOUND") ||
|
||||
!this->IsOn("CPACK_IFW_REPOGEN_EXECUTABLE_FOUND"))
|
||||
const std::string BinCreatorOpt = "CPACK_IFW_BINARYCREATOR_EXECUTABLE";
|
||||
const std::string RepoGenOpt = "CPACK_IFW_REPOGEN_EXECUTABLE";
|
||||
|
||||
if(!this->IsSet(BinCreatorOpt) ||
|
||||
!this->IsSet(RepoGenOpt))
|
||||
{
|
||||
this->ReadListFile("CPackIFW.cmake");
|
||||
}
|
||||
|
||||
// Look 'binarycreator' executable (needs)
|
||||
|
||||
if(this->IsOn("CPACK_IFW_BINARYCREATOR_EXECUTABLE_FOUND"))
|
||||
const char *BinCreatorStr = this->GetOption(BinCreatorOpt);
|
||||
if(!BinCreatorStr || cmSystemTools::IsNOTFOUND(BinCreatorStr))
|
||||
{
|
||||
const char *ifwBinCreatorStr =
|
||||
this->GetOption("CPACK_IFW_BINARYCREATOR_EXECUTABLE");
|
||||
BinCreator = ifwBinCreatorStr ? ifwBinCreatorStr : "";
|
||||
BinCreator = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
BinCreator = "";
|
||||
BinCreator = BinCreatorStr;
|
||||
}
|
||||
|
||||
if (BinCreator.empty())
|
||||
@@ -253,15 +255,14 @@ int cmCPackIFWGenerator::InitializeInternal()
|
||||
|
||||
// Look 'repogen' executable (optional)
|
||||
|
||||
if(this->IsOn("CPACK_IFW_REPOGEN_EXECUTABLE_FOUND"))
|
||||
const char *RepoGenStr = this->GetOption(RepoGenOpt);
|
||||
if(!RepoGenStr || cmSystemTools::IsNOTFOUND(RepoGenStr))
|
||||
{
|
||||
const char *ifwRepoGenStr =
|
||||
this->GetOption("CPACK_IFW_REPOGEN_EXECUTABLE");
|
||||
RepoGen = ifwRepoGenStr ? ifwRepoGenStr : "";
|
||||
RepoGen = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
RepoGen = "";
|
||||
RepoGen = RepoGenStr;
|
||||
}
|
||||
|
||||
// Variables that Change Behavior
|
||||
@@ -277,16 +278,26 @@ int cmCPackIFWGenerator::InitializeInternal()
|
||||
PkgsDirsVector);
|
||||
}
|
||||
|
||||
// Remote repository
|
||||
// Installer
|
||||
Installer.Generator = this;
|
||||
Installer.ConfigureFromOptions();
|
||||
|
||||
if (const char *site = this->GetOption("CPACK_DOWNLOAD_SITE"))
|
||||
if (const char* ifwDownloadAll =
|
||||
this->GetOption("CPACK_IFW_DOWNLOAD_ALL"))
|
||||
{
|
||||
DownloadSite = site;
|
||||
OnlineOnly = cmSystemTools::IsOn(ifwDownloadAll);
|
||||
}
|
||||
else if (const char* cpackDownloadAll =
|
||||
this->GetOption("CPACK_DOWNLOAD_ALL"))
|
||||
{
|
||||
OnlineOnly = cmSystemTools::IsOn(cpackDownloadAll);
|
||||
}
|
||||
else
|
||||
{
|
||||
OnlineOnly = false;
|
||||
}
|
||||
|
||||
OnlineOnly = this->IsOn("CPACK_DOWNLOAD_ALL") ? true : false;
|
||||
|
||||
if (!DownloadSite.empty() && RepoGen.empty()) {
|
||||
if (!Installer.Repositories.empty() && RepoGen.empty()) {
|
||||
cmCPackLogger(cmCPackLog::LOG_ERROR,
|
||||
"Cannot find QtIFW repository generator \"repogen\": "
|
||||
"likely it is not installed, or not in your PATH"
|
||||
@@ -294,10 +305,6 @@ int cmCPackIFWGenerator::InitializeInternal()
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Installer
|
||||
Installer.Generator = this;
|
||||
Installer.ConfigureFromOptions();
|
||||
|
||||
return this->Superclass::InitializeInternal();
|
||||
}
|
||||
|
||||
|
||||
@@ -127,8 +127,6 @@ private:
|
||||
std::string RepoGen;
|
||||
std::string BinCreator;
|
||||
|
||||
std::string DownloadSite;
|
||||
|
||||
bool OnlineOnly;
|
||||
bool ResolveDuplicateNames;
|
||||
std::vector<std::string> PkgsDirsVector;
|
||||
|
||||
@@ -44,6 +44,12 @@ const char *cmCPackIFWInstaller::GetOption(const std::string &op) const
|
||||
return Generator ? Generator->GetOption(op) : 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmCPackIFWInstaller::IsOn(const std::string &op) const
|
||||
{
|
||||
return Generator ? Generator->IsOn(op) : false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmCPackIFWInstaller::ConfigureFromOptions()
|
||||
{
|
||||
@@ -167,6 +173,78 @@ void cmCPackIFWInstaller::ConfigureFromOptions()
|
||||
{
|
||||
AdminTargetDir = option;
|
||||
}
|
||||
|
||||
// Repositories
|
||||
Repositories.clear();
|
||||
RepositoryStruct Repo;
|
||||
if (const char *site = this->GetOption("CPACK_DOWNLOAD_SITE"))
|
||||
{
|
||||
Repo.Url = site;
|
||||
Repositories.push_back(Repo);
|
||||
}
|
||||
if(const char *RepoAllStr = this->GetOption("CPACK_IFW_REPOSITORIES_ALL"))
|
||||
{
|
||||
std::vector<std::string> RepoAllVector;
|
||||
cmSystemTools::ExpandListArgument(RepoAllStr,
|
||||
RepoAllVector);
|
||||
for(std::vector<std::string>::iterator
|
||||
rit = RepoAllVector.begin(); rit != RepoAllVector.end(); ++rit)
|
||||
{
|
||||
std::string prefix = "CPACK_IFW_REPOSITORY_"
|
||||
+ cmsys::SystemTools::UpperCase(*rit)
|
||||
+ "_";
|
||||
// Url
|
||||
if (const char* url = GetOption(prefix + "URL"))
|
||||
{
|
||||
Repo.Url = url;
|
||||
}
|
||||
else
|
||||
{
|
||||
Repo.Url = "";
|
||||
}
|
||||
// Enabled
|
||||
if (IsOn(prefix + "DISABLED"))
|
||||
{
|
||||
Repo.Enabled = "0";
|
||||
}
|
||||
else
|
||||
{
|
||||
Repo.Enabled = "";
|
||||
}
|
||||
// Username
|
||||
if (const char* username = GetOption(prefix + "USERNAME"))
|
||||
{
|
||||
Repo.Username = username;
|
||||
}
|
||||
else
|
||||
{
|
||||
Repo.Username = "";
|
||||
}
|
||||
// Password
|
||||
if (const char* password = GetOption(prefix + "PASSWORD"))
|
||||
{
|
||||
Repo.Password = password;
|
||||
}
|
||||
else
|
||||
{
|
||||
Repo.Password = "";
|
||||
}
|
||||
// DisplayName
|
||||
if (const char* displayName = GetOption(prefix + "DISPLAY_NAME"))
|
||||
{
|
||||
Repo.DisplayName = displayName;
|
||||
}
|
||||
else
|
||||
{
|
||||
Repo.DisplayName = "";
|
||||
}
|
||||
|
||||
if(!Repo.Url.empty())
|
||||
{
|
||||
Repositories.push_back(Repo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -246,19 +324,43 @@ void cmCPackIFWInstaller::GenerateInstallerFile()
|
||||
<< "</AdminTargetDir>" << std::endl;
|
||||
}
|
||||
|
||||
// Site
|
||||
if (!Generator->DownloadSite.empty())
|
||||
// Remote repositories
|
||||
if (!Repositories.empty())
|
||||
{
|
||||
xout << " <RemoteRepositories>" << std::endl;
|
||||
xout << " <Repository>" << std::endl;
|
||||
xout << " <Url>" << Generator->DownloadSite
|
||||
<< "</Url>" << std::endl;
|
||||
// These properties can not be set from "cpack_configure_downloads"
|
||||
// <Enabled>1</Enabled>
|
||||
// <Username>user</Username>
|
||||
// <Password>password</Password>
|
||||
// <DisplayName>Example repository</DisplayName>
|
||||
xout << " </Repository>" << std::endl;
|
||||
for(std::vector<RepositoryStruct>::iterator
|
||||
rit = Repositories.begin(); rit != Repositories.end(); ++rit)
|
||||
{
|
||||
xout << " <Repository>" << std::endl;
|
||||
// Url
|
||||
xout << " <Url>" << rit->Url
|
||||
<< "</Url>" << std::endl;
|
||||
// Enabled
|
||||
if(!rit->Enabled.empty())
|
||||
{
|
||||
xout << " <Enabled>" << rit->Enabled
|
||||
<< "</Enabled>" << std::endl;
|
||||
}
|
||||
// Username
|
||||
if(!rit->Username.empty())
|
||||
{
|
||||
xout << " <Username>" << rit->Username
|
||||
<< "</Username>" << std::endl;
|
||||
}
|
||||
// Password
|
||||
if(!rit->Password.empty())
|
||||
{
|
||||
xout << " <Password>" << rit->Password
|
||||
<< "</Password>" << std::endl;
|
||||
}
|
||||
// DisplayName
|
||||
if(!rit->DisplayName.empty())
|
||||
{
|
||||
xout << " <DisplayName>" << rit->DisplayName
|
||||
<< "</DisplayName>" << std::endl;
|
||||
}
|
||||
xout << " </Repository>" << std::endl;
|
||||
}
|
||||
xout << " </RemoteRepositories>" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,15 @@ public: // Types
|
||||
|
||||
typedef std::map<std::string, cmCPackIFWPackage*> PackagesMap;
|
||||
|
||||
struct RepositoryStruct
|
||||
{
|
||||
std::string Url;
|
||||
std::string Enabled;
|
||||
std::string Username;
|
||||
std::string Password;
|
||||
std::string DisplayName;
|
||||
};
|
||||
|
||||
public: // Constructor
|
||||
|
||||
/**
|
||||
@@ -69,6 +78,7 @@ public: // Configuration
|
||||
public: // Internal implementation
|
||||
|
||||
const char* GetOption(const std::string& op) const;
|
||||
bool IsOn(const std::string& op) const;
|
||||
|
||||
void ConfigureFromOptions();
|
||||
|
||||
@@ -78,6 +88,7 @@ public: // Internal implementation
|
||||
|
||||
cmCPackIFWGenerator* Generator;
|
||||
PackagesMap Packages;
|
||||
std::vector<RepositoryStruct> Repositories;
|
||||
std::string Directory;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user