Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/posix/PosixMakefile.java')
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/posix/PosixMakefile.java355
1 files changed, 0 insertions, 355 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/posix/PosixMakefile.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/posix/PosixMakefile.java
deleted file mode 100644
index 3e8a5b7fcb1..00000000000
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/posix/PosixMakefile.java
+++ /dev/null
@@ -1,355 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.make.internal.core.makefile.posix;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-import org.eclipse.cdt.make.core.MakeCorePlugin;
-import org.eclipse.cdt.make.core.makefile.IDirective;
-import org.eclipse.cdt.make.internal.core.makefile.AbstractMakefile;
-import org.eclipse.cdt.make.internal.core.makefile.BadDirective;
-import org.eclipse.cdt.make.internal.core.makefile.Command;
-import org.eclipse.cdt.make.internal.core.makefile.Comment;
-import org.eclipse.cdt.make.internal.core.makefile.DefaultRule;
-import org.eclipse.cdt.make.internal.core.makefile.Directive;
-import org.eclipse.cdt.make.internal.core.makefile.EmptyLine;
-import org.eclipse.cdt.make.internal.core.makefile.IgnoreRule;
-import org.eclipse.cdt.make.internal.core.makefile.InferenceRule;
-import org.eclipse.cdt.make.internal.core.makefile.MacroDefinition;
-import org.eclipse.cdt.make.internal.core.makefile.MakeFileConstants;
-import org.eclipse.cdt.make.internal.core.makefile.MakefileReader;
-import org.eclipse.cdt.make.internal.core.makefile.PosixRule;
-import org.eclipse.cdt.make.internal.core.makefile.PreciousRule;
-import org.eclipse.cdt.make.internal.core.makefile.Rule;
-import org.eclipse.cdt.make.internal.core.makefile.SccsGetRule;
-import org.eclipse.cdt.make.internal.core.makefile.SilentRule;
-import org.eclipse.cdt.make.internal.core.makefile.SpecialRule;
-import org.eclipse.cdt.make.internal.core.makefile.SuffixesRule;
-import org.eclipse.cdt.make.internal.core.makefile.Target;
-import org.eclipse.cdt.make.internal.core.makefile.TargetRule;
-import org.eclipse.cdt.make.internal.core.makefile.Util;
-import org.eclipse.core.runtime.Path;
-
-/**
- * Makefile : ( statement ) *
- * statement : rule | macro_definition | comments | empty
- * rule : inference_rule | target_rule | special_rule
- * inference_rule : target ':' [ ';' command ] <nl>
- [ ( command ) * ]
- * target_rule : [ ( target ) + ] ':' [ ( prerequisite ) * ] [ ';' command ] <nl>
- [ ( command ) * ]
- * macro_definition : string '=' ( string )*
- * comments : ('#' ( string ) <nl>) *
- * empty : <nl>
- * command : <tab> prefix_command string <nl>
- * target : string
- * prefix_command : '-' | '@' | '+'
- * internal_macro : "$<" | "$*" | "$@" | "$?" | "$%"
- */
-
-public class PosixMakefile extends AbstractMakefile {
-
- IDirective[] builtins = null;
-
- public PosixMakefile() {
- super(null);
- }
-
- public void parse(String name) throws IOException {
- FileReader stream = new FileReader(name);
- parse(name, stream);
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- }
- }
- }
-
- public void parse(String name, Reader reader) throws IOException {
- parse(name, new MakefileReader(reader));
- }
-
- protected void parse(String name, MakefileReader reader) throws IOException {
- String line;
- Rule[] rules = null;
- int startLine = 0;
- int endLine = 0;
-
- // Clear any old directives.
- clearDirectives();
-
- setFilename(name);
-
- while ((line = reader.readLine()) != null) {
- startLine = endLine + 1;
- endLine = reader.getLineNumber();
-
- // 1- Try command first, since we can not strip '#' in command line
- if (PosixMakefileUtil.isCommand(line)) {
- Command cmd = new Command(this, line);
- cmd.setLines(startLine, endLine);
- // The command is added to the rules
- if (rules != null) {
- for (int i = 0; i < rules.length; i++) {
- rules[i].addDirective(cmd);
- rules[i].setEndLine(endLine);
- }
- continue;
- }
- // If we have no rules for the command,
- // give the other directives a chance by falling through
- }
-
- // 2- Strip away any comments.
- int pound = Util.indexOfComment(line);
- if (pound != -1) {
- Comment cmt = new Comment(this, line.substring(pound + 1));
- cmt.setLines(startLine, endLine);
- if (rules != null) {
- for (int i = 0; i < rules.length; i++) {
- rules[i].addDirective(cmt);
- rules[i].setEndLine(endLine);
- }
- } else {
- addDirective(cmt);
- }
- line = line.substring(0, pound);
- // If all we have left are spaces continue
- if (Util.isEmptyLine(line)) {
- continue;
- }
- // The rest of the line maybe a valid directive.
- // keep on trying by falling through.
- }
-
- // 3- Empty lines ?
- if (Util.isEmptyLine(line)) {
- Directive empty = new EmptyLine(this);
- empty.setLines(startLine, endLine);
- if (rules != null) {
- for (int i = 0; i < rules.length; i++) {
- rules[i].addDirective(empty);
- rules[i].setEndLine(endLine);
- }
- } else {
- addDirective(empty);
- }
- continue;
- }
-
- // 4- reset the rules to null
- // The first non empty line that does not begin with a <TAB> or '#'
- // shall begin a new entry.
- rules = null;
-
- // 5- Check for the special rules.
- SpecialRule special = processSpecialRule(line);
- if (special != null) {
- rules = new Rule[] { special };
- special.setLines(startLine, endLine);
- addDirective(special);
- continue;
- }
-
- // 6- Check for inference rule.
- if (PosixMakefileUtil.isInferenceRule(line)) {
- InferenceRule irule = parseInferenceRule(line);
- irule.setLines(startLine, endLine);
- addDirective(irule);
- rules = new Rule[]{irule};
- continue;
- }
-
- // 7- Macro Definiton ?
- if (PosixMakefileUtil.isMacroDefinition(line)) {
- Directive stmt = parseMacroDefinition(line);
- stmt.setLines(startLine, endLine);
- addDirective(stmt);
- continue;
- }
-
- // 8- Target Rule ?
- if (PosixMakefileUtil.isTargetRule(line)) {
- TargetRule[] trules = parseTargetRule(line);
- for (int i = 0; i < trules.length; i++) {
- trules[i].setLines(startLine, endLine);
- addDirective(trules[i]);
- }
- rules = trules;
- continue;
- }
-
- // XXX ?? Should not be here.
- BadDirective stmt = new BadDirective(this, line);
- stmt.setLines(startLine, endLine);
- addDirective(stmt);
- }
- setLines(1, endLine);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.make.internal.core.makefile.AbstractMakefile#getBuiltins()
- */
- public IDirective[] getBuiltins() {
- if (builtins == null) {
- String location = "builtin" + File.separator + "posix.mk"; //$NON-NLS-1$ //$NON-NLS-2$
- try {
- InputStream stream = MakeCorePlugin.getDefault().openStream(new Path(location));
- PosixMakefile gnu = new PosixMakefile();
- gnu.parse(location, new InputStreamReader(stream));
- builtins = gnu.getDirectives();
- for (int i = 0; i < builtins.length; i++) {
- if (builtins[i] instanceof MacroDefinition) {
- ((MacroDefinition)builtins[i]).setFromDefault(true);
- }
- }
- } catch (Exception e) {
- //e.printStackTrace();
- }
- if (builtins == null) {
- builtins = new IDirective[0];
- }
- }
- return builtins;
- }
-
- /**
- * @param line
- * @return
- */
- protected SpecialRule processSpecialRule(String line) {
- line = line.trim();
- String keyword = null;
- String[] reqs = null;
- SpecialRule special = null;
- int index = Util.indexOf(line, ':');
- if (index != -1) {
- keyword = line.substring(0, index).trim();
- String req = line.substring(index + 1);
- reqs = PosixMakefileUtil.findPrerequisites(req);
- } else {
- keyword = line;
- reqs = new String[0];
- }
- if (keyword.equals(MakeFileConstants.RULE_IGNORE)) {
- special = new IgnoreRule(this, reqs);
- } else if (keyword.equals(MakeFileConstants.RULE_POSIX)) {
- special = new PosixRule(this);
- } else if (keyword.equals(MakeFileConstants.RULE_PRECIOUS)) {
- special = new PreciousRule(this, reqs);
- } else if (keyword.equals(MakeFileConstants.RULE_SILENT)) {
- special = new SilentRule(this, reqs);
- } else if (keyword.equals(MakeFileConstants.RULE_SUFFIXES)) {
- special = new SuffixesRule(this, reqs);
- } else if (keyword.equals(MakeFileConstants.RULE_DEFAULT)) {
- special = new DefaultRule(this, new Command[0]);
- } else if (keyword.equals(MakeFileConstants.RULE_SCCS_GET)) {
- special = new SccsGetRule(this, new Command[0]);
- }
- return special;
- }
-
- /**
- * Inference Rule
- */
- protected InferenceRule parseInferenceRule(String line) {
- String tgt;
- int index = Util.indexOf(line, ':');
- if (index != -1) {
- tgt = line.substring(0, index);
- } else {
- tgt = line;
- }
- return new InferenceRule(this, new Target(tgt));
- }
-
- /**
- * MacroDefinition
- */
- protected MacroDefinition parseMacroDefinition(String line) {
- String name;
- String value;
- int index = Util.indexOf(line, '=');
- if (index != -1) {
- name = line.substring(0, index).trim();
- value = line.substring(index + 1).trim();
- } else {
- name = line;
- value = ""; //$NON-NLS-1$
- }
- return new MacroDefinition(this, name, new StringBuffer(value));
- }
-
- /**
- * TargetRule
- */
- protected TargetRule[] parseTargetRule(String line) {
- String[] targets;
- String[] reqs;
- String cmd = null;
- int index = Util.indexOf(line, ':');
- if (index != -1) {
- String target = line.substring(0, index);
- // Tokenize the targets
- targets = PosixMakefileUtil.findTargets(target);
-
- String req = line.substring(index + 1);
- int semicolon = Util.indexOf(req, ';');
- if (semicolon != -1) {
- String c = req.substring(semicolon + 1).trim();
- if (c.length() > 0) {
- cmd = c;
- }
- req = req.substring(0, semicolon);
- }
- reqs = PosixMakefileUtil.findPrerequisites(req);
- } else {
- targets = PosixMakefileUtil.findTargets(line);
- reqs = new String[0];
- }
-
- TargetRule[] targetRules = new TargetRule[targets.length];
- for (int i = 0; i < targets.length; i++) {
- targetRules[i] = new TargetRule(this, new Target(targets[i]), reqs);
- if (cmd != null) {
- Command command = new Command(this, cmd);
- targetRules[i].addDirective(command);
- }
- }
- return targetRules;
- }
-
- public static void main(String[] args) {
- try {
- String filename = "Makefile"; //$NON-NLS-1$
- if (args.length == 1) {
- filename = args[0];
- }
- PosixMakefile makefile = new PosixMakefile();
- makefile.parse(filename);
- IDirective[] directives = makefile.getDirectives();
- //IDirective[] directives = makefile.getBuiltins();
- for (int i = 0; i < directives.length; i++) {
- //System.out.println("Rule[" + i +"]");
- System.out.print(directives[i]);
- }
- } catch (IOException e) {
- System.out.println(e);
- }
- }
-
-}

Back to the top