You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2010/10/08 15:35:33 UTC

svn commit: r1005815 - in /db/derby/code/trunk: build.xml buildrelease java/engine/org/apache/derby/loc/build.xml tools/ant/properties/dirs.properties tools/ant/properties/packaging.tmpl tools/release/build.xml

Author: rhillegas
Date: Fri Oct  8 13:35:33 2010
New Revision: 1005815

URL: http://svn.apache.org/viewvc?rev=1005815&view=rev
Log:
DERBY-2573: Commit master script for building release distributions.

Added:
    db/derby/code/trunk/buildrelease   (with props)
Modified:
    db/derby/code/trunk/build.xml
    db/derby/code/trunk/java/engine/org/apache/derby/loc/build.xml
    db/derby/code/trunk/tools/ant/properties/dirs.properties
    db/derby/code/trunk/tools/ant/properties/packaging.tmpl
    db/derby/code/trunk/tools/release/build.xml

Modified: db/derby/code/trunk/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/build.xml?rev=1005815&r1=1005814&r2=1005815&view=diff
==============================================================================
--- db/derby/code/trunk/build.xml (original)
+++ db/derby/code/trunk/build.xml Fri Oct  8 13:35:33 2010
@@ -1241,6 +1241,9 @@
        <copy todir="${derby.jar.dir}/${plugin.tmp.dir}/${plugin.dir}/${plugin.core.dir}" file="LICENSE"/>
        <copy todir="${derby.jar.dir}/${plugin.tmp.dir}/${plugin.dir}/${plugin.core.dir}" file="NOTICE"/>
 
+       <!-- copy the plugin properties for use by the release target -->
+       <copy file="${derby.jar.dir}/${plugin.tmp.dir}/plugintmp.properties" todir="${release.base}"/>
+
        <delete file="${derby.jar.dir}/${plugin.tmp.dir}/plugintmp.properties"/>
        <delete file="${derby.jar.dir}/${plugin.tmp.dir}/plugin.xml"/>
 
@@ -1258,8 +1261,8 @@
   <target name="buildjars" depends="initjars,derbyjar,derbytoolsjar,derbynetjar,derbyclientjar,derbyrunjar,derbywar,derbylocalejars,derbytestingjar"/>
 
   <target name="initjars" depends="setsanityname,getsvnversion,setCompilerProperties">
-    <property name="derby.jar.dir" value="${out.base}/jars/${sanity.name}"/>
-    <property name="derby.jar.topdir" value="${out.base}/jars"/>
+    <property name="derby.jar.dir" value="${jarsdist.dir}/${sanity.name}"/>
+    <property name="derby.jar.topdir" value="${jarsdist.dir}"/>
     <mkdir dir="${derby.jar.dir}"/>
     <mkdir dir="${derby.jar.dir}/lists"/>
     <loadfile srcFile="${out.base}/changenumber.properties"
@@ -1811,9 +1814,59 @@
    </target>
 
   <target name="cleanjars" depends="setsanityname">
-    <delete dir="${basedir}/jars/${sanity.name}"/>
+    <delete dir="${jarsdist.dir}/${sanity.name}"/>
   </target>
 
