4
1
mirror of https://github.com/QuasarApp/CQtDeployer.git synced 2025-05-08 07:29:36 +00:00

fix dependecies

This commit is contained in:
a.yankovich 2019-12-24 13:48:37 +03:00
parent 54dbc79fc0
commit 7f8dc48cde
4 changed files with 24 additions and 20 deletions

@ -140,22 +140,24 @@ void DependenciesScanner::recursiveDep(LibInfo &lib, QSet<LibInfo> &res) {
}
}
void DependenciesScanner::addToWinAPI(const QString &lib) {
void DependenciesScanner::addToWinAPI(const QString &lib, QHash<WinAPI, QSet<QString>>& 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, QSet<QString>> 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<LibInfo> DependenciesScanner::scan(const QString &path) {
@ -188,18 +191,6 @@ QSet<LibInfo> 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;
}

@ -34,15 +34,13 @@ private:
PE _peScaner;
ELF _elfScaner;
QMultiHash<WinAPI, QString> _winAPI;
PrivateScaner getScaner(const QString& lib) const;
QMultiMap<LibPriority, LibInfo> getLibsFromEnvirement(const QString& libName) const;
void recursiveDep(LibInfo& lib, QSet<LibInfo> &res);
void addToWinAPI(const QString& lib);
void addToWinAPI(const QString& lib, QHash<WinAPI, QSet<QString> > &res);
public:
explicit DependenciesScanner();

@ -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<WinAPI, QSet<QString> > PE::getWinAPI() const {
return _winAPI;
}
void PE::setWinAPI(const QHash<WinAPI, QSet<QString> > &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();
}

@ -29,6 +29,7 @@ class PE : public IGetLibInfo {
private:
bool getDep(peparse::parsed_pe_internal *, LibInfo &res) const;
QHash<WinAPI, QSet<QString>> _winAPI;
public:
@ -45,6 +46,8 @@ public:
~PE() override;
QHash<WinAPI, QSet<QString>> getWinAPI() const;
void setWinAPI(const QHash<WinAPI, QSet<QString>> &winAPI);
};
#endif // PE_H