mirror of https://github.com/acidanthera/audk.git
498 lines
15 KiB
Java
498 lines
15 KiB
Java
|
/*
|
||
|
*
|
||
|
* 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<IncludePath> includePaths= new Vector<IncludePath>();
|
||
|
private Vector<FileList> fileSetList = new Vector<FileList>();
|
||
|
|
||
|
/**
|
||
|
* 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<UserDefineElement> includeFiles = new Vector<UserDefineElement>();
|
||
|
private Vector<UserDefineElement> outPutFiles = new Vector<UserDefineElement>();
|
||
|
private Vector<UserDefineElement> subSystem = new Vector<UserDefineElement>();
|
||
|
private Vector<UserDefineElement> entryPoint = new Vector<UserDefineElement>();
|
||
|
private Vector<UserDefineElement> map = new Vector<UserDefineElement>();
|
||
|
private Vector<UserDefineElement> pdb = new Vector<UserDefineElement>();
|
||
|
private Vector<LibrarySet> libSet = new Vector<LibrarySet>();
|
||
|
|
||
|
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 <includepath> 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<LibrarySet> getLibSet(){
|
||
|
return this.libSet;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add map element
|
||
|
*/
|
||
|
public void addMap(UserDefineElement mapElement){
|
||
|
if (isReference()){
|
||
|
throw noChildrenAllowed();
|
||
|
}else{
|
||
|
this.map.addElement(mapElement);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector<UserDefineElement> 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<UserDefineElement> 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<UserDefineElement> 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<UserDefineElement> 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<UserDefineElement> 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<UserDefineElement> 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<String> getFileList(){
|
||
|
Project p = getProject();
|
||
|
Vector<String> fileListVector = new Vector<String>();
|
||
|
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;
|
||
|
}
|
||
|
}
|