[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Scanner config discovery - fix for PR 60181
|
This patch contains fix for:
PR 60181 - [ScannerConfig] Gets confused
on IncludePaths with spaces
Thanks,
Vmir
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java,v
retrieving revision 1.7
diff -u -r1.7 ScannerInfoCollector.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java 5 May 2004 18:29:42 -0000 1.7
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java 6 May 2004 19:13:07 -0000
@@ -300,11 +300,17 @@
IPath realPath = new Path(includePath);
if (!realPath.toFile().exists()) {
String translatedPath = new CygpathTranslator(currentProject, includePath).run();
- if (!translatedPath.equals(includePath)) {
- // Check if the translated path exists
- IPath transPath = new Path(translatedPath);
- if (transPath.toFile().exists()) {
- translatedIncludePaths.add(translatedPath);
+ if (translatedPath != null) {
+ if (!translatedPath.equals(includePath)) {
+ // Check if the translated path exists
+ IPath transPath = new Path(translatedPath);
+ if (transPath.toFile().exists()) {
+ translatedIncludePaths.add(translatedPath);
+ }
+ else {
+ // TODO VMIR for now add even if it does not exist
+ translatedIncludePaths.add(translatedPath);
+ }
}
else {
// TODO VMIR for now add even if it does not exist
@@ -312,8 +318,8 @@
}
}
else {
- // TODO VMIR for now add even if it does not exist
- translatedIncludePaths.add(translatedPath);
+ TraceUtil.outputError("CygpathTranslator unable to translate path: ",//$NON-NLS-1$
+ includePath);
}
}
else {
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java,v
retrieving revision 1.6
diff -u -r1.6 GCCScannerInfoConsoleParser.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java 5 May 2004 18:29:42 -0000 1.6
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java 6 May 2004 19:13:07 -0000
@@ -10,8 +10,6 @@
**********************************************************************/
package org.eclipse.cdt.make.internal.core.scannerconfig.gnu;
-import java.util.StringTokenizer;
-
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.cdt.core.IMarkerGenerator;
@@ -21,6 +19,8 @@
import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
import java.util.List;
/**
@@ -67,10 +67,21 @@
}
// Known patterns:
// (a) gcc|g++ ... -Dxxx -Iyyy ...
- StringTokenizer scanner = new StringTokenizer(line);
- if (scanner.countTokens() <= 1)
+ ArrayList allTokens = new ArrayList();
+ String[] tokens = line.split("\"");
+ for (int i = 0; i < tokens.length; ++i) {
+ if (i % 2 == 0) { // even tokens need further tokenization
+ String[] sTokens = tokens[i].split("\\s");
+ allTokens.addAll(Arrays.asList(sTokens));
+ }
+ else {
+ allTokens.add(tokens[i]);
+ }
+ }
+ if (allTokens.size() <= 1)
return false;
- String token = scanner.nextToken().toLowerCase();
+ Iterator I = allTokens.iterator();
+ String token = ((String) I.next()).toLowerCase();
if (token.endsWith("gcc") || token.endsWith("g++")) {//$NON-NLS-1$ //$NON-NLS-2$
// Recognized gcc or g++ compiler invocation
List includes = new ArrayList();
@@ -80,44 +91,47 @@
rc = true;
String fileName = null;
String cashedToken = null;
- while (scanner.hasMoreTokens()) {
+ while (I.hasNext()) {
if (cashedToken == null) {
- token = scanner.nextToken();
+ token = (String) I.next();
}
else {
token = cashedToken;
cashedToken = null;
}
+ if (token.length() == 0) {
+ continue;
+ }
if (token.startsWith("-D")) {//$NON-NLS-1$
String symbol = token.substring(2);
if (symbol.length() == 0) {
- if (scanner.hasMoreTokens()) {
- symbol = scanner.nextToken();
- if (symbol.startsWith("-")) { //$NON-NLS-1$
- cashedToken = symbol;
- continue;
- }
+ if (I.hasNext()) {
+ symbol = (String) I.next();
}
else {
continue;
}
}
+ if (symbol.charAt(0) == '-') {
+ cashedToken = symbol;
+ continue;
+ }
if (!symbols.contains(symbol))
symbols.add(symbol);
}
else if (token.startsWith("-I")) {//$NON-NLS-1$
String iPath = token.substring(2);
if (iPath.length() == 0) {
- if (scanner.hasMoreTokens()) {
- iPath = scanner.nextToken();
- if (iPath.startsWith("-")) { //$NON-NLS-1$
- cashedToken = iPath;
- continue;
- }
+ if (I.hasNext()) {
+ iPath = (String) I.next();
}
else {
continue;
}
+ }
+ if (iPath.charAt(0) == '-') {
+ cashedToken = iPath;
+ continue;
}
String nPath = fUtil.normalizePath(iPath);
if (!includes.contains(nPath))
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/util/CygpathTranslator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/CygpathTranslator.java,v
retrieving revision 1.1
diff -u -r1.1 CygpathTranslator.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/util/CygpathTranslator.java 16 Mar 2004 20:35:25 -0000 1.1
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/util/CygpathTranslator.java 6 May 2004 19:13:07 -0000
@@ -44,6 +44,9 @@
ISafeRunnable runnable = new ISafeRunnable() {
public void run() throws Exception {
transPath = platformRun();
+ if (transPath.startsWith("cygpath:")) { //$NON-NLS-1$
+ transPath = null;
+ }
}
public void handleException(Throwable exception) {