<?xml version="1.0" encoding="utf-8"?>
  <project name="geotools" default="dist" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors">
    <!-- enter the SVN commit message -->
    <property name="commit.message" value="Commit message"/>
    <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
    <property name="plugin.main.version" value="19044"/>
    
    <property name="plugin.author" value="Don-vip"/>
    <property name="plugin.class" value="org.openstreetmap.josm.plugins.geotools.GeoToolsPlugin"/>
    <property name="plugin.description" value="Provides parts of the GeoTools library for other JOSM plugins. Not meant to be installed directly by users, but rather as a dependency for other plugins."/>
    <property name="plugin.icon" value="images/compass.png"/>
    <property name="plugin.canloadatruntime" value="true"/>
    <property name="plugin.requires" value="apache-commons;ejml;jackson;jaxb;jts"/>
    <property name="plugin.stage" value="20"/>

    <!-- ** include targets that all plugins have in common ** -->
    <import file="../build-common.xml"/>

    <target name="pre-compile" depends="fetch_dependencies">
        <!-- include fetch_dependencies task -->
    </target>

    <fileset id="plugin.requires.jars" dir="${plugin.dist.dir}">
        <include name="apache-commons.jar"/>
        <include name="ejml.jar"/>
        <include name="jaxb.jar"/>
        <include name="jts.jar"/>
        <!-- jackson causes issues if it is on the compile-time path. Since we don't actually use jackson in our code, we can just not have it in the requires.jars array. -->
        <!--<include name="jackson.jar"/>-->
    </fileset>
    <macrodef name="merge-text-files">
      <attribute name="mergefile"/>
      <attribute name="targetdir"/>
      <sequential>
        <concat destfile="@{targetdir}/@{mergefile}">
          <restrict>
            <rsel:name name="@{mergefile}"/>
            <archives>
                <zips>
                    <fileset dir="${plugin.lib.dir}" includes="*.jar" excludes="*-sources.jar, *-javadoc.jar" erroronmissingdir="no"/>
                </zips>
            </archives>
          </restrict>
        </concat>
      </sequential>
    </macrodef>

    <target name="merge-geotools-services" depends="fetch_dependencies">
        <taskdef resource="org/pescuma/mergeservices/antlib.xml" classpath="tools/merge-services.jar" />
        <delete dir="jar/"/>
        <mkdir dir="jar"/>
        <merge-services dest="jar">
            <fileset dir="lib">
                <include name="**/*.jar" />
                <exclude name="**/*-javadoc.jar" />
                <exclude name="**/*-source.jar" />
            </fileset>
        </merge-services>
        <!-- We currently don't like shipping maven pom files or other "useless" files (see #21667) -->
        <delete includeEmptyDirs="true">
            <fileset dir="jar">
                <include name="META-INF/maven/**/*"/>
                <include name="META-INF/maven"/>
                <include name="META-INF/ECLIPSE*"/>
                <include name="META-INF/eclipse*"/>
                <include name="META-INF/INDEX.LIST"/>
                <include name="META-INF/MANIFEST.MF"/>
                <include name="META-INF/**/module-info.class"/>
            </fileset>
        </delete>

        <merge-text-files mergefile="META-INF/javax.media.jai.registryFile.jai" targetdir="jar"/>
        <merge-text-files mergefile="META-INF/registryFile.jai"                 targetdir="jar"/>
        <merge-text-files mergefile="META-INF/registryFile.jaiext"              targetdir="jar"/>
    </target>

    <!--
    **********************************************************
    ** post-dist - replaces files from the generated jar
    **********************************************************
    -->
    <target name="post-dist" depends="merge-geotools-services">
        <move file="${plugin.jar}" todir="${plugin.build.dir}" />
        <jar destfile="${plugin.jar}" filesetmanifest="merge" manifestencoding="UTF-8">
            <fileset dir="jar"/>
            <zipfileset src="${plugin.build.dir}/${ant.project.name}.jar">
                <exclude name="*.class"/>
                <exclude name="*.html"/>
                <exclude name="META-INF/**/*"/>
                <exclude name="javax/*.txt"/>
            </zipfileset>
            <zipfileset src="${plugin.build.dir}/${ant.project.name}.jar">
                <include name="META-INF/MANIFEST.MF"/>
                <include name="META-INF/javax.media.jai.registryFile.jai"/>
            </zipfileset>
        </jar>
        <delete file="${plugin.build.dir}/${ant.project.name}.jar" />
        <delete dir="jar" />
    </target>

    <!--
    **********************************************************
    ** additional-manifest - add additional manifest entries 
    **********************************************************
    -->
    <target name="additional-manifest">
        <manifest file="MANIFEST" mode="update">
            <!-- JAI requires a vendor name for some of its deep internals, 
                 see https://stackoverflow.com/a/18495658/2257172 -->
            <attribute name="Specification-Title" value="JOSM GeoTools plugin"/>
            <attribute name="Specification-Version" value="${gt.version}"/>
            <attribute name="Specification-Vendor" value="JOSM developers" />
            <attribute name="Implementation-Title" value="org.openstreetmap.josm.plugins.geotools" />
            <attribute name="Implementation-Version" value="${gt.version}" />
            <attribute name="Implementation-Vendor" value="JOSM developers"/>
        </manifest>
    </target>
</project>
