tag Ant 1.8.3

git-svn-id: https://svn.apache.org/repos/asf/ant/core/tags/ANT_183@1293668 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/STATUS b/STATUS
index 84cb9b4..91be2ce 100644
--- a/STATUS
+++ b/STATUS
@@ -2,9 +2,9 @@
 Last modified at 2010-07-20
 
 Release:
-    Current:        1.8.1  (in SVN Tag: ANT_181)
-    Maintenance:    -
-    Development:    1.8.2  (in SVN Branch: trunk)
+    Current:        1.8.3  (in SVN Tag: ANT_183)
+    Maintenance:    1.8.x  (in SVN Branch: ANT_18_BRANCH)
+    Development:    1.8.4  (in SVN Branch: ANT_18_BRANCH)
 
 Assets:
     DNS:                ant.apache.org
diff --git a/WHATSNEW b/WHATSNEW
index f82e28f..be286c4 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -112,7 +112,7 @@
    Bugzilla Report 51086.
 
  * the attributes of macrodef tasks had their values run through
-   property expansion twice.
+   property expansion twice. Still true by default, but can be disabled.
    Bugzilla Report 42046.
 
  * jvc doesn't like it if source file names in argument files are
diff --git a/manual/Tasks/junit.html b/manual/Tasks/junit.html
index e7ff67c..c6ab95a 100644
--- a/manual/Tasks/junit.html
+++ b/manual/Tasks/junit.html
@@ -62,7 +62,7 @@
 </li>
 </ol>
 <p>
-See <a href="../../faq.html#delegating-classloader" target="_top">the
+See <a href="http://ant.apache.org/faq.html#delegating-classloader" target="_top">the
 FAQ</a> for details.
 </p>
 
diff --git a/manual/Tasks/macrodef.html b/manual/Tasks/macrodef.html
index b2d53e6..8e60158 100644
--- a/manual/Tasks/macrodef.html
+++ b/manual/Tasks/macrodef.html
@@ -128,6 +128,15 @@
         </td>
         <td valign="top" align="center">No</td>
       </tr>
+      <tr>
+        <td valign="top">doubleexpanding</td>
+        <td valign="top">
+          Controls whether or not property references in the attribute are expanded twice or just once.
+          See the <a href="http://ant.apache.org/faq.html#macrodef-property-expansion">FAQ</a> for details.
+          <em>since Ant 1.8.3</em>
+        </td>
+        <td valign="top" align="center">No; default true</td>
+      </tr>
     </table>
     <h4>element</h4>
     <p>
diff --git a/manual/Types/mapper.html b/manual/Types/mapper.html
index d84de62..5aff311 100644
--- a/manual/Types/mapper.html
+++ b/manual/Types/mapper.html
@@ -460,7 +460,7 @@
 </table>
 <blockquote><pre>
 &lt;mapper type="regexp" from="^(.*)\.(.*)$$" to="\2.\1"/&gt;
-&lt;regexpmapper from="^(.*)\.(.*)$$&" to="\2.\1"/&gt;
+&lt;regexpmapper from="^(.*)\.(.*)$$" to="\2.\1"/&gt;
 </pre></blockquote>
 <table border="1" cellpadding="2" cellspacing="0">
   <tr>
diff --git a/manual/listeners.html b/manual/listeners.html
index 2f5e575..4f04724 100644
--- a/manual/listeners.html
+++ b/manual/listeners.html
@@ -116,6 +116,11 @@
     <td width="34%">BuildLogger</td>
   </tr>
   <tr>
+    <td width="33%"><code><a href="#SimpleBigProjectLogger">org.apache.tools.ant.listener.SimpleBigProjectLogger</a></code></td>
+    <td width="33%">Prints the project name for subprojects only, otherwise like NoBannerLogger <em>Since Ant 1.8.1</em></td>
+    <td width="34%">BuildLogger</td>
+  </tr>
+  <tr>
     <td width="33%"><code><a href="#ProfileLogger">org.apache.tools.ant.listener.ProfileLogger</a></code></td>
     <td width="33%">The default logger, with start times, end times and
     durations added for each task and target.</td>
