Fix passing args to MingwBundle

This commit is contained in:
Martchus 2016-06-20 00:04:01 +02:00
parent bb943cb21b
commit 160bf9929d
3 changed files with 40 additions and 31 deletions

View File

@ -73,7 +73,10 @@ int main(int argc, char *argv[])
BuildOrderResolverCli resolver(manager, configArgs.packagesArg.values(), configArgs.addSourceOnlyDepsArg.isPresent(), configArgs.requireSourcesArg.isPresent());
return resolver.exec();
} else if(configArgs.mingwBundleArg.isPresent()) {
MingwBundle bundle(manager, configArgs.packagesArg.values(), configArgs.iconThemesArg.values(), configArgs.extraPackagesArg.values(), configArgs.qtPluginsArg.values());
MingwBundle bundle(manager, configArgs.packagesArg.isPresent() ? &configArgs.packagesArg.values() : nullptr,
configArgs.iconThemesArg.isPresent() ? &configArgs.iconThemesArg.values() : nullptr,
configArgs.extraPackagesArg.isPresent() ? &configArgs.extraPackagesArg.values() : nullptr,
configArgs.qtPluginsArg.isPresent() ? &configArgs.qtPluginsArg.values() : nullptr);
bundle.createBundle(configArgs.targetDirArg.isPresent() ? configArgs.targetDirArg.values().front() : string("."),
configArgs.targetNameArg.values().front(),
configArgs.targetFormatArg.isPresent() ? configArgs.targetFormatArg.values().front() : string("zip"),

View File

@ -39,7 +39,7 @@ bool IncludedPackage::operator==(const Package *package) const
return this->package == package;
}
MingwBundle::MingwBundle(Manager &manager, const std::vector<const char *> &packages, const std::vector<const char *> &iconPackages, const std::vector<const char *> &extraPackages, const std::vector<const char *> &qtPlugins) :
MingwBundle::MingwBundle(Manager &manager, const std::vector<const char *> *packages, const std::vector<const char *> *iconPackages, const std::vector<const char *> *extraPackages, const std::vector<const char *> *qtPlugins) :
m_manager(manager),
m_extraPackages(extraPackages),
m_qtPlugins(qtPlugins)
@ -47,26 +47,30 @@ MingwBundle::MingwBundle(Manager &manager, const std::vector<const char *> &pack
cerr << shchar << "Resolving dependencies ..." << endl;
string missing;
// add mingw-w64 packages
for(const char *pkgName : packages) {
if(auto *pkg = manager.packageProviding(Dependency(QString::fromLocal8Bit(strncmp(pkgName, prefix, prefixLen) ? pkgName : (prefix + string(pkgName)).data())))) {
if(find(m_packages.cbegin(), m_packages.cend(), pkg) == m_packages.cend()) {
m_packages.emplace_back(pkg, false);
addDependencies(pkg);
if(packages) {
for(const char *pkgName : *packages) {
if(auto *pkg = manager.packageProviding(Dependency(QString::fromLocal8Bit(!strncmp(pkgName, prefix, prefixLen) ? pkgName : (prefix + string(pkgName)).data())))) {
if(find(m_packages.cbegin(), m_packages.cend(), pkg) == m_packages.cend()) {
m_packages.emplace_back(pkg, false);
addDependencies(pkg);
}
} else {
missing.push_back(' ');
missing.append(pkgName);
}
} else {
missing.push_back(' ');
missing.append(pkgName);
}
}
// add additional icon packages
for(const auto &pkgName : iconPackages) {
if(auto *pkg = manager.packageProviding(Dependency(QString::fromLocal8Bit(pkgName)))) {
if(find(m_packages.cbegin(), m_packages.cend(), pkg) == m_packages.cend()) {
m_packages.emplace_back(pkg, false);
if(iconPackages) {
for(const auto &pkgName : *iconPackages) {
if(auto *pkg = manager.packageProviding(Dependency(QString::fromLocal8Bit(pkgName)))) {
if(find(m_packages.cbegin(), m_packages.cend(), pkg) == m_packages.cend()) {
m_packages.emplace_back(pkg, false);
}
} else {
missing.push_back(' ');
missing.append(pkgName);
}
} else {
missing.push_back(' ');
missing.append(pkgName);
}
}
if(!missing.empty()) {
@ -150,7 +154,7 @@ struct RelevantFile
struct PkgFileInfo
{
PkgFileInfo(const QString &name, const QString &path, bool dependencyOnly = false, const vector<const char *> &qtPlugins = vector<const char *>()) :
PkgFileInfo(const QString &name, const QString &path, bool dependencyOnly = false, const vector<const char *> *qtPlugins = nullptr) :
name(name),
path(path),
dependencyOnly(dependencyOnly),
@ -163,7 +167,7 @@ struct PkgFileInfo
unique_ptr<KTar> archive;
list<RelevantFile> relevantFiles;
bool dependencyOnly;
const vector<const char *> &qtPlugins;
const vector<const char *> *qtPlugins;
bool failure;
};
@ -233,10 +237,10 @@ void getFiles(PkgFileInfo &pkgFileInfo)
if(const auto *pluginEntry = categoryDir->entry(entryName)) {
if(pluginEntry->isFile()) {
if(entryName.endsWith(QLatin1String(".dll"))) {
if(!pkgFileInfo.qtPlugins.empty()) {
if(pkgFileInfo.qtPlugins && !pkgFileInfo.qtPlugins->empty()) {
string pluginName = entryName.toLocal8Bit().data();
pluginName.resize(pluginName.size() - 4);
if(find(pkgFileInfo.qtPlugins.cbegin(), pkgFileInfo.qtPlugins.cend(), pluginName) == pkgFileInfo.qtPlugins.cend()) {
if(find(pkgFileInfo.qtPlugins->cbegin(), pkgFileInfo.qtPlugins->cend(), pluginName) == pkgFileInfo.qtPlugins->cend()) {
continue;
}
}
@ -546,13 +550,15 @@ void MingwBundle::createBundle(const string &targetDir, const string &targetName
}
pkgFiles.emplace_back(pkgName.toString(), pkgFile, includedPkg.dependencyOnly, m_qtPlugins);
}
for(const char *pkgFileRawStr : m_extraPackages) {
QString pkgFile = QString::fromLocal8Bit(pkgFileRawStr);
if(QFile::exists(pkgFile)) {
const auto pkg = make_unique<AlpmPackage>(pkgFile); // do not catch the exception here
pkgFiles.emplace_back(pkg->name().startsWith(QLatin1String("mingw-w64-")) ? pkg->name().mid(10) : pkg->name(), pkgFile, false, m_qtPlugins);
} else {
throw runtime_error("The specified extra package \"" + string(pkgFileRawStr) + "\" can't be found.");
if(m_extraPackages) {
for(const char *pkgFileRawStr : *m_extraPackages) {
QString pkgFile = QString::fromLocal8Bit(pkgFileRawStr);
if(QFile::exists(pkgFile)) {
const auto pkg = make_unique<AlpmPackage>(pkgFile); // do not catch the exception here
pkgFiles.emplace_back(pkg->name().startsWith(QLatin1String("mingw-w64-")) ? pkg->name().mid(10) : pkg->name(), pkgFile, false, m_qtPlugins);
} else {
throw runtime_error("The specified extra package \"" + string(pkgFileRawStr) + "\" can't be found.");
}
}
}
// get relevant files from packages

View File

@ -22,7 +22,7 @@ struct IncludedPackage
class MingwBundle
{
public:
MingwBundle(Manager &manager, const std::vector<const char *> &packages, const std::vector<const char *> &iconPackages, const std::vector<const char *> &extraPackages, const std::vector<const char *> &qtPlugins);
MingwBundle(Manager &manager, const std::vector<const char *> *packages = nullptr, const std::vector<const char *> *iconPackages = nullptr, const std::vector<const char *> *extraPackages = nullptr, const std::vector<const char *> *qtPlugins = nullptr);
void createBundle(const std::string &targetDir, const std::string &targetName, const std::string &targetFormat, const std::string &defaultIconTheme) const;
@ -31,8 +31,8 @@ private:
Manager &m_manager;
std::list<IncludedPackage> m_packages;
const std::vector<const char *> &m_extraPackages;
const std::vector<const char *> &m_qtPlugins;
const std::vector<const char *> *m_extraPackages;
const std::vector<const char *> *m_qtPlugins;
};
} // namespace PackageManagement