Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Recoskie2010-05-20 13:21:14 -0400
committerChris Recoskie2010-05-20 13:21:14 -0400
commit41cd409a389e730be16e973535847ef8643974ca (patch)
tree80399a2273f4fed8fa1fe7f21ac8731fcd299281 /xlc/org.eclipse.cdt.make.xlc.core
parentba8fbc6c870fc69e45bf487a09f45227d5b4c766 (diff)
downloadorg.eclipse.cdt-41cd409a389e730be16e973535847ef8643974ca.tar.gz
org.eclipse.cdt-41cd409a389e730be16e973535847ef8643974ca.tar.xz
org.eclipse.cdt-41cd409a389e730be16e973535847ef8643974ca.zip
fix for 313531 (xlc scanner discovery per file build output parser doesn't recognize automake format)
Diffstat (limited to 'xlc/org.eclipse.cdt.make.xlc.core')
-rw-r--r--xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java7
-rw-r--r--xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XLCPerFileBuildOutputParser.java92
2 files changed, 87 insertions, 12 deletions
diff --git a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java
index 69f62b6409..1d5f659982 100644
--- a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java
+++ b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/PerFileXLCScannerInfoCollector.java
@@ -1373,8 +1373,11 @@ public class PerFileXLCScannerInfoCollector implements IScannerInfoCollector3, I
List<String> projectSymbols = (List<String>) projectScannerInfo
.get(ScannerInfoTypes.SYMBOL_DEFINITIONS);
- for (String symbol : projectSymbols) {
- symbols.put(symbol, "1"); //$NON-NLS-1$
+ if (projectSymbols != null) {
+
+ for (String symbol : projectSymbols) {
+ symbols.put(symbol, "1"); //$NON-NLS-1$
+ }
}
}
diff --git a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XLCPerFileBuildOutputParser.java b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XLCPerFileBuildOutputParser.java
index 32fced2edc..823ec64c86 100644
--- a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XLCPerFileBuildOutputParser.java
+++ b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XLCPerFileBuildOutputParser.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.make.xlc.core.scannerconfig;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -47,19 +48,39 @@ public class XLCPerFileBuildOutputParser extends AbstractXLCBuildOutputParser {
int extensionsIndex = -1;
boolean found = false;
String filePath = null;
- for (int i = compilerInvocationIndex + 1; i < tokens.length; i++) {
- String token = tokens[i];
- int k = token.lastIndexOf('.');
- if (k != -1 && (token.length() - k < 5)) {
- String fileExtension = token.substring(k);
+
+ // check for automake format first
+ // e.g. line will start with
+ // source='/some/path/source.cpp'
+ int automakeSrcIndex = findAutoMakeSourceIndex(tokens);
+ if(automakeSrcIndex != -1) {
+ filePath = getAutoMakeSourcePath(tokens[automakeSrcIndex]);
+ int k = filePath.lastIndexOf('.');
+ if (k != -1 && (filePath.length() - k < 5)) {
+ String fileExtension = filePath.substring(k);
extensionsIndex = getFileExtensionsList().indexOf(fileExtension);
if (extensionsIndex != -1) {
- filePath = token;
found = true;
- break;
}
}
}
+
+ if (!found) {
+ for (int i = compilerInvocationIndex + 1; i < tokens.length; i++) {
+ String token = tokens[i];
+ int k = token.lastIndexOf('.');
+ if (k != -1 && (token.length() - k < 5)) {
+ String fileExtension = token.substring(k);
+ extensionsIndex = getFileExtensionsList().indexOf(fileExtension);
+ if (extensionsIndex != -1) {
+ filePath = token;
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+
if (!found) {
TraceUtil.outputTrace("Error identifying file name :1", tokens, TraceUtil.EOL); //$NON-NLS-1$
return false;
@@ -105,7 +126,7 @@ public class XLCPerFileBuildOutputParser extends AbstractXLCBuildOutputParser {
} else {
file = getUtility().findFileInWorkspace(pFilePath);
}
- if (file != null) {
+ if (true /*file != null*/) {
CCommandDSC cmd = getUtility().getNewCCommandDSC(tokens, compilerInvocationIndex, extensionsIndex > 0);
List<CCommandDSC> cmdList = new ArrayList<CCommandDSC>();
cmdList.add(cmd);
@@ -121,8 +142,34 @@ public class XLCPerFileBuildOutputParser extends AbstractXLCBuildOutputParser {
Activator.log(e);
}
}
- } else
- TraceUtil.outputError("Build command for file outside project: " + pFilePath.toString(), tokens); //$NON-NLS-1$
+ } else {
+ /*
+ //TraceUtil.outputError("Build command for file outside project: " + pFilePath.toString(), tokens); //$NON-NLS-1$
+ // put the info on the project
+ //CCommandDSC cmd = getUtility().getNewCCommandDSC(tokens, compilerInvocationIndex, extensionsIndex > 0);
+ //List<CCommandDSC> cmdList = new ArrayList<CCommandDSC>();
+// cmdList.add(cmd);
+ Map<ScannerInfoTypes, List<?>> sc = new HashMap<ScannerInfoTypes, List<?>>();
+// sc.put(ScannerInfoTypes.COMPILER_COMMAND, cmdList);
+
+
+ // put in empty info for the other types
+ sc.put(ScannerInfoTypes.INCLUDE_PATHS, new LinkedList<String>());
+ sc.put(ScannerInfoTypes.SYMBOL_DEFINITIONS, new LinkedList<String>());
+
+ getCollector().contributeToScannerConfig(getProject(), sc);
+ if (fCollector != null && fCollector instanceof IScannerInfoCollector2) {
+ IScannerInfoCollector2 collector = (IScannerInfoCollector2) fCollector;
+ try {
+ collector.updateScannerConfiguration(null);
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ Activator.log(e);
+ }
+ }
+
+ */
+ }
}
return true;
@@ -133,4 +180,29 @@ public class XLCPerFileBuildOutputParser extends AbstractXLCBuildOutputParser {
}
}
+ private String getAutoMakeSourcePath(String string) {
+ // path may be enclosed in single quotes
+ int firstQuoteIndex = string.indexOf('\'');
+ int lastQuoteIndex = string.lastIndexOf('\'');
+ if(firstQuoteIndex != -1 && lastQuoteIndex != -1)
+ return string.substring(firstQuoteIndex, lastQuoteIndex);
+ else {
+ // just take everything after the equals sign
+ int equalsIndex = string.indexOf('=');
+ if(equalsIndex != -1 && equalsIndex < string.length())
+ return string.substring(equalsIndex+1);
+
+ }
+ return null;
+ }
+
+ private int findAutoMakeSourceIndex(String[] tokens) {
+ for (int i = 0; i < tokens.length; i++) {
+ final String token = tokens[i].toLowerCase();
+ if(token.indexOf("source=") != -1) //$NON-NLS-1$
+ return i;
+ }
+ return -1;
+ }
+
}

Back to the top