first version of install framework

This commit is contained in:
Andrei Yankovich 2018-06-18 02:43:52 +03:00
parent 145b217f4a
commit 0300e33efa
7 changed files with 216 additions and 16 deletions

View File

@ -5,6 +5,8 @@ QString BaseClass::m_qtdir = QString();
QString BaseClass::m_outputdir = QString();
QString BaseClass::m_projectdir = QString();
QString BaseClass::m_executablepath = QString();
QString BaseClass::m_binarycreator = QString();
QString BaseClass::projectName = QString();
QStringList BaseClass::findFilesInsideDir(const QString &name, const QString &dirpath)
{

View File

@ -17,8 +17,10 @@ class BaseClass : public QObject
protected:
static QString m_qtdir;
static QString m_outputdir;
static QString m_binarycreator;
static QString m_projectdir;
static QString m_executablepath;
static QString projectName;
QStringList findFilesInsideDir(const QString &name, const QString &dirpath);

View File

@ -12,7 +12,6 @@ private:
QString qmake;
QString tempBuildFolder;
QString tempLog;
QString projectName;
QProcess pQMake;
bool createFulder(QDir& dir, QString& path, const QString& name) const;

View File

@ -1,4 +1,6 @@
#include "outputmanager.h"
#include "utils.h"
#include <QDate>
void OutputManager::setPathsToCopy(const QStringList &pathsToCopy)
{
@ -30,8 +32,13 @@ bool OutputManager::copyDir(const QString &source, const QString &destin)
}
void OutputManager::copyCpp(const QStringList &libs)
{
auto libdir = m_outputdir + "/lib/data/lib/";
{
QString temp = "/lib";
if(isInstallFW()){
temp = "/packages/lib/data/lib";
}
auto libdir = m_outputdir + temp;
for (const QString &S : libs)
{
@ -56,6 +63,8 @@ void OutputManager::copyAll(const QStringList &qtlibs, const QStringList &libs,
dir.mkdir(QDir(m_outputdir).dirName());
}
checkInstallFrameWork();
createDirectories();
if (libs.count() != 0) copyCpp(libs);
@ -64,6 +73,7 @@ void OutputManager::copyAll(const QStringList &qtlibs, const QStringList &libs,
copyPlugins(plugins);
copyExec();
createRunFile();
createInstaller();
emit pathsToCopyChanged(m_pathsToCopy);
emit copySuccessChanged(m_copySuccess);
@ -71,7 +81,13 @@ void OutputManager::copyAll(const QStringList &qtlibs, const QStringList &libs,
void OutputManager::copyQml(const QStringList &dirs)
{
auto qmldir = m_outputdir + "/qml/data/qml/";
QString temp = "/qml";
if(isInstallFW()){
temp = "/packages/qml/data/qml";
}
auto qmldir = m_outputdir + temp;
for (const QString &S : dirs)
{
@ -81,10 +97,57 @@ void OutputManager::copyQml(const QStringList &dirs)
}
}
bool OutputManager::isInstallFW() const {
return !m_binarycreator.isEmpty();
}
void OutputManager::checkInstallFrameWork(){
QDir dir(m_qtdir);
if(!dir.cd("../../Tools/QtInstallerFramework")){
m_binarycreator = QString();
return;
}
QStringList list = dir.entryList();
int index_of_max = 0;
double maxVersion = 0;
for(int i = 0; i < list.size(); i++){
if(list.at(i).toDouble() > maxVersion){
index_of_max = i;
maxVersion = list.at(i).toDouble();
}
}
if(!maxVersion || !index_of_max){
m_binarycreator = QString();
return;
}
if(!dir.cd(list[index_of_max])){
m_binarycreator = QString();
return;
}
m_binarycreator = dir.absolutePath() + "/bin/binarycreator";
if(!QFile::exists(m_binarycreator)){
m_binarycreator = QString();
return;
}
}
void OutputManager::copyPlugins(const QStringList &plugins)
{
QString temp = "/plugins/";
if(isInstallFW()){
temp = "/packages/plugins/data/plugins/";
}
QString qtpath = m_qtdir + "/plugins/";
QString path = m_outputdir + "/plugins/data/plugins";
QString path = m_outputdir + temp;
for (const QString &plugin : plugins)
{
@ -95,7 +158,12 @@ void OutputManager::copyPlugins(const QStringList &plugins)
void OutputManager::copyExec()
{
auto path = m_outputdir + "/base/data/bin" + QFileInfo(m_executablepath).fileName();
QString temp = "/bin/";
if(isInstallFW()){
temp = "/packages/base/data/bin/";
}
auto path = m_outputdir + temp + QFileInfo(m_executablepath).fileName();
m_pathsToCopy << path;
m_copySuccess << copyFile(m_executablepath, path);
@ -103,6 +171,12 @@ void OutputManager::copyExec()
void OutputManager::createRunFile()
{
QString temp = "";
if(isInstallFW()){
temp = "/packages/base/data";
}
QString content =
"#!/bin/sh\n"
"export LD_LIBRARY_PATH=`pwd`/lib\n"
@ -114,7 +188,7 @@ void OutputManager::createRunFile()
content = content.arg(QFileInfo(m_executablepath).completeBaseName());
QString fname = m_outputdir + "/base/" + QDir::separator() +
QString fname = m_outputdir + temp + QDir::separator() +
QFileInfo(m_executablepath).completeBaseName() + ".sh";
QFile F(fname);
@ -129,19 +203,125 @@ void OutputManager::createRunFile()
QFileDevice::ReadUser);
}
bool OutputManager::createModule(const QString &from, const QString &to, const QStringList &params){
QFile tempFile;
tempFile.setFileName(from);
if(!tempFile.open(QIODevice::ReadOnly)){
return false;
}
QString text = tempFile.readAll();
tempFile.close();
for(QString i : params){
text = text.arg(i);
}
tempFile.setFileName(to);
if(!tempFile.open(QIODevice::ReadWrite) &&
QDir().mkpath(QFileInfo(to).absolutePath()) &&
!tempFile.open(QIODevice::ReadWrite)){
return false;
}
tempFile.write(text.toLatin1());
tempFile.close();
return true;
}
void OutputManager::createInstaller(){
createModule(":/install/InstallTemplate/config.xml",
m_outputdir + "/config/config.xml",
QStringList() << projectName <<
Utils::getVersion() <<
Utils::getPublicher() <<
"QtDeployer" <<
QDate::currentDate().toString("yyyy-MM-dd"));
createModule(":/install/InstallTemplate/controlScript.js",
m_outputdir + "/config/controlScript.js",
QStringList());
createModule(":/install/InstallTemplate/package.xml",
m_outputdir + "/packages/base/meta/package.xml",
QStringList() << "base" <<
"base data of " + projectName <<
Utils::getVersion() <<
QDate::currentDate().toString("yyyy-MM-dd"));
createModule(":/install/InstallTemplate/package.xml",
m_outputdir + "/packages/qml/meta/package.xml",
QStringList() << "qml" <<
"qml data of " + projectName <<
Utils::getVersion() <<
QDate::currentDate().toString("yyyy-MM-dd"));
createModule(":/install/InstallTemplate/package.xml",
m_outputdir + "/packages/lib/meta/package.xml",
QStringList() << "lib" <<
"lib data of " + projectName <<
Utils::getVersion() <<
QDate::currentDate().toString("yyyy-MM-dd"));
createModule(":/install/InstallTemplate/package.xml",
m_outputdir + "/packages/plugins/meta/package.xml",
QStringList() << "plugins" <<
"plugins data of " + projectName <<
Utils::getVersion() <<
QDate::currentDate().toString("yyyy-MM-dd"));
QProcess binaryCreator;
binaryCreator.setProgram(m_binarycreator);
/*
-c $$PWD/config/config.xml -p $$PWD/packages ${QMAKE_FILE_OUT}*/
binaryCreator.setArguments(QStringList() << "-c" <<
m_outputdir + "/config/config.xml" <<
"-p" <<
m_outputdir + "/packages" <<
m_outputdir + "/installer_" + projectName);
binaryCreator.start();
binaryCreator.waitForFinished(2 * 60 * 1000);
}
void OutputManager::createDirectories()
{
m_pathsToCopy << m_outputdir + "/bin/";
m_copySuccess << QDir(m_outputdir).mkdir("bin");
m_pathsToCopy << m_outputdir + "/qml/";
m_copySuccess << QDir(m_outputdir).mkdir("qml");
if(isInstallFW()){
m_pathsToCopy << m_outputdir + "/config";
m_copySuccess << QDir(m_outputdir).mkpath("config");
m_pathsToCopy << m_outputdir + "/lib/";
m_copySuccess << QDir(m_outputdir).mkdir("lib");
m_pathsToCopy << m_outputdir + "/packages/base/data/bin";
m_copySuccess << QDir(m_outputdir).mkpath("packages/base/data/bin");
m_pathsToCopy << m_outputdir + "/plugins/";
m_copySuccess << QDir(m_outputdir).mkdir("plugins");
m_pathsToCopy << m_outputdir + "/packages/qml/data/qml";
m_copySuccess << QDir(m_outputdir).mkpath("packages/qml/data/qml");
m_pathsToCopy << m_outputdir + "/packages/lib/data/lib/";
m_copySuccess << QDir(m_outputdir).mkpath("packages/lib/data/lib");
m_pathsToCopy << m_outputdir + "/packages/plugins/data/plugins";
m_copySuccess << QDir(m_outputdir).mkpath("packages/plugins/data/plugins");
} else {
m_pathsToCopy << m_outputdir + "/bin/";
m_copySuccess << QDir(m_outputdir).mkdir("bin");
m_pathsToCopy << m_outputdir + "/qml/";
m_copySuccess << QDir(m_outputdir).mkdir("qml");
m_pathsToCopy << m_outputdir + "/lib/";
m_copySuccess << QDir(m_outputdir).mkdir("lib");
m_pathsToCopy << m_outputdir + "/plugins/";
m_copySuccess << QDir(m_outputdir).mkdir("plugins");
}
}
bool OutputManager::copyFile(const QString &source, const QString &destin)

View File

@ -23,8 +23,14 @@ class OutputManager : public BaseClass
void copyQml(const QStringList &dirs);
void copyPlugins(const QStringList &plugins);
bool isInstallFW() const;
void checkInstallFrameWork();
void createDirectories();
void createRunFile();
void createInstaller();
bool createModule(const QString& from, const QString& to, const QStringList& params);
void copyExec();
public:

View File

@ -33,3 +33,13 @@ QString Utils::getVersion(){
return file.errorString();
}
/** @todo add get description method */
QString Utils::getDescription(){
return "";
}
/** @todo add get Publicher method */
QString Utils::getPublicher(){
return "QtDeployer";
}

View File

@ -8,7 +8,8 @@ private:
Utils() = delete;
public:
static QString getVersion();
static QString getDescription();
static QString getPublicher();
};
#endif // UTILS_H