diff --git a/cli/main.cpp b/cli/main.cpp index f283a4d..ac06546 100644 --- a/cli/main.cpp +++ b/cli/main.cpp @@ -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"), diff --git a/lib/alpm/mingwbundle.cpp b/lib/alpm/mingwbundle.cpp index 89d1c9f..40a8aae 100644 --- a/lib/alpm/mingwbundle.cpp +++ b/lib/alpm/mingwbundle.cpp @@ -39,7 +39,7 @@ bool IncludedPackage::operator==(const Package *package) const return this->package == package; } -MingwBundle::MingwBundle(Manager &manager, const std::vector &packages, const std::vector &iconPackages, const std::vector &extraPackages, const std::vector &qtPlugins) : +MingwBundle::MingwBundle(Manager &manager, const std::vector *packages, const std::vector *iconPackages, const std::vector *extraPackages, const std::vector *qtPlugins) : m_manager(manager), m_extraPackages(extraPackages), m_qtPlugins(qtPlugins) @@ -47,26 +47,30 @@ MingwBundle::MingwBundle(Manager &manager, const std::vector &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 &qtPlugins = vector()) : + PkgFileInfo(const QString &name, const QString &path, bool dependencyOnly = false, const vector *qtPlugins = nullptr) : name(name), path(path), dependencyOnly(dependencyOnly), @@ -163,7 +167,7 @@ struct PkgFileInfo unique_ptr archive; list relevantFiles; bool dependencyOnly; - const vector &qtPlugins; + const vector *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(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(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 diff --git a/lib/alpm/mingwbundle.h b/lib/alpm/mingwbundle.h index 2f648a5..852bb7e 100644 --- a/lib/alpm/mingwbundle.h +++ b/lib/alpm/mingwbundle.h @@ -22,7 +22,7 @@ struct IncludedPackage class MingwBundle { public: - MingwBundle(Manager &manager, const std::vector &packages, const std::vector &iconPackages, const std::vector &extraPackages, const std::vector &qtPlugins); + MingwBundle(Manager &manager, const std::vector *packages = nullptr, const std::vector *iconPackages = nullptr, const std::vector *extraPackages = nullptr, const std::vector *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 m_packages; - const std::vector &m_extraPackages; - const std::vector &m_qtPlugins; + const std::vector *m_extraPackages; + const std::vector *m_qtPlugins; }; } // namespace PackageManagement