@@ -482,7 +487,35 @@
 <code>ant  -logger org.apache.tools.ant.listener.BigProjectLogger</code>
 </blockquote>
 
+<h3><a name="SimpleBigProjectLogger">SimpleBigProjectLogger</a></h3>
+<p>Like <code>BigProjectLogger</code>, project-qualified target names are printed,
+useful for big builds with subprojects.
+Otherwise it is as quiet as <code>NoBannerLogger</code>:</p>
+<pre>
+Buildfile: /sources/myapp/build.xml
 
+myapp-lib.compile:
+Created dir: /sources/myapp/lib/build/classes
+Compiling 1 source file to /sources/myapp/lib/build/classes
+
+myapp-lib.jar:
+Building jar: /sources/myapp/lib/build/lib.jar
+
+myapp.compile:
+Created dir: /sources/myapp/build/classes
+Compiling 2 source files to /sources/myapp/build/classes
+
+myapp.jar:
+Building jar: /sources/myapp/build/myapp.jar
+
+BUILD SUCCESSFUL
+Total time: 1 second
+</pre>
+<p><b>since Ant 1.8.1</b></p>
+<p>To use this listener, use the command:</p>
+<blockquote>
+<code>ant -logger org.apache.tools.ant.listener.SimpleBigProjectLogger</code>
+</blockquote>
 
 <h3><a name="ProfileLogger">ProfileLogger</a></h3>
 <p>This logger stores the time needed for executing a task, target and the whole build and prints
diff --git a/release/ivy.xml b/release/ivy.xml
index f65564a..9bc9727 100644
--- a/release/ivy.xml
+++ b/release/ivy.xml
@@ -21,137 +21,143 @@
 	    "http://ant.apache.org/ivy/schemas/ivy.xsd">
   <info organisation="org/apache"
         module="ant" revision="1.8.3"/>
-  <publications>  
+  <publications xmlns:e="urn:ant.apache.org:ivy-extras">  
     <artifact name="ant-parent" type="pom" ext="pom"/>
     <artifact name="ant-parent" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant" type="pom" ext="pom"/>
     <artifact name="ant" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant" type="jar" ext="jar"/>
     <artifact name="ant" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant" type="sources.asc" ext="jar.asc" classifier="sources" />