+<!-- - - - - - - - - - - -  release build helper targets  - - - - - - - - - -->
+
+   <!-- Update both subversion clients for building release distributions -->
+   <target name="updatesvnclients" depends="updatesvncode,updatesvndoc"/>
+
+   <target name="updatesvncode">
+     <exec executable="svn">
+       <arg value="update"/>
+       <arg value="${basedir}"/>
+     </exec>
+   </target>
+   <target name="updatesvndoc">
+     <exec executable="svn">
+       <arg value="update"/>
+       <arg value="${docs.root}"/>
+     </exec>
+   </target>
+
+   <!-- Checkin the generated error documentation to the docs client -->
+   <target name="copyerrordocs">
+
+     <property name="checkinMessage" value="${release.base}/tmp.checkin.message"/>
+
+     <copy file="${sqlstateTables}" todir="${docs.root}/src/ref"/>
+
+     <echo file="${checkinMessage}" message="Check in SQLState tables as part of building a release."/>
+     <exec executable="svn">
+       <arg value="commit"/>
+       <arg value="--username"/>
+       <arg value="${svn.username}"/>
+       <arg value="--password"/>
+       <arg value="${svn.password}"/>
+       <arg value="-F"/>
+       <arg value="${checkinMessage}"/>
+       <arg value="${docs.root}"/>
+     </exec>
+
+     <!-- Bring the docs client up to date again -->
+     <antcall target="updatesvndoc"/>
+
+   </target>
+
+   <!-- Build the user documentation -->
+   <target name="builduserdocs">
+
+     <ant dir="${docs.root}" target="clobber"/>
+     <ant dir="${docs.root}" target="all"/>
+
+   </target>
+
 <!-- - - - - - - - - - - - - - targets for populating META-INF  - - - - - - - - - - - -->
 
   <!-- copy boilerplate common to derby jar files -->
@@ -1893,27 +1946,27 @@
     </java>
     <property file="${snapshot.dir}/maintversion.properties"/>
     <zip destfile="${snapshot.dir}/db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}.zip">
-      <zipfileset prefix="db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${basedir}/jars/insane" includes="*.jar,*.war"/>
+      <zipfileset prefix="db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${jarsdist.dir}/insane" includes="*.jar,*.war"/>
       <zipfileset prefix="db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}" dir="${basedir}" includes="bin/**,LICENSE,NOTICE,README,javadoc/publishedapi/**" excludes="bin/templates/**"/>
     </zip>
     <tar destfile="${snapshot.dir}/db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}.tar.gz"
          compression="gzip">
-      <tarfileset prefix="db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${basedir}/jars/insane" includes="*.jar,*.war"/>
+      <tarfileset prefix="db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${jarsdist.dir}/insane" includes="*.jar,*.war"/>
       <tarfileset prefix="db-derby-snapshot-${major}.${minor}.${interim}.${point}-${changenumber}" dir="${basedir}" includes="bin/**,LICENSE,NOTICE,README,javadoc/publishedapi/**" excludes="bin/templates/**"/>
     </tar>
 
     <!-- debug archives - DERBY-178 --> 
     <zip destfile="${snapshot.dir}/db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}.zip">
-      <zipfileset prefix="db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${basedir}/jars/sane" includes="*.jar,*.war"/>
+      <zipfileset prefix="db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${jarsdist.dir}/sane" includes="*.jar,*.war"/>
       <zipfileset prefix="db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}" dir="${basedir}" includes="bin/**,LICENSE,NOTICE,CHANGES,README,javadoc/publishedapi/**" excludes="bin/templates/**"/>
     </zip>
     <tar destfile="${snapshot.dir}/db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}.tar.gz"
          compression="gzip">
-      <tarfileset prefix="db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${basedir}/jars/sane" includes="*.jar,*.war"/>
+      <tarfileset prefix="db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}/lib" dir="${jarsdist.dir}/sane" includes="*.jar,*.war"/>
       <tarfileset prefix="db-derby-snapshot-debug-${major}.${minor}.${interim}.${point}-${changenumber}" dir="${basedir}" includes="bin/**,LICENSE,NOTICE,README,javadoc/publishedapi/**" excludes="bin/templates/**"/>
     </tar>
 
-    <copy file="${basedir}/jars/insane/derby_core_plugin_${major}.${minor}.${interim}.zip"
+    <copy file="${jarsdist.dir}/insane/derby_core_plugin_${major}.${minor}.${interim}.zip"
           tofile="${snapshot.dir}/derby_core_plugin_${major}.${minor}.${interim}.${changenumber}.zip"/>
   </target>
 
