diff --git a/CodeLite/MSYS2.cpp b/CodeLite/MSYS2.cpp index 5ee0a18be8..8d798316f9 100644 --- a/CodeLite/MSYS2.cpp +++ b/CodeLite/MSYS2.cpp @@ -2,10 +2,15 @@ #include "cl_standard_paths.h" +#include #include #include #include +#ifdef __WXMSW__ +#include +#endif + bool MSYS2::FindInstallDir(wxString* msyspath) { if(m_checked_for_install_dir) { @@ -15,14 +20,36 @@ bool MSYS2::FindInstallDir(wxString* msyspath) m_checked_for_install_dir = true; - // try common paths - std::vector vpaths = { R"(C:\msys64)", R"(C:\msys2)", R"(C:\msys)" }; - for(const wxString& path : vpaths) { - if(wxFileName::DirExists(path)) { - m_install_dir = path; - *msyspath = m_install_dir; + wxString reg_install_path; +#ifdef __WXMSW__ + wxRegKey uninstall(wxRegKey::HKCU, R"(SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall)"); + wxString appname; + long dummy; + bool cont = uninstall.GetFirstKey(appname, dummy); + while(cont) { + wxString display_name; + wxRegKey appkey(wxRegKey::HKCU, R"(SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\)" + appname); + if(appkey.QueryValue("DisplayName", display_name) && display_name == "MSYS2 64bit") { + appkey.QueryValue("InstallLocation", reg_install_path); break; } + cont = uninstall.GetNextKey(appname, dummy); + } +#endif + + if(!reg_install_path.empty()) { + m_install_dir = reg_install_path; + *msyspath = m_install_dir; + } else { + // try common paths + std::vector vpaths = { R"(C:\msys64)", R"(C:\msys2)", R"(C:\msys)" }; + for(const wxString& path : vpaths) { + if(wxFileName::DirExists(path)) { + m_install_dir = path; + *msyspath = m_install_dir; + break; + } + } } return !m_install_dir.empty(); } diff --git a/TODO.TXT b/TODO.TXT index 377888f641..497156c087 100644 --- a/TODO.TXT +++ b/TODO.TXT @@ -7,4 +7,3 @@ Debug Adapter Client others: ---- -- Support code formatter for CMake (cmake-format) + update the docs on how to install it