-    <artifact name="ant" type="javadocs" ext="jar" classifier="javadocs" />
-    <artifact name="ant" type="javadocs.asc" ext="jar.asc" classifier="javadocs" />
+    <artifact name="ant" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant" type="source.asc" ext="jar.asc" e:classifier="sources" />
+    <artifact name="ant" type="javadoc" ext="jar" e:classifier="javadoc" />
+    <artifact name="ant" type="javadoc.asc" ext="jar.asc" e:classifier="javadoc" />
     <artifact name="ant-antlr" type="pom" ext="pom"/>
     <artifact name="ant-antlr" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-antlr" type="jar" ext="jar"/>
     <artifact name="ant-antlr" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-antlr" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-antlr" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-antlr" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-antlr" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-bcel" type="pom" ext="pom"/>
     <artifact name="ant-apache-bcel" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-bcel" type="jar" ext="jar"/>
     <artifact name="ant-apache-bcel" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-bcel" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-bcel" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-bcel" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-bcel" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-bsf" type="pom" ext="pom"/>
     <artifact name="ant-apache-bsf" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-bsf" type="jar" ext="jar"/>
     <artifact name="ant-apache-bsf" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-bsf" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-bsf" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-bsf" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-bsf" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-log4j" type="pom" ext="pom"/>
     <artifact name="ant-apache-log4j" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-log4j" type="jar" ext="jar"/>
     <artifact name="ant-apache-log4j" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-log4j" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-log4j" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-log4j" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-log4j" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-oro" type="pom" ext="pom"/>
     <artifact name="ant-apache-oro" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-oro" type="jar" ext="jar"/>
     <artifact name="ant-apache-oro" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-oro" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-oro" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-oro" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-oro" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-regexp" type="pom" ext="pom"/>
     <artifact name="ant-apache-regexp" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-regexp" type="jar" ext="jar"/>
     <artifact name="ant-apache-regexp" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-regexp" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-regexp" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-regexp" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-regexp" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-resolver" type="pom" ext="pom"/>
     <artifact name="ant-apache-resolver" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-resolver" type="jar" ext="jar"/>
     <artifact name="ant-apache-resolver" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-resolver" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-resolver" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-resolver" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-resolver" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-apache-xalan2" type="pom" ext="pom"/>
     <artifact name="ant-apache-xalan2" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-apache-xalan2" type="jar" ext="jar"/>
     <artifact name="ant-apache-xalan2" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-xalan2" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-apache-xalan2" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-apache-xalan2" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-apache-xalan2" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-commons-logging" type="pom" ext="pom"/>
     <artifact name="ant-commons-logging" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-commons-logging" type="jar" ext="jar"/>
     <artifact name="ant-commons-logging" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-commons-logging" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-commons-logging" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-commons-logging" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-commons-logging" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-commons-net" type="pom" ext="pom"/>
     <artifact name="ant-commons-net" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-commons-net" type="jar" ext="jar"/>
     <artifact name="ant-commons-net" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-commons-net" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-commons-net" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-commons-net" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-commons-net" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-jai" type="pom" ext="pom"/>
     <artifact name="ant-jai" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-jai" type="jar" ext="jar"/>
     <artifact name="ant-jai" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jai" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-jai" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-jai" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-jai" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-javamail" type="pom" ext="pom"/>
     <artifact name="ant-javamail" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-javamail" type="jar" ext="jar"/>
     <artifact name="ant-javamail" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-javamail" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-javamail" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-javamail" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-javamail" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-jdepend" type="pom" ext="pom"/>
     <artifact name="ant-jdepend" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-jdepend" type="jar" ext="jar"/>
     <artifact name="ant-jdepend" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jdepend" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-jdepend" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-jdepend" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-jdepend" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-jmf" type="pom" ext="pom"/>
     <artifact name="ant-jmf" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-jmf" type="jar" ext="jar"/>
     <artifact name="ant-jmf" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jmf" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-jmf" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-jmf" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-jmf" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-jsch" type="pom" ext="pom"/>
     <artifact name="ant-jsch" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-jsch" type="jar" ext="jar"/>
     <artifact name="ant-jsch" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jsch" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-jsch" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-jsch" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-jsch" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-junit" type="pom" ext="pom"/>
     <artifact name="ant-junit" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-junit" type="jar" ext="jar"/>
     <artifact name="ant-junit" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-junit" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-junit" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-junit" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-junit" type="source.asc" ext="jar.asc" e:classifier="sources" />
+    <artifact name="ant-junit4" type="pom" ext="pom"/>
+    <artifact name="ant-junit4" type="pom.asc" ext="pom.asc"/>
+    <artifact name="ant-junit4" type="jar" ext="jar"/>
+    <artifact name="ant-junit4" type="jar.asc" ext="jar.asc"/>
+    <artifact name="ant-junit4" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-junit4" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-launcher" type="pom" ext="pom"/>
     <artifact name="ant-launcher" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-launcher" type="jar" ext="jar"/>
     <artifact name="ant-launcher" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-launcher" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-launcher" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-launcher" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-launcher" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-netrexx" type="pom" ext="pom"/>
     <artifact name="ant-netrexx" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-netrexx" type="jar" ext="jar"/>
     <artifact name="ant-netrexx" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-netrexx" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-netrexx" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-netrexx" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-netrexx" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-swing" type="pom" ext="pom"/>
     <artifact name="ant-swing" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-swing" type="jar" ext="jar"/>
     <artifact name="ant-swing" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-swing" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-swing" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-swing" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-swing" type="source.asc" ext="jar.asc" e:classifier="sources" />
     <artifact name="ant-testutil" type="pom" ext="pom"/>
     <artifact name="ant-testutil" type="pom.asc" ext="pom.asc"/>
     <artifact name="ant-testutil" type="jar" ext="jar"/>
     <artifact name="ant-testutil" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-testutil" type="sources" ext="jar" classifier="sources" />