@@ -2274,7 +2327,7 @@
     </target>
 
 	<target name="junit-all-codeline-jars-set-properties" depends="setsanityname">
-		<property name="derby.jar.base" value="${basedir}/jars/${sanity.name}"/>
+		<property name="derby.jar.base" value="${jarsdist.dir}/${sanity.name}"/>
 	    <property name="derby.junit.classpath"
 	        value="${derby.jar.base}/derbyTesting.jar:${derby.jar.base}/derbynet.jar:${derby.jar.base}/derbytools.jar:${derby.jar.base}/derbyclient.jar"/>
 	</target>
@@ -2379,28 +2432,68 @@ you should not have to do this.
         </emma>
     </target>
 
+    <target
+        name="release"
+        depends="prepareforrelease"
+        description="Build the release distributions"
+    >
+      <ant antfile="${basedir}/tools/release/build.xml" target="release"/>
+
+      <!-- copy the eclipse plugin into the distribution directory -->
+      <property file="${release.base}/plugintmp.properties"/>
+      <property name="eclipse.plugin" value="${plugin.derby.core.zipfile}_${plugin.derby.version}.zip"/>
+      <copy file="${jarsdist.dir}/insane/${eclipse.plugin}" todir="${release.dir}"/>
+
+      <!-- sign all of the artifacts -->
+      <ant antfile="${basedir}/tools/release/build.xml" target="sign"/>
+      <ant antfile="${basedir}/tools/release/build.xml" target="sign.eclipse.plugin"/>
+
+      <!-- remove cruft -->
+      <delete dir="${crlf.dir}"/>
+      <delete dir="${lf.dir}"/>
+      <delete file="${release.dir}/maintversion.properties"/>
+
+    </target>
+
     <!-- do most of the ant calls to prepare a release -->
-    <target name="prepareforrelease" depends="checkstateremoved,checksanenotset,cleanalljars,cleandocs,clobber,cleanreleasefiles">
+    <target name="prepareforrelease" depends="checkdocsroot,checkpgppassphrase,checksvncredentials,checkstateremoved,checksanenotset,cleanalljars,cleandocs,clobber,cleanreleasefiles">
         <!-- other possible checks? maybe no checked out files? -->
         <!-- maybe try to force a doc build? call to ant release will check for docs out -->
         <!-- assume svn update has been done to the desired level -->
         <!-- we should already be squeeky clean, depends removed jars, javadoc, snapshot, classes, and old release artifacts -->
-        <echo level="info" message="  Sane = ${sane}"/>
+        <antcall target="updatesvnclients"/>
+
         <antcall target="clobber"/>
-        <antcall target="sane"/>
         <antcall target="all">
+           <param name="sane" value="true"/>
+           <param name="sanity" value="true"/>
+           <param name="sanity.name" value="sane"/>
            <param name="deprecation" value="off"/>
         </antcall>
-        <antcall target="buildjars"/>
+        <antcall target="buildjars">
+           <param name="sane" value="true"/>
+           <param name="sanity" value="true"/>
+           <param name="sanity.name" value="sane"/>
+        </antcall>
+
         <antcall target="clobber"/>
-        <antcall target="insane"/>
         <antcall target="snapshot">
+           <param name="sane" value="false"/>
+           <param name="sanity" value="false"/>
+           <param name="sanity.name" value="insane"/>
             <param name="deprecation" value="off"/>
-            <param name="sane" value="false"/>
         </antcall>
+
         <antcall target="publishedapi">
             <param name="deprecation" value="off"/>
         </antcall>
+
+        <!-- copy the generated sqlstate tables to the docs client and check it in -->
+        <antcall target="copyerrordocs"/>
+
+        <!-- build the docs now that the sqlstate tables are up to date -->
+        <antcall target="builduserdocs"/>
+
         <!-- finish by removing the state.properties file, so we can do it again -->
         <antcall target="cleanstate"/>
     </target>
