diff options
author | Christian Sell | 2016-12-12 17:13:48 +0000 |
---|---|---|
committer | Doug Schaefer | 2016-12-15 14:44:05 +0000 |
commit | e0c3180f80a6d779773813de8a9e62133ef609e9 (patch) | |
tree | 23abf22255f3a39dc5f2536658b084c67ab73c9d /build/org.eclipse.cdt.build.gcc.core | |
parent | a6e77633bdc8fa98473f7212150a7f638c45b28a (diff) | |
download | org.eclipse.cdt-e0c3180f80a6d779773813de8a9e62133ef609e9.tar.gz org.eclipse.cdt-e0c3180f80a6d779773813de8a9e62133ef609e9.tar.xz org.eclipse.cdt-e0c3180f80a6d779773813de8a9e62133ef609e9.zip |
Bug 503153.Fixed NPE in GCCToolChain.getDefaultScannerInfo()
Change-Id: I51c4d4c2e517fc5743b180c99212dc9c3b8134ed
Signed-off-by: Christian Sell <c.sell@byterefinery.de>
Diffstat (limited to 'build/org.eclipse.cdt.build.gcc.core')
-rw-r--r-- | build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/GCCPathToolChainProvider.java | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/GCCPathToolChainProvider.java b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/GCCPathToolChainProvider.java index 61a0b69f307..c7beb398884 100644 --- a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/GCCPathToolChainProvider.java +++ b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/GCCPathToolChainProvider.java @@ -30,7 +30,8 @@ public class GCCPathToolChainProvider implements IToolChainProvider { private static final String ID = "org.eclipse.cdt.build.gcc.core.gccPathProvider"; //$NON-NLS-1$ - private static final Pattern gccPattern = Pattern.compile("(.*-)?(gcc|g\\+\\+|clang|clang\\+\\+)"); //$NON-NLS-1$ + private static final Pattern gppPattern = Pattern.compile("(.*-)?(g\\+\\+|clang\\+\\+)"); //$NON-NLS-1$ + private static final Pattern gccPattern = Pattern.compile("(.*-)?(gcc|clang)"); //$NON-NLS-1$ private static final Pattern versionPattern = Pattern.compile(".*(gcc|LLVM) version .*"); //$NON-NLS-1$ private static final Pattern targetPattern = Pattern.compile("Target: (.*)"); //$NON-NLS-1$ @@ -48,9 +49,28 @@ public class GCCPathToolChainProvider implements IToolChainProvider { File dir = new File(dirStr); if (dir.isDirectory()) { for (String file : dir.list()) { + String prefix = null; + boolean hasAltCmd = false; + Matcher matcher = gccPattern.matcher(file); if (matcher.matches()) { - String prefix = matcher.group(1); + prefix = matcher.group(1); + String cmd = matcher.group(2); + String altFile = prefix + (cmd.startsWith("g") ? "g++" : "clang++"); + File altCmd = new File(dir, altFile); + hasAltCmd = altCmd.exists() && altCmd.canExecute(); + } + else { + matcher = gppPattern.matcher(file); + if (matcher.matches()) { + prefix = matcher.group(1); + String cmd = matcher.group(2); + String altFile = prefix + (cmd.startsWith("g") ? "gcc" : "clang"); + File altCmd = new File(dir, altFile); + hasAltCmd = altCmd.exists() && altCmd.canExecute(); + } + } + if (prefix != null && hasAltCmd) { String command = dirStr + File.separatorChar + file; try { Process proc = new ProcessBuilder(new String[] { command, "-v" }).redirectErrorStream(true) //$NON-NLS-1$ |