-    <artifact name="ant-testutil" type="sources.asc" ext="jar.asc" classifier="sources" />
+    <artifact name="ant-testutil" type="source" ext="jar" e:classifier="sources" />
+    <artifact name="ant-testutil" type="source.asc" ext="jar.asc" e:classifier="sources" />
   </publications>
   <dependencies/> 
 </ivy-module>
diff --git a/release/ivysettings.xml b/release/ivysettings.xml
index 19a10fa..d40c461 100644
--- a/release/ivysettings.xml
+++ b/release/ivysettings.xml
@@ -20,7 +20,7 @@
   <resolvers>
     <ibiblio name="public" m2compatible="true"/>
     <url name="nexus">
-      <artifact pattern="${upload.url}/[organisation]/[module]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+      <artifact pattern="${upload.url}/[organisation]/[module]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]" />
     </url>
   </resolvers>
   <modules>
diff --git a/release/signit.xml b/release/signit.xml
index 81d0ddd..a5b9f4c 100644
--- a/release/signit.xml
+++ b/release/signit.xml
@@ -1,45 +1,49 @@
-<?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

-

-       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="signit">

-  <!-- use this property file to enter your default key id -->

-  <property file="${user.home}/gnupg.properties"/>

-  <taskdef resource="org/apache/commons/openpgp/ant/antlib.xml">

-    <classpath>

-      <pathelement

-        location="${user.home}/.m2/repository/org/bouncycastle/bcprov-jdk12/130/bcprov-jdk12-130.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-jdk12/130/bcpg-jdk12-130.jar"/>

-    </classpath>

-  </taskdef>

-  <signer secring="${user.home}/AppData/Roaming/gnupg/secring.gpg"

-    pubring="${user.home}/AppData/Roaming/gnupg/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>

+<?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
+
+       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="signit">
+  <!-- use this property file to enter your default key id -->
+  <property file="${user.home}/gnupg.properties"/>
+  <taskdef resource="org/apache/commons/openpgp/ant/antlib.xml">
+    <classpath>
+      <pathelement
+        location="${user.home}/.m2/repository/org/bouncycastle/bcprov-jdk12/130/bcprov-jdk12-130.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-jdk12/130/bcpg-jdk12-130.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>
diff --git a/src/etc/testcases/taskdefs/conditions/antversion.xml b/src/etc/testcases/taskdefs/conditions/antversion.xml
index a9d8dd0..2d9d324 100644
--- a/src/etc/testcases/taskdefs/conditions/antversion.xml
+++ b/src/etc/testcases/taskdefs/conditions/antversion.xml
@@ -45,10 +45,10 @@
 		<fail>
 			<condition>
 				<not>
-					<antversion atleast="1.9.0" />
+					<antversion atleast="1.8.3" />
 				</not>
 			</condition>
-  	  	Should be at least 1.9.0
+  	  	Should be at least 1.8.3
   		</fail>
 	</target>
 
@@ -57,10 +57,10 @@
 		<fail>
 			<condition>
 				<not>
-					<antversion exactly="1.9.0" />
+					<antversion exactly="1.8.3" />
 				</not>
 			</condition>
-	  	  Should be exactly 1.9.0
+	  	  Should be exactly 1.8.3
 	  	</fail>
 	</target>
 </project>
diff --git a/src/main/org/apache/tools/ant/RuntimeConfigurable.java b/src/main/org/apache/tools/ant/RuntimeConfigurable.java
index a33c7e4..6314326 100644
--- a/src/main/org/apache/tools/ant/RuntimeConfigurable.java
+++ b/src/main/org/apache/tools/ant/RuntimeConfigurable.java
@@ -29,6 +29,7 @@
 import java.util.Iterator;
 
 import org.apache.tools.ant.util.CollectionUtils;
+import org.apache.tools.ant.taskdefs.MacroDef;
 import org.apache.tools.ant.taskdefs.MacroInstance;
 import org.xml.sax.AttributeList;
 import org.xml.sax.helpers.AttributeListImpl;
@@ -386,11 +387,17 @@
                 // reflect these into the target, defer for
                 // MacroInstance where properties are expanded for the
                 // nested sequential
