From d5eef065d7e7274e52ec876eec98e202beaef068 Mon Sep 17 00:00:00 2001 From: EndrII Date: Mon, 25 Mar 2019 21:27:26 +0300 Subject: [PATCH] added own libParser --- Deploy/dependenciesscanner.cpp | 46 ++++++++++++++++++++++++---------- Deploy/dependenciesscanner.h | 3 ++- Deploy/deploy.cpp | 6 ++--- Deploy/deploy.h | 2 +- Deploy/deployutils.cpp | 26 +++++++++++++++---- Deploy/deployutils.h | 14 ++++++++++- 6 files changed, 72 insertions(+), 25 deletions(-) diff --git a/Deploy/dependenciesscanner.cpp b/Deploy/dependenciesscanner.cpp index a6722cd..e762e9b 100644 --- a/Deploy/dependenciesscanner.cpp +++ b/Deploy/dependenciesscanner.cpp @@ -7,7 +7,7 @@ #include "dependenciesscanner.h" #include "deployutils.h" - +#include "quasarapp.h" #include #include #include @@ -31,6 +31,29 @@ PrivateScaner DependenciesScanner::getScaner(const QString &lib) const { return PrivateScaner::UNKNOWN; } +QMultiMap DependenciesScanner::getLibsFromEnvirement( + const QString &libName) { + + auto values = _EnvLibs.values(libName); + QMultiMap res; + + for (auto & lib : values) { + LibInfo info; + + if (!fillLibInfo(info, lib)) { + QuasarAppUtils::Params::verboseLog( + "error extract lib info from " + lib + "(" + libName + ")"); + continue; + } + + info.priority = DeployUtils::getLibPriority(info.fullPath()); + + res.insertMulti(info.priority, info); + } + + return res; +} + bool DependenciesScanner::fillLibInfo(LibInfo &info, const QString &file) { info.clear(); @@ -56,7 +79,8 @@ void DependenciesScanner::setEnvironment(const QStringList &env) { continue; } - auto list = dir.entryInfoList(QStringList() << "*.dll", + auto list = dir.entryInfoList(QStringList() << "*.dll" << ".DLL" + << "*.SO*" << "*.so*", QDir::Files| QDir::NoDotAndDotDot); for (auto i : list) { @@ -65,7 +89,7 @@ void DependenciesScanner::setEnvironment(const QStringList &env) { auto oldPriority = DeployUtils::getLibPriority(_EnvLibs.value(i.fileName(), "")); if (newPriority > oldPriority) - _EnvLibs.insert(i.fileName(), i.absoluteFilePath()); + _EnvLibs.insertMulti(i.fileName(), i.absoluteFilePath()); } } @@ -75,20 +99,16 @@ void DependenciesScanner::setEnvironment(const QStringList &env) { QStringList DependenciesScanner::scan(const QString &path) { QStringList result; - QString errorMessage; + LibInfo info; - QStringList dep; - - if (!errorMessage.isEmpty()) { - qCritical() << errorMessage; + if (!fillLibInfo(info, path)) { return result; } - for (auto i : dep) { - QString lib(i); - if (_EnvLibs.count(lib)) { - result.push_back(_EnvLibs.value(lib)); - } + for (auto i : info.dependncies) { + + auto libs = getLibsFromEnvirement(i); + result.push_back(libs.first().fullPath()); } return result; diff --git a/Deploy/dependenciesscanner.h b/Deploy/dependenciesscanner.h index 65959ca..c426c7e 100644 --- a/Deploy/dependenciesscanner.h +++ b/Deploy/dependenciesscanner.h @@ -25,13 +25,14 @@ class DEPLOYSHARED_EXPORT DependenciesScanner { private: QStringList _env; - QMap _EnvLibs; + QMultiHash _EnvLibs; PE _peScaner; ELF _elfScaner; PrivateScaner getScaner(const QString& lib) const; + QMultiMap getLibsFromEnvirement(const QString& libName); bool fillLibInfo(LibInfo& info ,const QString& file); public: explicit DependenciesScanner(); diff --git a/Deploy/deploy.cpp b/Deploy/deploy.cpp index ef26677..ad1be89 100644 --- a/Deploy/deploy.cpp +++ b/Deploy/deploy.cpp @@ -613,11 +613,9 @@ QString Deploy::filterQmlPath(const QString &path) { void Deploy::extractLib(const QString &file, bool isExtractPlugins) { qInfo() << "extract lib :" << file; - auto data = winScaner.scan(file); + auto data = scaner.scan(file); for (QString &line : data) { - line = line.simplified(); - bool isIgnore = false; for (auto ignore : ignoreList) { if (line.contains(ignore)) { @@ -729,7 +727,7 @@ bool Deploy::smartMoveTargets() { targets = temp; - winScaner.setEnvironment(deployEnvironment); + scaner.setEnvironment(deployEnvironment); return result; } diff --git a/Deploy/deploy.h b/Deploy/deploy.h index 8da8892..a7ffda7 100644 --- a/Deploy/deploy.h +++ b/Deploy/deploy.h @@ -45,7 +45,7 @@ class DEPLOYSHARED_EXPORT Deploy { QString appDir; - DependenciesScanner winScaner; + DependenciesScanner scaner; bool fileActionPrivate(const QString &file, const QString &target, QStringList *mask, bool isMove); diff --git a/Deploy/deployutils.cpp b/Deploy/deployutils.cpp index ad8ddef..94552d4 100644 --- a/Deploy/deployutils.cpp +++ b/Deploy/deployutils.cpp @@ -22,6 +22,22 @@ bool LibInfo::operator ==(const LibInfo &other) { name == other.name; } +bool operator <=(const LibInfo &left, const LibInfo &right){ + return !operator>(left, right); +} + +bool operator >=(const LibInfo &left, const LibInfo &right) { + return !operator<(left, right); +} + +bool operator <(const LibInfo &left, const LibInfo &right){ + return left.priority < right.priority; +} + +bool operator >(const LibInfo &left, const LibInfo &right) { + return left.priority > right.priority; +} + QString LibInfo::fullPath() { return path + "/" + name; } @@ -94,21 +110,21 @@ QtModuleEntry DeployUtils::qtModuleEntries[] = { { QtWebViewModule, "webview", "Qt5WebView", nullptr } }; -int DeployUtils::getLibPriority(const QString &lib) { +libPriority DeployUtils::getLibPriority(const QString &lib) { if (!QFileInfo(lib).isFile()) { - return 0; + return NotFile; } if (isQtLib(lib)) { - return 3; + return QtLib; } if (isExtraLib(lib)) { - return 2; + return ExtraLib; } - return 1; + return GeneralLib; } void DeployUtils::verboseLog(const QString &str) { diff --git a/Deploy/deployutils.h b/Deploy/deployutils.h index 11456ae..069175a 100644 --- a/Deploy/deployutils.h +++ b/Deploy/deployutils.h @@ -28,13 +28,25 @@ enum Platform { Unix64 }; +enum libPriority : int { + NotFile = 0x0, + GeneralLib, + ExtraLib, + QtLib, +}; + struct DEPLOYSHARED_EXPORT LibInfo { Platform platform = Platform::UnknownPlatform; QString name; QString path; QStringList dependncies; + libPriority priority = NotFile; bool operator == (const LibInfo& other); + friend bool operator > (const LibInfo& left, const LibInfo& right); + friend bool operator < (const LibInfo& left, const LibInfo& right); + friend bool operator >= (const LibInfo& left, const LibInfo& right); + friend bool operator <= (const LibInfo& left, const LibInfo& right); QString fullPath(); @@ -113,7 +125,7 @@ public: static bool isQtLib(const QString &lib); static bool isExtraLib(const QString &lib); - static int getLibPriority(const QString &lib); + static libPriority getLibPriority(const QString &lib); static void verboseLog(const QString &str); static void help(); static bool parseQt(Deploy *deploy);