<?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.

-->

<project name="java/lib.jshell.agent" default="build" basedir=".">
    <description>Builds, tests, and runs the project org.netbeans.lib.jshell.agent.</description>
    <import file="../../nbbuild/templates/projectized.xml"/>

    <target name="probe-init" depends="init">
        <mkdir dir="build/agent/classes"/>
        <unjar src="${agentsrc.asm.cp}" dest="build/agent/classes">
            <patternset>
                <exclude name="META-INF/**"/>
            </patternset>
        </unjar>
        <javac srcdir="agentsrc" destdir="build/agent/classes" debug="true" deprecation="true" target="1.8" source="1.8">
            <classpath>
                <pathelement path="${module.classpath}"/>
            </classpath>
        </javac>
    </target>

    <target name="modular-probe" depends="probe-init">
        <mkdir dir="${cluster}/modules/ext"/>
        <nb-ext-jar jarfile="${cluster}/modules/ext/nb-mod-jshell-probe.jar">
            <manifest>
                <attribute name="NetBeans-Own-Library" value="true"/>
                <attribute name="Main-Class" value="org.netbeans.lib.jshell.agent.AgentWorker"/>
                <attribute name="Premain-Class" value="org.netbeans.lib.jshell.agent.NbJShellAgent"/>
                <attribute name="Can-Redefine-Classes" value="true"/>
                <attribute name="Can-Retransform-Classes" value="true"/>
            </manifest>
            <fileset dir="build/agent/classes">
                <exclude name="jdk/**"/>
            </fileset>
        </nb-ext-jar>
    </target>

    <target name="jar-probe" depends="probe-init">
        <unjar src="${agentsrc.jshell.cp}" dest="build/agent/classes">
            <patternset>
                <include name="jdk/jshell/execution/**"/>
                <exclude name="**/JDI*.class"/>
                <exclude name="**/LocalExecutionControl.class"/>
                <exclude name="**/StreamingExecutionControl.class"/>
                <!--<exclude name="**/DemultiplexInput.class"/>-->
            </patternset>
            <patternset>
                <include name="jdk/jshell/spi/ExecutionControl*.class"/>
                <exclude name="jdk/jshell/spi/ExecutionControl*Generator.class"/>
                <include name="jdk/jshell/spi/SPIResolutionException.class"/>
            </patternset>
        </unjar>
        <mkdir dir="${cluster}/modules/ext"/>
        <nb-ext-jar jarfile="${cluster}/modules/ext/nb-custom-jshell-probe.jar">
            <manifest>
                <attribute name="NetBeans-Own-Library" value="true"/>
                <attribute name="Main-Class" value="org.netbeans.lib.jshell.agent.AgentWorker"/>
                <attribute name="Premain-Class" value="org.netbeans.lib.jshell.agent.NbJShellAgent"/>
                <attribute name="Can-Redefine-Classes" value="true"/>
                <attribute name="Can-Retransform-Classes" value="true"/>
            </manifest>
            <fileset dir="build/agent/classes"/>
        </nb-ext-jar>
    </target>

    <target name="probe" depends="modular-probe,jar-probe">
    </target>

    <target name="netbeans-extra" depends="probe"/>
</project>