-                Object attrValue = null;
+                Object attrValue = PropertyHelper.getPropertyHelper(p).parseProperties(value);
                 if (target instanceof MacroInstance) {
-                    attrValue = value;
-                } else {
-                    attrValue = PropertyHelper.getPropertyHelper(p).parseProperties(value);
+                    for (Iterator attrs = ((MacroInstance) target).getMacroDef().getAttributes().iterator(); attrs.hasNext();) {
+                        MacroDef.Attribute attr = (MacroDef.Attribute) attrs.next();
+                        if (attr.getName().equals(name)) {
+                            if (!attr.isDoubleExpanding()) {
+                                attrValue = value;
+                            }
+                            break;
+                        }
+                    }
                 }
                 try {
                     ih.setAttribute(p, target, name, attrValue);
diff --git a/src/main/org/apache/tools/ant/taskdefs/MacroDef.java b/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
index 55bdca6..9a05765 100644
--- a/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
+++ b/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
@@ -331,6 +331,7 @@
         private String name;
         private String defaultValue;
         private String description;
+        private boolean doubleExpanding = true;
 
         /**
          * The name of the attribute.
@@ -387,6 +388,25 @@
         }
 
         /**
+         * See {@link #isDoubleExpanding} for explanation.
+         * @param doubleExpanding true to expand twice, false for just once
+         * @since Ant 1.8.3
+         */
+        public void setDoubleExpanding(boolean doubleExpanding) {
+            this.doubleExpanding = doubleExpanding;
+        }
+
+        /**
+         * Determines whether {@link RuntimeConfigurable#maybeConfigure(Project, boolean)} will reevaluate this property.
+         * For compatibility reasons (#52621) it will, though for most applications (#42046) it should not.
+         * @return true if expanding twice (the default), false for just once
+         * @since Ant 1.8.3
+         */
+        public boolean isDoubleExpanding() {
+            return doubleExpanding;
+        }
+
+        /**
          * equality method
          *
          * @param obj an <code>Object</code> value
diff --git a/src/tests/antunit/taskdefs/condition/antversion-test.xml b/src/tests/antunit/taskdefs/condition/antversion-test.xml
index 9b68f4c..89c2d7e 100644
--- a/src/tests/antunit/taskdefs/condition/antversion-test.xml
+++ b/src/tests/antunit/taskdefs/condition/antversion-test.xml
@@ -34,7 +34,7 @@
   <target name="test-atleast-fail">
     <property name="version" value="1.8.9" />
     <au:assertFalse>
-      <antversion atleast="1.9.0" />
+      <antversion atleast="1.1000.0" />
     </au:assertFalse>
   </target>
 
diff --git a/src/tests/antunit/taskdefs/macrodef-test.xml b/src/tests/antunit/taskdefs/macrodef-test.xml
index 7686a54..b12e6f7 100644
--- a/src/tests/antunit/taskdefs/macrodef-test.xml
+++ b/src/tests/antunit/taskdefs/macrodef-test.xml
@@ -33,16 +33,28 @@
     <au:assertLogContains text="THIS IS NOT DEFAULT LOG"/>
   </target>
 
-  <target name="testDoubleExpandedProperties"
+  <target name="testDisableDoubleExpandedProperties"
           description="https://issues.apache.org/bugzilla/show_bug.cgi?id=42046">
     <macrodef name="indirect">
+      <attribute name="value" doubleexpanding="false"/>
+      <sequential>
+        <echo message="@{value}"/>
+      </sequential>
+    </macrodef>
+    <indirect value="$${basedir}"/>
+    <au:assertLogContains text="{basedir}"/>
+  </target>
+
+  <target name="testEnableDoubleExpandedProperties"
+          description="https://issues.apache.org/bugzilla/show_bug.cgi?id=52621">
+    <macrodef name="indirect">
       <attribute name="value"/>
       <sequential>
         <echo message="@{value}"/>
       </sequential>
     </macrodef>
     <indirect value="$${basedir}"/>
-    <au:assertLogContains text="{basedir}"/>
+    <au:assertLogDoesntContain text="{basedir}"/>
   </target>
 
 </project>