<?xml version="1.0"?>

<!--
   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="signit">
  <!-- use this property file to enter your default key id -->
  <property file="${user.home}/gnupg.properties"/>
  <property name="bouncycastle.jdk" value="15on"/>
  <property name="bouncycastle.version" value="1.49"/>
  <taskdef resource="org/apache/commons/openpgp/ant/antlib.xml">
    <classpath>
      <pathelement
        location="${user.home}/.m2/repository/org/bouncycastle/bcprov-jdk${bouncycastle.jdk}/${bouncycastle.version}/bcprov-jdk${bouncycastle.jdk}-${bouncycastle.version}.jar"/>
      <pathelement
        location="${user.home}/.m2/repository/org/apache/commons/commons-openpgp/1.0-SNAPSHOT/commons-openpgp-1.0-SNAPSHOT.jar"/>
      <pathelement
        location="${user.home}/.m2/repository/org/bouncycastle/bcpg-jdk${bouncycastle.jdk}/${bouncycastle.version}/bcpg-jdk${bouncycastle.jdk}-${bouncycastle.version}.jar"/>
    </classpath>
  </taskdef>
  <condition property="gpg.dir" value="${user.home}/AppData/Roaming/gnupg">
    <os family="windows"/>
  </condition>
  <property name="gpg.dir" location="${user.home}/.gnupg"/>
  <signer secring="${gpg.dir}/secring.gpg"
    pubring="${gpg.dir}/pubring.gpg" password="${password}" keyid="${keyid}">
    <fileset dir="../java-repository">
      <include name="**/*.jar"/>
      <include name="**/*.pom"/>
    </fileset>
    <fileset dir="../distribution">
      <include name="**/*.bz2"/>
      <include name="**/*.zip"/>
      <include name="**/*.gz"/>
    </fileset>
  </signer>

</project>
