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

View File

@ -22,7 +22,7 @@ struct IncludedPackage
class MingwBundle class MingwBundle
{ {
public: 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; 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; Manager &m_manager;
std::list<IncludedPackage> m_packages; std::list<IncludedPackage> m_packages;
const std::vector<const char *> &m_extraPackages; const std::vector<const char *> *m_extraPackages;
const std::vector<const char *> &m_qtPlugins; const std::vector<const char *> *m_qtPlugins;
}; };
} // namespace PackageManagement } // namespace PackageManagement