@@ -2419,6 +2512,40 @@ you should not have to do this.
         <available file="${derby.engine.src.dir}/state.properties" property="state.prepare.available"/>
     </target>
 
+    <target name="checkdocsroot">
+        <!-- make sure that docs.root points into a docs tree  -->
+        <fail message="Cannot build a release; docs.root does not point at your documentation client: ${docs.root}">
+            <condition>
+              <not><available file="${docs.root}/src/conrefs.dita"/></not>
+            </condition>
+        </fail>     
+    </target>
+
+    <target name="checksvncredentials">
+        <!-- make sure that subversion credentials are set  -->
+        <fail message="Cannot build a release; svn.username and/or svn.password are not set. These are the credentials you use to commit work to the Apache repositories.">
+            <condition>
+              <not>
+                <and>
+                  <isset property="svn.username"/>
+                  <isset property="svn.password"/>
+                </and>
+              </not>
+            </condition>
+        </fail>     
+    </target>
+
+    <target name="checkpgppassphrase">
+        <!-- make sure that signature credentials are set  -->
+        <fail message="Cannot build a release; pgp.passphrase is not set. This is the passphrase needed to sign release artifacts.">
+            <condition>
+              <not>
+                <isset property="pgp.passphrase"/>
+              </not>
+            </condition>
+        </fail>
+    </target>
+
     <target name="checksanenotset">
         <!-- check that sane is *not* set elsewhere, e.g. $HOME/ant.properties -->
         <echo level="info" message="sane : ${sane}"/>
@@ -2434,6 +2561,6 @@ you should not have to do this.
     </target>
 
     <target name="cleanalljars">
-        <delete dir="${basedir}/jars"/>
+        <delete dir="${jarsdist.dir}"/>
     </target>
 </project>

Added: db/derby/code/trunk/buildrelease
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/buildrelease?rev=1005815&view=auto
==============================================================================
--- db/derby/code/trunk/buildrelease (added)
+++ db/derby/code/trunk/buildrelease Fri Oct  8 13:35:33 2010
@@ -0,0 +1,52 @@
+#! /bin/bash
+
+# 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.
+
+####################################################
+#
+# Build the Derby release distributions. After a successful run,
+# release/distribution will hold all of the signed artifacts except
+# for the Eclipse ui plugin. You will have to ask an Eclipse user to build
+# that artifact for you.
+#
+# This script assumes that you have changed directory to the root of
+# your code tree, where its build.xml and java directory live.
+#
+####################################################
+
+if [ ! -n "$DOCS_ROOT" ]; then
+    echo Please set DOCS_ROOT to the top directory of your doc client, where its build.xml and src directory live.
+    exit 1
+fi
+
+export docLib=$DOCS_ROOT/lib
+export CLASSPATH=$docLib/fop.jar:$docLib/avalon-framework-cvs-20020806.jar:$docLib/batik.jar
+export ANT_OPTS="-Xmx512m"
+
+
+read -p "Enter your Apache subversion username >  " subversionUserName
+read -p "Enter your Apache subversion password >  " subversionPassword
+read -p "Enter your pgp passphrase >  " pgpPassphrase
+
+###############################################################
+#
+echo Building release distributions...
+#
+###############################################################
+
+ant "-Ddocs.root=$DOCS_ROOT" "-Dpgp.passphrase=$pgpPassphrase" "-Dsvn.username=$subversionUserName" "-Dsvn.password=$subversionPassword" -quiet release

Propchange: db/derby/code/trunk/buildrelease
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/buildrelease
------------------------------------------------------------------------------
    svn:executable = *

Modified: db/derby/code/trunk/java/engine/org/apache/derby/loc/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/loc/build.xml?rev=1005815&r1=1005814&r2=1005815&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/loc/build.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/loc/build.xml Fri Oct  8 13:35:33 2010
@@ -36,8 +36,6 @@
   />
   <property name="messageDescriptors" value="${derby.locales.dir}/messages.xml"/>
   <property name="englishMessages" value="${generated.engine.locale.dir}/messages_en.properties"/>
