Merge pull request #390 from QuasarApp/task-326

Deploy platforms
This commit is contained in:
Andrei Yankovich 2020-07-09 14:57:51 +03:00 committed by GitHub
commit eaf94eb69f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 3521 additions and 4532 deletions

View File

@ -15,6 +15,7 @@
#include "filemanager.h"
#include "packing.h"
#include "pathutils.h"
#include "pluginsparser.h"
#include "quasarapp.h"
#include <cassert>
@ -32,27 +33,27 @@
static QString defaultPackage = "";
template<typename Container, typename Setter>
template<typename Container, typename Adder>
bool parsePackagesPrivate(Container& mainContainer,
const QStringList &inputParamsList,
Setter setter) {
Adder adder) {
for (const auto& str: inputParamsList) {
auto pair = str.split(DeployCore::getSeparator(1));
auto first = pair.value(0, "");
auto second = pair.value(1, "");
if (pair.size() == 1)
(mainContainer[defaultPackage].*setter)(first);
auto paramsList = str.split(DeployCore::getSeparator(1));
auto first = paramsList.value(0, "");
auto second = paramsList.value(1, "");
if (paramsList.size() == 1)
(mainContainer[defaultPackage].*adder)(first);
else {
first = PathUtils::fullStripPath(first);
if (!mainContainer.contains(first)) {
return false;
}
(mainContainer[first].*setter)(second);
for (int i = 1; i < paramsList.size(); ++i) {
(mainContainer[first].*adder)(paramsList[i]);
}
}
}
return true;
@ -535,12 +536,11 @@ bool ConfigParser::parseDeployMode() {
auto listNamesMasks = QuasarAppUtils::Params::getStrArg("extraLibs").
split(DeployCore::getSeparator(0));
auto listExtraPlugin = QuasarAppUtils::Params::getStrArg("extraPlugin").
split(DeployCore::getSeparator(0));
setExtraPath(listLibDir);
setExtraNames(listNamesMasks);
setExtraPlugins(listExtraPlugin);
initPlugins();
if (!initQmake()) {
return false;
@ -1110,11 +1110,46 @@ void ConfigParser::setExtraNames(const QStringList &value) {
}
}
void ConfigParser::setExtraPlugins(const QStringList &value) {
for (const auto &i : value) {
if (!i.isEmpty())
_config.extraPlugins.append(i);
bool ConfigParser::initPlugins() {
auto listExtraPlugin = QuasarAppUtils::Params::getStrArg("extraPlugin").
split(DeployCore::getSeparator(0), QString::SkipEmptyParts);
auto listEnablePlugins = QuasarAppUtils::Params::getStrArg("enablePlugins").
split(DeployCore::getSeparator(0), QString::SkipEmptyParts);
auto listDisablePlugins = QuasarAppUtils::Params::getStrArg("disablePlugins").
split(DeployCore::getSeparator(0), QString::SkipEmptyParts);
auto erroLog = [](const QString &flag){
QuasarAppUtils::Params::log(QString("Set %0 fail, because you try set %0 for not inited package."
" Use 'targetPackage' flag for init the packages").arg(flag),
QuasarAppUtils::Error);
};
if (listExtraPlugin.size() && !parsePackagesPrivate(_config.packagesEdit(),
listExtraPlugin,
&DistroModule::addExtraPlugins)) {
erroLog("extra plugins");
return false;
}
if (listEnablePlugins.size() && !parsePackagesPrivate(_config.packagesEdit(),
listEnablePlugins,
&DistroModule::addEnabledPlugins)) {
erroLog("enable plugins");
return false;
}
if (listDisablePlugins.size() && !parsePackagesPrivate(_config.packagesEdit(),
listDisablePlugins,
&DistroModule::addDisabledPlugins)) {
erroLog("disable plugins");
return false;
}
return true;
}
QString ConfigParser::findWindowsPath(const QString& path) const {
@ -1222,12 +1257,14 @@ bool ConfigParser::smartMoveTargets() {
return result;
}
ConfigParser::ConfigParser(FileManager *filemanager, DependenciesScanner* scaner, Packing *pac):
ConfigParser::ConfigParser(FileManager *filemanager, PluginsParser *pluginsParser, DependenciesScanner* scaner, Packing *pac):
_fileManager(filemanager),
_pluginsParser(pluginsParser),
_scaner(scaner),
_packing(pac) {
assert(_fileManager);
assert(_pluginsParser);
assert(_scaner);
assert(_packing);

View File

@ -25,13 +25,23 @@ class FileManager;
class DependenciesScanner;
class Packing;
class iDistribution;
class PluginsParser;
class DEPLOYSHARED_EXPORT ConfigParser
{
public:
ConfigParser(FileManager *filemanager, PluginsParser* pluginsParser, DependenciesScanner *scaner, Packing* pac);
bool parseParams();
bool smartMoveTargets();
const DeployConfig* config() const;
friend class deploytest;
private:
DeployConfig _config;
FileManager *_fileManager;
PluginsParser *_pluginsParser;
DependenciesScanner *_scaner;
Packing * _packing;
@ -68,7 +78,7 @@ private:
void setExtraPath(const QStringList &value);
void setExtraNames(const QStringList &value);
void setExtraPlugins(const QStringList &value);
bool initPlugins();
void initEnvirement();
@ -91,14 +101,6 @@ private:
iDistribution* getDistribution();
bool isNeededQt() const;
public:
ConfigParser(FileManager *filemanager, DependenciesScanner *scaner, Packing* pac);
bool parseParams();
bool smartMoveTargets();
const DeployConfig* config() const;
friend class deploytest;
};
#endif // CQT_H

View File

@ -47,20 +47,30 @@ QMultiMap<LibPriority, LibInfo> DependenciesScanner::getLibsFromEnvirement(
for (const auto & lib : values) {
LibInfo info;
if (_scanedLibs.contains(lib)) {
info = _scanedLibs.value(lib);
if ((info.priority >= SystemLib) && !QuasarAppUtils::Params::isEndable("deploySystem")) {
continue;
}
} else {
auto priority = (DeployCore::getLibPriority(lib));
if ((priority >= SystemLib) && !QuasarAppUtils::Params::isEndable("deploySystem")) {
continue;
}
info.setPriority(priority);
if (!fillLibInfo(info, lib)) {
QuasarAppUtils::Params::log(
"error extract lib info from " + lib + "(" + libName + ")",
QuasarAppUtils::VerboseLvl::Warning);
continue;
}
info.setPriority(priority);
}
if (!DeployCore::_config->ignoreList.isIgnore(info)) {
res.insertMulti(info.getPriority(), info);

View File

@ -10,13 +10,16 @@
#include "extracter.h"
#include "filemanager.h"
#include "packing.h"
#include "pluginsparser.h"
#include <quasarapp.h>
Deploy::Deploy() {
_fileManager = new FileManager();
_scaner = new DependenciesScanner();
_packing = new Packing();
_paramsParser = new ConfigParser(_fileManager, _scaner, _packing);
_pluginParser = new PluginsParser();
_paramsParser = new ConfigParser(_fileManager, _pluginParser, _scaner, _packing);
}
@ -63,6 +66,10 @@ Deploy::~Deploy() {
delete _packing;
}
if (_pluginParser) {
delete _pluginParser;
}
DeployCore::_config = nullptr;
}
@ -73,7 +80,7 @@ bool Deploy::prepare() {
return false;
}
_extracter = new Extracter(_fileManager, _paramsParser, _scaner);
_extracter = new Extracter(_fileManager, _pluginParser, _paramsParser, _scaner);
return true;
}

View File

@ -15,6 +15,7 @@ class ConfigParser;
class Extracter;
class FileManager;
class DependenciesScanner;
class PluginsParser;
class Packing;
enum exitCodes {
@ -34,6 +35,8 @@ private:
Extracter *_extracter = nullptr;
FileManager *_fileManager = nullptr;
DependenciesScanner *_scaner = nullptr;
PluginsParser *_pluginParser = nullptr;
Packing *_packing = nullptr;
bool prepare();

View File

@ -1,4 +1,5 @@
#include "deployconfig.h"
#include "quasarapp.h"
void DeployConfig::reset() {
*this = DeployConfig{};
@ -55,6 +56,29 @@ QHash<QString, DistroModule> &DeployConfig::packagesEdit() {
return _packages;
}
Platform DeployConfig::getPlatform(const QString& package) const {
Platform result = Platform::UnknownPlatform;
if (_packages.contains(package)) {
auto disto = getDistroFromPackage(package);
for( auto it = disto.targets().cbegin(); it != disto.targets().cend(); ++it) {
result = result | _targets.value(*it).getPlatform();
}
return result;
}
for( auto it = _targets.cbegin(); it != _targets.cend(); ++it) {
result = result | it.value().getPlatform();
}
return result;
}
const QHash<QString, TargetInfo> &DeployConfig::targets() const {
return _targets;
}

View File

@ -26,11 +26,6 @@ public:
*/
IgnoreRule ignoreList;
/**
* @brief extraPlugins - list with pathes of extra plugins or plugins names
*/
QStringList extraPlugins;
/**
* @brief appDir - it is cqtdeployer library location for ignre cqtdeployr libraries
*/
@ -91,6 +86,8 @@ public:
QHash<QString, TargetInfo>& targetsEdit();
QHash<QString, DistroModule>& packagesEdit();
Platform getPlatform(const QString& package) const;
private:
/**

View File

@ -9,6 +9,7 @@
#include "deploycore.h"
#include "quasarapp.h"
#include "pathutils.h"
#include "pluginsparser.h"
#include <QDebug>
#include <QDir>
@ -190,7 +191,8 @@ void DeployCore::help() {
{"qif", "Create the QIF installer for deployement programm"},
{"qifFromSystem", "force use system binarycreator tool of qif from path or qt"},
{"deploySystem", "Deploys all libraries (do not work in snap )"},
{"deploySystem-with-libc", "deploy all libs libs (only linux) (do not work in snap )"},
{"deploySystem-with-libc", "deploy all libs (only linux) (do not work in snap )"},
{"allPlatforms", "deploy all platforms plugins (big size)."},
}
},
@ -211,7 +213,6 @@ void DeployCore::help() {
" Example: '-extraLibs mySql' - forces to copy all libraries whose names contain mySql to the project folder."
" This option is case sensitive."},
{"-customScript [scriptCode]", "Insert extra code inTo All run script."},
{"-extraPlugin [list,params]", "Sets an additional path to extraPlugin of an app"},
{"-recursiveDepth [params]", "Sets the Depth of recursive search of libs and depth for ignoreEnv option (default 0)"},
{"-targetDir [params]", "Sets target directory(by default it is the path to the first deployable file)"},
{"-verbose [0-3]", "Shows debug log"},
@ -233,12 +234,23 @@ void DeployCore::help() {
{"-releaseDate [package;val,val]", "Sets release date for package"},
{"-icon [package;val,val]", "Sets path to icon for package"},
{"-publisher [package;val,val]", "Sets publisher for package"},
}
},
{
"Part 4 QtInstallFramework options", {
"Part 4 Plugins Control Options", {
{"-extraPlugin [package;val1;val2,SingeleVal]", "Sets an additional path to third-party application plug-in"},
{"-enablePlugins [package;val1;val2,SingeleVal", "Enables additional plugins for distribution."
" By default disabled next plugins: " + PluginsParser::defaultForbidenPlugins().join(',') + " if you want enable"
" it then use '-enablePlugins " + PluginsParser::defaultForbidenPlugins().join(',') + "' option"},
{"-disablePlugins [package;val1;val2,SingeleVal]", "Disables plugins for distribution. "
"You can disable any plugin of your Qt build, just see the yourQtFolder/plugins forlder for available plugins."
" Example if you want disable qxcb plugin: -disablePlugins qxcb. Note that the name of the plugin is indicated without its extension"},
}
},
{
"Part 5 QtInstallFramework options", {
{"-qifStyle [path/to/style.css]", "Sets the path to the CSS style file or sets the default style. Available styles: quasar "},
{"-qifBanner [path/to/banner.png]", "Sets path to the banner png file."},
{"-qifLogo [path/to/logo.png]", "Sets path to the logo png file."},
@ -300,6 +312,7 @@ QStringList DeployCore::helpKeys() {
"qifStyle",
"qifBanner",
"qifLogo",
"allPlatforms"
};
}

View File

@ -32,14 +32,28 @@ struct DEPLOYSHARED_EXPORT QtModuleEntry {
enum Platform {
UnknownPlatform = 0x00,
Win32 = 0x01,
Win64 = 0x02,
UnknownPlatform = 0x0000,
// Windows
Win32 = 0x0001,
Win64 = 0x0002,
Win = Win32 | Win64,
Unix32 = 0x04,
Unix64 = 0x08,
Unix = Unix32 | Unix64,
GeneralFile = 0x10
// Unix
Unix_x86_32 = 0x0004,
Unix_x86_64 = 0x0008,
Unix_x86 = Unix_x86_32 | Unix_x86_64,
Unix_ARM_32 = 0x0010,
Unix_ARM_64 = 0x0020,
Unix_ARM = Unix_x86_32 | Unix_x86_64,
Unix = Unix_x86 | Unix_ARM,
// Other
// Web
WebGl = 0x0040,
WebRemote = 0x0080,
GeneralFile = 0x0100
};
enum LibPriority : int {

View File

@ -87,3 +87,46 @@ void DistroModule::setPublisher(const QString &publisher)
{
_publisher = publisher;
}
QSet<QString> DistroModule::enabledPlugins() const
{
return _enabled;
}
void DistroModule::setEnabledPlugins(const QSet<QString> &enabled)
{
_enabled = enabled;
}
void DistroModule::addEnabledPlugins(const QString &enabled) {
_enabled += enabled;
}
QSet<QString> DistroModule::disabledPlugins() const
{
return _disabled;
}
void DistroModule::setDisabledPlugins(const QSet<QString> &disabled)
{
_disabled = disabled;
}
void DistroModule::addDisabledPlugins(const QString &disabled) {
_disabled += disabled;
}
QSet<QString> DistroModule::extraPlugins() const
{
return _extraPlugins;
}
void DistroModule::setExtraPlugins(const QSet<QString> &extraPlugins)
{
_extraPlugins = extraPlugins;
}
void DistroModule::addExtraPlugins(const QString &extraPlugin) {
_extraPlugins += extraPlugin;
}

View File

@ -36,6 +36,18 @@ public:
QString publisher() const;
void setPublisher(const QString &publisher);
QSet<QString> enabledPlugins() const;
void setEnabledPlugins(const QSet<QString> &enabled);
void addEnabledPlugins(const QString &enabled);
QSet<QString> disabledPlugins() const;
void setDisabledPlugins(const QSet<QString> &disabled);
void addDisabledPlugins(const QString &disabled);
QSet<QString> extraPlugins() const;
void setExtraPlugins(const QSet<QString> &extraPlugins);
void addExtraPlugins(const QString &extraPlugin);
private:
QString _name;
QString _description;
@ -46,6 +58,11 @@ private:
QSet<QString> _targets;
QSet<QString> _qmlInput;
// plugins
QSet<QString> _enabled;
QSet<QString> _disabled;
QSet<QString> _extraPlugins;
};
#endif // DISTROMODULE_H

View File

@ -55,10 +55,12 @@ bool ELF::getLibInfo(const QString &lib, LibInfo &info) const {
auto headers = reader.readHeaders();
if (headers.elfclass == ElfClass::Elf_ELFCLASS32) {
info.setPlatform(Unix32);
} else if (headers.elfclass == ElfClass::Elf_ELFCLASS64) {
info.setPlatform(Unix64);
if (headers.elfmachine == ElfMachine::Elf_EM_386) {
info.setPlatform(Unix_x86_32);
} else if (headers.elfmachine == ElfMachine::Elf_EM_X86_64) {
info.setPlatform(Unix_x86_64);
} else if (headers.elfmachine == ElfMachine::Elf_EM_ARM) {
info.setPlatform(Unix_ARM_32);
} else {
info.setPlatform(UnknownPlatform);
return false;

View File

@ -76,66 +76,6 @@ bool Extracter::extractWebEngine() {
return true;
}
bool Extracter::copyPlugin(const QString &plugin, const QString& package) {
QStringList listItems;
auto cnf = DeployCore::_config;
auto targetPath = cnf->getTargetDir() + "/" + package;
auto distro = cnf->getDistroFromPackage(package);
auto pluginPath = targetPath + distro.getPluginsOutDir() +
QFileInfo(plugin).fileName();
if (!_fileManager->copyFolder(plugin, pluginPath,
QStringList() << ".so.debug" << "d.dll" << ".pdb", &listItems)) {
return false;
}
for (const auto &item : listItems) {
extractPluginLib(item, package);
}
return true;
}
void Extracter::copyExtraPlugins(const QString& package) {
QFileInfo info;
auto cnf = DeployCore::_config;
auto targetPath = cnf->getTargetDir() + "/" + package;
auto distro = cnf->getDistroFromPackage(package);
for (auto extraPlugin : cnf->extraPlugins) {
if (!PathUtils::isPath(extraPlugin)) {
extraPlugin = cnf->qtDir.getPlugins() + "/" + extraPlugin;
}
info.setFile(extraPlugin);
if (info.isDir() && cnf->qtDir.isQt(info.absoluteFilePath())) {
copyPlugin(info.absoluteFilePath(), package);
} else if (info.exists()) {
_fileManager->copyFile(info.absoluteFilePath(),
targetPath + distro.getPluginsOutDir());
extractPluginLib(info.absoluteFilePath(), package);
}
}
}
void Extracter::copyPlugins(const QStringList &list, const QString& package) {
for (const auto &plugin : list) {
if (!copyPlugin(plugin, package)) {
QuasarAppUtils::Params::log("not copied!",
QuasarAppUtils::Warning);
}
}
copyExtraPlugins(package);
}
void Extracter::extractAllTargets() {
auto cfg = DeployCore::_config;
for (auto i = cfg->packages().cbegin(); i != cfg->packages().cend(); ++i) {
@ -157,17 +97,74 @@ void Extracter::clear() {
}
}
void Extracter::copyExtraPlugins(const QString& package) {
QFileInfo info;
auto cnf = DeployCore::_config;
auto targetPath = cnf->getTargetDir() + "/" + package;
auto distro = cnf->getDistroFromPackage(package);
for (auto extraPlugin : distro.extraPlugins()) {
info.setFile(extraPlugin);
if (info.isFile()) {
if (!_fileManager->copyFile(info.absoluteFilePath(),
targetPath + distro.getPluginsOutDir())) {
QuasarAppUtils::Params::log("fail to copy extra plugin from:" + info.absoluteFilePath() +
" to: " + targetPath + distro.getPluginsOutDir(),
QuasarAppUtils::Warning);
}
extractPluginLib(info.absoluteFilePath(), package);
continue;
}
if (info.isDir()) {
QStringList plugins;
if (!_fileManager->copyFolder(info.absoluteFilePath(),
targetPath + distro.getPluginsOutDir() + info.fileName()
, {}, &plugins)) {
QuasarAppUtils::Params::log("fail to copy extra plugin from:" + info.absoluteFilePath() +
" to: " + targetPath + distro.getPluginsOutDir(),
QuasarAppUtils::Warning);
}
for (const auto& plugin : plugins) {
extractPluginLib(plugin, package);
}
}
}
}
void Extracter::extractPlugins() {
auto cnf = DeployCore::_config;
PluginsParser pluginsParser;
_pluginsParser->initDeployPluginsList();
for (auto i = cnf->packages().cbegin(); i != cnf->packages().cend(); ++i) {
auto targetPath = cnf->getTargetDir() + "/" + i.key();
auto distro = cnf->getDistroFromPackage(i.key());
QStringList plugins;
pluginsParser.scan(cnf->qtDir.getPlugins(), plugins, _packageDependencyes[i.key()].qtModules());
copyPlugins(plugins, i.key());
QStringList listItems;
_pluginsParser->scan(cnf->qtDir.getPlugins(), plugins, _packageDependencyes[i.key()].qtModules(), i.key());
_fileManager->copyFiles(plugins, targetPath + distro.getPluginsOutDir(), 1,
QStringList() << ".so.debug" << "d.dll" << ".pdb", &listItems);
for (const auto &item : listItems) {
extractPluginLib(item, i.key());
}
copyExtraPlugins(i.key());
}
}
void Extracter::copyLibs(const QSet<QString> &files, const QString& package) {
@ -240,7 +237,7 @@ void Extracter::deploy() {
}
if (!deployMSVC()) {
QuasarAppUtils::Params::log("deploy msvc failed");
QuasarAppUtils::Params::log("deploy msvc failed", QuasarAppUtils::Warning);
}
_metaFileManager->createRunMetaFiles();
@ -460,15 +457,17 @@ void Extracter::extract(const QString &file,
}
Extracter::Extracter(FileManager *fileManager, ConfigParser *cqt,
Extracter::Extracter(FileManager *fileManager, PluginsParser *pluginsParser, ConfigParser *cqt,
DependenciesScanner *scaner):
_scaner(scaner),
_fileManager(fileManager),
_pluginsParser(pluginsParser),
_cqt(cqt)
{
assert(_cqt);
assert(_fileManager);
assert(_pluginsParser);
assert(DeployCore::_config);
_metaFileManager = new MetaFileManager(_fileManager);

View File

@ -18,14 +18,22 @@
class ConfigParser;
class MetaFileManager;
class PluginsParser;
class DEPLOYSHARED_EXPORT Extracter {
public:
explicit Extracter(FileManager *fileManager, PluginsParser* pluginsParser, ConfigParser * cqt, DependenciesScanner *_scaner);
void deploy();
void clear();
private:
QHash<QString, DependencyMap> _packageDependencyes;
DependenciesScanner *_scaner;
FileManager *_fileManager;
PluginsParser* _pluginsParser;
ConfigParser *_cqt;
MetaFileManager *_metaFileManager;
@ -46,31 +54,22 @@ class DEPLOYSHARED_EXPORT Extracter {
bool deployMSVC();
bool extractWebEngine();
bool copyPlugin(const QString &plugin, const QString &package);
void copyPlugins(const QStringList &list, const QString &package);
/**
* @brief compress - this function join all target dependecies in to one struct
*/
void compress();
void extractAllTargets();
void extractPlugins();
void copyFiles();
void copyTr();
void copyExtraPlugins(const QString &package);
void copyLibs(const QSet<QString> &files, const QString &package);
bool isWebEngine(const QString& package) const;
void extractPluginLib(const QString &item, const QString &package);
public:
explicit Extracter(FileManager *fileManager, ConfigParser * cqt, DependenciesScanner *_scaner);
void deploy();
void clear();
friend class deploytest;
void copyExtraPlugins(const QString &package);
};
#endif // EXTRACTER_H_H

View File

@ -422,6 +422,81 @@ bool FileManager::copyFile(const QString &file, const QString &target,
return fileActionPrivate(file, target, masks, false, targetIsFile);
}
QString FileManager::changeDistanation(const QString& absalutePath,
QString basePath,
int depch) {
auto prefixes = absalutePath.split(QRegExp("[\\/]"), QString::SkipEmptyParts);
depch = std::min(depch, prefixes.size());
while (depch) {
auto index = prefixes.size() - depch;
if (index >= 0) {
basePath += "/" + prefixes[index];
}
depch--;
}
return basePath;
}
bool FileManager::copyFiles(const QStringList &source,
const QString &to, int saveStructSize,
const QStringList &filter,
QStringList *listOfCopiedItems,
QStringList *mask) {
for (const auto &item : source) {
QFileInfo info(item);
QString skipFilter = "";
for (const auto &i: filter) {
if (info.fileName().contains(i, ONLY_WIN_CASE_INSENSIATIVE)) {
skipFilter = i;
break;
}
}
if (!skipFilter.isEmpty()) {
QuasarAppUtils::Params::log(
info.absoluteFilePath() + " ignored by filter " + skipFilter,
QuasarAppUtils::VerboseLvl::Info);
continue;
}
auto config = DeployCore::_config;
LibInfo libInfo;
libInfo.setName(info.fileName());
libInfo.setPath(info.absolutePath());
libInfo.setPlatform(GeneralFile);
if (config)
if (auto rule = config->ignoreList.isIgnore(libInfo)) {
QuasarAppUtils::Params::log(
info.absoluteFilePath() + " ignored by rule " + rule->label,
QuasarAppUtils::VerboseLvl::Info);
continue;
}
auto distanation = changeDistanation(info.absolutePath(), to, saveStructSize);
if (!copyFile(info.absoluteFilePath(), distanation , mask)) {
QuasarAppUtils::Params::log(
"not copied file " + distanation + "/" + info.fileName(),
QuasarAppUtils::VerboseLvl::Warning);
continue;
}
if (listOfCopiedItems) {
*listOfCopiedItems << distanation + "/" + info.fileName();
}
}
return true;
}
bool FileManager::removeFile(const QFileInfo &file) {
if (!QFile::remove(file.absoluteFilePath())) {

View File

@ -23,13 +23,39 @@ private:
bool initDir(const QString &path);
QSet<QString> _deployedFiles;
/**
* @brief changeDistanation - this function create new distanation path.
* (merge base path and pathFrom with depth)
* @param absalutePath
* @param basePath
* @param depch
* @return the new path
*/
QString changeDistanation(const QString &absalutePath, QString basePath, int depch);
public:
FileManager();
bool copyFile(const QString &file, const QString &target,
QStringList *mask = nullptr, bool targetIsFile = false);
/**
* @brief copyFiles - copy files (source) to (to)
* @param source - copy source files
* @param to - distanation folder
* @param saveStructSize - size of name of source file to save after copy. example:
* copy /Foo/A.txt /Bar/ (size 0) - result file copyed to /Bar/A.txt
* copy /Foo/A.txt /Bar/ (size 1) - to /Bar/Foo/A.txt
* @param filter - list of forbiden names for ignore files
* @param listOfCopiedItems - list of copyed files
* @param mask - mask of copyed files
* @return true if files copyed
*/
bool copyFiles(const QStringList &source, const QString &to, int saveStructSize = 0,
const QStringList &filter = QStringList(),
QStringList *listOfCopiedItems = nullptr,
QStringList *mask = nullptr);
bool removeFile(const QString &file);
bool removeFile(const QFileInfo &file);

View File

@ -130,6 +130,10 @@ bool LibInfo::isValid() const {
name.size() && path.size();
}
bool LibInfo::isScaned() const {
return allDep.size();
}
uint qHash(const LibInfo &info) {
return qHash(info.fullPath());
}

View File

@ -35,6 +35,7 @@ public:
void clear();
bool isValid() const;
bool isScaned() const;
friend class DependenciesScanner;
const QSet<LibInfo>& getAllDep() const;

View File

@ -5,6 +5,7 @@
* of this license document, but changing it is not allowed.
*/
#include "deployconfig.h"
#include "pluginsparser.h"
#include <QDir>
#include <dependenciesscanner.h>
@ -45,15 +46,45 @@ static const PluginModuleMapping pluginModuleMappings[] =
{"geometryloaders", DeployCore::QtModule::Qt3DRendererModule},
{"webview", DeployCore::QtModule::QtWebViewModule},
{"xcbglintegrations", DeployCore::QtModule::QtGuiModule},
{"wayland-decoration-client", DeployCore::QtModule::QtGuiModule},
{"wayland-graphics-integration-client", DeployCore::QtModule::QtGuiModule},
{"wayland-graphics-integration-server", DeployCore::QtModule::QtGuiModule},
{"wayland-decoration-client", DeployCore::QtModule::QtQuickModule},
{"wayland-graphics-integration-client", DeployCore::QtModule::QtQuickModule},
{"wayland-graphics-integration-server", DeployCore::QtModule::QtQuickModule},
{"wayland-shell-integration", DeployCore::QtModule::QtGuiModule},
};
quint64 PluginsParser::qtModuleForPlugin(const QString &subDirName) {
static const PlatformMapping platformMappings[] =
{
{"qminimal", Unix | Win },
{"qminimalegl", Unix | Win },
{"qoffscreen", Unix | Win},
{"qandroid", UnknownPlatform },
{"qbsdfb", UnknownPlatform },
{"qcocoa", UnknownPlatform },
{"qdirect2d", Win },
{"qdirectfb", UnknownPlatform },
{"qeglfs", Unix_ARM },
{"qhaiku", UnknownPlatform },
{"qios", UnknownPlatform },
{"qlinuxfb", Unix_ARM },
{"qmirclient", Unix },
{"qopenwf", Unix },
{"qqnx", UnknownPlatform },
{"qvnc", WebRemote },
{"qwasm", UnknownPlatform },
{"qwindows", Win },
{"qwinrt", Win },
{"qxcb", Unix },
{"webgl", WebGl },
{"qwayland-xcomposite-glx", Unix_x86_64},
{"qwayland-xcomposite-egl", Unix_x86_64},
{"qwayland-generic", Unix_x86_64},
{"qwayland-egl", Unix_x86_64}
};
quint64 PluginsParser::qtModuleForPlugin(const QString &subDirName) const {
const auto end = std::end(pluginModuleMappings);
const auto result =
@ -66,23 +97,133 @@ quint64 PluginsParser::qtModuleForPlugin(const QString &subDirName) {
return result != end ? result->module : 0; // "designer"
}
Platform PluginsParser::platformForPlugin(const QString &name) const {
const auto end = std::end(platformMappings);
const auto result =
std::find_if(std::begin(platformMappings), end,
[&name] (const PlatformMapping &m) {
return name == QLatin1String(m._pluginName);
});
return (result != end) ? result->_platform : Platform::UnknownPlatform; // "designer"
}
QString PluginsParser::getPluginNameFromFile(const QString &baseNaem) const {
if (baseNaem.left(3) == "lib") {
return baseNaem.right(baseNaem.size() - 3);
}
return baseNaem;
}
bool PluginsParser::scan(const QString& pluginPath,
QStringList &resDependencies,
DeployCore::QtModule qtModules) {
DeployCore::QtModule qtModules,
const QString& package) {
auto plugins = QDir(pluginPath).entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
QuasarAppUtils::Params::log("Modules Number :" + QString::number(qtModules), QuasarAppUtils::Info);
for (const auto &plugin: plugins) {
auto module = qtModuleForPlugin(plugin.fileName());
if (qtModules & module) {
QuasarAppUtils::Params::log("deploye plugin : " + plugin.absoluteFilePath(), QuasarAppUtils::Info);
resDependencies.append(plugin.absoluteFilePath());
}
scanPluginGroup(plugin, resDependencies, package, qtModules);
}
return true;
}
void PluginsParser::addPlugins(const QStringList& list, const QString& package, QHash<QString, QSet<QString>>& container) {
const DeployConfig* cnf = DeployCore::_config;
for (const auto plugin: list) {
if (QFileInfo(cnf->qtDir.getPlugins() + "/" + plugin).isDir()) {
auto listPlugins = QDir(cnf->qtDir.getPlugins() + "/" + plugin).entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
for (const auto &plugin: listPlugins) {
QuasarAppUtils::Params::log("Disable plugin: " + plugin.baseName(), QuasarAppUtils::Debug);
container[package].insert(getPluginNameFromFile( plugin.baseName()));
}
} else {
QuasarAppUtils::Params::log("Disable plugin: " + plugin, QuasarAppUtils::Debug);
container[package].insert(getPluginNameFromFile(plugin));
}
}
}
bool PluginsParser::initDeployPluginsList() {
const DeployConfig* cnf = DeployCore::_config;
for (auto package = cnf->packages().cbegin(); package != cnf->packages().cend(); ++package) {
auto distro = cnf->getDistroFromPackage(package.key());
QList<QString> desabledFromPlatform;
scanPlatforms(package.key(), desabledFromPlatform);
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
auto enablePlugins = distro.enabledPlugins().toList();
auto disablePlugins = distro.disabledPlugins().toList();
#else
auto enablePlugins = QStringList(distro.enabledPlugins().cbegin(), distro.enabledPlugins().cend());
auto disablePlugins = QStringList(distro.disabledPlugins().cbegin(), distro.disabledPlugins().cend());
#endif
auto forbidenPlugins = defaultForbidenPlugins() + disablePlugins + desabledFromPlatform;
addPlugins(forbidenPlugins, package.key(), _disabledPlugins);
addPlugins(enablePlugins, package.key(), _enabledPlugins);
}
return true;
}
void PluginsParser::scanPlatforms(const QString& package, QList<QString>& disabledPlugins) {
const DeployConfig* cnf = DeployCore::_config;
auto platform = cnf->getPlatform(package);
QString platformPluginPath = cnf->qtDir.getPlugins() + "/platforms";
auto plugins = QDir(platformPluginPath).entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
for (const auto &plugin: plugins) {
auto pluginPlatform = platformForPlugin(getPluginNameFromFile(plugin.baseName()));
if (!(platform & pluginPlatform)) {
QuasarAppUtils::Params::log("platform : " + plugin.baseName() + " is disabled", QuasarAppUtils::Info);
disabledPlugins += getPluginNameFromFile(plugin.baseName());
}
}
}
void PluginsParser::scanPluginGroup(const QFileInfo& plugin,
QStringList &result,
const QString &package,
DeployCore::QtModule qtModules) const {
auto plugins = QDir(plugin.absoluteFilePath()).entryInfoList(QDir::Files | QDir::NoDotAndDotDot);
auto module = qtModuleForPlugin(plugin.fileName());
for (const auto& info: plugins) {
if (isEnabledPlugin(getPluginNameFromFile(info.baseName()), package) ||
(!isDisabledPlugin(getPluginNameFromFile(info.baseName()), package) && (qtModules & module))) {
result += info.absoluteFilePath();
}
}
}
bool PluginsParser::isDisabledPlugin(const QString &plugin, const QString &package) const {
return _disabledPlugins[package].contains(plugin);
}
bool PluginsParser::isEnabledPlugin(const QString &plugin, const QString &package) const {
return _enabledPlugins[package].contains(plugin);
}
QStringList PluginsParser::defaultForbidenPlugins() {
return {
"qtvirtualkeyboardplugin",
"virtualkeyboard",
};
}

View File

@ -20,18 +20,56 @@ struct DEPLOYSHARED_EXPORT PluginModuleMapping
quint64 module;
};
struct DEPLOYSHARED_EXPORT PlatformMapping
{
const char *_pluginName;
Platform _platform;
};
/**
* @brief The PluginsParser class - scaner of plugins
*/
class DEPLOYSHARED_EXPORT PluginsParser
{
private:
DependenciesScanner *_libScaner = nullptr;
quint64 qtModuleForPlugin(const QString &subDirName);
public:
PluginsParser();
bool scan(const QString &pluginPath, QStringList& resDependencies,
DeployCore::QtModule qtModules);
DeployCore::QtModule qtModules, const QString &package);
bool initDeployPluginsList();
/**
* @brief defaultForbidenPlugins - this method return list of forbiden plugins
* forbidenPlugin - it is a plugin that depends on several Qt modules and significantly increases the size of the distribution.
* @return
*/
static QStringList defaultForbidenPlugins();
private:
DependenciesScanner *_libScaner = nullptr;
QHash<QString, QSet<QString>> _disabledPlugins;
QHash<QString, QSet<QString>> _enabledPlugins;
quint64 qtModuleForPlugin(const QString &subDirName) const;
Platform platformForPlugin(const QString &name) const;
bool copyPlugin(const QString &plugin, const QString &package);
void copyExtraPlugins(const QString &package);
void copyPlugins(const QStringList &list, const QString &package);
QString getPluginNameFromFile(const QString& baseNaem) const;
void scanPlatforms(const QString &package, QList<QString> &disabledPlugins);
void scanPluginGroup(const QFileInfo &pluginFolder,
QStringList &result,
const QString &package,
DeployCore::QtModule qtModules) const;
bool isDisabledPlugin(const QString &plugin, const QString &package) const;
bool isEnabledPlugin(const QString &plugin, const QString &package) const;
void addPlugins(const QStringList &list,
const QString &package,
QHash<QString, QSet<QString>> &container);
};
#endif // QTMODULES_H

View File

@ -50,7 +50,7 @@ void LibCreator::initLinux64() {
"libgcc_s.so.1",
"libc.so.6",
},
Platform::Unix64);
Platform::Unix_x86_64);
createLib(":/linux64.so", {
"libQt5Core.so.5",
"libpthread.so.0",
@ -60,7 +60,7 @@ void LibCreator::initLinux64() {
"libc.so.6",
},
Platform::Unix64);
Platform::Unix_x86_64);
}

View File

@ -13,5 +13,11 @@ Modules::Modules()
}
Modules &Modules::instance() {
static Modules* val = new Modules();
return *val;
}

View File

@ -29,6 +29,10 @@
{
public:
Modules();
static Modules& instance();
};
#define TestModule Modules::instance()
#endif // MODULES_H

File diff suppressed because it is too large Load Diff

View File

@ -17,18 +17,19 @@ class ModulesQt513
public:
ModulesQt513();
static QSet<QString> ignoreFilter(const QSet<QString>& input, const QString& filter);
static QSet<QString> onlyC(const QString &distDir = DISTRO_DIR);
static QSet<QString> qtLibs(const QString &distDir = DISTRO_DIR);
static QSet<QString> qmlLibs(const QString &distDir = DISTRO_DIR);
static QSet<QString> qmlLibsExtractPlugins(const QString &distDir = DISTRO_DIR);
static QSet<QString> separetedPackageslibs(const QString &distDir = DISTRO_DIR);
virtual QSet<QString> ignoreFilter(const QSet<QString>& input, const QString& filter) const;
virtual QSet<QString> replace(const QSet<QString> &data, const QMap<QString, QString>& replaceMap) const;
static QSet<QString> outTestLibs(const QString &distDir = DISTRO_DIR);
static QSet<QString> qtWithoutTr(const QString &distDir = DISTRO_DIR);
static QSet<QString> qtWebEngine(const QString &distDir = DISTRO_DIR);
static QSet<QString> testEmptyParamsTree(const QString &distDir = DISTRO_DIR);
virtual QSet<QString> onlyC(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> qtLibs(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> qmlLibs(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> testDistroLibs(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> testOutLibs(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> qtWithoutTr(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> qtWebEngine(const QString &distDir = DISTRO_DIR) const;
virtual QSet<QString> testEmptyParamsTree(const QString &distDir = DISTRO_DIR) const;
};

View File

@ -13,34 +13,30 @@ ModulesQt514::ModulesQt514()
}
QSet<QString> ModulesQt514::qtLibs(const QString &distDir)
QSet<QString> ModulesQt514::qtLibs(const QString &distDir) const
{
TestUtils utils;
auto res = ModulesQt513::qtLibs(distDir);
#ifdef Q_OS_WIN
res += utils.createTree({
{"./" + distDir + "/Qt5QmlModels.dll"},
res -= utils.createTree({
});
#else
res += utils.createTree({
{"./" + distDir + "/lib/libQt5QmlModels.so"},
{"./" + distDir + "/plugins/wayland-graphics-integration-client/libvulkan-server.so"},
{"./" + distDir + "/plugins/wayland-graphics-integration-server/libvulkan-server.so"},
});
#endif
return res;
}
QSet<QString> ModulesQt514::onlyC(const QString &distDir)
QSet<QString> ModulesQt514::onlyC(const QString &distDir) const
{
TestUtils utils;
auto res = ModulesQt513::onlyC(distDir);
return res;
}
QSet<QString> ModulesQt514::qmlLibs(const QString &distDir)
QSet<QString> ModulesQt514::qmlLibs(const QString &distDir) const
{
TestUtils utils;
@ -63,84 +59,22 @@ QSet<QString> ModulesQt514::qmlLibs(const QString &distDir)
return res;
}
QSet<QString> ModulesQt514::qmlLibsExtractPlugins(const QString &distDir)
{
auto res = ModulesQt513::qmlLibsExtractPlugins(distDir);
return res;
}
QSet<QString> ModulesQt514::separetedPackageslibs(const QString &distDir)
{
TestUtils utils;
auto res = ModulesQt513::separetedPackageslibs(distDir);
#ifdef Q_OS_WIN
res += utils.createTree(
{
"./" + distDir + "/lolLib/Qt5QmlModels.dll",
"./" + distDir + "/package2/ZzZ/Qt5QmlModels.dll",
"./" + distDir + "/package2/ZzZ/Qt5QmlWorkerScript.dll",
}
);
#else
res += utils.createTree(
{
"./" + distDir + "/lolLib/libQt5QmlModels.so",
"./" + distDir + "/p/wayland-graphics-integration-client/libvulkan-server.so",
"./" + distDir + "/p/wayland-graphics-integration-server/libvulkan-server.so",
"./" + distDir + "/package2/ZzZ/lib/libQt5QmlModels.so",
"./" + distDir + "/package2/ZzZ/lib/libQt5QmlWorkerScript.so",
"./" + distDir + "/package2/ZzZ/plugins/wayland-graphics-integration-client/libvulkan-server.so",
"./" + distDir + "/package2/ZzZ/plugins/wayland-graphics-integration-server/libvulkan-server.so",
}
);
#endif
return res;
}
QSet<QString> ModulesQt514::outTestLibs(const QString &distDir)
{
TestUtils utils;
auto res = ModulesQt513::outTestLibs(distDir);
#ifdef Q_OS_WIN
res += utils.createTree({
"./" + distDir + "/lolLib/Qt5QmlModels.dll",
"./" + distDir + "/lolLib/Qt5QmlWorkerScript.dll",
});
#else
res += utils.createTree({
"./" + distDir + "/lolLib/libQt5QmlModels.so",
"./" + distDir + "/lolLib/libQt5QmlWorkerScript.so",
"./" + distDir + "/p/wayland-graphics-integration-client/libvulkan-server.so",
"./" + distDir + "/p/wayland-graphics-integration-server/libvulkan-server.so"
});
#endif
return res;
}
QSet<QString> ModulesQt514::qtWithoutTr(const QString &distDir)
QSet<QString> ModulesQt514::qtWithoutTr(const QString &distDir) const
{
TestUtils utils;
auto res = ModulesQt513::qtWithoutTr(distDir);
#ifdef Q_OS_WIN
res += utils.createTree({
{"./" + distDir + "/Qt5QmlModels.dll"},
});
#else
res += utils.createTree({
{"./" + distDir + "/lib/libQt5QmlModels.so"},
{"./" + distDir + "/plugins/wayland-graphics-integration-client/libvulkan-server.so"},
{"./" + distDir + "/plugins/wayland-graphics-integration-server/libvulkan-server.so"},
});
#endif
return res;
}
QSet<QString> ModulesQt514::qtWebEngine(const QString &distDir)
QSet<QString> ModulesQt514::qtWebEngine(const QString &distDir) const
{
TestUtils utils;
@ -151,8 +85,6 @@ QSet<QString> ModulesQt514::qtWebEngine(const QString &distDir)
res += utils.createTree({
"./" + distDir + "/lib/libQt5QmlModels.so",
"./" + distDir + "/lib/libQt5QmlWorkerScript.so",
"./" + distDir + "/plugins/wayland-graphics-integration-client/libvulkan-server.so",
"./" + distDir + "/plugins/wayland-graphics-integration-server/libvulkan-server.so",
"./" + distDir + "/qml/QtQml/WorkerScript.2/libworkerscriptplugin.so",
"./" + distDir + "/qml/QtQml/WorkerScript.2/plugins.qmltypes",
"./" + distDir + "/qml/QtQml/WorkerScript.2/qmldir",

View File

@ -14,16 +14,12 @@ class ModulesQt514 : public ModulesQt513
public:
ModulesQt514();
static QSet<QString> qtLibs(const QString &distDir = DISTRO_DIR);
static QSet<QString> onlyC(const QString &distDir = DISTRO_DIR);
static QSet<QString> qmlLibs(const QString &distDir = DISTRO_DIR);
static QSet<QString> qmlLibsExtractPlugins(const QString &distDir = DISTRO_DIR);
static QSet<QString> separetedPackageslibs(const QString &distDir = DISTRO_DIR);
QSet<QString> qtLibs(const QString &distDir = DISTRO_DIR) const override;
QSet<QString> onlyC(const QString &distDir = DISTRO_DIR) const override;
QSet<QString> qmlLibs(const QString &distDir = DISTRO_DIR) const override;
static QSet<QString> outTestLibs(const QString &distDir = DISTRO_DIR);
static QSet<QString> qtWithoutTr(const QString &distDir = DISTRO_DIR);
static QSet<QString> qtWebEngine(const QString &distDir = DISTRO_DIR);
QSet<QString> qtWithoutTr(const QString &distDir = DISTRO_DIR) const override;
QSet<QString> qtWebEngine(const QString &distDir = DISTRO_DIR) const override;
};
#endif // MODULESQT514_H

View File

@ -18,6 +18,7 @@
#include <pathutils.h>
#include <dependencymap.h>
#include <packing.h>
#include <pluginsparser.h>
#include <QMap>
#include <QByteArray>
@ -100,6 +101,9 @@ private slots:
// tested flags qmlDir qmake
void testQt();
void testWebEngine();
// tested flags confFile
void testConfFile();
@ -131,7 +135,6 @@ private slots:
void testEmptyParamsString();
void testWebEngine();
// extractPlugins flags
void testExtractPlugins();
@ -349,8 +352,9 @@ void deploytest::testDeployTarget() {
FileManager file;
DependenciesScanner scan;
Packing pac;
PluginsParser _pluginParser;
ConfigParser *deploy = new ConfigParser(&file, &scan, &pac);
ConfigParser *deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
QStringList targets;
targets << "./test/bins/execTarget.exe";
@ -358,31 +362,31 @@ void deploytest::testDeployTarget() {
delete deploy;
targets.clear();
deploy = new ConfigParser(&file, &scan, &pac);
deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
targets << "./test/bins/execTarget";
QVERIFY(deploy->setTargets(targets));
delete deploy;
targets.clear();
deploy = new ConfigParser(&file, &scan, &pac);
deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
targets << "./test/bins/execTarget.exe" << "./test/bins/execTarget";
QVERIFY(deploy->setTargets(targets));
delete deploy;
targets.clear();
deploy = new ConfigParser(&file, &scan, &pac);
deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
targets << "./test/bns/execTarget.exe";
QVERIFY(!deploy->setTargets(targets));
delete deploy;
targets.clear();
deploy = new ConfigParser(&file, &scan, &pac);
deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
targets << "./test/bins/";
QVERIFY(deploy->setTargets(targets));
delete deploy;
targets.clear();
deploy = new ConfigParser(&file, &scan, &pac);
deploy = new ConfigParser(&file, &_pluginParser, &scan, &pac);
targets << "./test/bins/" << "./test/warning/";
QVERIFY(deploy->setTargets(targets));
@ -506,7 +510,7 @@ void deploytest::testEmptyParamsString() {
// QDir("./" + DISTRO_DIR).removeRecursively();
// auto comapareTree = Modules::testEmptyParamsTree();
// auto comapareTree = TestModule.testEmptyParamsTree();
// runTestParams({}, &comapareTree);
@ -515,7 +519,7 @@ void deploytest::testEmptyParamsString() {
// runTestParams({"clear"}, &emptyTree);
// comapareTree = Modules::testEmptyParamsTree("testDeployDir");
// comapareTree = TestModule.testEmptyParamsTree("testDeployDir");
// runTestParams({"-bin", "./UnitTests",
// "-targetDir", "./testDeployDir"}, &comapareTree);
@ -534,7 +538,7 @@ void deploytest::testWebEngine() {
QString bin = TestBinDir + "quicknanobrowser";
QString qmake = TestQtDir + "bin/qmake";
auto comapareTree = Modules::qtWebEngine();
auto comapareTree = TestModule.qtWebEngine();
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
@ -555,7 +559,7 @@ void deploytest::testExtractPlugins() {
QString qmake = TestQtDir + "bin/qmake.exe";
#endif
auto comapareTree = Modules::qmlLibs();
auto comapareTree = TestModule.qmlLibs();
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
@ -620,7 +624,7 @@ void deploytest::testQIF() {
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-qmlDir", TestBinDir + "/../TestQMLWidgets",
"qif", "verbose"}, &comapareTree, {}, true);
"qif", "qifFromSystem", "verbose"}, &comapareTree, {}, true);
// test clear for qif
runTestParams({"clear", "verbose"}, {} , {}, true);
@ -628,7 +632,7 @@ void deploytest::testQIF() {
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-qmlDir", TestBinDir + "/../TestQMLWidgets",
"qif",
"qif", "qifFromSystem",
"-qifStyle", "quasar",
"-qifBanner", TestBinDir + "/../../res/cqtdeployer banner.png",
"-qifLogo", TestBinDir + "/../../res/icon.png",
@ -656,7 +660,8 @@ void deploytest::testQIF() {
"-pluginOut", "/p",
"-qmlOut", "/q",
"-qmlDir", "package2;" + TestBinDir + "/../TestQMLWidgets",
"-targetPackage", packageString, "qif"}, &comapareTreeMulti, {}, true);
"-targetPackage", packageString,
"qif", "qifFromSystem"}, &comapareTreeMulti, {}, true);
}
@ -915,7 +920,8 @@ void deploytest::testSetTargetDir() {
FileManager file;
DependenciesScanner scan;
Packing pac;
ConfigParser dep(&file, &scan, &pac);
PluginsParser _plugins;
ConfigParser dep(&file, &_plugins, &scan, &pac);
dep.setTargetDir();
@ -1346,8 +1352,8 @@ void deploytest::testConfFile() {
QVERIFY(QuasarAppUtils::Params::isEndable("clear"));
QVERIFY(QuasarAppUtils::Params::isEndable("bin"));
comapareTree += Modules::qtLibs();
comapareTree += Modules::qmlLibs();
comapareTree += TestModule.qtLibs();
comapareTree += TestModule.qmlLibs();
runTestParams({"-confFile", TestBinDir + "/../folder/For/Testing/Deploy/File/TestConf.json",
"-qmake", qmake,
@ -1360,20 +1366,18 @@ void deploytest::testConfFile() {
QFile::remove(TestBinDir + "/../folder/For/Testing/Deploy/File/TestConf.json");
// Test generar string in confFile
comapareTree = Modules::qtLibs();
comapareTree = TestModule.qtLibs();
comapareTree = Modules::ignoreFilter(comapareTree, "/plugins/p");
comapareTree = TestModule.ignoreFilter(comapareTree, "/plugins/p");
#ifdef Q_OS_UNIX
comapareTree -= utils.createTree(
{
"./" + DISTRO_DIR + "/lib/libQt5EglFSDeviceIntegration.so",
"./" + DISTRO_DIR + "/lib/libQt5WebSockets.so"
});
auto bin = TestBinDir + "QtWidgetsProject";
#else
comapareTree -= utils.createTree(
{
"./" + DISTRO_DIR + "/Qt5WebSockets.dll",
"./" + DISTRO_DIR + "/Qt5DBus.dll"
});
@ -1422,10 +1426,10 @@ void deploytest::testConfFile() {
QVERIFY(utils.deployFile(":/testResurces/testRes/testMultiPackageConfig.json", file,
{{"$BIN_DIR", TestBinDir.toLatin1()}}));
comapareTree = Modules::onlyC(DISTRO_DIR + "/Dstro1") +
Modules::qtLibs(DISTRO_DIR + "/Dstro2") +
Modules::qmlLibs(DISTRO_DIR + "/Dstro2") +
Modules::qtWebEngine(DISTRO_DIR + "/Dstro2");
comapareTree = TestModule.onlyC(DISTRO_DIR + "/Dstro1") +
TestModule.qtLibs(DISTRO_DIR + "/Dstro2") +
TestModule.qmlLibs(DISTRO_DIR + "/Dstro2") +
TestModule.qtWebEngine(DISTRO_DIR + "/Dstro2");
#ifdef Q_OS_LINUX
auto qmlDir = TestBinDir + "/../";
@ -1482,7 +1486,7 @@ void deploytest::testPackages() {
auto packageString = "package1;" + QFileInfo(target1).absoluteFilePath() + ",package2/ZzZ;" + QFileInfo(target2).absoluteFilePath();
comapareTree = Modules::separetedPackageslibs();
comapareTree = TestModule.testDistroLibs(DISTRO_DIR);
runTestParams({"-bin", bin, "force-clear",
"-binOut", "/lol",
@ -1515,34 +1519,17 @@ void deploytest::testQt() {
#ifdef Q_OS_UNIX
QString bin = TestBinDir + "TestQMLWidgets";
QString bin = TestBinDir + "QtWidgetsProject";
QString qmake = TestQtDir + "bin/qmake";
#else
QString bin = TestBinDir + "TestQMLWidgets.exe";
QString bin = TestBinDir + "QtWidgetsProject.exe";
QString qmake = TestQtDir + "bin/qmake.exe";
#endif
auto comapareTree = Modules::qmlLibs();
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-qmlDir", TestBinDir + "/../TestQMLWidgets"}, &comapareTree);
#ifdef Q_OS_UNIX
runTestParams({"-bin", bin, "clear" ,
"-qmlDir", TestBinDir + "/../TestQMLWidgets"}, &comapareTree);
bin = TestBinDir + "QtWidgetsProject";
#else
bin = TestBinDir + "QtWidgetsProject.exe";
#endif
comapareTree = Modules::qtLibs();
auto comapareTree = TestModule.qtLibs();
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake}, &comapareTree);
@ -1555,12 +1542,35 @@ void deploytest::testQt() {
runTestParams({"-bin", bin, "clear", "noCheckPATH"}, &comapareTree);
#endif
comapareTree = Modules::qtWithoutTr();
comapareTree = TestModule.qtWithoutTr();
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake, "noTranslations"}, &comapareTree);
comapareTree = TestModule.qmlLibs();
#ifdef Q_OS_UNIX
bin = TestBinDir + "TestQMLWidgets";
#else
bin = TestBinDir + "TestQMLWidgets.exe";
#endif
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-qmlDir", TestBinDir + "/../TestQMLWidgets"}, &comapareTree);
#ifdef Q_OS_UNIX
runTestParams({"-bin", bin, "clear" ,
"-qmlDir", TestBinDir + "/../TestQMLWidgets"}, &comapareTree);
#endif
}
void deploytest::testClear() {
@ -1672,7 +1682,7 @@ void deploytest::testIgnore() {
"-ignoreEnv", TestQtDir + "/lib," + TestQtDir + "/bin" }, &comapareTree);
comapareTree = Modules::qtLibs() - removeTree;
comapareTree = TestModule.qtLibs() - removeTree;
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
@ -1817,7 +1827,6 @@ void deploytest::testExtraPlugins() {
auto pluginTree = utils.createTree(
{
"./" + DISTRO_DIR + "/bin/qt.conf",
"./" + DISTRO_DIR + "/plugins/sqldrivers/libqsqlodbc.so",
"./" + DISTRO_DIR + "/plugins/sqldrivers/libqsqlpsql.so",
"./" + DISTRO_DIR + "/plugins/sqldrivers/libqsqlite.so",
@ -1831,7 +1840,6 @@ void deploytest::testExtraPlugins() {
auto pluginTree = utils.createTree(
{
"./" + DISTRO_DIR + "/qt.conf",
"./" + DISTRO_DIR + "/plugins/sqldrivers/qsqlmysql.dll",
"./" + DISTRO_DIR + "/plugins/sqldrivers/qsqlodbc.dll",
"./" + DISTRO_DIR + "/plugins/sqldrivers/qsqlite.dll",
@ -1841,7 +1849,7 @@ void deploytest::testExtraPlugins() {
});
#endif
auto comapareTree = Modules::qtLibs();
auto comapareTree = TestModule.qtLibs();
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
@ -1853,7 +1861,25 @@ void deploytest::testExtraPlugins() {
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-extraPlugin", "sqldrivers"}, &comapareTree);
"-enablePlugins", "sqldrivers"}, &comapareTree);
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-extraPlugin", TestQtDir + "/plugins/sqldrivers"}, &comapareTree);
comapareTree -= pluginTree;
comapareTree -= utils.createTree(
{
"./" + DISTRO_DIR + "/plugins/platforms/libqxcb.so",
"./" + DISTRO_DIR + "/plugins/xcbglintegrations/libqxcb-egl-integration.so",
"./" + DISTRO_DIR + "/plugins/xcbglintegrations/libqxcb-glx-integration.so",
"./" + DISTRO_DIR + "/lib/libQt5XcbQpa.so",
});
runTestParams({"-bin", bin, "clear" ,
"-qmake", qmake,
"-disablePlugins", "qxcb,xcbglintegrations"}, &comapareTree);
}
void deploytest::testTargetDir() {
@ -2025,7 +2051,7 @@ void deploytest::testSystemLib() {
QString qmake = TestQtDir + "bin/qmake.exe";
bin = TestBinDir + "QtWidgetsProject.exe";
comapareTree += Modules::qtLibs();
comapareTree += TestModule.qtLibs();
comapareTree -= utils.createTree(
{
@ -2162,7 +2188,8 @@ void deploytest::testOutDirs() {
#endif
auto comapareTree = Modules::outTestLibs();
auto comapareTree = TestModule.testOutLibs();
runTestParams({"-bin", bin, "clear" ,
"-binOut", "/lol",

@ -1 +1 @@
Subproject commit 68f4daac00f7780cbae69b18ed83d0837fd93e04
Subproject commit 878881c535ffddcf17ce22c02c59a69f8842c8fc