/*******************************************************************************
* Copyright (c) 2004, 2008 Intel 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:
* Intel Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.internal.core;
import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator;
import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
import org.eclipse.cdt.managedbuilder.core.ITool;
public class ManagedCommandLineGenerator implements
IManagedCommandLineGenerator {
public final String AT = "@"; //$NON-NLS-1$
public final String COLON = ":"; //$NON-NLS-1$
public final String DOT = "."; //$NON-NLS-1$
public final String ECHO = "echo"; //$NON-NLS-1$
public final String IN_MACRO = "$<"; //$NON-NLS-1$
public final String LINEBREAK = "\\\n"; //$NON-NLS-1$
public final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
public final String OUT_MACRO = "$@"; //$NON-NLS-1$
public final String SEPARATOR = "/"; //$NON-NLS-1$
public final String SINGLE_QUOTE = "'"; //$NON-NLS-1$
public final String DOUBLE_QUOTE = "\""; //$NON-NLS-1$
public final String TAB = "\t"; //$NON-NLS-1$
public final String WHITESPACE = " "; //$NON-NLS-1$
public final String WILDCARD = "%"; //$NON-NLS-1$
public final String UNDERLINE = "_"; //$NON-NLS-1$
public final String EMPTY = ""; //$NON-NLS-1$
public final String VAR_FIRST_CHAR = "$"; //$NON-NLS-1$
public final char VAR_SECOND_CHAR = '{';
public final String VAR_FINAL_CHAR = "}"; //$NON-NLS-1$
public final String CLASS_PROPERTY_PREFIX = "get"; //$NON-NLS-1$
public final String CMD_LINE_PRM_NAME = "COMMAND"; //$NON-NLS-1$
public final String FLAGS_PRM_NAME = "FLAGS"; //$NON-NLS-1$
public final String OUTPUT_FLAG_PRM_NAME = "OUTPUT_FLAG"; //$NON-NLS-1$
public final String OUTPUT_PREFIX_PRM_NAME = "OUTPUT_PREFIX"; //$NON-NLS-1$
public final String OUTPUT_PRM_NAME = "OUTPUT"; //$NON-NLS-1$
public final String INPUTS_PRM_NAME = "INPUTS"; //$NON-NLS-1$
private static ManagedCommandLineGenerator cmdLineGen;
protected ManagedCommandLineGenerator() {
cmdLineGen = null;
}
public static ManagedCommandLineGenerator getCommandLineGenerator() {
if( cmdLineGen == null ) cmdLineGen = new ManagedCommandLineGenerator();
return cmdLineGen;
}
private String makeVariable(String variableName) {
return "${"+variableName+"}"; //$NON-NLS-1$ //$NON-NLS-2$
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator#getCommandLineInfo(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String[], java.lang.String)
*/
public IManagedCommandLineInfo generateCommandLineInfo(ITool tool,
String commandName, String[] flags, String outputFlag,
String outputPrefix, String outputName,
String[] inputResources, String commandLinePattern)
{
if( commandLinePattern == null || commandLinePattern.length() <= 0 )
commandLinePattern = Tool.DEFAULT_PATTERN;
// if the output name isn't a variable then quote it
if(outputName.length()>0 && outputName.indexOf("$(") != 0) //$NON-NLS-1$
outputName = DOUBLE_QUOTE + outputName + DOUBLE_QUOTE;
String inputsStr=""; //$NON-NLS-1$
if (inputResources!=null) {
for (String inp : inputResources) {
if(inp!=null && inp.length()>0) {
// if the input resource isn't a variable then quote it
if(inp.indexOf("$(") != 0) { //$NON-NLS-1$
inp = DOUBLE_QUOTE + inp + DOUBLE_QUOTE;
}
inputsStr = inputsStr + inp + WHITESPACE;
}
}
inputsStr = inputsStr.trim();
}
String flagsStr = stringArrayToString(flags);
String command = commandLinePattern;
command = command.replace(makeVariable(CMD_LINE_PRM_NAME), commandName);
command = command.replace(makeVariable(FLAGS_PRM_NAME), flagsStr);
command = command.replace(makeVariable(OUTPUT_FLAG_PRM_NAME), outputFlag);
command = command.replace(makeVariable(OUTPUT_PREFIX_PRM_NAME), outputPrefix);
command = command.replace(makeVariable(OUTPUT_PRM_NAME), outputName);
command = command.replace(makeVariable(INPUTS_PRM_NAME), inputsStr);
command = command.replace(makeVariable(CMD_LINE_PRM_NAME.toLowerCase()), commandName);
command = command.replace(makeVariable(FLAGS_PRM_NAME.toLowerCase()), flagsStr);
command = command.replace(makeVariable(OUTPUT_FLAG_PRM_NAME.toLowerCase()), outputFlag);
command = command.replace(makeVariable(OUTPUT_PREFIX_PRM_NAME.toLowerCase()), outputPrefix);
command = command.replace(makeVariable(OUTPUT_PRM_NAME.toLowerCase()), outputName);
command = command.replace(makeVariable(INPUTS_PRM_NAME.toLowerCase()), inputsStr);
return new ManagedCommandLineInfo(command.trim(), commandLinePattern, commandName, stringArrayToString(flags),
outputFlag, outputPrefix, outputName, stringArrayToString(inputResources));
}
private String stringArrayToString( String[] array ) {
if( array == null || array.length <= 0 ) return new String();
StringBuffer sb = new StringBuffer();
for( int i = 0; i < array.length; i++ )
sb.append( array[i] + WHITESPACE );
return sb.toString().trim();
}
}