mirror of https://github.com/acidanthera/audk.git
216 lines
7.0 KiB
Java
216 lines
7.0 KiB
Java
|
/*
|
||
|
*
|
||
|
* Copyright 2002-2004 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;
|
||
|
import java.io.File;
|
||
|
import java.util.Enumeration;
|
||
|
import java.util.Vector;
|
||
|
|
||
|
import net.sf.antcontrib.cpptasks.types.ConditionalFileSet;
|
||
|
|
||
|
import org.apache.tools.ant.Project;
|
||
|
import org.apache.tools.ant.DirectoryScanner;
|
||
|
import org.apache.tools.ant.types.DataType;
|
||
|
/**
|
||
|
* An element that specifies a prototype file and rules for source files that
|
||
|
* should not use precompiled headers
|
||
|
*
|
||
|
* @author Curt Arnold
|
||
|
*/
|
||
|
public final class PrecompileDef extends DataType {
|
||
|
private final Vector exceptSets = new Vector();
|
||
|
private String ifCond;
|
||
|
/**
|
||
|
* Directory of prototype file
|
||
|
*/
|
||
|
private File prototype = new File("stdafx.cpp");
|
||
|
private String unlessCond;
|
||
|
/**
|
||
|
* Constructor
|
||
|
*
|
||
|
*/
|
||
|
public PrecompileDef() {
|
||
|
}
|
||
|
/**
|
||
|
* Method used by PrecompileExceptDef to add exception set to
|
||
|
* PrecompileDef.
|
||
|
*/
|
||
|
public void appendExceptFileSet(ConditionalFileSet exceptSet) {
|
||
|
exceptSet.setProject(getProject());
|
||
|
exceptSets.addElement(exceptSet);
|
||
|
}
|
||
|
/**
|
||
|
* Adds filesets that specify files that should not be processed with
|
||
|
* precompiled headers enabled.
|
||
|
*
|
||
|
* @param exceptSet
|
||
|
* FileSet specify files that should not be processed with
|
||
|
* precompiled headers enabled.
|
||
|
*/
|
||
|
public PrecompileExceptDef createExcept() {
|
||
|
return new PrecompileExceptDef(this);
|
||
|
}
|
||
|
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 String[] getExceptFiles() {
|
||
|
PrecompileDef ref = getRef();
|
||
|
if (ref != null) {
|
||
|
return ref.getExceptFiles();
|
||
|
}
|
||
|
if (exceptSets.size() == 0) {
|
||
|
return new String[0];
|
||
|
}
|
||
|
Project p = getProject();
|
||
|
String[] exceptFiles = null;
|
||
|
Enumeration setEnum = exceptSets.elements();
|
||
|
while (setEnum.hasMoreElements()) {
|
||
|
ConditionalFileSet exceptSet = (ConditionalFileSet) setEnum
|
||
|
.nextElement();
|
||
|
if (exceptSet.isActive()) {
|
||
|
DirectoryScanner scanner = exceptSet
|
||
|
.getDirectoryScanner(p);
|
||
|
String[] scannerFiles = scanner.getIncludedFiles();
|
||
|
if (exceptFiles == null) {
|
||
|
exceptFiles = scannerFiles;
|
||
|
} else {
|
||
|
if (scannerFiles.length > 0) {
|
||
|
String[] newFiles = new String[exceptFiles.length
|
||
|
+ scannerFiles.length];
|
||
|
for (int i = 0; i < exceptFiles.length; i++) {
|
||
|
newFiles[i] = exceptFiles[i];
|
||
|
}
|
||
|
int index = exceptFiles.length;
|
||
|
for (int i = 0; i < scannerFiles.length; i++) {
|
||
|
newFiles[index++] = scannerFiles[i];
|
||
|
}
|
||
|
exceptFiles = newFiles;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (exceptFiles == null) {
|
||
|
exceptFiles = new String[0];
|
||
|
}
|
||
|
return exceptFiles;
|
||
|
}
|
||
|
/**
|
||
|
* Gets prototype source file
|
||
|
*
|
||
|
*/
|
||
|
public File getPrototype() {
|
||
|
PrecompileDef ref = getRef();
|
||
|
if (ref != null) {
|
||
|
return ref.getPrototype();
|
||
|
}
|
||
|
return prototype;
|
||
|
}
|
||
|
private PrecompileDef getRef() {
|
||
|
if (isReference()) {
|
||
|
return ((PrecompileDef) getCheckedRef(PrecompileDef.class,
|
||
|
"PrecompileDef"));
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
public boolean isActive() {
|
||
|
boolean isActive = CUtil.isActive(getProject(), ifCond, unlessCond);
|
||
|
if (!isActive) {
|
||
|
PrecompileDef ref = getRef();
|
||
|
if (ref != null) {
|
||
|
return ref.isActive();
|
||
|
}
|
||
|
}
|
||
|
return isActive;
|
||
|
}
|
||
|
/**
|
||
|
* Sets a description of the current data type.
|
||
|
*/
|
||
|
public void setDescription(String desc) {
|
||
|
super.setDescription(desc);
|
||
|
}
|
||
|
/**
|
||
|
* Sets an id that can be used to reference this element.
|
||
|
*
|
||
|
* @param id
|
||
|
* id
|
||
|
*/
|
||
|
public void setId(String id) {
|
||
|
//
|
||
|
// this is actually accomplished by a different
|
||
|
// mechanism, but we can document it
|
||
|
//
|
||
|
}
|
||
|
/**
|
||
|
* Set the 'if' condition.
|
||
|
*
|
||
|
* The processor will be ignored unless the property is defined.
|
||
|
*
|
||
|
* The value of property is insignificant, but values that would imply
|
||
|
* misinterpretation ("false", "no") will throw an exception when
|
||
|
* isActive() is evaluated.
|
||
|
*
|
||
|
* @param propName
|
||
|
* name of property
|
||
|
*/
|
||
|
public void setIf(String propName) {
|
||
|
ifCond = propName;
|
||
|
}
|
||
|
/**
|
||
|
* Sets file to precompile.
|
||
|
*
|
||
|
* Should be a source file that includes only one unguarded header file.
|
||
|
* Default value is "stdafx.cpp".
|
||
|
*
|
||
|
* @param prototype
|
||
|
* file path for prototype source file
|
||
|
*/
|
||
|
public void setPrototype(File prototype) {
|
||
|
if (isReference()) {
|
||
|
throw tooManyAttributes();
|
||
|
}
|
||
|
if (prototype == null) {
|
||
|
throw new NullPointerException("prototype");
|
||
|
}
|
||
|
this.prototype = prototype;
|
||
|
}
|
||
|
/**
|
||
|
* Specifies that this element should behave as if the content of the
|
||
|
* element with the matching id attribute was inserted at this location.
|
||
|
*
|
||
|
* @param ref
|
||
|
* Reference to other element
|
||
|
*
|
||
|
*/
|
||
|
public void setRefid(org.apache.tools.ant.types.Reference ref) {
|
||
|
super.setRefid(ref);
|
||
|
}
|
||
|
/**
|
||
|
* Set the 'unless' condition. If named property exists at execution time,
|
||
|
* the processor will be ignored.
|
||
|
*
|
||
|
* Value of property is insignificant, but values that would imply
|
||
|
* misinterpretation ("false", "no") of the behavior will throw an
|
||
|
* exception when isActive is called.
|
||
|
*
|
||
|
* @param propName
|
||
|
* name of property
|
||
|
*/
|
||
|
public void setUnless(String propName) {
|
||
|
unlessCond = propName;
|
||
|
}
|
||
|
}
|