mirror of
https://github.com/QuasarApp/QtDeployer.git
synced 2025-04-27 14:04:31 +00:00
added build option
This commit is contained in:
parent
b36f72eb9a
commit
75fae751b6
5
.gitignore
vendored
5
.gitignore
vendored
@ -50,3 +50,8 @@ snap/plugins/__pycache__/
|
|||||||
*.snap
|
*.snap
|
||||||
|
|
||||||
\.buildconfig
|
\.buildconfig
|
||||||
|
|
||||||
|
b/
|
||||||
|
Build*/
|
||||||
|
|
||||||
|
*.stash
|
||||||
|
@ -1,16 +1,31 @@
|
|||||||
#include "buildmanager.h"
|
#include "buildmanager.h"
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
BuildManager::BuildManager(QObject *parent) : BaseClass(parent)
|
BuildManager::BuildManager(QObject *parent) : BaseClass(parent)
|
||||||
{
|
{
|
||||||
|
connect(&pQMake, &QProcess::readyRead, this, &BuildManager::buildLog);
|
||||||
|
connect(&pQMake, SIGNAL(finished(int)), this, SLOT(buildFinihed(int)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BuildManager::buildLog(){
|
||||||
|
tempLog = pQMake.readAll();
|
||||||
|
emit logChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BuildManager::buildFinihed(int error) {
|
||||||
|
if(pQMake.program() == "make" && !error){
|
||||||
|
m_executablepath = tempBuildFolder + "/" + projectName;
|
||||||
|
emit finished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool BuildManager::initQMake() {
|
bool BuildManager::initQMake() {
|
||||||
|
|
||||||
QDir dir(m_qtdir);
|
QDir dir(m_qtdir);
|
||||||
|
|
||||||
if(!dir.exists("/bin/qmake")){
|
if(!dir.exists("bin/qmake")){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,22 +34,52 @@ bool BuildManager::initQMake() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QString& BuildManager::log() const{
|
||||||
|
return tempLog;
|
||||||
|
}
|
||||||
|
|
||||||
bool BuildManager::initFolderName() {
|
bool BuildManager::initFolderName() {
|
||||||
QDir dir(m_projectdir);
|
QDir dir(m_projectdir);
|
||||||
if(!dir.cd("..")) {
|
if(!dir.cd("..")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
QStringList filesList = findFilesInsideDir("*.pro", m_projectdir);
|
||||||
QFileInfoList filesList = dir.entryInfoList(".pro");
|
|
||||||
|
|
||||||
if(filesList.size() < 1){
|
if(filesList.size() < 1){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString projectName = filesList.first().baseName();
|
QFile f(filesList.first());
|
||||||
|
if(!f.open(QIODevice::ReadOnly | QIODevice::Text)){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString proFile = f.readAll();
|
||||||
|
f.close();
|
||||||
|
|
||||||
|
proFile.replace(" ", "");
|
||||||
|
int tempIndex = proFile.indexOf(QRegExp("TARGET=") );
|
||||||
|
if(tempIndex < 0){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
int beginTarget = tempIndex + 7;
|
||||||
|
|
||||||
|
tempIndex = proFile.indexOf("\n", beginTarget);
|
||||||
|
int longTraget = -1;
|
||||||
|
|
||||||
|
if(tempIndex >= 0){
|
||||||
|
longTraget = tempIndex - beginTarget;
|
||||||
|
}
|
||||||
|
projectName = proFile.mid(beginTarget, longTraget);
|
||||||
|
|
||||||
tempBuildFolder = dir.absolutePath() + "/Build-" + projectName;
|
tempBuildFolder = dir.absolutePath() + "/Build-" + projectName;
|
||||||
if(!dir.exists(tempBuildFolder) && !dir.mkdir(tempBuildFolder)){
|
if(dir.exists(tempBuildFolder) && !QDir(tempBuildFolder).removeRecursively()){
|
||||||
|
|
||||||
|
tempBuildFolder.clear();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!dir.mkdir(tempBuildFolder)){
|
||||||
tempBuildFolder.clear();
|
tempBuildFolder.clear();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -43,16 +88,25 @@ bool BuildManager::initFolderName() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool BuildManager::build(){
|
bool BuildManager::build(){
|
||||||
if(initQMake() && initFolderName()){
|
if(!initQMake() || !initFolderName()){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QProcess pQMake;
|
|
||||||
|
|
||||||
pQMake.setProgram(qmake);
|
pQMake.setProgram(qmake);
|
||||||
|
pQMake.setWorkingDirectory(tempBuildFolder);
|
||||||
|
pQMake.setArguments(QStringList() << m_projectdir);
|
||||||
|
|
||||||
pQMake.setArguments(QStringList() << );
|
pQMake.start();
|
||||||
|
|
||||||
|
if(!pQMake.waitForFinished()){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pQMake.setProgram("make");
|
||||||
|
pQMake.setArguments(QStringList() << QString("-j%0").arg(QThread::idealThreadCount()));
|
||||||
|
pQMake.start();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,20 +6,32 @@
|
|||||||
class BuildManager : public BaseClass
|
class BuildManager : public BaseClass
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(QString log READ log NOTIFY logChanged)
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString qmake;
|
QString qmake;
|
||||||
QString tempBuildFolder;
|
QString tempBuildFolder;
|
||||||
|
QString tempLog;
|
||||||
|
QString projectName;
|
||||||
|
QProcess pQMake;
|
||||||
|
|
||||||
bool initFolderName();
|
bool initFolderName();
|
||||||
bool initQMake();
|
bool initQMake();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void buildLog();
|
||||||
|
void buildFinihed(int error);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit BuildManager(QObject *parent = nullptr);
|
explicit BuildManager(QObject *parent = nullptr);
|
||||||
bool build();
|
bool build();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
void logChanged();
|
||||||
|
void finished();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
const QString& log() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BUILDMANAGER_H
|
#endif // BUILDMANAGER_H
|
||||||
|
@ -10,7 +10,7 @@ QStringList MainManager::getAllExecutables()
|
|||||||
}
|
}
|
||||||
|
|
||||||
MainManager::MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
MainManager::MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
||||||
PluginManager *plg, QObject *parent)
|
PluginManager *plg, BuildManager* bld, QObject *parent)
|
||||||
: BaseClass(parent)
|
: BaseClass(parent)
|
||||||
{
|
{
|
||||||
setState(0);
|
setState(0);
|
||||||
@ -19,26 +19,31 @@ MainManager::MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
|||||||
m_qml = qml;
|
m_qml = qml;
|
||||||
m_out = out;
|
m_out = out;
|
||||||
m_plg = plg;
|
m_plg = plg;
|
||||||
|
m_bld = bld;
|
||||||
|
|
||||||
|
connect(m_bld, &BuildManager::finished, this, &MainManager::buildFinished);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainManager::prepare(const QString &qtdir, const QString &execpath,
|
void MainManager::buildFinished(){
|
||||||
const QString &projectdir, const QString &outdir)
|
m_qml->start();
|
||||||
|
m_plg->start();
|
||||||
|
m_cpp->start(getAllExecutables());
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainManager::prepare(const QString &qtdir, const QString &projectdir, const QString &outdir)
|
||||||
{
|
{
|
||||||
QStringList list;
|
QStringList list;
|
||||||
list << qtdir << execpath << projectdir << outdir;
|
list << qtdir << projectdir << outdir;
|
||||||
|
|
||||||
for (QString &S : list)
|
for (QString &S : list)
|
||||||
if (S[S.count() - 1] == '/') S.remove(S.count() - 1, 1);
|
if (S[S.count() - 1] == '/') S.remove(S.count() - 1, 1);
|
||||||
|
|
||||||
m_qtdir = list[0];
|
m_qtdir = list[0];
|
||||||
m_executablepath = list[1];
|
m_projectdir = list[1];
|
||||||
m_projectdir = list[2];
|
m_outputdir = list[2];
|
||||||
m_outputdir = list[3];
|
|
||||||
|
|
||||||
m_qml->start();
|
m_bld->build();
|
||||||
m_plg->start();
|
|
||||||
m_cpp->start(getAllExecutables());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainManager::start(bool erase)
|
void MainManager::start(bool erase)
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "outputmanager.h"
|
#include "outputmanager.h"
|
||||||
#include "pluginmanager.h"
|
#include "pluginmanager.h"
|
||||||
#include "qmlmanager.h"
|
#include "qmlmanager.h"
|
||||||
|
#include "buildmanager.h"
|
||||||
|
|
||||||
class MainManager : public BaseClass
|
class MainManager : public BaseClass
|
||||||
{
|
{
|
||||||
@ -17,20 +18,24 @@ class MainManager : public BaseClass
|
|||||||
QmlManager *m_qml;
|
QmlManager *m_qml;
|
||||||
PluginManager *m_plg;
|
PluginManager *m_plg;
|
||||||
OutputManager *m_out;
|
OutputManager *m_out;
|
||||||
|
BuildManager *m_bld;
|
||||||
|
|
||||||
|
|
||||||
int m_state;
|
int m_state;
|
||||||
|
|
||||||
QStringList getAllExecutables();
|
QStringList getAllExecutables();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void buildFinished();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
explicit MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
||||||
PluginManager *plg, QObject *parent = nullptr);
|
PluginManager *plg, BuildManager* bld, QObject *parent = nullptr);
|
||||||
|
|
||||||
int state() const;
|
int state() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void prepare(const QString &qtdir, const QString &execpath,
|
void prepare(const QString &qtdir, const QString &projectdir, const QString &outdir);
|
||||||
const QString &projectdir, const QString &outdir);
|
|
||||||
|
|
||||||
void start(bool erase);
|
void start(bool erase);
|
||||||
|
|
||||||
|
@ -42,12 +42,10 @@ Page {
|
|||||||
text: qsTr("Next")
|
text: qsTr("Next")
|
||||||
Material.background: buttonColor
|
Material.background: buttonColor
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
enabled: qtdir.confirmed && execpath.confirmed
|
enabled: qtdir.confirmed && projectdir.confirmed && outdir.confirmed
|
||||||
&& projectdir.confirmed && outdir.confirmed
|
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
MainManager.prepare(qtdir.content, execpath.content,
|
MainManager.prepare(qtdir.content, projectdir.content, outdir.content)
|
||||||
projectdir.content, outdir.content)
|
|
||||||
|
|
||||||
prp.outdir = outdir.content
|
prp.outdir = outdir.content
|
||||||
swipeview.currentIndex = 1
|
swipeview.currentIndex = 1
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
#include "CPP/outputmanager.h"
|
#include "CPP/outputmanager.h"
|
||||||
#include "CPP/pluginmanager.h"
|
#include "CPP/pluginmanager.h"
|
||||||
#include "CPP/qmlmanager.h"
|
#include "CPP/qmlmanager.h"
|
||||||
|
#include "CPP/buildmanager.h"
|
||||||
|
|
||||||
|
|
||||||
bool loadTr(QGuiApplication &app){
|
bool loadTr(QGuiApplication &app){
|
||||||
QTranslator translator;
|
QTranslator translator;
|
||||||
@ -37,8 +39,10 @@ int main(int argc, char *argv[])
|
|||||||
QmlManager Q;
|
QmlManager Q;
|
||||||
PluginManager P;
|
PluginManager P;
|
||||||
OutputManager O;
|
OutputManager O;
|
||||||
|
BuildManager B;
|
||||||
|
|
||||||
MainManager M(&C, &Q, &O, &P);
|
|
||||||
|
MainManager M(&C, &Q, &O, &P, &B);
|
||||||
|
|
||||||
QQmlApplicationEngine engine;
|
QQmlApplicationEngine engine;
|
||||||
|
|
||||||
@ -48,6 +52,8 @@ int main(int argc, char *argv[])
|
|||||||
R->setContextProperty("PluginManager", &P);
|
R->setContextProperty("PluginManager", &P);
|
||||||
R->setContextProperty("MainManager", &M);
|
R->setContextProperty("MainManager", &M);
|
||||||
R->setContextProperty("OutputManager", &O);
|
R->setContextProperty("OutputManager", &O);
|
||||||
|
R->setContextProperty("BuildManager", &B);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
engine.load(QUrl(QLatin1String("qrc:/QML/main.qml")));
|
engine.load(QUrl(QLatin1String("qrc:/QML/main.qml")));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user