<?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="ide/extbrowser" default="build" basedir=".">

    <import file="../../nbbuild/templates/projectized.xml"/>

    <target name="jnlp" depends="netbeans,-jnlp-init">
        <property name="dir" location="${jnlp.dest.dir}/${code.name.base.dashes}"/>
        <mkdir dir="${dir}"/>
        <copy file="${cluster}/${module.jar}" todir="${dir}"/>
        <nb-ext-jar jarfile="${dir}/windows.jar">
            <fileset dir="${cluster}/modules/lib">
                <include name="extbrowser*.dll"/>
            </fileset>
        </nb-ext-jar>
        <!-- XXX ought to only do this in case jnlp.sign.jars=true -->
        <signjar alias="${jnlp.signjar.alias}" storepass="${jnlp.signjar.password}" keystore="${jnlp.signjar.keystore}">
            <fileset dir="${dir}">
                <include name="*.jar"/>
            </fileset>
        </signjar>
        <property file="${manifest.mf}"/>
        <property file="${src.dir}/${OpenIDE-Module-Localizing-Bundle}"/>
        <echo file="${jnlp.dest.dir}/${code.name.base.dashes}.jnlp"><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0//EN" "http://java.sun.com/dtd/JNLP-6.0.dtd">
<jnlp spec='1.0+' codebase='${jnlp.codebase}'>
  <information>
   <title>${OpenIDE-Module-Name}</title>
   <vendor>NetBeans</vendor>
   <description kind='one-line'>${OpenIDE-Module-Short-Description}</description>
   <description kind='short'>${OpenIDE-Module-Long-Description}</description>
  </information>
  <security><all-permissions/></security>
  <resources>
    <jar href='${code.name.base.dashes}/${code.name.base.dashes}.jar'/>
  </resources>
  <resources os="Windows">
    <nativelib href='${code.name.base.dashes}/windows.jar'/>
  </resources>
  <component-desc/>
</jnlp>
            ]]>
        </echo>
    </target>

</project>
