diff --git a/docs/manual/CoreTasks/macrodef.html b/docs/manual/CoreTasks/macrodef.html
index efce64230..480527ce6 100644
--- a/docs/manual/CoreTasks/macrodef.html
+++ b/docs/manual/CoreTasks/macrodef.html
@@ -59,7 +59,11 @@
AT this location").
The escape sequence @@{x} is used to allow @{x} to be
placed in the text without substitution of x.
- This corresponds to the $${x} escape sequence for properties
+ This corresponds to the $${x} escape sequence for properties.
+
+
+ The case of the attribute is ignored, so @{myAttribute} is treated the
+ same as @{MyAttribute}.
Parameters
diff --git a/src/etc/testcases/taskdefs/macrodef.xml b/src/etc/testcases/taskdefs/macrodef.xml
index 67e4024f3..b9fca2666 100644
--- a/src/etc/testcases/taskdefs/macrodef.xml
+++ b/src/etc/testcases/taskdefs/macrodef.xml
@@ -75,4 +75,15 @@
+
+
+
+
+
+ @{myattribute} is @{MYATTRIBUTE}
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/MacroDef.java b/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
index 0cada1721..e9dee157b 100644
--- a/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
+++ b/src/main/org/apache/tools/ant/taskdefs/MacroDef.java
@@ -57,6 +57,7 @@ package org.apache.tools.ant.taskdefs;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Locale;
import java.util.HashMap;
import org.apache.tools.ant.AntTypeDefinition;
@@ -293,7 +294,7 @@ public class MacroDef extends AntlibDefinition {
throw new BuildException(
"Illegal name [" + name + "] for attribute");
}
- this.name = name;
+ this.name = name.toLowerCase(Locale.US);
}
/**
diff --git a/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java b/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
index 4fff6dd47..639bb5d13 100644
--- a/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
+++ b/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
@@ -57,6 +57,7 @@ package org.apache.tools.ant.taskdefs;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
@@ -200,7 +201,7 @@ public class MacroInstance extends Task implements DynamicConfigurator {
case STATE_EXPECT_NAME:
if (ch == '}') {
state = STATE_NORMAL;
- String name = macroName.toString();
+ String name = macroName.toString().toLowerCase(Locale.US);
String value = (String) macroMapping.get(name);
if (value == null) {
ret.append("@{" + name + "}");
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java b/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java
index 1556134e4..73b4a1c44 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java
@@ -103,5 +103,11 @@ public class MacroDefTest extends BuildFileTest {
"double",
"@{prop} is 'property', value of ${property} is 'A property value'");
}
+
+ public void testIgnoreCase() {
+ expectLog(
+ "ignorecase",
+ "a is ab is b");
+ }
}