User forums > Using Code::Blocks
Different compiler's paths are mixed together
zetab:
Here is the default.conf.
For the minimal project file, you could use the test project in my earlier post.
BlueHazzard:
Ok, i can reproduce this now...
I will look into it, but in theory it should not be a problem (beside, at least from my point of view, it is obvious a error in codeblocks) , because the current compiler is at the front of path, so it should always take this path first and so if there are clashes about naming it should always pick the right one.
Are you experiencing problems with this?
BlueHazzard:
Well i know what the problem is...
If a compiler is changes we get the current path variable and make some modifications and then pre append our compiler path at the front.
So now if you load a project the current active target compiler gets pre appended to path, if you activate a other project we get the current path (with the compiler added from the last target) and add our current active compiler, this results in a %PATH% with the last two target compiler paths, and so on and so on. The path will grow every time you change compiler...
The simplest solution might be to get the base PATH at the start of codeblocks and then always use this base PATH and modify it on target/compiler changes as base path. This is a deep change in the behaviour of codeblocks and i do not want to decide this alone. @Other devs: any opinion?
The big question is what happens with the environment variables plugin. How does this play in here... Should it be allowed to modify path in the first place? @MortenMacFly can you enlighten me here a bit?
BlueHazzard:
My proposal for a fix:
--- Code: ---diff --git a/src/include/manager.h b/src/include/manager.h
index 3898ecb4a..2fd9e1be6 100644
--- a/src/include/manager.h
+++ b/src/include/manager.h
@@ -158,6 +158,9 @@ public:
/// @return The scale factor of the specified UI component.
double GetUIScaleFactor(UIComponent component) const;
+ wxString GetOriginPath() const;
+ void SetOriginPath(const wxString& path);
+
static wxCmdLineParser* GetCmdLineParser();
// event sinks
@@ -181,6 +184,8 @@ private:
static wxCmdLineParser m_CmdLineParser;
static wxToolBarAddOnXmlHandler *m_ToolbarHandler;
+ wxString m_originPath;
+
int m_ImageSizes[UIComponent::Last];
double m_UIScaleFactor[UIComponent::Last];
diff --git a/src/plugins/compilergcc/compilergcc.cpp b/src/plugins/compilergcc/compilergcc.cpp
index 6e219d2f5..af94e6ed3 100644
--- a/src/plugins/compilergcc/compilergcc.cpp
+++ b/src/plugins/compilergcc/compilergcc.cpp
@@ -23,6 +23,7 @@
#include <wx/ffile.h>
#include <wx/utils.h>
+
#include "prep.h"
#include "manager.h"
#include "sdk_events.h"
@@ -43,6 +44,7 @@
#include <wx/uri.h>
#include <wx/xml/xml.h>
+#include <wx/tokenzr.h>
#include "annoyingdialog.h"
#include "debuggermanager.h"
@@ -759,8 +761,8 @@ void CompilerGCC::SetupEnvironment()
if (!compiler)
return;
- wxString currentPath;
- if ( !wxGetEnv(_T("PATH"), ¤tPath) )
+ wxString currentPath = Manager::Get()->GetOriginPath();
+ if ( currentPath.IsEmpty() )
{
InfoWindow::Display(_("Environment error"),
_("Could not read the PATH environment variable!\n"
@@ -771,8 +773,8 @@ void CompilerGCC::SetupEnvironment()
return;
}
-// Manager::Get()->GetLogManager()->DebugLogError(_T("PATH environment:"));
-// Manager::Get()->GetLogManager()->DebugLogError(currentPath);
+ Manager::Get()->GetLogManager()->DebugLogError(_T("PATH environment:"));
+ Manager::Get()->GetLogManager()->DebugLogError(currentPath);
const wxString pathApp = platform::windows ? _T(";") : _T(":");
const wxString pathSep = wxFileName::GetPathSeparator(); // "\" or "/"
@@ -824,7 +826,8 @@ void CompilerGCC::SetupEnvironment()
// [3] Append what has already been in the PATH envvar...
// If we do it this way, paths are automatically normalized and doubles are removed
wxPathList pathArray;
- pathArray.AddEnvList(_T("PATH"));
+ //pathArray.AddEnvList(_T("PATH"));
+ pathArray.Add( wxStringTokenize(currentPath, pathApp));
pathList.Add(pathArray);
// Try to locate the path to the C compiler:
diff --git a/src/sdk/manager.cpp b/src/sdk/manager.cpp
index fc6ab0858..855f130f3 100644
--- a/src/sdk/manager.cpp
+++ b/src/sdk/manager.cpp
@@ -348,6 +348,16 @@ bool Manager::IsAppStartedUp()
return m_AppStartedUp;
}
+wxString Manager::GetOriginPath() const
+{
+ return m_originPath;
+}
+
+void Manager::SetOriginPath(const wxString& path)
+{
+ m_originPath = path;
+}
+
void Manager::LoadXRC(wxString relpath)
{
LoadResource(relpath);
diff --git a/src/src/app.cpp b/src/src/app.cpp
index 9bb04d1cd..9bcdcb2d7 100644
--- a/src/src/app.cpp
+++ b/src/src/app.cpp
@@ -622,6 +622,10 @@ bool CodeBlocksApp::OnInit()
wxInitAllImageHandlers();
wxXmlResource::Get()->InitAllHandlers();
+ wxString m_originPATH;
+ wxGetEnv("PATH", &m_originPATH);
+ Manager::Get()->SetOriginPath(m_originPATH);
+
Manager::SetToolbarHandler(toolbarAddonHandler);
LogManager *log = Manager::Get()->GetLogManager();
--- End code ---
zetab:
--- Quote from: BlueHazzard on December 30, 2022, 07:08:34 pm ---Ok, i can reproduce this now...
I will look into it, but in theory it should not be a problem (beside, at least from my point of view, it is obvious a error in codeblocks) , because the current compiler is at the front of path, so it should always take this path first and so if there are clashes about naming it should always pick the right one.
Are you experiencing problems with this?
--- End quote ---
No, I haven't experienced any problem with this, it's just look strange to me.
I don't know whether this is a bug or a design in purpose.
If it's by design, I'm OK with it.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version