git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1674 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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;
 | 
						|
    }
 | 
						|
}
 |