diff options
2 files changed, 49 insertions, 4 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 fcd524e28b5..97a52ad4ae1 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 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 IBM Corporation and others. + * Copyright (c) 2007, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -1376,7 +1376,10 @@ public class PerFileXLCScannerInfoCollector implements IScannerInfoCollector3, I if (projectSymbols != null) { for (String symbol : projectSymbols) { - symbols.put(symbol, "1"); //$NON-NLS-1$ + if (symbol.matches("_Builtin")) //$NON-NLS-1$ + symbols.put(symbol,""); //$NON-NLS-1$ + else + 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/XlCSpecsConsoleParser.java b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java index d4fbeb094a5..3f467bd1a5b 100644 --- a/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java +++ b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2011 IBM Corporation and others. + * Copyright (c) 2006, 2012 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -23,9 +23,12 @@ import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector; import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil; import org.eclipse.cdt.make.xlc.core.activator.Activator; +import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.cdt.core.CCProjectNature; +import org.eclipse.cdt.core.CProjectNature; import org.eclipse.cdt.core.IMarkerGenerator; /** @@ -47,8 +50,12 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { final Pattern includePattern = Pattern .compile("-(?:qgcc_c_stdinc|qc_stdinc|qgcc_cpp_stdinc|qcpp_stdinc)=(.*)"); //$NON-NLS-1$ + final Pattern C_includePattern = Pattern.compile("-(?:qgcc_c_stdinc|qc_stdinc)=(.*)"); //$NON-NLS-1$ + final Pattern CXX_includePattern = Pattern.compile("-(?:qgcc_cpp_stdinc|qcpp_stdinc)=(.*)"); //$NON-NLS-1$ + // xlC compiler constants protected final static String [] compilerConstants = { + "_Builtin", //$NON-NLS-1$ "__IBMCPP__", //$NON-NLS-1$ "__xlC__", //$NON-NLS-1$ "__IBMC__", //$NON-NLS-1$ @@ -62,6 +69,22 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { protected List<String> symbols = new ArrayList<String>(); protected List<String> includes = new ArrayList<String>(); + + protected List<String> c_includes = new ArrayList<String>(); + protected List<String> cpp_includes = new ArrayList<String>(); + + boolean c_lang; // if language is C only search for the C include paths from the XL Compiler, otherwise get the C++ ones. + public boolean isC_lang() { + return c_lang; + } + + public void setC_lang(boolean c_lang) { + this.c_lang = c_lang; + } + +// protected List<String> c_includes = new ArrayList<String>(); +// protected List<String> cxx_includes = new ArrayList<String>(); +// /* * (non-Javadoc) @@ -76,6 +99,23 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { IScannerInfoCollector collector, IMarkerGenerator markerGenerator) { this.fProject = project; this.fCollector = collector; + + try { + if (project.hasNature(CCProjectNature.CC_NATURE_ID)) { + // use C++ pattern + c_lang = false; + } + else { + // use C pattern + c_lang = true; + } + + + + } catch (CoreException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } /* @@ -112,7 +152,9 @@ public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser { } else { // if it is not a symbol, check to see if it is an // include - Matcher includeMatcher = includePattern.matcher(args[i]); + + // ok parse the C include paths ... and then the cpp include paths. + Matcher includeMatcher = c_lang ? C_includePattern.matcher(args[i]) : CXX_includePattern.matcher(args[i]); if (includeMatcher.matches()) { // if it is a set of include paths, split it String[] includePaths = includeMatcher.group(1).split( |