diff options
Diffstat (limited to 'build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/gnu/GNUMakefile.java')
-rw-r--r-- | build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/gnu/GNUMakefile.java | 815 |
1 files changed, 0 insertions, 815 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/gnu/GNUMakefile.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/gnu/GNUMakefile.java deleted file mode 100644 index c07aac99161..00000000000 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/makefile/gnu/GNUMakefile.java +++ /dev/null @@ -1,815 +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.gnu; - -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 java.util.ArrayList; -import java.util.List; -import java.util.Stack; -import java.util.StringTokenizer; - -import org.eclipse.cdt.make.core.MakeCorePlugin; -import org.eclipse.cdt.make.core.makefile.IDirective; -import org.eclipse.cdt.make.core.makefile.gnu.IGNUMakefile; -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 - * inference_rule : target ':' <nl> ( <tab> command <nl> ) + - * target_rule : target [ ( 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 GNUMakefile extends AbstractMakefile implements IGNUMakefile { - - public static String PATH_SEPARATOR = System.getProperty("path.separator", ":"); //$NON-NLS-1$ //$NON-NLS-2$ - public static String FILE_SEPARATOR = System.getProperty("file.separator", "/"); //$NON-NLS-1$ //$NON-NLS-2$ - - String[] includeDirectories = new String[0]; - IDirective[] builtins = null; - - public GNUMakefile() { - 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; - Stack conditions = new Stack(); - Stack defines = new Stack(); - int startLine = 0; - int endLine = 0; - - // Clear any old directives. - clearDirectives(); - - setFilename(name); - - while ((line = reader.readLine()) != null) { - startLine = endLine + 1; - endLine = reader.getLineNumber(); - - // Check if we enter in "define" - if (GNUMakefileUtil.isEndef(line)) { - // We should have a "define" for a "endef". - if (!defines.empty()) { - VariableDefinition def = (VariableDefinition) defines.pop(); - def.setEndLine(endLine); - } - Endef endef = new Endef(this); - endef.setLines(startLine, endLine); - addDirective(conditions, endef); - continue; - } else if (GNUMakefileUtil.isDefine(line)) { - VariableDefinition def = parseVariableDefinition(line); - def.setLines(startLine, endLine); - addDirective(conditions, def); - defines.push(def); - continue; - } else if (GNUMakefileUtil.isOverrideDefine(line)) { - VariableDefinition oDef = parseVariableDefinition(line); - oDef.setLines(startLine, endLine); - addDirective(conditions, oDef); - defines.push(oDef); - continue; - } - - // We still in a define. - if (!defines.empty()) { - VariableDefinition def = (VariableDefinition) defines.peek(); - StringBuffer sb = def.getValue(); - if (sb.length() > 0) { - sb.append('\n'); - } - sb.append(line); - continue; - } - - // 1- Try command first, since we can not strip '#' in command line - if (GNUMakefileUtil.isCommand(line)) { - Command cmd = new Command(this, line); - cmd.setLines(startLine, endLine); - if (!conditions.empty()) { - addDirective(conditions, cmd); - continue; - } else if (rules != null) { - // The command is added to the rules - for (int i = 0; i < rules.length; i++) { - rules[i].addDirective(cmd); - rules[i].setEndLine(endLine); - } - continue; - } - // If we have no rules/condition 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) { - // The comment is added to the rules. - for (int i = 0; i < rules.length; i++) { - rules[i].addDirective(cmt); - rules[i].setEndLine(endLine); - } - } else { - addDirective(conditions, 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 directives. - // 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) { - // The EmptyLine is added to the rules. - for (int i = 0; i < rules.length; i++) { - rules[i].addDirective(empty); - rules[i].setEndLine(endLine); - } - } else { - addDirective(conditions, 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; - - if (GNUMakefileUtil.isElse(line)) { - Conditional elseDirective = parseConditional(line); - elseDirective.setLines(startLine, endLine); - // Are we missing a if condition ? - if (!conditions.empty()) { - Conditional cond = (Conditional) conditions.pop(); - cond.setEndLine(endLine - 1); - } - addDirective(conditions, elseDirective); - conditions.push(elseDirective); - continue; - } else if (GNUMakefileUtil.isEndif(line)) { - Endif endif = new Endif(this); - endif.setLines(startLine, endLine); - // Are we missing a if/else condition ? - if (!conditions.empty()) { - Conditional cond = (Conditional) conditions.pop(); - cond.setEndLine(endLine); - } - addDirective(conditions, endif); - continue; - } - - // 5- Check for the conditionnals. - Directive directive = processConditions(line); - if (directive != null) { - directive.setLines(startLine, endLine); - addDirective(conditions, directive); - conditions.push(directive); - continue; - } - - // 6- Check for other special gnu directives. - directive = processGNUDirectives(line); - if (directive != null) { - directive.setLines(startLine, endLine); - addDirective(conditions, directive); - continue; - } - - // 7- Check for GNU special rules. - SpecialRule special = processSpecialRules(line); - if (special != null) { - rules = new Rule[] { special }; - special.setLines(startLine, endLine); - addDirective(conditions, special); - continue; - } - - // - Check for inference rule. - if (GNUMakefileUtil.isInferenceRule(line)) { - InferenceRule irule = parseInferenceRule(line); - irule.setLines(startLine, endLine); - addDirective(conditions, irule); - rules = new Rule[] { irule }; - continue; - } - - // - Variable Definiton ? - if (GNUMakefileUtil.isVariableDefinition(line)) { - Directive stmt = parseVariableDefinition(line); - stmt.setLines(startLine, endLine); - addDirective(conditions, stmt); - continue; - } - - // - GNU Static Target rule ? - if (GNUMakefileUtil.isStaticTargetRule(line)) { - StaticTargetRule[] srules = parseStaticTargetRule(line); - for (int i = 0; i < srules.length; i++) { - srules[i].setLines(startLine, endLine); - addDirective(conditions, srules[i]); - } - rules = srules; - continue; - } - - // - Target Rule ? - if (GNUMakefileUtil.isGNUTargetRule(line)) { - TargetRule[] trules = parseGNUTargetRules(line); - for (int i = 0; i < trules.length; i++) { - trules[i].setLines(startLine, endLine); - addDirective(conditions, trules[i]); - } - rules = trules; - continue; - } - - // XXX ?? Should not be here. - BadDirective stmt = new BadDirective(this, line); - stmt.setLines(startLine, endLine); - addDirective(conditions, stmt); - - } - setLines(1, endLine); - // TEST please remove. - //GNUMakefileValidator validator = new GNUMakefileValidator(); - //validator.validateDirectives(null, getDirectives()); - } - - private void addDirective(Stack conditions, Directive directive) { - if (conditions.empty()) { - addDirective(directive); - } else { - Conditional cond = (Conditional) conditions.peek(); - cond.addDirective(directive); - cond.setEndLine(directive.getEndLine()); - } - } - - protected Conditional processConditions(String line) { - Conditional stmt = null; - if (GNUMakefileUtil.isIfdef(line)) { - stmt = parseConditional(line); - } else if (GNUMakefileUtil.isIfndef(line)) { - stmt = parseConditional(line); - } else if (GNUMakefileUtil.isIfeq(line)) { - stmt = parseConditional(line); - } else if (GNUMakefileUtil.isIfneq(line)) { - stmt = parseConditional(line); - } - return stmt; - } - - protected Directive processGNUDirectives(String line) { - Directive stmt = null; - if (GNUMakefileUtil.isUnExport(line)) { - stmt = parseUnExport(line); - } else if (GNUMakefileUtil.isVPath(line)) { - stmt = parseVPath(line); - } else if (GNUMakefileUtil.isInclude(line)) { - stmt = parseInclude(line); - } - return stmt; - } - - protected SpecialRule processSpecialRules(String line) { - SpecialRule stmt = null; - if (GNUMakefileUtil.isIgnoreRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isPosixRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isPreciousRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isSilentRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isSuffixesRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isDefaultRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isSccsGetRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isPhonyRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isIntermediateRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isSecondaryRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isDeleteOnErrorRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isLowResolutionTimeRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isExportAllVariablesRule(line)) { - stmt = parseSpecialRule(line); - } else if (GNUMakefileUtil.isNotParallelRule(line)) { - stmt = parseSpecialRule(line); - } - return stmt; - } - - /** - * @param line - * @return - */ - protected SpecialRule parseSpecialRule(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 = GNUMakefileUtil.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]); - } else if (keyword.equals(GNUMakefileConstants.RULE_PHONY)) { - special = new PhonyRule(this, reqs); - } else if (keyword.equals(GNUMakefileConstants.RULE_INTERMEDIATE)) { - special = new IntermediateRule(this, reqs); - } else if (keyword.equals(GNUMakefileConstants.RULE_SECONDARY)) { - special = new SecondaryRule(this, reqs); - } else if (keyword.equals(GNUMakefileConstants.RULE_DELETE_ON_ERROR)) { - special = new DeleteOnErrorRule(this, reqs); - } else if (keyword.equals(GNUMakefileConstants.RULE_LOW_RESOLUTION_TIME)) { - special = new LowResolutionTimeRule(this, reqs); - } else if (keyword.equals(GNUMakefileConstants.RULE_EXPORT_ALL_VARIABLES)) { - special = new ExportAllVariablesRule(this, reqs); - } else if (keyword.equals(GNUMakefileConstants.RULE_NOT_PARALLEL)) { - special = new NotParallelRule(this, reqs); - } - return special; - } - - /** - * - * ifdef CONDITIONAL - * ifeq CONDITIONAL - * ifneq CONDITIONAL - * else - * - * @param line - * @return - */ - protected Conditional parseConditional(String line) { - Conditional condition = null; - line = line.trim(); - String keyword = null; - // Move pass the keyword - for (int i = 0; i < line.length(); i++) { - if (Util.isSpace(line.charAt(i))) { - keyword = line.substring(0, i); - line = line.substring(i).trim(); - break; - } - } - if (keyword == null) { - keyword = line; - } - if (keyword.equals(GNUMakefileConstants.CONDITIONAL_IFDEF)) { - condition = new Ifdef(this, line); - } else if (keyword.equals(GNUMakefileConstants.CONDITIONAL_IFNDEF)) { - condition = new Ifndef(this, line); - } else if (keyword.equals(GNUMakefileConstants.CONDITIONAL_IFEQ)) { - condition = new Ifeq(this, line); - } else if (keyword.equals(GNUMakefileConstants.CONDITIONAL_IFNEQ)) { - condition = new Ifneq(this, line); - } else if (keyword.equals(GNUMakefileConstants.CONDITIONAL_ELSE)) { - condition = new Else(this); - } - return condition; - } - - /** - * Format of the include directive: - * include filename1 filename2 ... - */ - protected Include parseInclude(String line) { - String[] filenames; - StringTokenizer st = new StringTokenizer(line); - int count = st.countTokens(); - if (count > 0) { - filenames = new String[count - 1]; - for (int i = 0; i < count; i++) { - if (i == 0) { - st.nextToken(); - // ignore the "include" keyword. - continue; - } - filenames[i - 1] = st.nextToken(); - } - } else { - filenames = new String[0]; - } - return new Include(this, filenames, getIncludeDirectories()); - } - - /** - * There are three forms of the "vpath" directive: - * "vpath PATTERN DIRECTORIES" - * Specify the search path DIRECTORIES for file names that match PATTERN. - * - * The search path, DIRECTORIES, is a list of directories to be - * searched, separated by colons (semi-colons on MS-DOS and - * MS-Windows) or blanks, just like the search path used in the `VPATH' variable. - * - * "vpath PATTERN" - * Clear out the search path associated with PATTERN. - * - * "vpath" - * Clear all search paths previously specified with `vpath' directives. - */ - protected VPath parseVPath(String line) { - String pattern = null; - String[] directories; - StringTokenizer st = new StringTokenizer(line); - int count = st.countTokens(); - List dirs = new ArrayList(count); - if (count > 0) { - for (int i = 0; i < count; i++) { - if (count == 0) { - // ignore the "vpath" directive - st.nextToken(); - } else if (count == 1) { - pattern = st.nextToken(); - } else if (count == 3) { - String delim = " \t\n\r\f" + GNUMakefile.PATH_SEPARATOR; //$NON-NLS-1$ - dirs.add(st.nextToken(delim)); - } else { - dirs.add(st.nextToken()); - } - } - } - directories = (String[]) dirs.toArray(new String[0]); - if (pattern == null) { - pattern = new String(); - } - return new VPath(this, pattern, directories); - } - - /** - * @param line - * @return - */ - protected UnExport parseUnExport(String line) { - // Pass over "unexport" - for (int i = 0; i < line.length(); i++) { - if (Util.isSpace(line.charAt(i))) { - line = line.substring(i).trim(); - break; - } - } - return new UnExport(this, line); - } - - protected GNUTargetRule[] parseGNUTargetRules(String line) { - String[] targetNames; - String[] normalReqs; - String[] orderReqs; - String cmd = null; - boolean doubleColon = false; - int index = Util.indexOf(line, ':'); - if (index != -1) { - // Break the targets - String target = line.substring(0, index); - targetNames = GNUMakefileUtil.findTargets(target.trim()); - - // Some TargetRule have "::" for separator - String req = line.substring(index + 1); - doubleColon = req.startsWith(":"); //$NON-NLS-1$ - if (doubleColon) { - // move pass the second ':' - req = req.substring(1); - } - - // Check for command - int semicolon = Util.indexOf(req, ';'); - if (semicolon != -1) { - cmd = req.substring(semicolon + 1); - req = req.substring(0, semicolon); - } - - // Check for Normal and order prerequisites - String normalReq = null; - String orderReq = null; - int pipe = Util.indexOf(req, '|'); - if (pipe != -1) { - normalReq = req.substring(0, pipe); - orderReq = req.substring(pipe + 1); - } else { - normalReq = req; - orderReq = ""; //$NON-NLS-1$ - } - - normalReqs = GNUMakefileUtil.findPrerequisites(normalReq.trim()); - orderReqs = GNUMakefileUtil.findPrerequisites(orderReq.trim()); - } else { - targetNames = GNUMakefileUtil.findTargets(line); - normalReqs = new String[0]; - orderReqs = new String[0]; - } - - GNUTargetRule[] rules = new GNUTargetRule[targetNames.length]; - for (int i = 0; i < targetNames.length; i++) { - rules[i] = new GNUTargetRule(this, new Target(targetNames[i]), doubleColon, normalReqs, orderReqs, new Command[0]); - if (cmd != null) { - rules[i].addDirective(new Command(this, cmd)); - } - } - return rules; - } - - protected VariableDefinition parseVariableDefinition(String line) { - line = line.trim(); - VariableDefinition vd; - - // the default type. - int type = VariableDefinition.TYPE_RECURSIVE_EXPAND; - boolean isDefine = false; - boolean isOverride = false; - boolean isTargetVariable = false; - boolean isExport = false; - String targetName = ""; //$NON-NLS-1$ - - String name; - StringBuffer value = new StringBuffer(); - - // Check for Target: Variable-assignment - if (GNUMakefileUtil.isTargetVariable(line)) { - // move to the first ':' - int colon = Util.indexOf(line, ':'); - if (colon != -1) { - targetName = line.substring(0, colon).trim(); - line = line.substring(colon + 1).trim(); - } else { - targetName = ""; //$NON-NLS-1$ - } - } - - // Check for Override condition. - if (GNUMakefileUtil.isOverride(line)) { - isOverride = true; - // Move pass the keyword override. - for (int i = 0; i < line.length(); i++) { - if (Util.isSpace(line.charAt(i))) { - line = line.substring(i).trim(); - break; - } - } - } - - // Check for "define" - if (GNUMakefileUtil.isDefine(line)) { - isDefine = true; - // Move pass the keyword define. - for (int i = 0; i < line.length(); i++) { - if (Util.isSpace(line.charAt(i))) { - line = line.substring(i).trim(); - break; - } - } - } - - // Check for Override condition. - if (GNUMakefileUtil.isExport(line)) { - isExport = true; - // Move pass the keyword export. - for (int i = 0; i < line.length(); i++) { - if (Util.isSpace(line.charAt(i))) { - line = line.substring(i).trim(); - break; - } - } - } - - // Check for Target-variable - - int index = line.indexOf('='); - if (index != -1) { - int separator = index; - // Check for "+=", ":=", "?=" - if (index > 0) { - type = line.charAt(index - 1); - if (type == VariableDefinition.TYPE_SIMPLE_EXPAND - || type == VariableDefinition.TYPE_APPEND - || type == VariableDefinition.TYPE_CONDITIONAL) { - separator = index - 1; - } else { - type = VariableDefinition.TYPE_RECURSIVE_EXPAND; - } - } - name = line.substring(0, separator).trim(); - value.append(line.substring(index + 1).trim()); - } else { - name = line; - } - - if (isTargetVariable) { - vd = new TargetVariable(this, targetName, name, value, isOverride, type); - } - if (isOverride && isDefine) { - vd = new OverrideDefine(this, name, value); - } else if (isDefine) { - vd = new DefineVariable(this, name, value); - } else if (isOverride) { - vd = new OverrideVariable(this, name, value, type); - } else if (isExport) { - vd = new ExportVariable(this, name, value, type); - } else { - vd = new VariableDefinition(this, name, value, type); - } - return vd; - } - - protected StaticTargetRule[] parseStaticTargetRule(String line) { - // first colon: the Targets - String targetPattern; - String[] prereqPatterns; - String[] targets; - int colon = Util.indexOf(line, ':'); - if (colon > 1) { - String targetLine = line.substring(0, colon).trim(); - targets = GNUMakefileUtil.findTargets(targetLine); - // second colon: Target-Pattern - line = line.substring(colon + 1); - colon = Util.indexOf(line, ':'); - if (colon != -1) { - targetPattern = line.substring(0, colon).trim(); - line = line.substring(colon + 1); - StringTokenizer st = new StringTokenizer(line); - int count = st.countTokens(); - prereqPatterns = new String[count]; - for (int i = 0; i < count; i++) { - prereqPatterns[i] = st.nextToken(); - } - } else { - targetPattern = ""; //$NON-NLS-1$ - prereqPatterns = new String[0]; - } - } else { - targets = new String[0]; - targetPattern = ""; //$NON-NLS-1$ - prereqPatterns = new String[0]; - } - - StaticTargetRule[] staticRules = new StaticTargetRule[targets.length]; - for (int i = 0; i < targets.length; i++) { - staticRules[i] = new StaticTargetRule(this, new Target(targets[i]), targetPattern, prereqPatterns, new Command[0]); - } - return staticRules; - } - - /** - * @param line - * @return - */ - 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)); - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.make.internal.core.makefile.AbstractMakefile#getBuiltins() - */ - public IDirective[] getBuiltins() { - if (builtins == null) { - String location = "builtin" + File.separator + "gnu.mk"; //$NON-NLS-1$ //$NON-NLS-2$ - try { - InputStream stream = MakeCorePlugin.getDefault().openStream(new Path(location)); - GNUMakefile gnu = new GNUMakefile(); - 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; - } - - public void setIncludeDirectories(String[] dirs) { - includeDirectories = dirs; - } - - public String[] getIncludeDirectories() { - return includeDirectories; - } - - public static void main(String[] args) { - try { - String filename = "Makefile"; //$NON-NLS-1$ - if (args.length == 1) { - filename = args[0]; - } - GNUMakefile makefile = new GNUMakefile(); - makefile.parse(filename); - IDirective[] directive = makefile.getDirectives(); - for (int i = 0; i < directive.length; i++) { - //System.out.println("Rule[" + i +"]"); - System.out.print(directive[i]); - } - } catch (IOException e) { - System.out.println(e); - } - } - -} |