diff --git a/Deploy/dependenciesscanner.cpp b/Deploy/dependenciesscanner.cpp index 45caeb1..f325d78 100644 --- a/Deploy/dependenciesscanner.cpp +++ b/Deploy/dependenciesscanner.cpp @@ -140,22 +140,24 @@ void DependenciesScanner::recursiveDep(LibInfo &lib, QSet &res) { } } -void DependenciesScanner::addToWinAPI(const QString &lib) { +void DependenciesScanner::addToWinAPI(const QString &lib, QHash>& res) { #ifdef Q_OS_WIN if (QuasarAppUtils::Params::isEndable("deploySystem-with-winapi")) { WinAPI api = _peScaner.getAPIModule(lib); if (api != WinAPI::NoWinAPI) { - _winAPI.insert(api, lib); + res[api] += lib; } } #else Q_UNUSED(lib) + Q_UNUSED(res) + #endif } void DependenciesScanner::setEnvironment(const QStringList &env) { QDir dir; - + QHash> winAPI; for (auto i : env) { dir.setPath(i); @@ -168,13 +170,14 @@ void DependenciesScanner::setEnvironment(const QStringList &env) { QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden); for (auto i : list) { - addToWinAPI(i.absoluteFilePath()); + addToWinAPI(i.fileName().toUpper(), winAPI); _EnvLibs.insertMulti(i.fileName().toUpper(), i.absoluteFilePath()); } } + _peScaner.setWinAPI(winAPI); } QSet DependenciesScanner::scan(const QString &path) { @@ -188,18 +191,6 @@ QSet DependenciesScanner::scan(const QString &path) { recursiveDep(info, result); - for (auto i = _winAPI.begin(); i != _winAPI.end(); ++i) { - if ((info.getWinApi() & i.key()) != WinAPI::NoWinAPI) { - - for (auto apiLib :_winAPI.values(i.key())) { - LibInfo info; - if (fillLibInfo(info, apiLib)) { - result.insert(info); - } - } - } - } - return result; } diff --git a/Deploy/dependenciesscanner.h b/Deploy/dependenciesscanner.h index f07f2d0..f084a37 100644 --- a/Deploy/dependenciesscanner.h +++ b/Deploy/dependenciesscanner.h @@ -34,15 +34,13 @@ private: PE _peScaner; ELF _elfScaner; - QMultiHash _winAPI; - PrivateScaner getScaner(const QString& lib) const; QMultiMap getLibsFromEnvirement(const QString& libName) const; void recursiveDep(LibInfo& lib, QSet &res); - void addToWinAPI(const QString& lib); + void addToWinAPI(const QString& lib, QHash > &res); public: explicit DependenciesScanner(); diff --git a/Deploy/pe.cpp b/Deploy/pe.cpp index 4245b3a..842cce7 100644 --- a/Deploy/pe.cpp +++ b/Deploy/pe.cpp @@ -66,9 +66,21 @@ bool PE::getDep(peparse::parsed_pe_internal * internal, LibInfo &res) const { } } + if (res.getWinApi() != WinAPI::NoWinAPI) { + res.addDependncies(_winAPI.value(res.getWinApi())); + } + return res.getDependncies().size() || !imports.size(); } +QHash > PE::getWinAPI() const { + return _winAPI; +} + +void PE::setWinAPI(const QHash > &winAPI) { + _winAPI = winAPI; +} + WinAPI PE::getAPIModule(const QString &libName) const { if (libName.contains(API_MS_WIN, Qt::CaseInsensitive)) { if (libName.contains(API_MS_WIN_CORE, Qt::CaseInsensitive)) { @@ -122,6 +134,7 @@ bool PE::getLibInfo(const QString &lib, LibInfo &info) const { info.setName(QFileInfo(lib).fileName()); info.setPath(QFileInfo(lib).absolutePath()); + info.setWinApi(getAPIModule(info.getName())); if (!getDep(parsedPeLib->internal, info)) { peparse::DestructParsedPE(parsedPeLib); @@ -130,7 +143,6 @@ bool PE::getLibInfo(const QString &lib, LibInfo &info) const { peparse::DestructParsedPE(parsedPeLib); - info.setWinApi(getAPIModule(info.getName())); return info.isValid(); } diff --git a/Deploy/pe.h b/Deploy/pe.h index 34312a3..386275b 100644 --- a/Deploy/pe.h +++ b/Deploy/pe.h @@ -29,6 +29,7 @@ class PE : public IGetLibInfo { private: bool getDep(peparse::parsed_pe_internal *, LibInfo &res) const; + QHash> _winAPI; public: @@ -45,6 +46,8 @@ public: ~PE() override; + QHash> getWinAPI() const; + void setWinAPI(const QHash> &winAPI); }; #endif // PE_H