-  <property name="docDirectory" value="${out.dir}/doc"/>
-  <property name="sqlstateTables" value="${docDirectory}/rrefexcept71493.dita"/>
 
 <!-- Targets -->
   <target name="locales" depends="init,buildMessages,split"/>
@@ -57,7 +55,7 @@
   <!-- Generate english messages from xml descriptors-->
   <target name="buildMessages" unless="messagesUpToDate">
 
-    <mkdir dir="${docDirectory}" />
+    <mkdir dir="${gen.doc.dir}" />
 
     <buildMessages
       xmlSourceFile="${messageDescriptors}"

Modified: db/derby/code/trunk/tools/ant/properties/dirs.properties
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/tools/ant/properties/dirs.properties?rev=1005815&r1=1005814&r2=1005815&view=diff
==============================================================================
--- db/derby/code/trunk/tools/ant/properties/dirs.properties (original)
+++ db/derby/code/trunk/tools/ant/properties/dirs.properties Fri Oct  8 13:35:33 2010
@@ -102,9 +102,13 @@ generated.sql.dir=${generated.src.dir}/$
 generated.engine.locale.dir=${generated.src.dir}/${derby.dir}/loc
 generated.cache.dir=${generated.src.dir}/${derby.dir}/iapi/services/cache
 
+gen.doc.dir=${out.dir}/doc
+
 release.base=${out.base}/release
 release.dir=${release.base}/distributions
 snapshot.dir=${release.base}/snapshot
+crlf.dir=${release.dir}/crlf
+lf.dir=${release.dir}/lf
 
 
 derby.testing.dir=org/apache/derbyTesting
