mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-05-06 22:49:35 +00:00
big refactoring begin
This commit is contained in:
parent
2655afe0be
commit
a454dc3c06
@ -49,6 +49,7 @@ SOURCES += \
|
|||||||
deploy.cpp \
|
deploy.cpp \
|
||||||
deploycore.cpp \
|
deploycore.cpp \
|
||||||
deployparams.cpp \
|
deployparams.cpp \
|
||||||
|
envirement.cpp \
|
||||||
filemanager.cpp \
|
filemanager.cpp \
|
||||||
pe.cpp \
|
pe.cpp \
|
||||||
igetlibinfo.cpp \
|
igetlibinfo.cpp \
|
||||||
@ -65,6 +66,7 @@ HEADERS += \
|
|||||||
deploy_global.h \
|
deploy_global.h \
|
||||||
deploycore.h \
|
deploycore.h \
|
||||||
deployparams.h \
|
deployparams.h \
|
||||||
|
envirement.h \
|
||||||
filemanager.h \
|
filemanager.h \
|
||||||
pe.h \
|
pe.h \
|
||||||
igetlibinfo.h \
|
igetlibinfo.h \
|
||||||
|
345
Deploy/cqt.cpp
345
Deploy/cqt.cpp
@ -1,6 +1,347 @@
|
|||||||
#include "cqt.h"
|
#include "cqt.h"
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include "deploycore.h"
|
||||||
|
#include "quasarapp.h"
|
||||||
|
|
||||||
CQT::CQT(const QString &targetDir)
|
bool CQT::parseParams() {
|
||||||
{
|
switch (DeployCore::getMode()) {
|
||||||
|
case RunMode::Info: {
|
||||||
|
qInfo() << "selected info mode" ;
|
||||||
|
|
||||||
|
if (!parseQtInfoMode()) {
|
||||||
|
qCritical() << "info mode fail!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case RunMode::Clear: {
|
||||||
|
qInfo() << "selected clear mode" ;
|
||||||
|
|
||||||
|
if (!parseQtClearMode()) {
|
||||||
|
qCritical() << "clear mode fail!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
case RunMode::Deploy: {
|
||||||
|
qInfo() << "selected deploy mode" ;
|
||||||
|
|
||||||
|
if (!parseQtDeployMode()) {
|
||||||
|
qCritical() << "deploy mode fail!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DeployConfig CQT::config() const {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CQT::setConfig(const DeployConfig &config) {
|
||||||
|
_config = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::createFromDeploy() const {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::loadFromFile() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::parseQtDeployMode() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::parseQtInfoMode() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::parseQtClearMode() {
|
||||||
|
deploy->setTargetDir("./");
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::setTargetDir(const QString &target) {
|
||||||
|
|
||||||
|
if (QuasarAppUtils::Params::isEndable("targetDir")) {
|
||||||
|
targetDir = QFileInfo(QuasarAppUtils::Params::getStrArg("targetDir")).absoluteFilePath();
|
||||||
|
} else if (target.size()) {
|
||||||
|
targetDir = QFileInfo(target).absoluteFilePath();
|
||||||
|
} else {
|
||||||
|
if (targets.size())
|
||||||
|
targetDir = QFileInfo(targets.begin().key()).absolutePath() + "/Distro";
|
||||||
|
|
||||||
|
targetDir = QFileInfo("./Distro").absoluteFilePath();
|
||||||
|
qInfo () << "flag targetDir not used." << "use default target dir :" << targetDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
_fileManager.loadDeployemendFiles(targetDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::setTargets(const QStringList &value) {
|
||||||
|
|
||||||
|
bool isfillList = false;
|
||||||
|
|
||||||
|
for (auto &i : value) {
|
||||||
|
QFileInfo targetInfo(i);
|
||||||
|
|
||||||
|
if (i.isEmpty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (targetInfo.isFile()) {
|
||||||
|
|
||||||
|
auto sufix = targetInfo.completeSuffix();
|
||||||
|
|
||||||
|
targets.insert(QDir::fromNativeSeparators(i), sufix.isEmpty());
|
||||||
|
isfillList = true;
|
||||||
|
}
|
||||||
|
else if (targetInfo.isDir()) {
|
||||||
|
if (!setBinDir(i)) {
|
||||||
|
DeployCore::verboseLog(i + " du not contains executable binaries!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
isfillList = true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
DeployCore::verboseLog(targetInfo.absoluteFilePath() + " not exits!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isfillList)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
setTargetDir();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::setTargetsRecursive(const QString &dir) {
|
||||||
|
if (!setBinDir(dir, true)) {
|
||||||
|
qWarning() << "setBinDir failed!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
setTargetDir();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CQT::setBinDir(const QString &dir, bool recursive) {
|
||||||
|
QDir d(dir);
|
||||||
|
if (dir.isEmpty() || !d.exists()) {
|
||||||
|
DeployCore::verboseLog(dir + " dir not exits!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
DeployCore::verboseLog("setBinDir check path: " + dir);
|
||||||
|
QFileInfoList list;
|
||||||
|
|
||||||
|
if (recursive) {
|
||||||
|
list = d.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
|
||||||
|
} else {
|
||||||
|
list = d.entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool result = false;
|
||||||
|
for (auto &file : list) {
|
||||||
|
|
||||||
|
if (file.isDir()) {
|
||||||
|
result |= setBinDir(file.absoluteFilePath(), recursive);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto sufix = file.completeSuffix();
|
||||||
|
|
||||||
|
if (!((!recursive && sufix.isEmpty()) || sufix.contains("dll", Qt::CaseInsensitive) ||
|
||||||
|
sufix.contains("so", Qt::CaseInsensitive) || sufix.contains("exe", Qt::CaseInsensitive))) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = true;
|
||||||
|
targets.insert(QDir::fromNativeSeparators(file.absoluteFilePath()), sufix.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::initIgnoreList()
|
||||||
|
{
|
||||||
|
if (QuasarAppUtils::Params::isEndable("ignore")) {
|
||||||
|
auto list = QuasarAppUtils::Params::getStrArg("ignore").split(',');
|
||||||
|
ignoreList.append(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (QuasarAppUtils::Params::isEndable("noLibc")) {
|
||||||
|
ignoreList.append("libc.so");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::initIgnoreEnvList() {
|
||||||
|
if (QuasarAppUtils::Params::isEndable("ignoreEnv")) {
|
||||||
|
auto ignoreList = QuasarAppUtils::Params::getStrArg("ignoreEnv").split(',');
|
||||||
|
|
||||||
|
for (auto &i : ignoreList) {
|
||||||
|
auto path = QFileInfo(i).absoluteFilePath();
|
||||||
|
|
||||||
|
if (path.right(1) == "/" || path.right(1) == "\\") {
|
||||||
|
path.remove(path.size() - 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ignoreEnvList.append(path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::setQmlScaner(const QString &value) {
|
||||||
|
externQmlScaner = QDir::fromNativeSeparators(value);
|
||||||
|
QuasarAppUtils::Params::verboseLog("qmlScaner = " + externQmlScaner,
|
||||||
|
QuasarAppUtils::VerboseLvl::Info);
|
||||||
|
deployQml = QFileInfo(externQmlScaner).isFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::setQmake(const QString &value) {
|
||||||
|
qmake = QDir::fromNativeSeparators(value);
|
||||||
|
|
||||||
|
QFileInfo info(qmake);
|
||||||
|
QDir dir = info.absoluteDir();
|
||||||
|
|
||||||
|
if (!dir.cdUp() || !dir.cd("qml")) {
|
||||||
|
QuasarAppUtils::Params::verboseLog("get qml fail!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qmlDir = dir.absolutePath();
|
||||||
|
QuasarAppUtils::Params::verboseLog("qmlDir = " + qmlDir);
|
||||||
|
|
||||||
|
dir = (info.absoluteDir());
|
||||||
|
if (!dir.cdUp() || !dir.cd("translations")) {
|
||||||
|
QuasarAppUtils::Params::verboseLog("get translations fail!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
translationDir = dir.absolutePath();
|
||||||
|
QuasarAppUtils::Params::verboseLog("translations = " + translationDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::setQtDir(const QString &value) {
|
||||||
|
DeployCore::qtDir = QDir::fromNativeSeparators(value);
|
||||||
|
addEnv(DeployCore::qtDir);
|
||||||
|
|
||||||
|
addEnv(DeployCore::qtDir + "/lib");
|
||||||
|
addEnv(DeployCore::qtDir + "/bin");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::setExtraPath(const QStringList &value) {
|
||||||
|
QDir dir;
|
||||||
|
|
||||||
|
for (auto i : value) {
|
||||||
|
QFileInfo info(i);
|
||||||
|
if (info.isDir()) {
|
||||||
|
if (targets.contains(info.absoluteFilePath())) {
|
||||||
|
QuasarAppUtils::Params::verboseLog("skip the extra lib path becouse it is target!");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.setPath(info.absoluteFilePath());
|
||||||
|
DeployCore::extraPaths.push_back(
|
||||||
|
QDir::fromNativeSeparators(info.absoluteFilePath()));
|
||||||
|
addEnv(recursiveInvairement(0, dir));
|
||||||
|
} else {
|
||||||
|
QuasarAppUtils::Params::verboseLog(i + " does not exist! and skiped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::setExtraPlugins(const QStringList &value) {
|
||||||
|
for (auto i : value) {
|
||||||
|
QFileInfo info(i);
|
||||||
|
if (info.exists()) {
|
||||||
|
extraPlugins.append(info.absoluteFilePath());
|
||||||
|
} else {
|
||||||
|
QuasarAppUtils::Params::verboseLog(i + " does not exist! and skiped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CQT::recursiveInvairement(int depch, QDir &dir) {
|
||||||
|
|
||||||
|
char separator = ':';
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
separator = ';';
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!dir.exists() || depch >= depchLimit) {
|
||||||
|
return dir.absolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
|
QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
|
||||||
|
QString res = "";
|
||||||
|
|
||||||
|
for (QFileInfo &i : list) {
|
||||||
|
dir.cd(i.fileName());
|
||||||
|
QString temp = recursiveInvairement(depch + 1, dir);
|
||||||
|
res += (res.size())? separator + temp: temp;
|
||||||
|
|
||||||
|
dir.cdUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
res += (res.size())? separator + dir.absolutePath(): dir.absolutePath();
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CQT::initEnvirement() {
|
||||||
|
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
||||||
|
|
||||||
|
addEnv(env.value("LD_LIBRARY_PATH"));
|
||||||
|
addEnv(env.value("PATH"));
|
||||||
|
|
||||||
|
if (QuasarAppUtils::Params::isEndable("deploySystem")) {
|
||||||
|
QStringList dirs;
|
||||||
|
if (!QuasarAppUtils::Params::isEndable("noLibc"))
|
||||||
|
dirs.append(getDirsRecursive("/lib"));
|
||||||
|
dirs.append(getDirsRecursive("/usr/lib"));
|
||||||
|
|
||||||
|
for (auto &&i : dirs) {
|
||||||
|
addEnv(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (deployEnvironment.size() < 2) {
|
||||||
|
qWarning() << "system environment is empty";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList CQT::getDirsRecursive(const QString &path) {
|
||||||
|
QDir dir(path);
|
||||||
|
|
||||||
|
QStringList res;
|
||||||
|
|
||||||
|
auto list = dir.entryInfoList(QDir::Dirs| QDir::NoDotAndDotDot);
|
||||||
|
|
||||||
|
for (auto &&subDir: list) {
|
||||||
|
res.push_back(subDir.absoluteFilePath());
|
||||||
|
res.append(getDirsRecursive(subDir.absoluteFilePath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CQT::CQT() {
|
||||||
|
|
||||||
|
}
|
||||||
|
55
Deploy/cqt.h
55
Deploy/cqt.h
@ -3,8 +3,32 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QMap>
|
||||||
|
#include <QDir>
|
||||||
|
|
||||||
|
|
||||||
|
struct DeployConfig {
|
||||||
|
QString qmake = "";
|
||||||
|
QString targetDir = "";
|
||||||
|
QString qmlDir = "";
|
||||||
|
QString translationDir = "";
|
||||||
|
QString externQmlScaner = "";
|
||||||
|
int depchLimit = 0;
|
||||||
|
bool deployQml = false;
|
||||||
|
QStringList ignoreList;
|
||||||
|
QStringList extraPlugins;
|
||||||
|
QString appDir;
|
||||||
|
QString qtDir;
|
||||||
|
QStringList extraPaths;
|
||||||
|
/**
|
||||||
|
* @brief targets
|
||||||
|
* key - path
|
||||||
|
* value - create wrapper
|
||||||
|
*/
|
||||||
|
QMap<QString, bool> targets;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The CQT class - it is wrapper for cqt file. qcn it is configuration file of deploying project.
|
* @brief The CQT class - it is wrapper for cqt file. qcn it is configuration file of deploying project.
|
||||||
*/
|
*/
|
||||||
@ -12,12 +36,41 @@ class CQT
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
DeployConfig _config;
|
||||||
|
|
||||||
bool createFromDeploy() const;
|
bool createFromDeploy() const;
|
||||||
bool loadFromFile();
|
bool loadFromFile();
|
||||||
|
bool parseQtDeployMode();
|
||||||
|
bool parseQtInfoMode();
|
||||||
|
bool parseQtClearMode();
|
||||||
|
|
||||||
|
void setTargetDir(const QString &target);
|
||||||
|
bool setTargets(const QStringList &value);
|
||||||
|
bool setTargetsRecursive(const QString &dir);
|
||||||
|
bool setBinDir(const QString &dir, bool recursive);
|
||||||
|
|
||||||
|
|
||||||
|
void initIgnoreList();
|
||||||
|
void initIgnoreEnvList();
|
||||||
|
|
||||||
|
void setQmlScaner(const QString &value);
|
||||||
|
void setQmake(const QString &value);
|
||||||
|
void setQtDir(const QString &value);
|
||||||
|
|
||||||
|
void setExtraPath(const QStringList &value);
|
||||||
|
void setExtraPlugins(const QStringList &value);
|
||||||
|
|
||||||
|
QString recursiveInvairement(int depch, QDir &dir);
|
||||||
|
|
||||||
|
void initEnvirement();
|
||||||
|
|
||||||
|
QStringList getDirsRecursive(const QString &path);
|
||||||
public:
|
public:
|
||||||
CQT(const QString& targetDir);
|
CQT();
|
||||||
|
bool parseParams();
|
||||||
|
|
||||||
|
DeployConfig config() const;
|
||||||
|
void setConfig(const DeployConfig &config);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CQT_H
|
#endif // CQT_H
|
||||||
|
@ -32,56 +32,8 @@ void Deploy::setDeployQml(bool value) { deployQml = value; }
|
|||||||
|
|
||||||
QString Deploy::getQmlScaner() const { return externQmlScaner; }
|
QString Deploy::getQmlScaner() const { return externQmlScaner; }
|
||||||
|
|
||||||
void Deploy::setQmlScaner(const QString &value) {
|
|
||||||
externQmlScaner = QDir::fromNativeSeparators(value);
|
|
||||||
QuasarAppUtils::Params::verboseLog("qmlScaner = " + externQmlScaner,
|
|
||||||
QuasarAppUtils::VerboseLvl::Info);
|
|
||||||
deployQml = QFileInfo(externQmlScaner).isFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString Deploy::getQmake() const { return qmake; }
|
QString Deploy::getQmake() const { return qmake; }
|
||||||
|
|
||||||
void Deploy::setQmake(const QString &value) {
|
|
||||||
qmake = QDir::fromNativeSeparators(value);
|
|
||||||
|
|
||||||
QFileInfo info(qmake);
|
|
||||||
QDir dir = info.absoluteDir();
|
|
||||||
|
|
||||||
if (!dir.cdUp() || !dir.cd("qml")) {
|
|
||||||
QuasarAppUtils::Params::verboseLog("get qml fail!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
qmlDir = dir.absolutePath();
|
|
||||||
QuasarAppUtils::Params::verboseLog("qmlDir = " + qmlDir);
|
|
||||||
|
|
||||||
dir = (info.absoluteDir());
|
|
||||||
if (!dir.cdUp() || !dir.cd("translations")) {
|
|
||||||
QuasarAppUtils::Params::verboseLog("get translations fail!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
translationDir = dir.absolutePath();
|
|
||||||
QuasarAppUtils::Params::verboseLog("translations = " + translationDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::setTargetDir(const QString &target) {
|
|
||||||
|
|
||||||
if (QuasarAppUtils::Params::isEndable("targetDir")) {
|
|
||||||
targetDir = QFileInfo(QuasarAppUtils::Params::getStrArg("targetDir")).absoluteFilePath();
|
|
||||||
} else if (target.size()) {
|
|
||||||
targetDir = QFileInfo(target).absoluteFilePath();
|
|
||||||
} else {
|
|
||||||
if (targets.size())
|
|
||||||
targetDir = QFileInfo(targets.begin().key()).absolutePath() + "/Distro";
|
|
||||||
|
|
||||||
targetDir = QFileInfo("./Distro").absoluteFilePath();
|
|
||||||
qInfo () << "flag targetDir not used." << "use default target dir :" << targetDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
_fileManager.loadDeployemendFiles(targetDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::clear(bool force) {
|
void Deploy::clear(bool force) {
|
||||||
_fileManager.clear(targetDir, force);
|
_fileManager.clear(targetDir, force);
|
||||||
}
|
}
|
||||||
@ -98,91 +50,6 @@ bool Deploy::deployMSVC() {
|
|||||||
return _fileManager.copyFile(msvcInstaller, targetDir);
|
return _fileManager.copyFile(msvcInstaller, targetDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Deploy::setTargets(const QStringList &value) {
|
|
||||||
|
|
||||||
bool isfillList = false;
|
|
||||||
|
|
||||||
for (auto &i : value) {
|
|
||||||
QFileInfo targetInfo(i);
|
|
||||||
|
|
||||||
if (i.isEmpty())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (targetInfo.isFile()) {
|
|
||||||
|
|
||||||
auto sufix = targetInfo.completeSuffix();
|
|
||||||
|
|
||||||
targets.insert(QDir::fromNativeSeparators(i), sufix.isEmpty());
|
|
||||||
isfillList = true;
|
|
||||||
}
|
|
||||||
else if (targetInfo.isDir()) {
|
|
||||||
if (!setBinDir(i)) {
|
|
||||||
DeployCore::verboseLog(i + " du not contains executable binaries!");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
isfillList = true;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
DeployCore::verboseLog(targetInfo.absoluteFilePath() + " not exits!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isfillList)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
setTargetDir();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Deploy::setTargetsRecursive(const QString &dir) {
|
|
||||||
if (!setBinDir(dir, true)) {
|
|
||||||
qWarning() << "setBinDir failed!";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
setTargetDir();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Deploy::setBinDir(const QString &dir, bool recursive) {
|
|
||||||
QDir d(dir);
|
|
||||||
if (dir.isEmpty() || !d.exists()) {
|
|
||||||
DeployCore::verboseLog(dir + " dir not exits!");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
DeployCore::verboseLog("setBinDir check path: " + dir);
|
|
||||||
QFileInfoList list;
|
|
||||||
|
|
||||||
if (recursive) {
|
|
||||||
list = d.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
|
|
||||||
} else {
|
|
||||||
list = d.entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool result = false;
|
|
||||||
for (auto &file : list) {
|
|
||||||
|
|
||||||
if (file.isDir()) {
|
|
||||||
result |= setBinDir(file.absoluteFilePath(), recursive);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto sufix = file.completeSuffix();
|
|
||||||
|
|
||||||
if (!((!recursive && sufix.isEmpty()) || sufix.contains("dll", Qt::CaseInsensitive) ||
|
|
||||||
sufix.contains("so", Qt::CaseInsensitive) || sufix.contains("exe", Qt::CaseInsensitive))) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = true;
|
|
||||||
targets.insert(QDir::fromNativeSeparators(file.absoluteFilePath()), sufix.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Deploy::createRunScript(const QString &target) {
|
bool Deploy::createRunScript(const QString &target) {
|
||||||
|
|
||||||
QString content =
|
QString content =
|
||||||
@ -264,35 +131,7 @@ bool Deploy::createQConf() {
|
|||||||
QFileDevice::ReadOwner);
|
QFileDevice::ReadOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Deploy::initIgnoreList()
|
|
||||||
{
|
|
||||||
if (QuasarAppUtils::Params::isEndable("ignore")) {
|
|
||||||
auto list = QuasarAppUtils::Params::getStrArg("ignore").split(',');
|
|
||||||
ignoreList.append(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QuasarAppUtils::Params::isEndable("noLibc")) {
|
|
||||||
ignoreList.append("libc.so");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::initIgnoreEnvList()
|
|
||||||
{
|
|
||||||
if (QuasarAppUtils::Params::isEndable("ignoreEnv")) {
|
|
||||||
auto ignoreList = QuasarAppUtils::Params::getStrArg("ignoreEnv").split(',');
|
|
||||||
|
|
||||||
for (auto &i : ignoreList) {
|
|
||||||
auto path = QFileInfo(i).absoluteFilePath();
|
|
||||||
|
|
||||||
if (path.right(1) == "/" || path.right(1) == "\\") {
|
|
||||||
path.remove(path.size() - 1, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ignoreEnvList.append(path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::deploy() {
|
void Deploy::deploy() {
|
||||||
qInfo() << "target deploy started!!";
|
qInfo() << "target deploy started!!";
|
||||||
@ -353,51 +192,13 @@ void Deploy::deploy() {
|
|||||||
|
|
||||||
_fileManager.saveDeploymendFiles(targetDir);
|
_fileManager.saveDeploymendFiles(targetDir);
|
||||||
|
|
||||||
|
qInfo() << "deploy done!";
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Deploy::getQtDir() const { return DeployCore::qtDir; }
|
QString Deploy::getQtDir() const { return DeployCore::qtDir; }
|
||||||
|
|
||||||
void Deploy::setQtDir(const QString &value) {
|
|
||||||
DeployCore::qtDir = QDir::fromNativeSeparators(value);
|
|
||||||
addEnv(DeployCore::qtDir);
|
|
||||||
|
|
||||||
addEnv(DeployCore::qtDir + "/lib");
|
|
||||||
addEnv(DeployCore::qtDir + "/bin");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::setExtraPath(const QStringList &value) {
|
|
||||||
QDir dir;
|
|
||||||
|
|
||||||
for (auto i : value) {
|
|
||||||
QFileInfo info(i);
|
|
||||||
if (info.isDir()) {
|
|
||||||
if (targets.contains(info.absoluteFilePath())) {
|
|
||||||
QuasarAppUtils::Params::verboseLog("skip the extra lib path becouse it is target!");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
dir.setPath(info.absoluteFilePath());
|
|
||||||
DeployCore::extraPaths.push_back(
|
|
||||||
QDir::fromNativeSeparators(info.absoluteFilePath()));
|
|
||||||
addEnv(recursiveInvairement(0, dir));
|
|
||||||
} else {
|
|
||||||
QuasarAppUtils::Params::verboseLog(i + " does not exist! and skiped");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::setExtraPlugins(const QStringList &value) {
|
|
||||||
for (auto i : value) {
|
|
||||||
QFileInfo info(i);
|
|
||||||
if (info.exists()) {
|
|
||||||
extraPlugins.append(info.absoluteFilePath());
|
|
||||||
} else {
|
|
||||||
QuasarAppUtils::Params::verboseLog(i + " does not exist! and skiped");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Deploy::setDepchLimit(int value) { depchLimit = value; }
|
void Deploy::setDepchLimit(int value) { depchLimit = value; }
|
||||||
|
|
||||||
int Deploy::find(const QString &str, const QStringList &list) const {
|
int Deploy::find(const QString &str, const QStringList &list) const {
|
||||||
@ -408,34 +209,6 @@ int Deploy::find(const QString &str, const QStringList &list) const {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Deploy::recursiveInvairement(int depch, QDir &dir) {
|
|
||||||
|
|
||||||
char separator = ':';
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
|
||||||
separator = ';';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!dir.exists() || depch >= depchLimit) {
|
|
||||||
return dir.absolutePath();
|
|
||||||
}
|
|
||||||
|
|
||||||
QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
|
|
||||||
QString res = "";
|
|
||||||
|
|
||||||
for (QFileInfo &i : list) {
|
|
||||||
dir.cd(i.fileName());
|
|
||||||
QString temp = recursiveInvairement(depch + 1, dir);
|
|
||||||
res += (res.size())? separator + temp: temp;
|
|
||||||
|
|
||||||
dir.cdUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
res += (res.size())? separator + dir.absolutePath(): dir.absolutePath();
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Deploy::copyPlugin(const QString &plugin) {
|
bool Deploy::copyPlugin(const QString &plugin) {
|
||||||
|
|
||||||
QStringList listItems;
|
QStringList listItems;
|
||||||
@ -817,43 +590,6 @@ void Deploy::extract(const QString &file) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Deploy::initEnvirement() {
|
|
||||||
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
|
|
||||||
|
|
||||||
addEnv(env.value("LD_LIBRARY_PATH"));
|
|
||||||
addEnv(env.value("PATH"));
|
|
||||||
|
|
||||||
if (QuasarAppUtils::Params::isEndable("deploySystem")) {
|
|
||||||
QStringList dirs;
|
|
||||||
if (!QuasarAppUtils::Params::isEndable("noLibc"))
|
|
||||||
dirs.append(getDirsRecursive("/lib"));
|
|
||||||
dirs.append(getDirsRecursive("/usr/lib"));
|
|
||||||
|
|
||||||
for (auto &&i : dirs) {
|
|
||||||
addEnv(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (deployEnvironment.size() < 2) {
|
|
||||||
qWarning() << "system environment is empty";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList Deploy::getDirsRecursive(const QString &path) {
|
|
||||||
QDir dir(path);
|
|
||||||
|
|
||||||
QStringList res;
|
|
||||||
|
|
||||||
auto list = dir.entryInfoList(QDir::Dirs| QDir::NoDotAndDotDot);
|
|
||||||
|
|
||||||
for (auto &&subDir: list) {
|
|
||||||
res.push_back(subDir.absoluteFilePath());
|
|
||||||
res.append(getDirsRecursive(subDir.absoluteFilePath()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
Deploy::Deploy() {
|
Deploy::Deploy() {
|
||||||
#ifdef Q_OS_LINUX
|
#ifdef Q_OS_LINUX
|
||||||
appDir = QuasarAppUtils::Params::getStrArg("appPath");
|
appDir = QuasarAppUtils::Params::getStrArg("appPath");
|
||||||
|
@ -17,31 +17,10 @@
|
|||||||
|
|
||||||
class DEPLOYSHARED_EXPORT Deploy {
|
class DEPLOYSHARED_EXPORT Deploy {
|
||||||
private:
|
private:
|
||||||
bool deployQml = false;
|
|
||||||
int depchLimit = 0;
|
|
||||||
|
|
||||||
QString externQmlScaner = "";
|
|
||||||
|
|
||||||
QString qmake = "";
|
|
||||||
/**
|
|
||||||
* @brief targets
|
|
||||||
* key - path
|
|
||||||
* value - create wrapper
|
|
||||||
*/
|
|
||||||
QMap<QString, bool> targets;
|
|
||||||
QString targetDir = "";
|
|
||||||
QString qmlDir = "";
|
|
||||||
QString translationDir = "";
|
|
||||||
|
|
||||||
QStringList deployEnvironment;
|
|
||||||
|
|
||||||
QStringList neadedLibs;
|
QStringList neadedLibs;
|
||||||
QStringList systemLibs;
|
QStringList systemLibs;
|
||||||
QStringList ignoreList;
|
|
||||||
QStringList ignoreEnvList;
|
|
||||||
QStringList extraPlugins;
|
|
||||||
|
|
||||||
QString appDir;
|
|
||||||
|
|
||||||
DependenciesScanner scaner;
|
DependenciesScanner scaner;
|
||||||
FileManager _fileManager;
|
FileManager _fileManager;
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QLibraryInfo>
|
#include <QLibraryInfo>
|
||||||
|
|
||||||
QString DeployCore::qtDir = "";
|
//QString DeployCore::qtDir = "";
|
||||||
QStringList DeployCore::extraPaths = QStringList();
|
//QStringList DeployCore::extraPaths = QStringList();
|
||||||
|
|
||||||
|
|
||||||
QtModuleEntry DeployCore::qtModuleEntries[] = {
|
QtModuleEntry DeployCore::qtModuleEntries[] = {
|
||||||
@ -200,7 +200,6 @@ void DeployCore::help() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool DeployCore::parseQtClearMode(Deploy *deploy) {
|
bool DeployCore::parseQtClearMode(Deploy *deploy) {
|
||||||
deploy->setTargetDir("./");
|
|
||||||
deploy->clear(QuasarAppUtils::Params::isEndable("force-clear"));
|
deploy->clear(QuasarAppUtils::Params::isEndable("force-clear"));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -314,45 +313,6 @@ bool DeployCore::parseQtDeployMode(Deploy *deploy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool DeployCore::parseQt(Deploy *deploy) {
|
bool DeployCore::parseQt(Deploy *deploy) {
|
||||||
switch (getMode()) {
|
|
||||||
case RunMode::Info: {
|
|
||||||
qInfo() << "selected info mode" ;
|
|
||||||
|
|
||||||
if (!parseQtInfoMode()) {
|
|
||||||
qCritical() << "info mode fail!";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case RunMode::Clear: {
|
|
||||||
qInfo() << "selected clear mode" ;
|
|
||||||
|
|
||||||
if (!parseQtClearMode(deploy)) {
|
|
||||||
qCritical() << "clear mode fail!";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case RunMode::Deploy: {
|
|
||||||
qInfo() << "selected deploy mode" ;
|
|
||||||
|
|
||||||
if (!parseQtDeployMode(deploy)) {
|
|
||||||
qCritical() << "deploy mode fail!";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
deploy->deploy();
|
|
||||||
qInfo() << "deploy done!";
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList DeployCore::extractTranslation(const QStringList &libs) {
|
QStringList DeployCore::extractTranslation(const QStringList &libs) {
|
||||||
|
@ -60,9 +60,6 @@ private:
|
|||||||
static QString getMSVCName(MSVCVersion msvc);
|
static QString getMSVCName(MSVCVersion msvc);
|
||||||
static QString getMSVCVersion(MSVCVersion msvc);
|
static QString getMSVCVersion(MSVCVersion msvc);
|
||||||
|
|
||||||
static bool parseQtDeployMode(Deploy *deploy);
|
|
||||||
static bool parseQtInfoMode();
|
|
||||||
static bool parseQtClearMode(Deploy *deploy);
|
|
||||||
public:
|
public:
|
||||||
enum QtModule : quint64
|
enum QtModule : quint64
|
||||||
{
|
{
|
||||||
@ -123,8 +120,7 @@ public:
|
|||||||
|
|
||||||
DeployCore() = delete;
|
DeployCore() = delete;
|
||||||
|
|
||||||
static QString qtDir;
|
|
||||||
static QStringList extraPaths;
|
|
||||||
static QtModuleEntry qtModuleEntries[];
|
static QtModuleEntry qtModuleEntries[];
|
||||||
|
|
||||||
static MSVCVersion getMSVC(const QString & _qmake);
|
static MSVCVersion getMSVC(const QString & _qmake);
|
||||||
|
26
Deploy/envirement.cpp
Normal file
26
Deploy/envirement.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include "envirement.h"
|
||||||
|
|
||||||
|
QStringList Envirement::deployEnvironment() const
|
||||||
|
{
|
||||||
|
return _deployEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Envirement::setDeployEnvironment(const QStringList &deployEnvironment)
|
||||||
|
{
|
||||||
|
_deployEnvironment = deployEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList Envirement::ignoreEnvList() const
|
||||||
|
{
|
||||||
|
return _ignoreEnvList;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Envirement::setIgnoreEnvList(const QStringList &ignoreEnvList)
|
||||||
|
{
|
||||||
|
_ignoreEnvList = ignoreEnvList;
|
||||||
|
}
|
||||||
|
|
||||||
|
Envirement::Envirement()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
22
Deploy/envirement.h
Normal file
22
Deploy/envirement.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef ENVIREMENT_H
|
||||||
|
#define ENVIREMENT_H
|
||||||
|
|
||||||
|
#include <QStringList>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Envirement
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
QStringList _ignoreEnvList;
|
||||||
|
QStringList _deployEnvironment;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Envirement();
|
||||||
|
QStringList deployEnvironment() const;
|
||||||
|
void setDeployEnvironment(const QStringList &deployEnvironment);
|
||||||
|
QStringList ignoreEnvList() const;
|
||||||
|
void setIgnoreEnvList(const QStringList &ignoreEnvList);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ENVIREMENT_H
|
Loading…
x
Reference in New Issue
Block a user