mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-04-27 10:14:32 +00:00
added own libParser
This commit is contained in:
parent
081f77c24f
commit
d5eef065d7
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user