Skip to content

Commit 5135c9f

Browse files
committed
Improve MinGW installation detection
- Look for clang, gcc or clangd - Re-order search for MSYS2 MinGW subsystems - Add clang installation info and notes to 'Before you begin' page
1 parent 654e270 commit 5135c9f

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/Msys2ToolChainProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ private boolean addToolChain64(IToolChainManager manager, WindowsRegistry regist
8282
String installLocation = registry.getCurrentUserValue(key, "InstallLocation"); //$NON-NLS-1$
8383
Path msysPath = Paths.get(installLocation);
8484
boolean found = false;
85-
for (String variant : List.of("mingw64", "ucrt64")) { //$NON-NLS-1$ //$NON-NLS-2$
85+
for (String variant : List.of("ucrt64", "mingw64")) { //$NON-NLS-1$ //$NON-NLS-2$
8686
Path gccPath = msysPath.resolve(variant + "\\bin\\gcc.exe"); //$NON-NLS-1$
8787
if (Files.exists(gccPath)) {
8888
IEnvironmentVariable[] vars = createEnvironmentVariables(msysPath, gccPath.getParent());

core/org.eclipse.cdt.core/utils/org/eclipse/cdt/internal/core/MinGW.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public class MinGW {
4242
public static final String ENV_MSYS_HOME = "MSYS_HOME"; //$NON-NLS-1$
4343
private static final String ENV_PATH = "PATH"; //$NON-NLS-1$
4444
private static final Set<String> MSYS2_64BIT_NAMES = Set.of("MSYS2", "MSYS2 64bit"); //$NON-NLS-1$ //$NON-NLS-2$
45-
private static final List<String> MSYS2_MINGW_SUBSYSTEMS = List.of("mingw64", "mingw32", "ucrt64"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
45+
private static final List<String> MSYS2_MINGW_SUBSYSTEMS = List.of("ucrt64", "mingw64", "mingw32"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
46+
private static final List<String> MSYS2_MINGW_SUBSYSTEM_SELECTION_TOOLS = List.of("clangd", "clang", "gcc"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
4647

4748
private static final boolean isWindowsPlatform = Platform.getOS().equals(Platform.OS_WIN32);
4849

@@ -109,9 +110,14 @@ private static String findMinGWRoot(String envPathValue, String envMinGWHomeValu
109110
String installLocation = registry.getCurrentUserValue(compKey, "InstallLocation"); //$NON-NLS-1$
110111
for (String subsys : MSYS2_MINGW_SUBSYSTEMS) {
111112
String mingwLocation = installLocation + "\\" + subsys; //$NON-NLS-1$
112-
File gccFile = new File(mingwLocation + "\\bin\\gcc.exe"); //$NON-NLS-1$
113-
if (gccFile.canExecute()) {
114-
rootValue = mingwLocation;
113+
for (String toolName : MSYS2_MINGW_SUBSYSTEM_SELECTION_TOOLS) {
114+
File toolFile = new File(mingwLocation + "\\bin\\" + toolName + ".exe"); //$NON-NLS-1$ //$NON-NLS-2$
115+
if (toolFile.canExecute()) {
116+
rootValue = mingwLocation;
117+
break;
118+
}
119+
}
120+
if (null != rootValue) {
115121
break;
116122
}
117123
}

doc/org.eclipse.cdt.doc.user/concepts/cdt_c_before_you_begin.htm

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ <h2>Windows</h2>
3636
When you reach the UCRT64 environment prompt, use the following commands to install individual tools:</p>
3737
<p />
3838
<p><table style="border: 1px solid grey; border-collapse: collapse;">
39-
<tr><th style="border: 1px solid grey; padding: 5px;">Tool</th> <th style="border: 1px solid grey; padding: 5px;">Installation command</th><tr>
40-
<tr><td style="border: 1px solid grey; padding: 5px;">clangd</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-clang-tools-extra</tt></td></tr>
41-
<tr><td style="border: 1px solid grey; padding: 5px;">cmake</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-cmake</tt></td></tr>
42-
<tr><td style="border: 1px solid grey; padding: 5px;">gcc</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gcc</tt></td></tr>
43-
<tr><td style="border: 1px solid grey; padding: 5px;">gdb</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gdb</tt></td></tr>
44-
<tr><td style="border: 1px solid grey; padding: 5px;">make</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S make</tt></td></tr>
45-
<tr><td style="border: 1px solid grey; padding: 5px;">ninja</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-ninja</tt></td></tr>
39+
<tr><th style="border: 1px solid grey; padding: 5px;">Tool</th> <th style="border: 1px solid grey; padding: 5px;">Installation command</th> <th style="border: 1px solid grey; padding: 5px;">Notes</th><tr>
40+
<tr><td style="border: 1px solid grey; padding: 5px;">clang</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-clang</tt></td> <td style="border: 1px solid grey; padding: 5px;">Provides the <i>LLVM with Clang</i> toolchain</td></tr>
41+
<tr><td style="border: 1px solid grey; padding: 5px;">clangd</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-clang-tools-extra</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required by the <i>C/C++ Editor (LSP)</i></td></tr>
42+
<tr><td style="border: 1px solid grey; padding: 5px;">cmake</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-cmake</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required for building <i>CMake</i> projects</td></tr>
43+
<tr><td style="border: 1px solid grey; padding: 5px;">gcc</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gcc</tt></td> <td style="border: 1px solid grey; padding: 5px;">Provides the <i>MinGW GCC</i> toolchain</td></tr>
44+
<tr><td style="border: 1px solid grey; padding: 5px;">gdb</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-gdb</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required for debugging</td></tr>
45+
<tr><td style="border: 1px solid grey; padding: 5px;">make</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S make</tt></td> <td style="border: 1px solid grey; padding: 5px;">Required for building <i>Managed Build</i> projects</td></tr>
46+
<tr><td style="border: 1px solid grey; padding: 5px;">ninja</td> <td style="border: 1px solid grey; padding: 5px;"><tt>pacman -S mingw-w64-ucrt-x86_64-ninja</tt></td></td> <td style="border: 1px solid grey; padding: 5px;">Required for building <i>CMake</i> projects</td></tr>
4647
</table></p>
4748
</li>
4849

0 commit comments

Comments
 (0)