/* * * Copyright 2002-2006 The Ant-Contrib project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.sf.antcontrib.cpptasks.userdefine; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.FileList; import org.apache.tools.ant.types.FileSet; import sun.nio.cs.ext.TIS_620; import net.sf.antcontrib.cpptasks.ProcessorDef; import net.sf.antcontrib.cpptasks.types.AslcompilerArgument; import net.sf.antcontrib.cpptasks.types.ConditionalPath; import net.sf.antcontrib.cpptasks.types.IncludePath; import net.sf.antcontrib.cpptasks.types.LibrarySet; public class UserDefineDef extends ProcessorDef{ public UserDefineDef () {} private String type = "CC"; private String includepathDelimiter; private File outdir; private File workdir; private String inputSuffix; private String outputSuffix; private Vector includePaths= new Vector(); private Vector fileSetList = new Vector(); /** * New adding for support GCC toolchain. * Most of those only have one value for example : * entryPoint, mapFile, pdbFile, define those as element because * if attribut too much the command line is not good-lookinng. */ private Vector includeFiles = new Vector(); private Vector outPutFiles = new Vector(); private Vector subSystem = new Vector(); private Vector entryPoint = new Vector(); private Vector map = new Vector(); private Vector pdb = new Vector(); private Vector libSet = new Vector(); public void execute() throws org.apache.tools.ant.BuildException { throw new org.apache.tools.ant.BuildException( "Not an actual task, but looks like one for documentation purposes"); } public void addConfiguredArgument(UserDefineArgument arg) { if (isReference()) { throw noChildrenAllowed(); } addConfiguredProcessorArg(arg); } /** * Creates an include path. */ public IncludePath createIncludePath() { Project p = getProject(); if (p == null) { throw new java.lang.IllegalStateException("project must be set"); } if (isReference()) { throw noChildrenAllowed(); } IncludePath path = new IncludePath(p); includePaths.addElement(path); return path; } /** * Add a if specify the file attribute * * @throws BuildException * if the specify file not exist */ protected void loadFile(Vector activePath, File file) throws BuildException { FileReader fileReader; BufferedReader in; String str; if (!file.exists()) { throw new BuildException("The file " + file + " is not existed"); } try { fileReader = new FileReader(file); in = new BufferedReader(fileReader); while ((str = in.readLine()) != null) { if (str.trim() == "") { continue; } str = getProject().replaceProperties(str); activePath.addElement(str.trim()); } } catch (Exception e) { throw new BuildException(e.getMessage()); } } /** * Returns the specific include path. */ public String[] getActiveIncludePaths() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getActiveIncludePaths(); } return getActivePaths(includePaths); } private String[] getActivePaths(Vector paths) { Project p = getProject(); if (p == null) { throw new java.lang.IllegalStateException("project not set"); } Vector activePaths = new Vector(paths.size()); for (int i = 0; i < paths.size(); i++) { ConditionalPath path = (ConditionalPath) paths.elementAt(i); if (path.isActive(p)) { if (path.getFile() == null) { String[] pathEntries = path.list(); for (int j = 0; j < pathEntries.length; j++) { activePaths.addElement(pathEntries[j]); } } else { loadFile(activePaths, path.getFile()); } } } String[] pathNames = new String[activePaths.size()]; activePaths.copyInto(pathNames); return pathNames; } public String getIncludepathDelimiter() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getIncludepathDelimiter(); } return includepathDelimiter; } public void setIncludepathDelimiter(String includepathDelimiter) { if (isReference()) { throw tooManyAttributes(); } this.includepathDelimiter = includepathDelimiter; } public String getInputSuffix() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getInputSuffix(); } return inputSuffix; } public void setInputSuffix(String inputSuffix) { if (isReference()) { throw tooManyAttributes(); } this.inputSuffix = inputSuffix; } public File getOutdir() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getOutdir(); } return outdir; } public void setOutdir(File outdir) { if (isReference()) { throw tooManyAttributes(); } this.outdir = outdir; } public String getOutputSuffix() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getOutputSuffix(); } return outputSuffix; } public void setOutputSuffix(String outputSuffix) { if (isReference()) { throw tooManyAttributes(); } this.outputSuffix = outputSuffix; } public String getType() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getType(); } return type; } public void setType(String type) { if (isReference()) { throw tooManyAttributes(); } this.type = type; } public File getWorkdir() { if (isReference()) { return ((UserDefineDef) getCheckedRef(UserDefineDef.class, "UserDefineDef")).getWorkdir(); } return workdir; } public void setWorkdir(File workdir) { if (isReference()) { throw tooManyAttributes(); } this.workdir = workdir; } /** * Add an libSet. */ public LibrarySet createLibset() { if (isReference()){ throw noChildrenAllowed(); } LibrarySet lib = new LibrarySet(); libSet.addElement(lib); return lib; } public String getLibSetString(){ String libString = null; for (int i = 0; i < libSet.size(); i++){ String[] libList = libSet.get(i).getLibs(); for (int j = 0; j < libList.length; j++){ libString = libString + libList[j] + " "; } } return libString; } public Vector getLibSet(){ return this.libSet; } /** * Add map element */ public void addMap(UserDefineElement mapElement){ if (isReference()){ throw noChildrenAllowed(); }else{ this.map.addElement(mapElement); } } public Vector getMap (){ return this.map; } public String getMapvalue (){ if (this.map.size() > 0){ /* * If user set more than one map use the first one. */ return this.map.get(0).value; } return null; } public String getMapFlag(){ if (this.map.size() > 0){ /* * If user set more than one map use the first one. */ return this.map.get(0).flag; } return null; } /** * Add pdb element */ public void addPdb(UserDefineElement pdbElement){ if (isReference()){ throw noChildrenAllowed(); } this.pdb.addElement(pdbElement); } public Vector getPdb(){ return this.pdb; } public String getPdbvalue (){ if (this.pdb.size() > 0){ /* * If user set more than one pdb use the first one. * */ return this.pdb.get(0).value; } return null; } public String getPdbFlag(){ if (this.pdb.size() > 0){ /* * If user set more than one pdb use the first one. */ return this.pdb.get(0).flag; } return null; } /** * add entryPoint element. */ public void addEntryPoint(UserDefineElement entryPointElement){ if (isReference()){ throw noChildrenAllowed(); } this.entryPoint.addElement(entryPointElement); } public Vector getEntryPoint(){ return this.entryPoint; } public String getEntryPointvalue (){ if (this.entryPoint.size() > 0){ /* * If user set more than one entryPoint use the first one. */ return this.entryPoint.get(0).value; } return null; } public String getEntryPointFlag(){ if (this.entryPoint.size() > 0){ /* * If user set more than one entry point use the first one. */ return this.entryPoint.get(0).flag; } return null; } /** * Add subSystem element. */ public void addSubSystem (UserDefineElement subSystem){ if (isReference()){ throw noChildrenAllowed(); } this.subSystem.addElement(subSystem); } public Vector getSubSystem (){ return this.subSystem; } public String getSubSystemvalue (){ if (this.subSystem.size() > 0){ /* * If user set more than one subsystem use the first one. */ return this.subSystem.get(0).value; } return null; } public String getSubSystemFlag(){ if (this.subSystem.size() > 0){ /* * If user set more than one subsystem use the first one. */ return this.subSystem.get(0).flag; } return null; } /** * Add includeFile element */ public void addIncludeFile (UserDefineElement includeFile){ if (isReference()){ throw noChildrenAllowed(); } this.includeFiles.addElement(includeFile); } public Vector getIncludeFiles(){ return this.includeFiles; } public String getIncludeFile (){ if (this.includeFiles.size() > 0){ /* * If user set more than one map use the first one. */ return this.includeFiles.get(0).value; } return null; } public String getIncludeFileFlag(){ if (this.includeFiles.size() > 0){ /* * If user set more than one map use the first one. */ return this.includeFiles.get(0).flag; } return null; } /** * Add OutputFile element */ public void addOutputFile (UserDefineElement outPutFile){ if (isReference()){ throw noChildrenAllowed(); } this.outPutFiles.addElement(outPutFile); } public Vector getOutputFiles(){ return this.outPutFiles; } public String getOutputFile (){ if (this.outPutFiles.size() > 0){ /* * If user set more than one map use the first one. */ return this.outPutFiles.get(0).value; } return null; } public String getOutPutFlag(){ if (this.outPutFiles.size() > 0){ /* * If user set more than one map use the first one. */ return this.outPutFiles.get(0).flag; } return null; } /** * Add fileSet list */ public void addFileList(FileList fileSet){ this.fileSetList.addElement(fileSet); } public Vector getFileList(){ Project p = getProject(); Vector fileListVector = new Vector(); for (int i = 0; i < this.fileSetList.size(); i++){ String[] tempStrList = this.fileSetList.get(i).getFiles(p); for (int j = 0; j < tempStrList.length; j++){ fileListVector .addElement(tempStrList[j]); } } return fileListVector; } }