<!--
   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

     https://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="IvyRelease" default="snapshot"
         xmlns:ivy="antlib:org.apache.ivy.ant"
         xmlns:ivy2="antlib:org.apache.ivy.ant_2"
         xmlns:asciidoctor="antlib:org.asciidoctor.ant"
         xmlns:openpgp="antlib:org.apache.commons.openpgp.ant">

    <import file="build.xml"/>

    <macrodef name="run-tutorial">
        <attribute name="antfile"/>
        <attribute name="output"/>
        <attribute name="target" default=""/>
        <attribute name="failonerror" default="true"/>
        <sequential>
            <echo>Running @{antfile} @{target} > @{output}</echo>

            <local name="antfile.dir"/>
            <dirname property="antfile.dir" file="@{antfile}"/>

            <local name="antfile.name"/>
            <basename property="antfile.name" file="@{antfile}"/>

            <echo file="@{output}">[ivy@apache:${antfile.dir}]$ ant -f ${antfile.name} @{target}${line.separator}</echo>
            <java classname="org.apache.tools.ant.launch.Launcher"
                  fork="true"
                  failonerror="@{failonerror}"
                  logerror="true"
                  append="true"
                  output="@{output}">
                <classpath>
                    <fileset file="${artifacts.build.dir}/jars/${final.name}"/>

                    <!--
                      We need to set the classpath like this, otherwise the invoked
                      build scripts are not capable of compiling sources ???
                      -->
                    <path path="${java.class.path}"/>
                </classpath>
                <sysproperty key="ivy.cache.dir" value="${tutorial.cache}"/>
                <sysproperty key="ivy.local.default.root" value="${tutorial.local-repo}"/>
                <sysproperty key="ivy.cache.ttl.default" value="1s"/>
                <sysproperty key="skip.download" value="true"/>
                <arg line="-f @{antfile}"/>
                <arg line="@{target}"/>
            </java>
        </sequential>
    </macrodef>

    <target name="generate-tutorial-output" depends="jar" unless="skip.generate-tutorial-output">
        <property name="output.dir" value="${basedir}/asciidoc/tutorial/log"/>
        <delete dir="${output.dir}"/>
        <mkdir dir="${output.dir}"/>

        <!-- create a copy of the tutorials so we can easily get rid of the generated files -->
        <property name="tutorial.src.dir" value="${build.dir}/examples"/>
        <delete dir="${tutorial.src.dir}"/>
        <mkdir dir="${tutorial.src.dir}"/>
        <copy todir="${tutorial.src.dir}">
            <fileset dir="src/example"/>
        </copy>

        <!-- create a cache and local-repository for the tutorials -->
        <property name="tutorial.build.dir" value="${build.dir}/tutorial"/>
        <property name="tutorial.cache" value="${tutorial.build.dir}/cache"/>
        <property name="tutorial.local-repo" value="${tutorial.build.dir}/local"/>

        <!-- go-ivy : not logged, but run in order to check if it still run -->
        <run-tutorial antfile="${tutorial.src.dir}/go-ivy/build.xml" output="${output.dir}/dummy.txt"/>
        <delete file="${output.dir}/dummy.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!-- hello-ivy : Quick Start - start.html -->
        <run-tutorial antfile="${tutorial.src.dir}/hello-ivy/build.xml" output="${output.dir}/hello-ivy-1.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/hello-ivy/build.xml" output="${output.dir}/hello-ivy-2.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!-- multiple resolvers - multiple.html -->
        <run-tutorial antfile="${tutorial.src.dir}/chained-resolvers/chainedresolvers-project/build.xml" output="${output.dir}/chained-resolvers.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!-- dual - dual.html -->
        <run-tutorial antfile="${tutorial.src.dir}/dual/project/build.xml" output="${output.dir}/dual.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!-- Project dependencies - multi-project.html -->
        <run-tutorial antfile="${tutorial.src.dir}/dependence/dependee/build.xml" target="publish" output="${output.dir}/dependence-standalone.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/dependence/depender/build.xml" output="${output.dir}/dependence-depending.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/dependence/dependee/build.xml" target="publish" output="${output.dir}/dependence-standalone-2.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/dependence/depender/build.xml" output="${output.dir}/dependence-depending-2.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!-- configuration - Using Ivy Configuration - conf.html -->
        <run-tutorial antfile="${tutorial.src.dir}/configurations/multi-projects/filter-framework/build.xml" output="${output.dir}/configurations-lib.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/configurations/multi-projects/myapp/build.xml" output="${output.dir}/configurations-runcc.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/configurations/multi-projects/myapp/build.xml" target="run-hm" output="${output.dir}/configurations-runhm.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!--Building a repository - basic.html -->
        <run-tutorial antfile="${tutorial.src.dir}/build-a-ivy-repository/build.xml" target="maven2" output="${output.dir}/install.txt"/>
        <pathconvert property="myrepository.content" pathsep="${line.separator}">
            <fileset dir="${tutorial.src.dir}/build-a-ivy-repository/myrepository/no-namespace"/>
        </pathconvert>
        <echo file="${output.dir}/myrepository-content.txt">[ivy@apache:/]$ find ${tutorial.src.dir}/build-a-ivy-repository/myrepository/no-namespace -type f -print${line.separator}</echo>
        <echo file="${output.dir}/myrepository-content.txt" append="true">${myrepository.content}</echo>
        <delete dir="${tutorial.build.dir}"/>
        <echo>NB! This tutorial fails deliberately!</echo>
        <run-tutorial antfile="${tutorial.src.dir}/build-a-ivy-repository/build.xml" target="maven2-deps" output="${output.dir}/install-deps.txt" failonerror="false"/>
        <pathconvert property="myrepository.content.deps" pathsep="${line.separator}">
            <fileset dir="${tutorial.src.dir}/build-a-ivy-repository/myrepository/no-namespace/org.hibernate/hibernate"/>
        </pathconvert>
        <echo file="${output.dir}/myrepository-content-deps.txt">[ivy@apache:/]$ find ${tutorial.src.dir}/build-a-ivy-repository/myrepository/no-namespace/org.hibernate/hibernate -type f -print${line.separator}</echo>
        <echo file="${output.dir}/myrepository-content-deps.txt" append="true">${myrepository.content.deps}</echo>
        <delete dir="${tutorial.build.dir}"/>

        <!--Building a repository - advanced.html -->
        <run-tutorial antfile="${tutorial.src.dir}/build-a-ivy-repository/build.xml" target="maven2-namespace" output="${output.dir}/install-namespace.txt"/>
        <pathconvert property="myrepository.content.namespace" pathsep="${line.separator}">
            <fileset dir="${tutorial.src.dir}/build-a-ivy-repository/myrepository/advanced"/>
        </pathconvert>
        <echo file="${output.dir}/myrepository-content-namespace.txt">$ find ${tutorial.src.dir}/build-a-ivy-repository/myrepository/advanced -type f -print${line.separator}</echo>
        <echo file="${output.dir}/myrepository-content-namespace.txt" append="true">${myrepository.content.namespace}</echo>
        <delete dir="${tutorial.build.dir}"/>

        <!-- multi-project - multiproject.html -->
        <run-tutorial antfile="${tutorial.src.dir}/multi-project/build.xml" target="-p" output="${output.dir}/multi-project-general-antp.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/multi-project/projects/find/build.xml" target="-p" output="${output.dir}/multi-project-find-antp.txt"/>
        <run-tutorial antfile="${tutorial.src.dir}/multi-project/build.xml" target="publish-all" output="${output.dir}/multi-project-general-publishall.txt"/>
        <delete dir="${tutorial.build.dir}"/>

        <!-- Correct the location of the examples to a dummy '/ivy' location -->
        <pathconvert property="tutorial.root" dirsep="/">
            <identitymapper/>
            <path location="${tutorial.src.dir}"/>
        </pathconvert>
        <pathconvert property="tutorial.local" dirsep="/">
            <identitymapper/>
            <path location="${tutorial.local-repo}"/>
        </pathconvert>
        <pathconvert property="ivy.jar.location" dirsep="/">
            <identitymapper/>
            <fileset file="${artifacts.build.dir}/jars/${final.name}"/>
        </pathconvert>

        <replace dir="${output.dir}" token="\" value="/"/>
        <replace dir="${output.dir}" token="${tutorial.root}" value="/ivy"/>
        <replace dir="${output.dir}" token="${tutorial.local}" value="/home/ivy/.ivy2/local"/>
        <replace dir="${output.dir}" token="${ivy.jar.location}" value="//home/ivy/ivy.jar"/>
        <replace dir="${output.dir}" token="-f build.xml " value=""/>
        <replace dir="${output.dir}" token="${ivy.revision}" value="working@apache"/>
    </target>

    <target name="init-asciidoctor-extensions" depends="init-ivy" unless="skip.doc">
        <ivy:cachepath pathid="asciidoctorj.path" organisation="org.asciidoctor" module="asciidoctorj" revision="1.5.7" conf="default" inline="true"/>
        <mkdir dir="${build.dir}/asciidoc-extensions/classes"/>
        <javac srcdir="${doc.src.dir}/templates/extensions/src" destdir="${build.dir}/asciidoc-extensions/classes"
               debug="true" includeantruntime="no" classpathref="asciidoctorj.path"/>
        <copy todir="${build.dir}/asciidoc-extensions">
            <fileset dir="${doc.src.dir}/templates/extensions/src">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

    <target name="init-asciidoctor" depends="init-asciidoctor-extensions" unless="skip.doc">
        <mkdir dir="${build.dir}/asciidoc-lib/jars"/>
        <mkdir dir="${build.dir}/asciidoc-lib/classes"/>
        <ivy:retrieve organisation="org.asciidoctor" module="asciidoctor-ant" revision="1.5.5" conf="default" inline="true" pattern="${build.dir}/asciidoc-lib/jars/[artifact].[ext]"/>
        <unzip src="${build.dir}/asciidoc-lib/jars/asciidoctor-ant.jar" dest="${build.dir}/asciidoc-lib/classes"/>
        <taskdef uri="antlib:org.asciidoctor.ant" resource="org/asciidoctor/ant/antlib.xml">
            <classpath>
                <pathelement location="${build.dir}/asciidoc-extensions/classes"/>
                <pathelement location="${build.dir}/asciidoc-lib/classes"/>
            </classpath>
        </taskdef>
    </target>

    <target name="copy-doc-files" unless="skip.doc">
        <copy todir="${doc.build.dir}">
            <fileset dir="${doc.src.dir}" includes="images/**,style/**,samples/**,js/**,ivy.xsd"/>
            <fileset dir="${doc.src.dir}" includes="tutorial/log/multi-project-general-publishall.txt"/>
        </copy>
    </target>

    <target name="generate-doc" depends="generate-tutorial-output,default-version,init-asciidoctor,copy-doc-files" unless="skip.doc">
        <asciidoctor:convert sourceDirectory="${doc.src.dir}" outputDirectory="${doc.build.dir}" backend="xhtml5"
                             templateDir="${doc.src.dir}/templates" preserveDirectories="true"
                             sourceHighlighter="highlightjs">
            <attribute key="basedir" value="${doc.src.dir}"/>
            <attribute key="imagesdir" value=""/>
            <attribute key="version" value="${build.version}"/>
            <inlineMacroProcessor blockName="jira" className="org.apache.ivy.asciidoc.JiraMacro"/>
        </asciidoctor:convert>
    </target>

    <target name="generate-book-adoc" depends="default-version,copy-doc-files" unless="skip.doc">
        <scriptdef name="generate-book-adoc" language="javascript">
            <attribute name="jsontocfile"/>
            <attribute name="destFile"/>
            <![CDATA[
                var tocfile = self.getProject().resolveFile(attributes.get("jsontocfile"))
                r = new java.io.BufferedReader(new java.io.FileReader(tocfile));
                var val = "";
                while ((s = r.readLine()) != null) {
                    val += s;
                }
                r.close();
                var toc = eval("("+val+")")

                var writeToc = function(o, children, level) {
                    for (var c in children) {
                        o.write(level + ' link:#' + children[c].id.replace(/\//g, '_') + '[' + children[c].title + ']\n');
                        if (children[c].children && children[c].children.length && children[c].children.length != 0) {
                            writeToc(o, children[c].children, level+'*');
                        }
                    }
                };

                var writeInclude = function(o, children) {
                    for (var c in children) {
                        o.write('== [[' + children[c].id.replace(/\//g, '_') + ']]' + children[c].title + '\n\n');
                        o.write('include::../asciidoc/' + children[c].id + '.adoc[]\n\n');
                        if (children[c].children && children[c].children.length && children[c].children.length != 0) {
                            writeInclude(o, children[c].children);
                        }
                    }
                };

                out = new java.io.FileWriter(self.getProject().resolveFile(attributes.get("destfile")));
                out.write('== Table of Contents\n\n');
                writeToc(out, toc.children[0].children, '*');
                out.write('\n\n');
                writeInclude(out, toc.children[0].children, '*');
                out.close();
            ]]>
        </scriptdef>
        <mkdir dir="${build.dir}/book"/>
        <generate-book-adoc jsontocfile="${doc.src.dir}/toc.json" destFile="${build.dir}/book/book.adoc"/>
    </target>

    <target name="generate-book" depends="generate-book-adoc,init-asciidoctor">
        <asciidoctor:convert sourceDirectory="${build.dir}/book" outputDirectory="${doc.build.dir}" backend="xhtml5"
                             templateDir="${doc.src.dir}/templates/book" sourceHighlighter="highlightjs" doctype="book">
            <attribute key="version" value="${build.version}"/>
            <inlineMacroProcessor blockName="jira" className="org.apache.ivy.asciidoc.JiraMacro"/>
        </asciidoctor:convert>
    </target>

    <target name="all-doc" depends="javadoc,generate-doc,generate-book"/>

    <target name="init-snapshot" depends="default-version">
        <property name="snapshot.full.name" value="apache-ivy-${build.version}"/>
    </target>

    <target name="snapshot-metadata" depends="init-snapshot,resolve">
        <mkdir dir="${artifacts.build.dir}"/>
        <ivy:deliver
            deliverpattern="${artifacts.build.dir}/ivy.xml"
            pubrevision="${build.version}"
            pubdate="${pubdate}"
            status="${status}"/>
    </target>

    <target name="snapshot-src" depends="init-snapshot">
        <delete dir="${build.dir}/snapshot-src" failonerror="false"/>
        <exec executable="git" failonerror="true">
            <arg line="clone ${basedir} ${build.dir}/snapshot-src"/>
        </exec>
        <exec dir="${build.dir}/snapshot-src" executable="git" failonerror="true">
            <arg line="clean -d -x -f"/>
        </exec>
        <mkdir dir="${distrib.dir}/dist/${build.version}"/>
        <zip destfile="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-src.zip" defaultexcludes="no">
            <zipfileset dir="${build.dir}/snapshot-src" prefix="${snapshot.full.name}" defaultexcludes="no" excludes=".git/**"/>
        </zip>
        <tar destfile="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-src.tar.gz"
             compression="gzip" longfile="gnu" defaultexcludes="no">
            <zipfileset dir="${build.dir}/snapshot-src" prefix="${snapshot.full.name}" defaultexcludes="no" excludes=".git/**"/>
        </tar>
    </target>

    <target name="snapshot-bin-without-dependencies" depends="snapshot-metadata,jar,all-doc">
        <mkdir dir="${distrib.dir}/dist/${build.version}"/>
        <zip destfile="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-bin.zip">
            <zipfileset dir="${doc.build.dir}" prefix="${snapshot.full.name}/doc" excludes="**/reports/coverage/**,**/reports/test/**"/>
            <zipfileset dir="${basedir}/src/example" prefix="${snapshot.full.name}/src/example"/>
            <zipfileset dir="${basedir}" includes="NOTICE" fullpath="${snapshot.full.name}/NOTICE"/>
            <zipfileset dir="${basedir}" includes="README" prefix="${snapshot.full.name}"/>
            <zipfileset dir="${basedir}" includes="LICENSE*" prefix="${snapshot.full.name}"/>
            <zipfileset dir="${basedir}" includes="CHANGES.txt" fullpath="${snapshot.full.name}/CHANGES.txt"/>
            <zipfileset dir="${basedir}" includes="RELEASE_NOTES" fullpath="${snapshot.full.name}/RELEASE_NOTES"/>
            <zipfileset dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" fullpath="${snapshot.full.name}/ivy.xsd"/>
            <zipfileset dir="${artifacts.build.dir}" includes="ivy.xml" fullpath="${snapshot.full.name}/ivy.xml"/>
            <zipfileset dir="${basedir}" includes="build-for-bin-distrib.xml" fullpath="${snapshot.full.name}/build.xml"/>

            <zipfileset dir="${artifacts.build.dir}/jars" includes="${final.name}" fullpath="${snapshot.full.name}/ivy-${build.version}.jar"/>
        </zip>
        <tar destfile="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-bin.tar.gz"
             compression="gzip" longfile="gnu">
            <zipfileset src="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-bin.zip"/>
        </tar>
    </target>

    <target name="snapshot-bin-with-dependencies" depends="snapshot-metadata,jar,all-doc">
        <mkdir dir="${distrib.dir}/dist/${build.version}"/>
        <delete dir="${build.dir}/lib"/>
        <ivy:retrieve conf="default" pattern="${build.dir}/lib/[artifact]-[revision].[ext]"/>
        <zip destfile="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-bin-with-deps.zip">
            <zipfileset dir="${doc.build.dir}" prefix="${snapshot.full.name}/doc" excludes="**/reports/coverage/**,**/reports/test/**"/>
            <zipfileset dir="${basedir}/src/example" prefix="${snapshot.full.name}/src/example"/>
            <zipfileset dir="${basedir}" includes="NOTICE" fullpath="${snapshot.full.name}/NOTICE"/>
            <zipfileset dir="${basedir}" includes="README" prefix="${snapshot.full.name}"/>
            <zipfileset dir="${basedir}" includes="LICENSE*" prefix="${snapshot.full.name}"/>
            <zipfileset dir="${basedir}" includes="CHANGES.txt" fullpath="${snapshot.full.name}/CHANGES.txt"/>
            <zipfileset dir="${basedir}" includes="RELEASE_NOTES" fullpath="${snapshot.full.name}/RELEASE_NOTES"/>
            <zipfileset dir="${src.dir}/org/apache/ivy/plugins/parser/xml" includes="ivy.xsd" fullpath="${snapshot.full.name}/ivy.xsd"/>
            <zipfileset dir="${artifacts.build.dir}" includes="ivy.xml" fullpath="${snapshot.full.name}/ivy.xml"/>

            <zipfileset dir="${artifacts.build.dir}/jars" includes="${final.name}" fullpath="${snapshot.full.name}/ivy-${build.version}.jar"/>

            <zipfileset dir="${build.dir}/lib" prefix="${snapshot.full.name}/lib" excludes="ant-*.jar,bcpg-*.jar,bcprov*.jar"/>
        </zip>
        <tar destfile="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-bin-with-deps.tar.gz"
             compression="gzip" longfile="gnu">
            <zipfileset src="${distrib.dir}/dist/${build.version}/${snapshot.full.name}-bin-with-deps.zip"/>
        </tar>
    </target>

    <target name="snapshot-bin"
            depends="snapshot-bin-with-dependencies,snapshot-bin-without-dependencies"/>

    <target name="release-xsd" depends="init-snapshot">
        <!-- copies current ivy xml schema to doc source, so that it will be available from web site -->
        <copy file="${src.dir}/org/apache/ivy/plugins/parser/xml/ivy.xsd" todir="${doc.src.dir}"/>
    </target>

    <target name="snapshot-maven2" depends="init-snapshot,snapshot-metadata,jar,sources,javadoc">
        <property name="m2.distrib.dir" value="${distrib.dir}/maven2/${build.version}"/>
        <ivy:makepom ivyfile="${artifacts.build.dir}/ivy.xml"
                     pomfile="${m2.distrib.dir}/ivy-${build.version}.pom"
                     templatefile="${basedir}/src/etc/makepom/pom.template">
            <mapping conf="core" scope="compile"/>
            <mapping conf="test" scope="test"/>
        </ivy:makepom>
        <copy file="${artifacts.build.dir}/jars/${final.name}"
              tofile="${m2.distrib.dir}/ivy-${build.version}.jar"/>
        <!-- jar javadocs -->
        <jar destfile="${m2.distrib.dir}/ivy-${build.version}-javadoc.jar">
            <fileset dir="${javadoc.build.dir}"/>
        </jar>
        <!-- copy sources jar -->
        <copy file="${artifacts.build.dir}/sources/${final.name}"
              tofile="${m2.distrib.dir}/ivy-${build.version}-sources.jar"/>

        <checksum algorithm="sha1">
            <fileset dir="${m2.distrib.dir}">
                <include name="*.pom"/>
                <include name="*.jar"/>
            </fileset>
        </checksum>
        <checksum algorithm="sha-512" fileext=".sha512">
            <fileset dir="${m2.distrib.dir}">
                <include name="*.pom"/>
                <include name="*.jar"/>
            </fileset>
        </checksum>
    </target>

    <target name="snapshot-checksums">
        <checksum algorithm="sha1">
            <fileset dir="${distrib.dir}/dist/${build.version}">
                <include name="*.pom"/>
                <include name="*.jar"/>
                <include name="*.zip"/>
                <include name="*.gz"/>
            </fileset>
        </checksum>
        <checksum algorithm="sha-512" fileext=".sha512">
            <fileset dir="${distrib.dir}/dist/${build.version}">
                <include name="*.pom"/>
                <include name="*.jar"/>
                <include name="*.zip"/>
                <include name="*.gz"/>
            </fileset>
        </checksum>
    </target>

    <target name="snapshot-version">
        <property name="version.prefix" value="${target.ivy.version}-dev-"/>
    </target>

    <target name="release-version">
        <property name="build.version" value="${target.ivy.version}"/>
        <echo>Setting version to ${build.version}</echo>
        <condition property="status" value="release">
            <matches pattern="^\d+\.\d+\.\d+$" string="${build.version}"/>
        </condition>
        <condition property="status" value="milestone">
            <matches pattern="^\d+\.\d+\.\d+-(alpha|beta|rc)\d+$" string="${build.version}"/>
        </condition>
        <property name="status" value="integration"/>
        <echo>Setting status to ${status}</echo>
    </target>

    <target name="sign" depends="init-ivy">
        <property file="${user.home}/ivybuild.properties"/>
        <input message="please enter your PGP password: " addproperty="pgp.password"/>
        <input message="please enter your PGP keyId: " addproperty="pgp.keyId"/>

        <ivy:retrieve conf="default" pattern="${build.dir}/lib/[artifact]-[revision].[ext]"/>

        <taskdef resource="org/apache/ivy/ant/antlib.xml"
                 uri="antlib:org.apache.ivy.ant_2">
            <classpath>
                <fileset dir="${artifacts.build.dir}/jars" includes="${final.name}"/>
                <fileset dir="${build.dir}/lib" excludes="ant-*.jar"/>
            </classpath>
        </taskdef>

        <ivy2:settings id="sign.settingsId" file="ivysettings-release.xml"/>
        <ivy2:cachepath organisation="org.apache.commons" settingsRef="sign.settingsId" transitive="false" log="download-only"
                        module="commons-openpgp" revision="1.0-SNAPSHOT" inline="true" pathid="openpgp.classpath"/>
        <ivy2:cachepath organisation="org.bouncycastle" settingsRef="sign.settingsId" log="download-only"
                        module="bcprov-jdk16" revision="1.45" inline="true" pathid="bouncycastle.bcprov.classpath"/>
        <ivy2:cachepath organisation="org.bouncycastle" settingsRef="sign.settingsId" transitive="false" log="download-only"
                        module="bcpg-jdk16" revision="1.45" inline="true" pathid="bouncycastle.bcpg.classpath"/>

        <!--
            For some reason, if we use the openpgp:signer task here directly, the bouncycastle security
            provider cannot be loaded. If we launch it as a forked process everything works fine !?!
        -->
        <java classname="org.apache.tools.ant.launch.Launcher"
              fork="true">
            <classpath>
                <fileset dir="${ant.home}" includes="**/*.jar"/>
                <path refid="bouncycastle.bcprov.classpath"/>
                <path refid="bouncycastle.bcpg.classpath"/>
                <path refid="openpgp.classpath"/>
            </classpath>
            <arg line="-f build-release.xml"/>
            <arg line="sign-internal"/>
            <arg line="-Dpgp.password=${pgp.password}"/>
            <arg line="-Dpgp.keyId=${pgp.keyId}"/>
        </java>
    </target>

    <target name="sign-internal">
        <property file="build.properties"/>
        <taskdef resource="org/apache/commons/openpgp/ant/antlib.xml" uri="antlib:org.apache.commons.openpgp.ant"/>
        <openpgp:signer secring="${user.home}/.gnupg/secring.gpg"
                        pubring="${user.home}/.gnupg/pubring.gpg"
                        password="${pgp.password}"
                        keyid="${pgp.keyId}"
                        asciiarmor="true">
            <fileset dir="${distrib.dir}">
                <include name="**/*.pom"/>
                <include name="**/*.jar"/>
                <include name="**/*.zip"/>
                <include name="**/*.gz"/>
            </fileset>
        </openpgp:signer>
    </target>

    <target name="rat" depends="init-ivy">
        <property name="rat.failOnError" value="true"/>
        <ivy:cachepath organisation="org.apache.rat" module="apache-rat-tasks" revision="0.15"
                       inline="true" conf="default" pathid="rat.classpath"
                       log="download-only"/>

        <typedef resource="org/apache/rat/anttasks/antlib.xml"
                 uri="antlib:org.apache.rat.anttasks"
                 classpathref="rat.classpath"/>

        <delete dir="${rat.report.dir}"/>
        <mkdir dir="${rat.report.dir}"/>
        <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" reportFile="${rat.report.dir}/rat-report.txt">
            <fileset dir="${basedir}">
                <exclude name=".classpath"/>
                <exclude name="ReleaseInstructions"/>
                <exclude name=".ivy2/**/*"/>
                <exclude name="build/**/*"/>
                <exclude name="bin/**/*"/>
                <exclude name="**/*.md5"/>
                <exclude name="**/*.sha1"/>
                <exclude name="**/*.sha512"/>
                <exclude name="**/*.txt"/>
                <exclude name="**/MANIFEST*.MF"/>
                <exclude name="**/*.json"/>
                <exclude name="**/*.SHA-256"/>
                <exclude name="**/*.SHA-512"/>
                <exclude name="asciidoc/js/jquery.pack.js"/>
                <exclude name="asciidoc/js/jquery.treeview.js"/>
            </fileset>
        </rat:report>

        <fail message="Some files have missing or incorrect license information. Check RAT report for more details: ${rat.report.dir}/rat-report.txt">
            <condition>
                <and>
                    <not><resourcecontains resource="${rat.report.dir}/rat-report.txt" substring="0 Unknown Licenses" casesensitive="false"/></not>
                    <equals arg1="${rat.failOnError}" arg2="true"/>
                </and>
            </condition>
        </fail>
    </target>

    <target name="upload-nexus" depends="release-version,init-ivy,jar">
        <ivy:retrieve conf="default" pattern="${build.dir}/lib/[artifact]-[revision].[ext]"/>

        <taskdef resource="org/apache/ivy/ant/antlib.xml"
                 uri="antlib:org.apache.ivy.ant_2">
            <classpath>
                <fileset dir="${artifacts.build.dir}/jars" includes="${final.name}"/>
                <fileset dir="${build.dir}/lib" excludes="ant-*.jar"/>
            </classpath>
        </taskdef>

        <property file="${user.home}/ivybuild.properties"/>
        <input message="please enter your PGP password: " addproperty="pgp.password"/>
        <input message="please enter your PGP keyId: " addproperty="pgp.keyId"/>

        <input message="please enter your repository.apache.org username: " addproperty="upload.user"/>
        <input message="please enter your repository.apache.org password: " addproperty="upload.password"/>

        <ivy2:settings id="upload.settingsId" file="ivysettings-release.xml"/>
        <ivy2:resolve file="${basedir}/build/artifact/ivy.xml" transitive="false"/>
        <ivy2:publish organisation="org.apache.ivy"
                      module="ivy"
                      revision="${build.version}"
                      srcivypattern="${basedir}/build/artifact/ivy.xml"
                      artifactspattern="${basedir}/build/distrib/maven2/[revision]/[artifact]-[revision](-[classifier]).[ext]"
                      publishivy="false"
                      conf="core"
                      settingsRef="upload.settingsId"
                      resolver="nexus">
            <!-- The standard maven2 artifacts -->
            <artifact name="ivy" ext="pom" type="ivy"/>
            <artifact name="ivy" ext="jar" type="sources" classifier="sources"/>
            <artifact name="ivy" ext="jar" type="javadoc" classifier="javadoc"/>
        </ivy2:publish>
    </target>

    <target name="prepare-snapshot"
            depends="/localivy,clean-ivy-home,clean,clean-lib,snapshot-version,install,clean-examples,test-report"/>

    <target name="snapshot"
            depends="prepare-snapshot,snapshot-src,snapshot-bin,snapshot-maven2,snapshot-checksums"
            description="used for nightly and integration builds"/>

    <target name="release"
            depends="release-version,/localivy,clean-ivy-home,clean,clean-lib,rat,snapshot"
            description="make a new release of Ivy"/>

    <target name="tagsdoc" depends="generate-doc"
            description="generate tagsdoc.properties file which can be used in IvyDE for code completion documentation">
        <scriptdef name="generate-tagsdoc" language="javascript">
            <element name="fileset" type="fileset"/>
            <attribute name="destFile"/>
            <![CDATA[
                fs = elements.get("fileset").get(0);
                srcDir = fs.getDir(project);

                // Get the files (array) of that fileset
                srcFiles = fs.getDirectoryScanner(project).getIncludedFiles();

                // iterate over that array
                print('processing ' + srcFiles.length + ' source files...');

                var xpath = javax.xml.xpath.XPathFactory.newInstance().newXPath();
                out = new java.io.FileWriter(self.getProject().resolveFile(attributes.get("destfile")));
                for (i = 0; i < srcFiles.length; i++) {
                    try {
                        // get the values via Java API
                        var file = new java.io.File(srcDir, srcFiles[i]);
                        print('processing ' + file + '...');

                        inputSource = new org.xml.sax.InputSource(new java.io.FileInputStream(file));

                        dbf = javax.xml.parsers.DocumentBuilderFactory.newInstance();
                        dbf.setValidating(false);
                        dbf.setIgnoringComments(false);
                        dbf.setIgnoringElementContentWhitespace(true);
                        dbf.setNamespaceAware(false);
                        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false);
                        dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
                        builder = dbf.newDocumentBuilder();
                        document = builder.parse(inputSource);

                        var expression = "//span[contains(@class, 'ivysettings.')]";
                        var t = xpath.evaluate(expression, document, javax.xml.xpath.XPathConstants.NODE);
                        if (t == null) {
                            print('\tno tagdoc span found: ignored');
                            continue;
                        }
                        var id = t.getAttributes().getNamedItem("class").getTextContent();

                        out.write('##### ' + id + '\n');
                        out.write(id + ' = ' + t.getTextContent() + '\n');

                        text = (id === "ivysettings.resolvers") ? "Name" : "Attribute"
                        expression = "(//table/thead/tr/th[text()='" + text + "'])[1]/../../../tbody/tr/td[1]";
                        var atts = xpath.evaluate(expression, document, javax.xml.xpath.XPathConstants.NODESET);
                        for (j = 0; j < atts.getLength(); j++) {
                            name = atts.item(j).getTextContent().split(/[\s,]+/).pop()
                            out.write(id + '.@' + ((id === "ivysettings.resolvers") ? name.toLowerCase() : name) + ' = '
                                + xpath.evaluate("../td[2]", atts.item(j), javax.xml.xpath.XPathConstants.NODE)
                                    .getTextContent().replace(/\n/g, " ").replace(/[\x00-\x1F\xA0-\xE1\xE3-\xFF]/g, "") + '\n');
                        }
                    } catch (e) {
                        print('\terror: ' + e);
                    }
                }
                out.close();
            ]]>
        </scriptdef>
        <generate-tagsdoc destFile="tagsdoc.properties">
            <fileset dir="${doc.build.dir}" includes="settings/**/*.html,resolver/**/*.html"/>
        </generate-tagsdoc>
    </target>

</project>
