<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you 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.
-->
<!--
*** GENERATED FROM project.xml - DO NOT EDIT  ***
***         EDIT ../build.xml INSTEAD         ***

For the purpose of easier reading the script
is divided into following sections:

  - initialization
  - profiling
  - applet profiling

-->
<project name="cache-profiler-impl" default="profile" basedir="..">
    <target name="default" depends="profile" description="Build and profile the project."/>
    <!--
    ======================
    INITIALIZATION SECTION
    ======================
    -->
    <target name="-profile-pre-init">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
    </target>
    <target name="-profile-init-private" depends="-profile-pre-init">
        <property file="nbproject/private/private.properties"/>
    </target>
    <target name="-profile-init-user" depends="-profile-pre-init,-profile-init-private">
        <property file="${user.properties.file}"/>
        <!-- The two properties below are usually overridden -->
        <!-- by the active platform. Just a fallback. -->
        <property name="default.javac.source" value="1.4"/>
        <property name="default.javac.target" value="1.4"/>
    </target>
    <target name="-profile-init-project" depends="-profile-pre-init,-profile-init-private,-profile-init-user">
        <property file="nbproject/project.properties"/>
    </target>
    <target name="-profile-do-init" depends="-profile-pre-init,-profile-init-private,-profile-init-user,-profile-init-project,-profile-init-macrodef-property">
        <available file="${manifest.file}" property="manifest.available"/>
        <condition property="manifest.available+main.class">
            <and>
                <isset property="manifest.available"/>
                <isset property="main.class"/>
                <not>
                    <equals arg1="${main.class}" arg2="" trim="true"/>
                </not>
            </and>
        </condition>
        <available property="have.tests" file="${test.src.dir}"/>
        <condition property="netbeans.home+have.tests">
            <and>
                <isset property="netbeans.home"/>
                <isset property="have.tests"/>
            </and>
        </condition>
        <condition property="no.javadoc.preview">
            <isfalse value="${javadoc.preview}"/>
        </condition>
        <property name="run.jvmargs" value=""/>
        <property name="javac.compilerargs" value=""/>
        <property name="work.dir" value="${basedir}"/>
        <condition property="no.deps">
            <and>
                <istrue value="${no.dependencies}"/>
            </and>
        </condition>
    </target>
    <target name="-profile-post-init">
        <!-- Empty placeholder for easier customization. -->
        <!-- You can override this target in the ../build.xml file. -->
    </target>
    <target name="-profile-init-check" depends="-profile-pre-init,-profile-init-private,-profile-init-user,-profile-init-project,-profile-do-init">
        <fail unless="src.dir">Must set src.dir</fail>
        <fail unless="test.src.dir">Must set test.src.dir</fail>
        <fail unless="build.dir">Must set build.dir</fail>
        <fail unless="dist.dir">Must set dist.dir</fail>
        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
        <fail unless="dist.jar">Must set dist.jar</fail>
    </target>
    <target name="-profile-init-macrodef-property">
        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
            <attribute name="name"/>
            <attribute name="value"/>
            <sequential>
                <property name="@{name}" value="${@{value}}"/>
            </sequential>
        </macrodef>
    </target>
    <target name="init" depends="-profile-pre-init,-profile-init-private,-profile-init-user,-profile-init-project,-profile-do-init,-profile-post-init,-profile-init-check,-profile-init-macrodef-property"/>
    <!--
    =================
    PROFILING SECTION
    =================
    -->
    <target name="profile" if="netbeans.home" depends="init,compile" description="Profile a project in the IDE.">
        <nbprofile classname="${main.class}" args="${application.args}">
            <classpath>
                <path path="${run.classpath}"/>
            </classpath>
        </nbprofile>
    </target>
    <target name="profile-single" if="netbeans.home" depends="init,compile-single" description="Profile a selected class in the IDE.">
        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
        <nbprofile classname="${profile.class}">
            <classpath>
                <path path="${run.classpath}"/>
            </classpath>
        </nbprofile>
    </target>
    <!--
    =========================
    APPLET PROFILING  SECTION
    =========================
    -->
    <target name="profile-applet" if="netbeans.home" depends="init,compile-single">
        <nbprofile classname="sun.applet.AppletViewer" args="${applet.url}">
            <classpath>
                <path path="${run.classpath}"/>
            </classpath>
        </nbprofile>
    </target>
</project>
