mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-05-08 07:29:36 +00:00
fix dependecies
This commit is contained in:
parent
54dbc79fc0
commit
7f8dc48cde
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user