Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Recoskie2008-01-23 20:51:19 +0000
committerChris Recoskie2008-01-23 20:51:19 +0000
commitc0a19d0e10b00f7fad875aee2b44f60341605fb3 (patch)
tree0e092ac61fa9a317d3623207ff65dbadf98ebd2e /xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java
parentf629eec137401ebba0fa501790bf2bb658426fcb (diff)
downloadorg.eclipse.cdt-c0a19d0e10b00f7fad875aee2b44f60341605fb3.tar.gz
org.eclipse.cdt-c0a19d0e10b00f7fad875aee2b44f60341605fb3.tar.xz
org.eclipse.cdt-c0a19d0e10b00f7fad875aee2b44f60341605fb3.zip
fixing incorrect scanner info parser and fixing a misnamed package
Diffstat (limited to 'xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java')
-rw-r--r--xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java139
1 files changed, 139 insertions, 0 deletions
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
new file mode 100644
index 00000000000..c1eaa1eb7ab
--- /dev/null
+++ b/xlc/org.eclipse.cdt.make.xlc.core/src/org/eclipse/cdt/make/xlc/core/scannerconfig/XlCSpecsConsoleParser.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.make.xlc.core.scannerconfig;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser;
+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.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.cdt.core.IMarkerGenerator;
+
+/**
+ * Parses output of ppuxlc -E -v specs.c or ppuxlc -E -v specs.cpp command
+ *
+ * @author laggarcia
+ * @since 1.0.0
+ */
+public class XlCSpecsConsoleParser implements IScannerInfoConsoleParser {
+
+ // pattern for the output line of interest
+ final Pattern linePattern = Pattern
+ .compile("exec:\\s(?!export)(?:.*)\\((.*)\\)"); //$NON-NLS-1$
+
+ // pattern for the symbols arguments
+ final Pattern symbolPattern = Pattern.compile("-D(.*)"); //$NON-NLS-1$
+
+ // pattern for the includes arguments
+ final Pattern includePattern = Pattern
+ .compile("-(?:qgcc_c_stdinc|qc_stdinc|qgcc_cpp_stdinc|qcpp_stdinc)=(.*)"); //$NON-NLS-1$
+
+ private IProject fProject = null;
+
+ private IScannerInfoCollector fCollector = null;
+
+ private List symbols = new ArrayList();
+
+ private List includes = new ArrayList();
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser#startup(org.eclipse.core.resources.IProject,
+ * org.eclipse.core.runtime.IPath,
+ * org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector,
+ * org.eclipse.cdt.core.IMarkerGenerator)
+ * @since 1.0
+ */
+ public void startup(IProject project, IPath workingDirectory,
+ IScannerInfoCollector collector, IMarkerGenerator markerGenerator) {
+ this.fProject = project;
+ this.fCollector = collector;
+ }
+
+ /*
+ * Process an output line from the compiler command line used to retrieve
+ * standard information about the compiler being used. <p> During the
+ * processing, builds two List objects, one with the standard symbols
+ * defined in the compiler and other with the standard include directories.
+ *
+ * @param line the output line from the compiler command line used @return
+ * boolean
+ *
+ * @see org.eclipse.cdt.make.intrenal.core.scannerconfig.gnu.GCCSpecsConsoleParser#processLine(java.lang.String)
+ * @since 1.0
+ */
+ public boolean processLine(String line) {
+ boolean rc = false;
+ TraceUtil.outputTrace(
+ "XLCSpecsConsoleParser parsing line: [", line, "]"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ // testing the output line against the pattern of interest
+ Matcher lineMatcher = linePattern.matcher(line);
+ if (lineMatcher.matches()) {
+ // getting the arguments from the line of interest from the
+ // output
+ // generated in command line
+ String[] args = lineMatcher.group(1).split(","); //$NON-NLS-1$
+ for (int i = 0; i < args.length; i++) {
+ // getting the arguments of interest
+ Matcher symbolMatcher = symbolPattern.matcher(args[i]);
+ if (symbolMatcher.matches()
+ && !symbols.contains(symbolMatcher.group(1))) {
+ // if it is a symbol and it was not yet added
+ symbols.add(symbolMatcher.group(1));
+ } else {
+ // if it is not a symbol, check to see if it is an
+ // include
+ Matcher includeMatcher = includePattern.matcher(args[i]);
+ if (includeMatcher.matches()) {
+ // if it is a set of include paths, split it
+ String[] includePaths = includeMatcher.group(1).split(
+ ":"); //$NON-NLS-1$
+ for (int j = 0; j < includePaths.length; j++) {
+ if (!includes.contains(includePaths[j])) {
+ // if the include path was not yet added
+ includes.add(includePaths[j]);
+ }
+ }
+ }
+ }
+ }
+ }
+ return rc;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.make.internal.core.scannerconfig.IScannerInfoConsoleParser#shutdown()
+ * @since 1.0
+ */
+ public void shutdown() {
+ Map scannerInfo = new HashMap();
+ scannerInfo.put(ScannerInfoTypes.INCLUDE_PATHS, includes);
+ scannerInfo.put(ScannerInfoTypes.SYMBOL_DEFINITIONS, symbols);
+ fCollector.contributeToScannerConfig(fProject, scannerInfo);
+ TraceUtil
+ .outputTrace(
+ "Scanner info from \'specs\' file", //$NON-NLS-1$
+ "Include paths", includes, new ArrayList(), "Defined symbols", symbols); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+}

Back to the top