import org.apache.tools.ant.DirectoryScanner;\r
import org.apache.tools.ant.Project;\r
\r
+/**\r
+ * \r
+ */\r
public class CommandLineUserDefine {\r
\r
String includePathDelimiter = null;\r
- \r
+\r
String outputDelimiter = null;\r
- \r
- public void command(CCTask cctask, UserDefineDef userdefine){\r
+\r
+ public void command(CCTask cctask, UserDefineDef userdefine) {\r
boolean isGccCommand = userdefine.getFamily().equalsIgnoreCase("GCC");\r
File workdir;\r
Project project = cctask.getProject();\r
- if(userdefine.getWorkdir() == null) {\r
+ if (userdefine.getWorkdir() == null) {\r
workdir = new File(".");\r
- }\r
- else {\r
+ } else {\r
workdir = userdefine.getWorkdir();\r
- } \r
- \r
+ }\r
+\r
//\r
// generate cmdline= command + args + includepath + endargs + outfile\r
// \r
Vector endargs = new Vector();\r
Vector endargsWithoutSpace = new Vector();\r
Vector includePath = new Vector();\r
- \r
- //\r
- // Generate cmdline = command + \r
- // general args + \r
- // outputflag + outputfile\r
- // includpath + \r
- // endargs + \r
- // \r
- \r
+\r
//\r
// get Args.\r
//\r
endargs.addElement(argument[j].getValue());\r
}\r
}\r
- \r
+\r
//\r
// get include path.\r
//\r
String[] incPath = userdefine.getActiveIncludePaths();\r
for (int j = 0; j < incPath.length; j++) {\r
- if(incPath[j].indexOf(' ') >= 0) {\r
- includePath.addElement( includePathDelimiter + incPath[j]);\r
- //includePath.addElement( includePathDelimiter + "\"" + incPath[j] + "\"");\r
- }\r
- else {\r
- includePath.addElement( includePathDelimiter + incPath[j]);\r
- }\r
+ includePath.addElement(includePathDelimiter + incPath[j]);\r
}\r
- \r
+\r
//\r
// Remove space in args and endargs.\r
//\r
- for ( int i=0; i < args.size(); i++) {\r
- String str = (String)args.get(i);\r
+ for (int i = 0; i < args.size(); i++) {\r
+ String str = (String) args.get(i);\r
StringTokenizer st = new StringTokenizer(str, " \t");\r
- while(st.hasMoreTokens()) {\r
+ while (st.hasMoreTokens()) {\r
argsWithoutSpace.addElement(st.nextToken());\r
}\r
}\r
- for ( int i=0; i < endargs.size(); i++) {\r
- String str = (String)endargs.get(i);\r
+ for (int i = 0; i < endargs.size(); i++) {\r
+ String str = (String) endargs.get(i);\r
StringTokenizer st = new StringTokenizer(str, " \t");\r
- while(st.hasMoreTokens()) {\r
+ while (st.hasMoreTokens()) {\r
endargsWithoutSpace.addElement(st.nextToken());\r
}\r
}\r
- \r
+\r
int cmdLen = 0;\r
//\r
// command + args + endargs + includepath + sourcefile\r
//\r
- cmdLen = 1 + argsWithoutSpace.size() + endargsWithoutSpace.size() + includePath.size() + 1;\r
- String[] libSet = userdefine.get_libset();\r
- if (libSet != null && libSet.length > 0){\r
+ cmdLen = 1 + argsWithoutSpace.size() + endargsWithoutSpace.size()\r
+ + includePath.size() + 1;\r
+ String[] libSet = userdefine.getLibset();\r
+ if (libSet != null && libSet.length > 0) {\r
cmdLen = cmdLen + libSet.length;\r
if (isGccCommand) {\r
- cmdLen += 2; // we need -( and -) to group libs for GCC\r
+ cmdLen += 2; // we need -( and -) to group libs for GCC\r
}\r
}\r
\r
//\r
- // In gcc the "cr" flag should follow space then add outputfile name, otherwise\r
- // it will pop error. \r
+ // In gcc the "cr" flag should follow space then add outputfile name,\r
+ // otherwise\r
+ // it will pop error.\r
// TBD\r
- if (outputDelimiter != null && userdefine.getOutputFile() != null && outputDelimiter.trim().length() > 0){\r
- if (outputDelimiter.trim().equalsIgnoreCase("-cr")){\r
+ if (outputDelimiter != null && userdefine.getOutputFile() != null\r
+ && outputDelimiter.trim().length() > 0) {\r
+ if (outputDelimiter.trim().equalsIgnoreCase("-cr")) {\r
cmdLen = cmdLen + 2;\r
- }else {\r
+ } else {\r
cmdLen++;\r
}\r
}\r
- \r
+\r
//\r
- // for every source file\r
- // if file is header file, just skip it (add later)\r
+ // for every source file\r
+ // if file is header file, just skip it (add later)\r
//\r
Vector srcSets = userdefine.getSrcSets();\r
-// System.out.println("##" + userdefine.getSrcSets());\r
- \r
+\r
//\r
- // if have source file append source file in command land.\r
+ // if have source file append source file in command line.\r
//\r
Set allSrcFiles = new LinkedHashSet();\r
for (int i = 0; i < srcSets.size(); i++) {\r
ConditionalFileSet srcSet = (ConditionalFileSet) srcSets\r
- .elementAt(i);\r
+ .elementAt(i);\r
if (srcSet.isActive()) {\r
+ //\r
// Find matching source files\r
+ //\r
DirectoryScanner scanner = srcSet.getDirectoryScanner(project);\r
+ \r
+ //\r
// Check each source file - see if it needs compilation\r
+ //\r
String[] fileNames = scanner.getIncludedFiles();\r
- for (int j = 0; j < fileNames.length; j++){\r
- // execute the command\r
+ for (int j = 0; j < fileNames.length; j++) {\r
allSrcFiles.add(scanner.getBasedir() + "/" + fileNames[j]);\r
if (isGccCommand) {\r
- System.out.println("[" + userdefine.getType() + "] " + fileNames[j]);\r
+ System.out.println("[" + userdefine.getType() + "] "\r
+ + fileNames[j]);\r
}\r
}\r
}\r
}\r
\r
- String[] fileNames = (String[])allSrcFiles.toArray(new String[allSrcFiles.size()]);\r
+ String[] fileNames = (String[]) allSrcFiles\r
+ .toArray(new String[allSrcFiles.size()]);\r
String[] cmd = new String[cmdLen - 1 + fileNames.length];\r
int index = 0;\r
cmd[index++] = userdefine.getCmd();\r
- \r
+\r
Iterator iter = argsWithoutSpace.iterator();\r
while (iter.hasNext()) {\r
- cmd[index++] = project.replaceProperties((String)iter.next());\r
+ cmd[index++] = project.replaceProperties((String) iter.next());\r
}\r
- \r
+\r
iter = endargsWithoutSpace.iterator();\r
while (iter.hasNext()) {\r
- cmd[index++] = project.replaceProperties((String)iter.next());\r
+ cmd[index++] = project.replaceProperties((String) iter.next());\r
}\r
- \r
+\r
//\r
// Add outputFileFlag and output file to cmd\r
//\r
- if (outputDelimiter != null && userdefine.getOutputFile() != null && outputDelimiter.length()> 0){\r
- if (outputDelimiter.trim().equalsIgnoreCase("-cr")){\r
+ if (outputDelimiter != null && userdefine.getOutputFile() != null\r
+ && outputDelimiter.length() > 0) {\r
+ if (outputDelimiter.trim().equalsIgnoreCase("-cr")) {\r
cmd[index++] = outputDelimiter;\r
cmd[index++] = userdefine.getOutputFile();\r
- }else {\r
- cmd[index++] = outputDelimiter + userdefine.getOutputFile();\r
+ } else {\r
+ cmd[index++] = outputDelimiter + userdefine.getOutputFile();\r
}\r
}\r
- \r
+\r
iter = includePath.iterator();\r
while (iter.hasNext()) {\r
- cmd[index++] = (String)iter.next();\r
+ cmd[index++] = (String) iter.next();\r
}\r
- \r
- if (libSet != null && libSet.length > 0){\r
+\r
+ if (libSet != null && libSet.length > 0) {\r
if (isGccCommand) {\r
cmd[index++] = "-(";\r
}\r
- for (int k = 0; k < libSet.length ; k++){\r
+ for (int k = 0; k < libSet.length; k++) {\r
cmd[index++] = libSet[k];\r
}\r
if (isGccCommand) {\r
cmd[index++] = "-)";\r
}\r
}\r
- for (int j = 0; j < fileNames.length; j++){\r
- // execute the command\r
+ for (int j = 0; j < fileNames.length; j++) {\r
cmd[index++] = fileNames[j];\r
}\r
- \r
+\r
int retval = runCommand(cctask, workdir, cmd);\r
- // if with monitor, add more code\r
+ \r
if (retval != 0) {\r
- throw new BuildException(userdefine.getCmd()\r
- + " failed with return code " + retval,\r
- cctask.getLocation());\r
+ throw new BuildException(userdefine.getCmd()\r
+ + " failed with return code " + retval, cctask\r
+ .getLocation());\r
}\r
}\r
- \r
+\r
protected int runCommand(CCTask task, File workingDir, String[] cmdline)\r
throws BuildException {\r
return CUtil.runCommand(task, workingDir, cmdline, false, null);\r
\r
}\r
-\r
- protected String getInputFileArgument(File outputDir, String filename,\r
- int index) {\r
- //\r
- // if there is an embedded space,\r
- // must enclose in quotes\r
- if (filename.indexOf(' ') >= 0) {\r
- StringBuffer buf = new StringBuffer("\"");\r
- buf.append(filename);\r
- buf.append("\"");\r
- return buf.toString();\r
- }\r
- return filename;\r
- }\r
-\r
}\r