QtDeployer/source/CPP/buildmanager.cpp

143 lines
3.2 KiB
C++
Raw Normal View History

2018-05-24 07:48:41 +03:00
#include "buildmanager.h"
#include <QProcess>
2018-05-26 16:48:58 +03:00
#include <QThread>
2018-05-24 07:48:41 +03:00
BuildManager::BuildManager(QObject *parent) : BaseClass(parent)
{
2018-05-26 16:48:58 +03:00
connect(&pQMake, &QProcess::readyRead, this, &BuildManager::buildLog);
connect(&pQMake, SIGNAL(finished(int)), this, SLOT(buildFinihed(int)));
2018-05-24 07:48:41 +03:00
}
2018-05-26 16:48:58 +03:00
void BuildManager::buildLog(){
tempLog = pQMake.readAll();
2018-06-02 15:55:53 +03:00
emit logChanged(tempLog);
2018-05-26 16:48:58 +03:00
}
void BuildManager::buildFinihed(int error) {
if(pQMake.program() == "make" && !error){
m_executablepath = tempBuildFolder + "/" + projectName;
emit finished();
}
}
2018-05-24 07:48:41 +03:00
bool BuildManager::initQMake() {
QDir dir(m_qtdir);
2018-05-26 16:48:58 +03:00
if(!dir.exists("bin/qmake")){
2018-05-24 07:48:41 +03:00
return false;
}
qmake = m_qtdir + "/bin/qmake";
return true;
}
2018-05-26 16:48:58 +03:00
const QString& BuildManager::log() const{
return tempLog;
}
2018-05-30 07:37:19 +03:00
bool BuildManager::createFulder(QDir& dir, QString &path, const QString &name) const{
path = dir.absolutePath() + "/" + name;
if(dir.exists(path) && !QDir(path).removeRecursively()){
path.clear();
return false;
}
if(!dir.mkdir(path)){
path.clear();
return false;
}
return true;
}
bool BuildManager::initFolders() {
2018-05-24 07:48:41 +03:00
QDir dir(m_projectdir);
if(!dir.cd("..")) {
return false;
}
2018-05-26 16:48:58 +03:00
QStringList filesList = findFilesInsideDir("*.pro", m_projectdir);
2018-05-24 07:48:41 +03:00
if(filesList.size() < 1){
return false;
}
2018-05-26 16:48:58 +03:00
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);
2018-05-24 07:48:41 +03:00
2018-05-30 07:37:19 +03:00
if(!createFulder(dir, tempBuildFolder, "Build-" + projectName)){
2018-05-26 16:48:58 +03:00
return false;
}
2018-05-30 07:37:19 +03:00
if(!createFulder(dir, m_outputdir, "Release-" + projectName)){
2018-05-24 07:48:41 +03:00
return false;
}
return true;
}
bool BuildManager::build(){
2018-06-08 18:18:40 +03:00
if(!initQMake()){
emit logChanged(tr("init QMake error!"));
return false;
}
if(!initFolders()){
emit logChanged(tr("init Folders error!"));
2018-05-24 07:48:41 +03:00
return false;
}
2018-05-26 16:48:58 +03:00
pQMake.setProgram(qmake);
pQMake.setWorkingDirectory(tempBuildFolder);
pQMake.setArguments(QStringList() << m_projectdir);
2018-05-24 07:48:41 +03:00
2018-06-10 14:44:36 +03:00
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("LD_LIBRARY_PATH", m_qtdir + "/lib");
env.insert("QML_IMPORT_PATH", m_qtdir + "/qml");
env.insert("QML2_IMPORT_PATH", m_qtdir + "/qml");
env.insert("QT_PLUGIN_PATH", m_qtdir + "/plugins");
env.insert("QT_QPA_PLATFORM_PLUGIN_PATH", m_qtdir + "/plugins/platforms");
2018-05-24 07:48:41 +03:00
2018-06-10 14:44:36 +03:00
pQMake.setProcessEnvironment(env);
pQMake.start();
2018-06-08 18:18:40 +03:00
2018-05-26 16:48:58 +03:00
if(!pQMake.waitForFinished()){
2018-06-10 14:44:36 +03:00
emit logChanged(tr("run qmake error!"));
2018-05-26 16:48:58 +03:00
return false;
}
pQMake.setProgram("make");
2018-06-08 18:18:40 +03:00
2018-05-26 16:48:58 +03:00
pQMake.setArguments(QStringList() << QString("-j%0").arg(QThread::idealThreadCount()));
pQMake.start();
2018-05-24 07:48:41 +03:00
2018-05-26 16:48:58 +03:00
return true;
2018-05-24 07:48:41 +03:00
}