From 57fe9f60876588722e653b75e908db5ad4eca8c1 Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Mon, 27 Oct 2025 14:58:46 +0300 Subject: [PATCH 1/5] Editor: Path editor has wrong behaviour #1166 --- engine/src/editor/editorsettings.cpp | 50 ++----------------- .../editor/qbstools/converter/qbsbuilder.cpp | 5 +- .../propertyedit/custom/filepath/pathedit.cpp | 16 ++++-- .../propertyedit/custom/filepath/pathedit.h | 4 +- .../screens/propertyedit/propertyeditor.cpp | 3 +- 5 files changed, 23 insertions(+), 55 deletions(-) diff --git a/engine/src/editor/editorsettings.cpp b/engine/src/editor/editorsettings.cpp index 8015668e2..6c6bf6ac6 100644 --- a/engine/src/editor/editorsettings.cpp +++ b/engine/src/editor/editorsettings.cpp @@ -1,14 +1,11 @@ #include "editorsettings.h" -#include - -#include -#include #include #include +#include + namespace { - const char *gSettings(".Settings"); const char *gEditorSettings("EditorSettings"); } @@ -61,47 +58,8 @@ void EditorSettings::loadSettings() { setProperty(name.data(), it->second); } } - } else { /// \todo To be removed in mid 2025 - QSettings settings(COMPANY_NAME, EDITOR_NAME); - QVariantMap data = settings.value(gSettings).toMap(); - - for(const TString &it : dynamicPropertyNames()) { - TString info = propertyTag(dynamicPropertyInfo(it.data()), "editor="); - Variant originValue = property(it.data()); - QVariant newValue = data.value(it.data()); - - if(newValue.isValid()) { - switch(originValue.userType()) { - case MetaType::BOOLEAN: { - bool value = newValue.toBool(); - setProperty(it.data(), value); - } break; - case MetaType::INTEGER: { - int value = newValue.toInt(); - setProperty(it.data(), value); - } break; - case MetaType::FLOAT: { - float value = newValue.toFloat(); - setProperty(it.data(), value); - } break; - case MetaType::STRING: { - TString value(newValue.toString().toStdString()); - setProperty(it.data(), value); - } break; - case MetaType::VECTOR4: { - if(info == "Color") { - QString str(newValue.toString()); - if(!str.isEmpty()) { - QColor color(str); - Vector4 value(color.redF(), color.greenF(), color.blueF(), color.alphaF()); - setProperty(it.data(), value); - } - } - } break; - default: break; - } - } - } + } else { + aError() << "Unable to load settings"; } blockSignals(false); diff --git a/modules/editor/qbstools/converter/qbsbuilder.cpp b/modules/editor/qbstools/converter/qbsbuilder.cpp index 325a0fc0b..0549fd8a3 100644 --- a/modules/editor/qbstools/converter/qbsbuilder.cpp +++ b/modules/editor/qbstools/converter/qbsbuilder.cpp @@ -60,7 +60,7 @@ QbsBuilder::QbsBuilder() : settings->registerValue(gAndroidSdk, "/", "editor=Path"); settings->registerValue(gAndroidNdk, "/", "editor=Path"); - settings->registerValue(gQBSPath, "/", "editor=Path"); + settings->registerValue(gQBSPath, "/", "editor=FilePath"); #if defined(Q_OS_WIN) settings->registerValue(gQBSProfile, "MSVC2019-x64"); @@ -89,6 +89,7 @@ bool QbsBuilder::buildProject() { aInfo() << gLabel << "Build started."; m_qbsPath = EditorSettings::instance()->value(gQBSPath).toString(); + aDebug() << gLabel<< "QBS path readed from config:" << m_qbsPath; ProjectSettings *mgr = ProjectSettings::instance(); if(m_qbsPath.isEmpty()) { @@ -100,7 +101,7 @@ bool QbsBuilder::buildProject() { } if(!File::exists(m_qbsPath)) { - aCritical() << "Can't find the QBS Tool by the path:" << m_qbsPath; + aCritical() << gLabel << "Can't find the QBS Tool by the path:" << m_qbsPath; } m_project = mgr->generatedPath() + "/"; diff --git a/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.cpp b/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.cpp index bc0048928..4cc13920f 100644 --- a/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.cpp +++ b/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.cpp @@ -4,12 +4,14 @@ #include #include +#include #include -PathEdit::PathEdit(QWidget *parent) : +PathEdit::PathEdit(bool file, QWidget *parent) : PropertyEdit(parent), - ui(new Ui::PathEdit) { + ui(new Ui::PathEdit), + m_file(file) { ui->setupUi(this); @@ -28,16 +30,20 @@ void PathEdit::setData(const Variant &data) { } void PathEdit::onFileDialog() { + Url url(m_path); + QString path; - if(File::isDir(m_path)) { + QString dir(url.dir().isEmpty() ? ProjectSettings::instance()->contentPath().data() : url.absoluteDir().data()); + + if(!m_file) { path = QFileDialog::getExistingDirectory(dynamic_cast(parent()), tr("Open Directory"), - "/", + dir, QFileDialog::ShowDirsOnly); } else { path = QFileDialog::getOpenFileName(dynamic_cast(parent()), tr("Select File"), - ProjectSettings::instance()->contentPath().data(), + dir, tr("All Files (*)")); } diff --git a/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.h b/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.h index 277f57bf0..ba02e01d8 100644 --- a/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.h +++ b/worldeditor/src/screens/propertyedit/custom/filepath/pathedit.h @@ -10,7 +10,7 @@ namespace Ui { class PathEdit : public PropertyEdit { Q_OBJECT public: - explicit PathEdit(QWidget *parent = nullptr); + explicit PathEdit(bool file, QWidget *parent = nullptr); Variant data() const override; void setData(const Variant &data) override; @@ -25,6 +25,8 @@ private slots: TString m_path; + bool m_file; + }; #endif // PATHEDIT_H diff --git a/worldeditor/src/screens/propertyedit/propertyeditor.cpp b/worldeditor/src/screens/propertyedit/propertyeditor.cpp index 29e5a493b..d9c0ae87f 100644 --- a/worldeditor/src/screens/propertyedit/propertyeditor.cpp +++ b/worldeditor/src/screens/propertyedit/propertyeditor.cpp @@ -44,7 +44,8 @@ PropertyEdit *createCustomEditor(int userType, QWidget *parent, const TString &e if(userType == MetaType::VARIANTLIST) return new ArrayEdit(parent); if(editor == "Enum") return new NextEnumEdit(parent); - else if(editor == "Path") return new PathEdit(parent); + else if(editor == "Path") return new PathEdit(false, parent); + else if(editor == "FilePath") return new PathEdit(true, parent); else if(editor == "Locale") return new LocaleEdit(parent); else if(editor == "Axises") return new AxisesEdit(parent); else if(editor == "Alignment") return new AlignmentEdit(parent); From 2d23e08f11a76c64e61c1f57382b88f41fdee45e Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Wed, 29 Oct 2025 08:05:17 +0300 Subject: [PATCH 2/5] update --- builder/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/builder/main.cpp b/builder/main.cpp index 50847aede..10d2a7df3 100644 --- a/builder/main.cpp +++ b/builder/main.cpp @@ -46,7 +46,7 @@ int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QCoreApplication::setOrganizationName(COMPANY_NAME); - QCoreApplication::setApplicationName(BUILDER_NAME); + QCoreApplication::setApplicationName(EDITOR_NAME); // Special for settings sharing QCoreApplication::setApplicationVersion(SDK_VERSION); QCommandLineParser parser; @@ -55,17 +55,17 @@ int main(int argc, char *argv[]) { parser.addVersionOption(); QCommandLineOption sourceFileOption(QStringList() << "s" << "source", - QCoreApplication::translate("main", "Project file <.forge>."), + QCoreApplication::translate("main", "Project file <.forge>"), QCoreApplication::translate("main", "project")); parser.addOption(sourceFileOption); QCommandLineOption targetDirectoryOption(QStringList() << "t" << "target", - QCoreApplication::translate("main", "Build Project into ."), + QCoreApplication::translate("main", "Build Project into "), QCoreApplication::translate("main", "directory")); parser.addOption(targetDirectoryOption); QCommandLineOption platformOption(QStringList() << "p" << "platform", - QCoreApplication::translate("main", "Specify the target ."), + QCoreApplication::translate("main", "Specify the target "), QCoreApplication::translate("main", "platform")); parser.addOption(platformOption); From 41af77ab748564b4de1b7f478faa3b0bfa3e45c1 Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Wed, 29 Oct 2025 08:24:17 +0300 Subject: [PATCH 3/5] update --- modules/editor/qbstools/converter/qbsbuilder.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/editor/qbstools/converter/qbsbuilder.cpp b/modules/editor/qbstools/converter/qbsbuilder.cpp index 0549fd8a3..09d9534a3 100644 --- a/modules/editor/qbstools/converter/qbsbuilder.cpp +++ b/modules/editor/qbstools/converter/qbsbuilder.cpp @@ -132,7 +132,7 @@ bool QbsBuilder::buildProject() { QStringList args; args << "resolve"; - for(auto it : m_settings) { + for(auto &it : m_settings) { args << it.data(); } args << QString("profile:") + profile.data() << QString("config:") + gMode; @@ -146,7 +146,7 @@ bool QbsBuilder::buildProject() { { QStringList args; args << "build"; - for(auto it : m_settings) { + for(auto &it : m_settings) { args << it.data(); } args << "--build-directory" << QString("../") + platform.data(); @@ -174,7 +174,7 @@ void QbsBuilder::builderInit() { qbs.setWorkingDirectory(m_project.data()); QStringList args; args << "setup-toolchains" << "--detect"; - for(auto it : m_settings) { + for(auto &it : m_settings) { args << it.data(); } qbs.start(m_qbsPath.data(), args); @@ -187,7 +187,7 @@ void QbsBuilder::builderInit() { if(!sdk.isEmpty()) { QStringList args; args << "setup-android"; - for(auto it : m_settings) { + for(auto &it : m_settings) { args << it.data(); } args << "--sdk-dir" << sdk.data(); @@ -218,7 +218,7 @@ bool QbsBuilder::checkProfiles() { QStringList args; args << "config" << "--list"; - for(auto it : m_settings) { + for(auto &it : m_settings) { args << it.data(); } QProcess qbs; @@ -332,7 +332,8 @@ void QbsBuilder::onApplySettings() { } void QbsBuilder::parseLogs(const QString &log) { - QStringList list = log.split(QRegularExpression("[\r\n]"), Qt::SkipEmptyParts); + static QRegularExpression reg("[\r\n]"); + QStringList list = log.split(reg, Qt::SkipEmptyParts); foreach(QString it, list) { if(it.contains(" error ") || it.contains(" error:", Qt::CaseInsensitive)) { From 2bbfa986f0191b8c610976234410099f9c22b9e3 Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Wed, 29 Oct 2025 16:05:33 +0300 Subject: [PATCH 4/5] update --- builder/builder.cpp | 26 +++++------ engine/includes/editor/projectsettings.h | 7 ++- engine/src/editor/codebuilder.cpp | 14 +++--- engine/src/editor/pluginmanager.cpp | 25 +++++----- engine/src/editor/projectsettings.cpp | 8 ++-- engine/src/systems/rendersystem.cpp | 3 -- .../editor/qbstools/converter/qbsbuilder.cpp | 12 ++--- .../webtools/converter/emscriptenbuilder.cpp | 46 ++++++++++--------- .../webtools/converter/emscriptenbuilder.h | 1 + 9 files changed, 71 insertions(+), 71 deletions(-) diff --git a/builder/builder.cpp b/builder/builder.cpp index 8d6d79379..569968ad6 100644 --- a/builder/builder.cpp +++ b/builder/builder.cpp @@ -123,26 +123,26 @@ bool copyRecursively(QString sourceFolder, QString destFolder) { void Builder::onImportFinished() { ProjectSettings *project = ProjectSettings::instance(); TString platform = project->currentPlatformName(); - TString path = project->artifact(); - Url info(path); - TString targetPath = project->targetPath() + "/" + platform + "/"; + TString targetPath = project->targetPath() + "/" + platform; - QDir dir; - dir.mkpath(targetPath.data()); - TString target(targetPath + info.name()); + if(!File::exists(targetPath) && !File::mkPath(targetPath)) { + aDebug() << "Unable to create build directory at:" << targetPath; + } - bool isDir = File::isDir(target); - if((isDir && QDir(target.data()).removeRecursively()) || File::remove(target)) { - aInfo() << "Previous build removed."; + for(auto &it : File::list(targetPath)) { + File::remove(it); } - if(isDir && copyRecursively(path.data(), target.data())) { - File::copy(path, target); + bool result = true; + for(const TString &it : project->artifacts()) { + result &= File::copy(it, targetPath + "/" + Url(it).name()); + } - aInfo() << "New build copied to:" << target; + if(result) { + aInfo() << "New build copied to:" << targetPath; if(!project->currentBuilder()->isBundle(platform)) { - package(target); + package(targetPath + "/" + project->projectName()); aInfo() << "Packaging Done."; } diff --git a/engine/includes/editor/projectsettings.h b/engine/includes/editor/projectsettings.h index 08e4458a0..c0e9cb31a 100644 --- a/engine/includes/editor/projectsettings.h +++ b/engine/includes/editor/projectsettings.h @@ -82,8 +82,8 @@ class ENGINE_EXPORT ProjectSettings : public Object { void reportTypes(const std::set &types); - TString artifact() const; - void setArtifact(const TString &value); + StringList artifacts() const; + void setArtifacts(const StringList &value); void loadSettings(); void saveSettings(); @@ -99,6 +99,7 @@ class ENGINE_EXPORT ProjectSettings : public Object { private: StringList m_platforms; + StringList m_artifacts; std::map m_plugins; std::map m_supportedPlatforms; @@ -114,8 +115,6 @@ class ENGINE_EXPORT ProjectSettings : public Object { TString m_currentPlatform; - TString m_artifact; - TString m_projectPath; TString m_targetPath; TString m_contentPath; diff --git a/engine/src/editor/codebuilder.cpp b/engine/src/editor/codebuilder.cpp index 604ab8cd2..0b677dddb 100644 --- a/engine/src/editor/codebuilder.cpp +++ b/engine/src/editor/codebuilder.cpp @@ -7,7 +7,6 @@ #include "editor/assetmanager.h" #include -#include #include namespace { @@ -80,7 +79,7 @@ void CodeBuilder::renameAsset(AssetConverterSettings *settings, const TString &o "(%1" }; - for(auto it : templates) { + for(auto &it : templates) { data.replace(it.arg(oldName.data()).toStdString(), it.arg(newName.data()).toStdString()); } @@ -140,8 +139,7 @@ void CodeBuilder::updateTemplate(const TString &src, const TString &dst) { } file.close(); - QDir dir; - dir.mkpath(Url(dst).dir().data()); + File::mkPath(Url(dst).dir()); file.setFileName(dst.data()); if(file.open(QFile::WriteOnly | QFile::Text | QFile::Truncate)) { @@ -154,7 +152,7 @@ void CodeBuilder::updateTemplate(const TString &src, const TString &dst) { void CodeBuilder::generateLoader(const TString &dst, const StringList &modules) { std::map classes; // Generate plugin loader - for(TString it : m_sources) { + for(const TString &it : m_sources) { QFile file(it.data()); if(file.open(QFile::ReadOnly | QFile::Text)) { QString data = file.readLine(); @@ -226,7 +224,7 @@ void CodeBuilder::generateLoader(const TString &dst, const StringList &modules) TString name = ProjectSettings::instance()->projectName() + "-editor"; for(auto &it : PluginManager::instance()->plugins()) { - Url info(it.toStdString()); + Url info(it); if(name != info.baseName()) { m_values[gEditorLibrariesList].append(TString(12, ' ') + "\"" + info.baseName() + "\",\n"); } @@ -255,7 +253,7 @@ TString CodeBuilder::project() const { StringList CodeBuilder::sources() const { StringList list; - for(auto it : m_sources) { + for(auto &it : m_sources) { list.push_back(it); } return list; @@ -266,7 +264,7 @@ void CodeBuilder::rescanSources(const TString &path) { for(auto &filePath : File::list(path)) { TString suff = Url(filePath).completeSuffix().toLower(); - for(auto it : suffixes()) { + for(auto &it : suffixes()) { if(it == suff) { m_sources.insert(filePath); break; diff --git a/engine/src/editor/pluginmanager.cpp b/engine/src/editor/pluginmanager.cpp index d75dd2146..c025ba08c 100644 --- a/engine/src/editor/pluginmanager.cpp +++ b/engine/src/editor/pluginmanager.cpp @@ -18,7 +18,10 @@ #include "config.h" -const char *gComponents("components"); +namespace { + const char *gComponents("components"); + const char *gLabel("[PluginManager]"); +} PluginManager *PluginManager::m_instance = nullptr; @@ -257,13 +260,13 @@ bool PluginManager::loadPlugin(const TString &path, bool reload) { } return true; } else { - aError() << "[PluginManager] Can't create plugin:" << qPrintable(lib->fileName()); + aError() << gLabel << "Can't create plugin:" << qPrintable(lib->fileName()); } } else { - aError() << "[PluginManager] Bad plugin:" << qPrintable(lib->fileName()); + aError() << gLabel << "Bad plugin:" << qPrintable(lib->fileName()); } } else { - aError() << "[PluginManager] Can't load plugin:" << qPrintable(lib->fileName()) << "With error:" << qPrintable(lib->errorString()); + aError() << gLabel << "Can't load plugin:" << qPrintable(lib->fileName()) << "With error:" << qPrintable(lib->errorString()); } delete lib; return false; @@ -308,26 +311,26 @@ void PluginManager::reloadPlugin(const TString &path) { deserializeComponents(result); // Remove old plugin if(File::remove(temp)) { - aInfo() << "Plugin:" << path << "reloaded"; + aInfo() << gLabel << "Plugin:" << path << "reloaded"; return; } } delete plugin->library; } else { - aError() << "Plugin unload:" << path << "failed"; + aError() << gLabel << "Plugin unload:" << path << "failed"; } } else { // Just copy and load plugin if(File::copy(path, dest) && loadPlugin(dest)) { - aInfo() << "Plugin:" << dest << "simply loaded"; + aInfo() << gLabel << "Plugin:" << dest << "loaded"; return; } } // Rename it back if(File::remove(dest) && File::rename(temp, dest)) { if(loadPlugin(dest)) { - aInfo() << "Old version of plugin:" << path << "is loaded"; + aInfo() << gLabel << "Old version of plugin:" << path << "is loaded"; } else { - aError() << "Load of old version of plugin:" << path << "is failed"; + aError() << gLabel << "Load of old version of plugin:" << path << "is failed"; } } } @@ -355,7 +358,7 @@ bool PluginManager::registerSystem(Module *plugin, const char *name) { } void PluginManager::initSystems() { - for(auto it : m_systems) { + for(auto &it : m_systems) { it.second->init(); } } @@ -390,7 +393,7 @@ void PluginManager::syncWhiteList() { StringList toRemove; auto &plugins = ProjectSettings::instance()->plugins(); - for(auto it : plugins) { + for(auto &it : plugins) { if(it.second) { if(std::find(m_initialWhiteList.begin(), m_initialWhiteList.end(), it.first) != m_initialWhiteList.end()) { toRemove.push_back(it.first); diff --git a/engine/src/editor/projectsettings.cpp b/engine/src/editor/projectsettings.cpp index 3da5c0e4a..4447b2a24 100644 --- a/engine/src/editor/projectsettings.cpp +++ b/engine/src/editor/projectsettings.cpp @@ -211,12 +211,12 @@ void ProjectSettings::saveSettings() { } } -TString ProjectSettings::artifact() const { - return m_artifact; +StringList ProjectSettings::artifacts() const { + return m_artifacts; } -void ProjectSettings::setArtifact(const TString &value) { - m_artifact = value; +void ProjectSettings::setArtifacts(const StringList &value) { + m_artifacts = value; } TString ProjectSettings::projectName() const { diff --git a/engine/src/systems/rendersystem.cpp b/engine/src/systems/rendersystem.cpp index ae2945eee..ea15277cc 100644 --- a/engine/src/systems/rendersystem.cpp +++ b/engine/src/systems/rendersystem.cpp @@ -17,9 +17,6 @@ #include "components/camera.h" #include "components/actor.h" -#include "resources/material.h" -#include "resources/rendertarget.h" - #include "pipelinetasks/ambientocclusion.h" #include "pipelinetasks/antialiasing.h" #include "pipelinetasks/bloom.h" diff --git a/modules/editor/qbstools/converter/qbsbuilder.cpp b/modules/editor/qbstools/converter/qbsbuilder.cpp index 09d9534a3..a91b46870 100644 --- a/modules/editor/qbstools/converter/qbsbuilder.cpp +++ b/modules/editor/qbstools/converter/qbsbuilder.cpp @@ -56,11 +56,11 @@ QbsBuilder::QbsBuilder() : EditorSettings *settings = EditorSettings::instance(); - settings->registerValue(gAndroidJava, "/", "editor=Path"); - settings->registerValue(gAndroidSdk, "/", "editor=Path"); - settings->registerValue(gAndroidNdk, "/", "editor=Path"); + settings->registerValue(gAndroidJava, "", "editor=Path"); + settings->registerValue(gAndroidSdk, "", "editor=Path"); + settings->registerValue(gAndroidNdk, "", "editor=Path"); - settings->registerValue(gQBSPath, "/", "editor=FilePath"); + settings->registerValue(gQBSPath, "", "editor=FilePath"); #if defined(Q_OS_WIN) settings->registerValue(gQBSProfile, "MSVC2019-x64"); @@ -123,7 +123,7 @@ bool QbsBuilder::buildProject() { m_artifact = path + mgr->projectName() + "." + gApplication; } } - mgr->setArtifact(m_artifact.data()); + mgr->setArtifacts({ m_artifact }); TString profile = getProfile(platform); TString architecture = getArchitectures(platform).front(); { @@ -157,7 +157,7 @@ bool QbsBuilder::buildProject() { m_process->start(m_qbsPath.data(), args); if(!m_process->waitForStarted()) { - aError() << "Failed:" << qPrintable(m_process->errorString()) << m_qbsPath; + aError() << gLabel << "Failed:" << qPrintable(m_process->errorString()) << m_qbsPath; return false; } m_progress = true; diff --git a/modules/editor/webtools/converter/emscriptenbuilder.cpp b/modules/editor/webtools/converter/emscriptenbuilder.cpp index 55c82996d..0d696a75e 100644 --- a/modules/editor/webtools/converter/emscriptenbuilder.cpp +++ b/modules/editor/webtools/converter/emscriptenbuilder.cpp @@ -26,7 +26,7 @@ EmscriptenBuilder::EmscriptenBuilder() { EditorSettings *settings = EditorSettings::instance(); - settings->registerValue(gEmscriptenPath, "/", "editor=Path"); + settings->registerValue(gEmscriptenPath, "", "editor=Path"); connect(settings, _SIGNAL(updated()), this, _SLOT(onApplySettings())); @@ -72,6 +72,12 @@ bool EmscriptenBuilder::buildProject() { onApplySettings(); + if(m_sdk.isEmpty() || !File::exists(m_binary)) { + aError() << gLabel << "Unable to find Emscripten SDK at:" << m_sdk; + + return false; + } + ProjectSettings *mgr = ProjectSettings::instance(); m_project = mgr->generatedPath() + "/"; @@ -82,10 +88,12 @@ bool EmscriptenBuilder::buildProject() { m_artifact = mgr->cachePath() + "/" + mgr->currentPlatformName() + "/release"; - QDir dir; - dir.mkpath(m_artifact.data()); + File::mkPath(m_artifact); - mgr->setArtifact(m_artifact); + mgr->setArtifacts({m_artifact + "/application.data", + m_artifact + "/application.html", + m_artifact + "/application.js", + m_artifact + "/application.wasm"}); { StringList args; @@ -117,7 +125,7 @@ bool EmscriptenBuilder::buildProject() { if(m_process.start(m_binary, args)) { if(!m_process.waitForStarted()) { - aError() << "Failed to start process"; + aError() << gLabel << "Failed to start process"; return false; } } @@ -144,7 +152,7 @@ void EmscriptenBuilder::generateProject() { void EmscriptenBuilder::onBuildFinished(int exitCode) { ProjectSettings *mgr = ProjectSettings::instance(); if(exitCode == 0) { - TString targetFile(mgr->artifact() + "/application.html"); + TString targetFile(m_artifact + "/application.html"); File::remove(targetFile); QFile::copy(":/application.html", targetFile.data()); @@ -168,30 +176,24 @@ void EmscriptenBuilder::readError() { } void EmscriptenBuilder::onApplySettings() { - TString sdk(EditorSettings::instance()->value(gEmscriptenPath).toString()); - - if(!File::exists(sdk)) { - aCritical() << "Can't find the Emscripten SDK by the path:" << sdk; - } + m_sdk = EditorSettings::instance()->value(gEmscriptenPath).toString(); ProcessEnvironment env = ProcessEnvironment::systemEnvironment(); #ifdef _WIN32 - sdk.replace('/', '\\'); - - env.insert("EMSDK", sdk); - env.insert("EMSDK_PYTHON", sdk + "\\python\\3.9.2-nuget_64bit\\python.exe"); - env.insert("EMSDK_NODE", sdk + "\\node\\16.20.0_64bit\\bin\\node.exe"); - env.insert("JAVA_HOME", sdk + "\\java\\8.152_64bit"); + env.insert("EMSDK", m_sdk); + env.insert("EMSDK_PYTHON", m_sdk + "\\python\\3.9.2-nuget_64bit\\python.exe"); + env.insert("EMSDK_NODE", m_sdk + "\\node\\16.20.0_64bit\\bin\\node.exe"); + env.insert("JAVA_HOME", m_sdk + "\\java\\8.152_64bit"); - m_binary = sdk.toStdString() + "\\upstream\\emscripten\\emcc.bat"; + m_binary = m_sdk + "/upstream/emscripten/emcc.bat"; TString path = env.value("PATH") + ";"; - path += sdk + ";"; - path += sdk + "\\upstream\\emscripten;"; - path += sdk + "\\node\\16.20.0_64bit\\bin"; + path += m_sdk + ";"; + path += m_sdk + "\\upstream\\emscripten;"; + path += m_sdk + "\\node\\16.20.0_64bit\\bin"; - env.insert("PATH", path.data()); + env.insert("PATH", path); #endif m_process.setProcessEnvironment(env); diff --git a/modules/editor/webtools/converter/emscriptenbuilder.h b/modules/editor/webtools/converter/emscriptenbuilder.h index 31a454283..41f74685d 100644 --- a/modules/editor/webtools/converter/emscriptenbuilder.h +++ b/modules/editor/webtools/converter/emscriptenbuilder.h @@ -49,6 +49,7 @@ class EmscriptenBuilder : public CodeBuilder { TString m_artifact; + TString m_sdk; TString m_binary; StringList m_includePath; From 8bae80b87c65c7dbffbf4c8ce556d9c0278d09e2 Mon Sep 17 00:00:00 2001 From: Evgeny Prikazchikov Date: Wed, 29 Oct 2025 16:06:34 +0300 Subject: [PATCH 5/5] update --- builder/builder.cpp | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/builder/builder.cpp b/builder/builder.cpp index 569968ad6..1d35371cf 100644 --- a/builder/builder.cpp +++ b/builder/builder.cpp @@ -10,7 +10,6 @@ #include #include -#include Builder::Builder() { connect(AssetManager::instance(), &AssetManager::importFinished, this, &Builder::onImportFinished, Qt::QueuedConnection); @@ -88,38 +87,6 @@ void Builder::package(const TString &target) { zipClose(zf, nullptr); } -bool copyRecursively(QString sourceFolder, QString destFolder) { - QDir sourceDir(sourceFolder); - if(!sourceDir.exists()) { - return false; - } - - QDir destDir(destFolder); - if(!destDir.exists()) { - destDir.mkdir(destFolder); - } - - QStringList files = sourceDir.entryList(QDir::Files); - for(int i = 0; i< files.count(); i++) { - QString srcName = sourceFolder + "/" + files[i]; - QString destName = destFolder + "/" + files[i]; - if(!QFile::copy(srcName, destName)) { - return false; - } - } - - files.clear(); - files = sourceDir.entryList(QDir::AllDirs | QDir::NoDotAndDotDot); - for(int i = 0; i< files.count(); i++) { - QString srcName = sourceFolder + "/" + files[i]; - QString destName = destFolder + "/" + files[i]; - if(!copyRecursively(srcName, destName)) { - return false; - } - } - return true; -} - void Builder::onImportFinished() { ProjectSettings *project = ProjectSettings::instance(); TString platform = project->currentPlatformName();