| /********************************************************************** |
| * Copyright (c) 2002,2003 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; |
| |
| import java.io.File; |
| import java.io.IOException; |
| |
| import org.eclipse.cdt.make.core.makefile.ICommand; |
| |
| /** |
| * Makefile : ( statement ) * |
| * statement : command | .. |
| * command : <tab> prefix_command string <nl> |
| * prefix_command : '-' | '@' | '+' |
| */ |
| public class Command extends Directive implements ICommand { |
| |
| final public static char NL = '\n'; |
| |
| String command = ""; |
| char prefix = '\0'; |
| |
| public Command(Directive parent, String cmd) { |
| super(parent); |
| parse(cmd); |
| } |
| |
| /** |
| * - If the command prefix contains a hyphen, or the -i option is |
| * present, or the special target .IGNORE has either the current |
| * target as a prerequisite or has no prerequisites, any error |
| * found while executing the command will be ignored. |
| */ |
| public boolean shouldIgnoreError() { |
| // Check for the prefix hyphen in the command. |
| if (getPrefix() == HYPHEN) { |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * @ If the command prefix contains an at sign and the |
| * command-line -n option is not specified, or the -s option is |
| * present, or the special target .SILENT has either the current |
| * target as a prerequisite or has no prerequisites, the command |
| * will not be written to standard output before it is executed. |
| */ |
| public boolean shouldBeSilent() { |
| // Check for the prefix at sign |
| if (getPrefix() == AT) { |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * + If the command prefix contains a plus sign, this indicates a |
| * command line that will be executed even if -n, -q or -t is |
| * specified. |
| */ |
| public boolean shouldExecute() { |
| // Check for the prefix at sign |
| if (getPrefix() == PLUS) { |
| return true; |
| } |
| return false; |
| } |
| |
| public String toString() { |
| StringBuffer cmd = new StringBuffer(); |
| cmd.append( '\t'); |
| if (getPrefix() != 0) { |
| cmd.append(getPrefix()); |
| } |
| cmd.append(command).append('\n'); |
| return cmd.toString(); |
| } |
| |
| public boolean equals(Command cmd) { |
| return cmd.toString().equals(toString()); |
| } |
| |
| char getPrefix() { |
| return prefix; |
| } |
| |
| /** |
| * command : <tab> prefix_command string <nl> |
| */ |
| void parse(String cmd) { |
| command = cmd.trim(); |
| if (command.startsWith(HYPHEN_STRING) || command.startsWith(AT_STRING) || command.startsWith(PLUS_STRING)) { |
| prefix = command.charAt(0); |
| command = command.substring(1).trim(); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.cdt.make.core.makefile.ICommand#execute(java.lang.String[], java.io.File) |
| */ |
| public Process execute(String shell, String[] envp, File dir) throws IOException { |
| String[] cmdArray = new String[] { shell, "-c", command}; |
| return Runtime.getRuntime().exec(cmdArray, envp, dir); |
| } |
| |
| } |