added own libParser

This commit is contained in:
Andrei Yankovich 2019-03-25 21:27:26 +03:00
parent 081f77c24f
commit d5eef065d7
6 changed files with 72 additions and 25 deletions

View File

@ -7,7 +7,7 @@
#include "dependenciesscanner.h"
#include "deployutils.h"
#include "quasarapp.h"
#include <QList>
#include <QDir>
#include <QDebug>
@ -31,6 +31,29 @@ PrivateScaner DependenciesScanner::getScaner(const QString &lib) const {
return PrivateScaner::UNKNOWN;
}
QMultiMap<libPriority, LibInfo> DependenciesScanner::getLibsFromEnvirement(
const QString &libName) {
auto values = _EnvLibs.values(libName);
QMultiMap<libPriority, LibInfo> 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;

View File

@ -25,13 +25,14 @@ class DEPLOYSHARED_EXPORT DependenciesScanner {
private:
QStringList _env;
QMap<QString, QString> _EnvLibs;
QMultiHash<QString, QString> _EnvLibs;
PE _peScaner;
ELF _elfScaner;
PrivateScaner getScaner(const QString& lib) const;
QMultiMap<libPriority, LibInfo> getLibsFromEnvirement(const QString& libName);
bool fillLibInfo(LibInfo& info ,const QString& file);
public:
explicit DependenciesScanner();

View File

@ -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;
}

View File

@ -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);

View File

@ -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) {

View File

@ -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);