@@ -115,3 +119,5 @@ derby.testing.junit.dir=${derby.testing.
 derby.testing.perf.dir=${derby.testing.dir}/perf
 derby.testing.suites.dir=${derby.testing.functest.dir}/suites
 derby.testing.system.dir=${derby.testing.dir}/system
+
+sqlstateTables=${gen.doc.dir}/rrefexcept71493.dita

Modified: db/derby/code/trunk/tools/ant/properties/packaging.tmpl
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/tools/ant/properties/packaging.tmpl?rev=1005815&r1=1005814&r2=1005815&view=diff
==============================================================================
--- db/derby/code/trunk/tools/ant/properties/packaging.tmpl (original)
+++ db/derby/code/trunk/tools/ant/properties/packaging.tmpl Fri Oct  8 13:35:33 2010
@@ -17,7 +17,7 @@
 
 # location of documentation
  
-docs.out=/derby-docs-10.1/out
+docs.root=/derby-docs-10.1
 bin.html=${bin.dir}/docs/html
 bin.pdf=${bin.dir}/docs/pdf
 

Modified: db/derby/code/trunk/tools/release/build.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/tools/release/build.xml?rev=1005815&r1=1005814&r2=1005815&view=diff
==============================================================================
--- db/derby/code/trunk/tools/release/build.xml (original)
+++ db/derby/code/trunk/tools/release/build.xml Fri Oct  8 13:35:33 2010
@@ -79,7 +79,6 @@
   <target name="release" depends="clean,bin,lib,lib-debug,src"/>
 
   <target name="init">
-
     <mkdir dir="${release.dir}"/>
 
     <java classname="org.apache.derbyBuild.maintversion2props">
@@ -96,8 +95,6 @@
     <property name="derby.src" value="${derby.basename}-src"/> 
     <property name="derby.docssrc" value="${derby.basename}-doc-src"/> 
 
-    <property name="crlf.dir" value="${release.dir}/crlf"/>
-    <property name="lf.dir" value="${release.dir}/lf"/>
     <mkdir dir="${crlf.dir}"/>
     <mkdir dir="${lf.dir}"/>
     <fixcrlf srcdir="${basedir}" destdir="${crlf.dir}" eol="crlf"
@@ -187,9 +184,9 @@
                   prefix="${derby.bin}/demo/programs/workingwithderby"/>
 
       <!-- docs -->
-      <zipfileset dir="${docs.out}" includes="**/*.html,**/*.jpg,**/*.gif"
+      <zipfileset dir="${docs.root}/out" includes="**/*.html,**/*.jpg,**/*.gif"
                   prefix="${derby.bin}/docs/html"/>
-      <zipfileset dir="${docs.out}" includes="**/*.pdf"
+      <zipfileset dir="${docs.root}/out" includes="**/*.pdf"
                   prefix="${derby.bin}/docs/pdf"/>
       <!-- javadoc -->
       <zipfileset dir="${basedir}/javadoc/publishedapi" prefix="${derby.bin}/javadoc" includes="**"/>   
@@ -245,9 +242,9 @@
       <tarfileset dir="${basedir}/classes" includes="Wwd*.class"
                   prefix="${derby.bin}/demo/programs/workingwithderby"/>
       <!-- docs -->
-      <tarfileset dir="${docs.out}" includes="**/*.html,**/*.jpg,**/*.gif"
+      <tarfileset dir="${docs.root}/out" includes="**/*.html,**/*.jpg,**/*.gif"
 		          prefix="${derby.bin}/docs/html"/>
-      <tarfileset dir="${docs.out}" includes="**/*.pdf"
+      <tarfileset dir="${docs.root}/out" includes="**/*.pdf"
 	              prefix="${derby.bin}/docs/pdf"/>
       <!-- javadoc -->
       <tarfileset dir="${basedir}/javadoc/publishedapi" prefix="${derby.bin}/javadoc" includes="**"/>   
@@ -332,7 +329,7 @@
       <zipfileset dir="${basedir}" prefix="${derby.src}"
          includes="${src.includes}"
          excludes="${src.excludes}"/>
-      <zipfileset dir="${docs.out}/.." prefix="${derby.docssrc}" 
+      <zipfileset dir="${docs.root}" prefix="${derby.docssrc}" 
          includes="${src.docs.includes}"/>
     </zip>
   </target>
@@ -342,7 +339,7 @@
       <tarfileset dir="${basedir}" prefix="${derby.src}"
          includes="${src.includes}"
          excludes="${src.excludes}"/>
-      <tarfileset dir="${docs.out}/.." prefix="${derby.docssrc}" 
+      <tarfileset dir="${docs.root}" prefix="${derby.docssrc}" 
          includes="${src.docs.includes}"/>
     </tar>
   </target>
@@ -392,6 +389,22 @@
     </antcall>
   </target>
 
+
+  <!--
+    this target is only called by the release target in the top level build file.
+    this target relies on the fact that its caller has created plugintmp.properties.
+  -->
+  <target name="sign.eclipse.plugin" depends="init">
+    <property file="${release.base}/plugintmp.properties"/>
+    <property name="eclipse.plugin" value="${plugin.derby.core.zipfile}_${plugin.derby.version}.zip"/>
+    <antcall target="md5">
+      <param name="sign.archive" value="${release.dir}/${eclipse.plugin}"/>
+    </antcall>
+    <antcall target="pgp">
+      <param name="sign.archive" value="${release.dir}/${eclipse.plugin}"/>
+    </antcall>
+  </target>
+
   <target name="md5">
     <exec executable="${md5.exec}" output="${sign.archive}.md5">
       <arg line="${md5.options} ${sign.archive}"/>
@@ -400,7 +413,7 @@
 
   <target name="pgp">
     <exec executable="${pgp.exec}">
-      <arg line="${pgp.options} ${sign.archive}"/>
+      <arg line="${pgp.options} --passphrase &quot;${pgp.passphrase}&quot; ${sign.archive}"/>
     </exec>
   </target>