mirror of
https://github.com/QuasarApp/QtDeployer.git
synced 2025-04-26 13:34:32 +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
|
||||
|
||||
\.buildconfig
|
||||
|
||||
b/
|
||||
Build*/
|
||||
|
||||
*.stash
|
||||
|
@ -1,16 +1,31 @@
|
||||
#include "buildmanager.h"
|
||||
#include <QProcess>
|
||||
#include <QThread>
|
||||
|
||||
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() {
|
||||
|
||||
QDir dir(m_qtdir);
|
||||
|
||||
if(!dir.exists("/bin/qmake")){
|
||||
if(!dir.exists("bin/qmake")){
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -19,22 +34,52 @@ bool BuildManager::initQMake() {
|
||||
|
||||
}
|
||||
|
||||
const QString& BuildManager::log() const{
|
||||
return tempLog;
|
||||
}
|
||||
|
||||
bool BuildManager::initFolderName() {
|
||||
QDir dir(m_projectdir);
|
||||
if(!dir.cd("..")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QFileInfoList filesList = dir.entryInfoList(".pro");
|
||||
QStringList filesList = findFilesInsideDir("*.pro", m_projectdir);
|
||||
|
||||
if(filesList.size() < 1){
|
||||
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;
|
||||
if(!dir.exists(tempBuildFolder) && !dir.mkdir(tempBuildFolder)){
|
||||
if(dir.exists(tempBuildFolder) && !QDir(tempBuildFolder).removeRecursively()){
|
||||
|
||||
tempBuildFolder.clear();
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!dir.mkdir(tempBuildFolder)){
|
||||
tempBuildFolder.clear();
|
||||
return false;
|
||||
}
|
||||
@ -43,16 +88,25 @@ bool BuildManager::initFolderName() {
|
||||
}
|
||||
|
||||
bool BuildManager::build(){
|
||||
if(initQMake() && initFolderName()){
|
||||
if(!initQMake() || !initFolderName()){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
QProcess pQMake;
|
||||
|
||||
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
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QString log READ log NOTIFY logChanged)
|
||||
|
||||
private:
|
||||
QString qmake;
|
||||
QString tempBuildFolder;
|
||||
QString tempLog;
|
||||
QString projectName;
|
||||
QProcess pQMake;
|
||||
|
||||
bool initFolderName();
|
||||
bool initQMake();
|
||||
|
||||
private slots:
|
||||
void buildLog();
|
||||
void buildFinihed(int error);
|
||||
|
||||
public:
|
||||
explicit BuildManager(QObject *parent = nullptr);
|
||||
bool build();
|
||||
|
||||
signals:
|
||||
void logChanged();
|
||||
void finished();
|
||||
|
||||
public slots:
|
||||
const QString& log() const;
|
||||
};
|
||||
|
||||
#endif // BUILDMANAGER_H
|
||||
|
@ -10,7 +10,7 @@ QStringList MainManager::getAllExecutables()
|
||||
}
|
||||
|
||||
MainManager::MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
||||
PluginManager *plg, QObject *parent)
|
||||
PluginManager *plg, BuildManager* bld, QObject *parent)
|
||||
: BaseClass(parent)
|
||||
{
|
||||
setState(0);
|
||||
@ -19,26 +19,31 @@ MainManager::MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
||||
m_qml = qml;
|
||||
m_out = out;
|
||||
m_plg = plg;
|
||||
m_bld = bld;
|
||||
|
||||
connect(m_bld, &BuildManager::finished, this, &MainManager::buildFinished);
|
||||
|
||||
}
|
||||
|
||||
void MainManager::prepare(const QString &qtdir, const QString &execpath,
|
||||
const QString &projectdir, const QString &outdir)
|
||||
void MainManager::buildFinished(){
|
||||
m_qml->start();
|
||||
m_plg->start();
|
||||
m_cpp->start(getAllExecutables());
|
||||
}
|
||||
|
||||
void MainManager::prepare(const QString &qtdir, const QString &projectdir, const QString &outdir)
|
||||
{
|
||||
QStringList list;
|
||||
list << qtdir << execpath << projectdir << outdir;
|
||||
list << qtdir << projectdir << outdir;
|
||||
|
||||
for (QString &S : list)
|
||||
if (S[S.count() - 1] == '/') S.remove(S.count() - 1, 1);
|
||||
|
||||
m_qtdir = list[0];
|
||||
m_executablepath = list[1];
|
||||
m_projectdir = list[2];
|
||||
m_outputdir = list[3];
|
||||
m_projectdir = list[1];
|
||||
m_outputdir = list[2];
|
||||
|
||||
m_qml->start();
|
||||
m_plg->start();
|
||||
m_cpp->start(getAllExecutables());
|
||||
m_bld->build();
|
||||
}
|
||||
|
||||
void MainManager::start(bool erase)
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "outputmanager.h"
|
||||
#include "pluginmanager.h"
|
||||
#include "qmlmanager.h"
|
||||
#include "buildmanager.h"
|
||||
|
||||
class MainManager : public BaseClass
|
||||
{
|
||||
@ -17,20 +18,24 @@ class MainManager : public BaseClass
|
||||
QmlManager *m_qml;
|
||||
PluginManager *m_plg;
|
||||
OutputManager *m_out;
|
||||
BuildManager *m_bld;
|
||||
|
||||
|
||||
int m_state;
|
||||
|
||||
QStringList getAllExecutables();
|
||||
|
||||
private slots:
|
||||
void buildFinished();
|
||||
|
||||
public:
|
||||
explicit MainManager(CppManager *cpp, QmlManager *qml, OutputManager *out,
|
||||
PluginManager *plg, QObject *parent = nullptr);
|
||||
PluginManager *plg, BuildManager* bld, QObject *parent = nullptr);
|
||||
|
||||
int state() const;
|
||||
|
||||
public slots:
|
||||
void prepare(const QString &qtdir, const QString &execpath,
|
||||
const QString &projectdir, const QString &outdir);
|
||||
void prepare(const QString &qtdir, const QString &projectdir, const QString &outdir);
|
||||
|
||||
void start(bool erase);
|
||||
|
||||
|
@ -42,12 +42,10 @@ Page {
|
||||
text: qsTr("Next")
|
||||
Material.background: buttonColor
|
||||
Layout.alignment: Qt.AlignRight
|
||||
enabled: qtdir.confirmed && execpath.confirmed
|
||||
&& projectdir.confirmed && outdir.confirmed
|
||||
enabled: qtdir.confirmed && projectdir.confirmed && outdir.confirmed
|
||||
|
||||
onClicked: {
|
||||
MainManager.prepare(qtdir.content, execpath.content,
|
||||
projectdir.content, outdir.content)
|
||||
MainManager.prepare(qtdir.content, projectdir.content, outdir.content)
|
||||
|
||||
prp.outdir = outdir.content
|
||||
swipeview.currentIndex = 1
|
||||
|
@ -9,6 +9,8 @@
|
||||
#include "CPP/outputmanager.h"
|
||||
#include "CPP/pluginmanager.h"
|
||||
#include "CPP/qmlmanager.h"
|
||||
#include "CPP/buildmanager.h"
|
||||
|
||||
|
||||
bool loadTr(QGuiApplication &app){
|
||||
QTranslator translator;
|
||||
@ -37,8 +39,10 @@ int main(int argc, char *argv[])
|
||||
QmlManager Q;
|
||||
PluginManager P;
|
||||
OutputManager O;
|
||||
BuildManager B;
|
||||
|
||||
MainManager M(&C, &Q, &O, &P);
|
||||
|
||||
MainManager M(&C, &Q, &O, &P, &B);
|
||||
|
||||
QQmlApplicationEngine engine;
|
||||
|
||||
@ -48,6 +52,8 @@ int main(int argc, char *argv[])
|
||||
R->setContextProperty("PluginManager", &P);
|
||||
R->setContextProperty("MainManager", &M);
|
||||
R->setContextProperty("OutputManager", &O);
|
||||
R->setContextProperty("BuildManager", &B);
|
||||
|
||||
|
||||
|
||||
engine.load(QUrl(QLatin1String("qrc:/QML/main.qml")));
|
||||
|
Loading…
x
Reference in New Issue
Block a user