From bba3c76769c88643d401673210f3703fb55fec65 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Thu, 2 Mar 2023 14:17:34 +0100 Subject: [PATCH] ide: Fixed issue with assist and main.conf --- uppsrc/VirtualGui/After.h | 2 +- uppsrc/ide/Build.cpp | 1 + uppsrc/ide/Builders/Build.cpp | 68 ++++++++++++++++++++--------------- uppsrc/ide/Builders/Build.h | 4 +++ uppsrc/ide/Methods.cpp | 19 ++++------ uppsrc/ide/ide.cpp | 21 +++++++++++ uppsrc/ide/ide.h | 2 ++ 7 files changed, 75 insertions(+), 42 deletions(-) diff --git a/uppsrc/VirtualGui/After.h b/uppsrc/VirtualGui/After.h index 93e50e5fb..d48bdd6e9 100644 --- a/uppsrc/VirtualGui/After.h +++ b/uppsrc/VirtualGui/After.h @@ -4,4 +4,4 @@ public: ~ViewDraw(); }; -class DHCtrl : Ctrl {}; +class DHCtrl : public Ctrl {}; diff --git a/uppsrc/ide/Build.cpp b/uppsrc/ide/Build.cpp index e9fc2e05e..b111d961f 100644 --- a/uppsrc/ide/Build.cpp +++ b/uppsrc/ide/Build.cpp @@ -142,6 +142,7 @@ void Ide::FileCompile() if(wspc.GetCount()) { Vector linkfile, immfile; String linkopt; + MainConf(wspc); for(int i = 0; i < wspc.GetCount(); i++) BuildPackage(wspc, i, 1, wspc.GetCount(), mainconfigparam, Null, linkfile, immfile, linkopt, false); } diff --git a/uppsrc/ide/Builders/Build.cpp b/uppsrc/ide/Builders/Build.cpp index d81d33829..9b763260c 100644 --- a/uppsrc/ide/Builders/Build.cpp +++ b/uppsrc/ide/Builders/Build.cpp @@ -278,6 +278,43 @@ void MakeBuild::PkgConfig(const Workspace& wspc, const Index& config, In pkg_config.FindAdd(h); } +String SaveMainConf(const String& main_conf) +{ + String main_conf_dir = CacheFile("main_conf_" + SHA1String(main_conf)); + RealizeDirectory(main_conf_dir); + String path = AppendFileName(main_conf_dir, "main.conf.h"); + SaveChangedFile(path, main_conf); + return path; +} + +String MainConf(const Workspace& wspc, String& add_includes) +{ + String main_conf; + for(int i = 0; i < wspc.GetCount(); i++) { + const Package& pk = wspc.package[i]; + for(int j = 0; j < pk.GetCount(); j++) + if(pk[j] == "main.conf") { + String pn = wspc[i]; + String p = SourcePath(pn, "main.conf"); + main_conf << "// " << pn << "\r\n" << LoadFile(p) << "\r\n"; + PutConsole("Found " + p); + } + } + + if(main_conf.GetCount()) { + String path = SaveMainConf(main_conf); + PutConsole("Saving " + path); + PutVerbose(main_conf); + MergeWith(add_includes, ";", GetFileFolder(path)); + } + return main_conf; +} + +void MakeBuild::MainConf(const Workspace& wspc) +{ + main_conf = ::MainConf(wspc, add_includes); +} + bool MakeBuild::BuildPackage(const Workspace& wspc, int pkindex, int pknumber, int pkcount, String mainparam, String outfile, Vector& linkfile, Vector& immfile, String& linkopt, bool link) @@ -452,38 +489,13 @@ bool MakeBuild::Build(const Workspace& wspc, String mainparam, String outfile, b DeleteFile(hfile); BeginBuilding(clear_console); + + MainConf(wspc); + bool ok = true; main_conf.Clear(); add_includes.Clear(); if(wspc.GetCount()) { - for(int i = 0; i < wspc.GetCount(); i++) { - const Package& pk = wspc.package[i]; - for(int j = 0; j < pk.GetCount(); j++) - if(pk[j] == "main.conf") { - String pn = wspc[i]; - String p = SourcePath(pn, "main.conf"); - main_conf << "// " << pn << "\r\n" << LoadFile(p) << "\r\n"; - PutConsole("Found " + p); - } - } - - if(main_conf.GetCount()) { - VectorMap bm = GetMethodVars(method); - Host host; - CreateHost(host, false, false); - One b = CreateBuilder(&host); - if(b) { - Index mcfg = PackageConfig(wspc, 0, bm, mainparam, host, *b, NULL); - String outdir = OutDir(mcfg, wspc[0], bm, false); - String path = AppendFileName(outdir, "main.conf.h"); - RealizePath(path); - SaveChangedFile(path, main_conf); - PutConsole("Saving " + path); - PutVerbose(main_conf); - add_includes << outdir << ';'; - } - } - Vector build_order; if(cfg.Find("SO") < 0) { for(int i = 1; i < wspc.GetCount(); i++) diff --git a/uppsrc/ide/Builders/Build.h b/uppsrc/ide/Builders/Build.h index 456ea4c0d..cd2df67b2 100644 --- a/uppsrc/ide/Builders/Build.h +++ b/uppsrc/ide/Builders/Build.h @@ -27,6 +27,9 @@ int CharFilterSlash(int c); String GetDefaultMethod(); VectorMap GetMethodVars(const String& method); +String MainConf(const Workspace& wspc, String& add_includes); +String SaveMainConf(const String& main_conf); + class MakeBuild { public: virtual void ConsoleShow() = 0; // ShowConsole(); console.Sync(); @@ -75,6 +78,7 @@ public: String OutDir(const Index& cfg, const String& package, const VectorMap& bm, bool use_target = false); void PkgConfig(const Workspace& wspc, const Index& config, Index& pkg_config); + void MainConf(const Workspace& wspc); bool BuildPackage(const Workspace& wspc, int pkindex, int pknumber, int pkcount, String mainparam, String outfile, Vector& linkfile, Vector& immfile, String& linkopt, bool link = false); diff --git a/uppsrc/ide/Methods.cpp b/uppsrc/ide/Methods.cpp index 7f7baafb8..ef0fa46f1 100644 --- a/uppsrc/ide/Methods.cpp +++ b/uppsrc/ide/Methods.cpp @@ -939,23 +939,15 @@ String Ide::GetCurrentIncludePath() IncludeAddPkgConfig(include_path, clang_method); String main_conf; - const Workspace& wspc = GetIdeWorkspace(); + const Workspace& wspc = AssistWorkspace(); for(int i = 0; i < wspc.GetCount(); i++) { const Package& pkg = wspc.GetPackage(i); - for(int j = 0; j < pkg.GetCount(); j++) { + for(int j = 0; j < pkg.GetCount(); j++) if(pkg[j] == "import.ext") AddDirs(include_path, GetFileFolder(PackagePath(wspc[i]))); - if(pkg[j] == "main.conf") - main_conf << LoadFile(SourcePath(wspc[i], "main.conf")) << "\r\n"; - } - } - - if(main_conf.GetCount()) { - String main_conf_dir = CacheFile("main_conf_" + SHA1String(main_conf)); - RealizeDirectory(main_conf_dir); - SaveChangedFile(AppendFileName(main_conf_dir, "main.conf.h"), main_conf); - return Merge(";", main_conf_dir, include_path); } + + ::MainConf(wspc, include_path); return include_path; } @@ -968,7 +960,8 @@ String Ide::GetCurrentDefines() String r; for(String s : flags) MergeWith(r, ";", "flag" + s); - const Workspace& wspc = GetIdeWorkspace(); + + const Workspace& wspc = AssistWorkspace(); for(int i = 0; i < wspc.GetCount(); i++) { const Package& pkg = wspc.GetPackage(i); for(int j = 0; j < pkg.GetCount(); j++) { diff --git a/uppsrc/ide/ide.cpp b/uppsrc/ide/ide.cpp index dcfe5a108..36924e7de 100644 --- a/uppsrc/ide/ide.cpp +++ b/uppsrc/ide/ide.cpp @@ -685,6 +685,27 @@ const Workspace& Ide::IdeWorkspace() const return wspc; } +const Workspace& Ide::AssistWorkspace() const +{ + static Workspace wspc; + static String _main; + bool update = false; + if(main != _main || wspc.GetCount() == 0) { + update = true; + _main = main; + } + else { + for(int i = 0; i < wspc.GetCount(); i++) + if(wspc.GetPackage(i).time != FileGetTime(PackagePath(wspc[i]))) { + update = true; + break; + } + } + if(update) + wspc.Scan(main, SplitFlags(mainconfigparam, false)); + return wspc; +} + void Ide::AddPackage(const String& p) { const Workspace& wspc = IdeWorkspace(); diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index f635ac67d..bad7ff394 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -1142,6 +1142,8 @@ public: void ShowTopics(); void ShowTopicsWin(); + const Workspace& AssistWorkspace() const; + void IncludeAddPkgConfig(String& include_path, const String& clang_method); String GetIncludePath(); String GetCurrentIncludePath();