mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-05-16 19:39:36 +00:00
added own libParser
This commit is contained in:
parent
081f77c24f
commit
d5eef065d7
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include "dependenciesscanner.h"
|
#include "dependenciesscanner.h"
|
||||||
#include "deployutils.h"
|
#include "deployutils.h"
|
||||||
|
#include "quasarapp.h"
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@ -31,6 +31,29 @@ PrivateScaner DependenciesScanner::getScaner(const QString &lib) const {
|
|||||||
return PrivateScaner::UNKNOWN;
|
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) {
|
bool DependenciesScanner::fillLibInfo(LibInfo &info, const QString &file) {
|
||||||
|
|
||||||
info.clear();
|
info.clear();
|
||||||
@ -56,7 +79,8 @@ void DependenciesScanner::setEnvironment(const QStringList &env) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto list = dir.entryInfoList(QStringList() << "*.dll",
|
auto list = dir.entryInfoList(QStringList() << "*.dll" << ".DLL"
|
||||||
|
<< "*.SO*" << "*.so*",
|
||||||
QDir::Files| QDir::NoDotAndDotDot);
|
QDir::Files| QDir::NoDotAndDotDot);
|
||||||
|
|
||||||
for (auto i : list) {
|
for (auto i : list) {
|
||||||
@ -65,7 +89,7 @@ void DependenciesScanner::setEnvironment(const QStringList &env) {
|
|||||||
auto oldPriority = DeployUtils::getLibPriority(_EnvLibs.value(i.fileName(), ""));
|
auto oldPriority = DeployUtils::getLibPriority(_EnvLibs.value(i.fileName(), ""));
|
||||||
|
|
||||||
if (newPriority > oldPriority)
|
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 DependenciesScanner::scan(const QString &path) {
|
||||||
QStringList result;
|
QStringList result;
|
||||||
|
|
||||||
QString errorMessage;
|
LibInfo info;
|
||||||
|
|
||||||
QStringList dep;
|
if (!fillLibInfo(info, path)) {
|
||||||
|
|
||||||
if (!errorMessage.isEmpty()) {
|
|
||||||
qCritical() << errorMessage;
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto i : dep) {
|
for (auto i : info.dependncies) {
|
||||||
QString lib(i);
|
|
||||||
if (_EnvLibs.count(lib)) {
|
auto libs = getLibsFromEnvirement(i);
|
||||||
result.push_back(_EnvLibs.value(lib));
|
result.push_back(libs.first().fullPath());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -25,13 +25,14 @@ class DEPLOYSHARED_EXPORT DependenciesScanner {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QStringList _env;
|
QStringList _env;
|
||||||
QMap<QString, QString> _EnvLibs;
|
QMultiHash<QString, QString> _EnvLibs;
|
||||||
|
|
||||||
PE _peScaner;
|
PE _peScaner;
|
||||||
ELF _elfScaner;
|
ELF _elfScaner;
|
||||||
|
|
||||||
PrivateScaner getScaner(const QString& lib) const;
|
PrivateScaner getScaner(const QString& lib) const;
|
||||||
|
|
||||||
|
QMultiMap<libPriority, LibInfo> getLibsFromEnvirement(const QString& libName);
|
||||||
bool fillLibInfo(LibInfo& info ,const QString& file);
|
bool fillLibInfo(LibInfo& info ,const QString& file);
|
||||||
public:
|
public:
|
||||||
explicit DependenciesScanner();
|
explicit DependenciesScanner();
|
||||||
|
@ -613,11 +613,9 @@ QString Deploy::filterQmlPath(const QString &path) {
|
|||||||
void Deploy::extractLib(const QString &file, bool isExtractPlugins) {
|
void Deploy::extractLib(const QString &file, bool isExtractPlugins) {
|
||||||
qInfo() << "extract lib :" << file;
|
qInfo() << "extract lib :" << file;
|
||||||
|
|
||||||
auto data = winScaner.scan(file);
|
auto data = scaner.scan(file);
|
||||||
|
|
||||||
for (QString &line : data) {
|
for (QString &line : data) {
|
||||||
line = line.simplified();
|
|
||||||
|
|
||||||
bool isIgnore = false;
|
bool isIgnore = false;
|
||||||
for (auto ignore : ignoreList) {
|
for (auto ignore : ignoreList) {
|
||||||
if (line.contains(ignore)) {
|
if (line.contains(ignore)) {
|
||||||
@ -729,7 +727,7 @@ bool Deploy::smartMoveTargets() {
|
|||||||
|
|
||||||
targets = temp;
|
targets = temp;
|
||||||
|
|
||||||
winScaner.setEnvironment(deployEnvironment);
|
scaner.setEnvironment(deployEnvironment);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ class DEPLOYSHARED_EXPORT Deploy {
|
|||||||
|
|
||||||
QString appDir;
|
QString appDir;
|
||||||
|
|
||||||
DependenciesScanner winScaner;
|
DependenciesScanner scaner;
|
||||||
|
|
||||||
bool fileActionPrivate(const QString &file, const QString &target,
|
bool fileActionPrivate(const QString &file, const QString &target,
|
||||||
QStringList *mask, bool isMove);
|
QStringList *mask, bool isMove);
|
||||||
|
@ -22,6 +22,22 @@ bool LibInfo::operator ==(const LibInfo &other) {
|
|||||||
name == other.name;
|
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() {
|
QString LibInfo::fullPath() {
|
||||||
return path + "/" + name;
|
return path + "/" + name;
|
||||||
}
|
}
|
||||||
@ -94,21 +110,21 @@ QtModuleEntry DeployUtils::qtModuleEntries[] = {
|
|||||||
{ QtWebViewModule, "webview", "Qt5WebView", nullptr }
|
{ QtWebViewModule, "webview", "Qt5WebView", nullptr }
|
||||||
};
|
};
|
||||||
|
|
||||||
int DeployUtils::getLibPriority(const QString &lib) {
|
libPriority DeployUtils::getLibPriority(const QString &lib) {
|
||||||
|
|
||||||
if (!QFileInfo(lib).isFile()) {
|
if (!QFileInfo(lib).isFile()) {
|
||||||
return 0;
|
return NotFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isQtLib(lib)) {
|
if (isQtLib(lib)) {
|
||||||
return 3;
|
return QtLib;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isExtraLib(lib)) {
|
if (isExtraLib(lib)) {
|
||||||
return 2;
|
return ExtraLib;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return GeneralLib;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeployUtils::verboseLog(const QString &str) {
|
void DeployUtils::verboseLog(const QString &str) {
|
||||||
|
@ -28,13 +28,25 @@ enum Platform {
|
|||||||
Unix64
|
Unix64
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum libPriority : int {
|
||||||
|
NotFile = 0x0,
|
||||||
|
GeneralLib,
|
||||||
|
ExtraLib,
|
||||||
|
QtLib,
|
||||||
|
};
|
||||||
|
|
||||||
struct DEPLOYSHARED_EXPORT LibInfo {
|
struct DEPLOYSHARED_EXPORT LibInfo {
|
||||||
Platform platform = Platform::UnknownPlatform;
|
Platform platform = Platform::UnknownPlatform;
|
||||||
QString name;
|
QString name;
|
||||||
QString path;
|
QString path;
|
||||||
QStringList dependncies;
|
QStringList dependncies;
|
||||||
|
libPriority priority = NotFile;
|
||||||
|
|
||||||
bool operator == (const LibInfo& other);
|
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();
|
QString fullPath();
|
||||||
|
|
||||||
@ -113,7 +125,7 @@ public:
|
|||||||
|
|
||||||
static bool isQtLib(const QString &lib);
|
static bool isQtLib(const QString &lib);
|
||||||
static bool isExtraLib(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 verboseLog(const QString &str);
|
||||||
static void help();
|
static void help();
|
||||||
static bool parseQt(Deploy *deploy);
|
static bool parseQt(Deploy *deploy);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user