diff --git a/docs/manual/CoreTasks/conditions.html b/docs/manual/CoreTasks/conditions.html
index 6c1091050..ac66f63cc 100644
--- a/docs/manual/CoreTasks/conditions.html
+++ b/docs/manual/CoreTasks/conditions.html
@@ -113,7 +113,9 @@ the tests succeed.
netware (for Novell NetWare)
os/2 (for OS/2)
tandem (for HP's NonStop Kernel - formerly Tandem)
- win9x for Microsoft Windows 95 and 98
+ win9x for Microsoft Windows 95 and 98, ME and CE
+ nt for Microsoft Windows NT-based systems, including Windows 2000, XP and
+ successors
z/os for z/OS and OS/390
os/400 for OS/400
openvms for OpenVMS
diff --git a/src/main/org/apache/tools/ant/taskdefs/Chmod.java b/src/main/org/apache/tools/ant/taskdefs/Chmod.java
index c00cd5535..0b04f6e1d 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Chmod.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Chmod.java
@@ -250,6 +250,6 @@ public class Chmod extends ExecuteOn {
* @return true if the os is valid.
*/
protected boolean isValidOs() {
- return Os.isFamily("unix") && super.isValidOs();
+ return Os.isFamily(Os.FAMILY_UNIX) && super.isValidOs();
}
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/condition/Os.java b/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
index a23666c78..de3fa67c8 100644
--- a/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
+++ b/src/main/org/apache/tools/ant/taskdefs/condition/Os.java
@@ -36,10 +36,68 @@ public class Os implements Condition {
private static final String PATH_SEP =
System.getProperty("path.separator");
+ /**
+ * OS family to look for
+ */
private String family;
+ /**
+ * Name of OS
+ */
private String name;
+ /**
+ * version of OS
+ */
private String version;
+ /**
+ * OS architecture
+ */
private String arch;
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_WINDOWS = "windows";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_9X = "win9x";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_NT = "nt";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_OS2 = "os/2";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_NETWARE = "netware";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_DOS = "dos";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_MAC = "mac";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_TANDEM = "tandem";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_UNIX = "unix";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_VMS = "openvms";
+ /**
+ * OS family that can be tested for. {@value}
+ */
+ public static final String FAMILY_ZOS = "z/os";
+ /** OS family that can be tested for. {@value} */
+ public static final String FAMILY_OS400 = "os/400";
/**
* Default constructor
@@ -186,35 +244,49 @@ public class Os implements Condition {
boolean isVersion = true;
if (family != null) {
- if (family.equals("windows")) {
- isFamily = OS_NAME.indexOf("windows") > -1;
- } else if (family.equals("os/2")) {
- isFamily = OS_NAME.indexOf("os/2") > -1;
- } else if (family.equals("netware")) {
- isFamily = OS_NAME.indexOf("netware") > -1;
- } else if (family.equals("dos")) {
- isFamily = PATH_SEP.equals(";") && !isFamily("netware");
- } else if (family.equals("mac")) {
- isFamily = OS_NAME.indexOf("mac") > -1;
- } else if (family.equals("tandem")) {
- isFamily = OS_NAME.indexOf("nonstop_kernel") > -1;
- } else if (family.equals("unix")) {
- isFamily = PATH_SEP.equals(":")
- && !isFamily("openvms")
- && (!isFamily("mac") || OS_NAME.endsWith("x"));
- } else if (family.equals("win9x")) {
- isFamily = isFamily("windows")
- && (OS_NAME.indexOf("95") >= 0
+
+ //windows probing logic relies on the word 'windows' in
+ //the OS
+ boolean isWindows = OS_NAME.indexOf(FAMILY_WINDOWS) > -1;
+ boolean is9x = false;
+ boolean isNT = false;
+ if(isWindows) {
+ //there are only four 9x platforms that we look for
+ is9x = (OS_NAME.indexOf("95") >= 0
|| OS_NAME.indexOf("98") >= 0
|| OS_NAME.indexOf("me") >= 0
+ //wince isn't really 9x, but crippled enough to
+ //be a muchness. Ant doesnt run on CE, anyway.
|| OS_NAME.indexOf("ce") >= 0);
- } else if (family.equals("z/os")) {
- isFamily = OS_NAME.indexOf("z/os") > -1
+ isNT = !is9x;
+ }
+ if (family.equals(FAMILY_WINDOWS)) {
+ isFamily = isWindows;
+ } else if (family.equals(FAMILY_9X)) {
+ isFamily = isWindows && is9x;
+ } else if (family.equals(FAMILY_NT)) {
+ isFamily = isWindows && isNT;
+ } else if (family.equals(FAMILY_OS2)) {
+ isFamily = OS_NAME.indexOf(FAMILY_OS2) > -1;
+ } else if (family.equals(FAMILY_NETWARE)) {
+ isFamily = OS_NAME.indexOf(FAMILY_NETWARE) > -1;
+ } else if (family.equals(FAMILY_DOS)) {
+ isFamily = PATH_SEP.equals(";") && !isFamily(FAMILY_NETWARE);
+ } else if (family.equals(FAMILY_MAC)) {
+ isFamily = OS_NAME.indexOf(FAMILY_MAC) > -1;
+ } else if (family.equals(FAMILY_TANDEM)) {
+ isFamily = OS_NAME.indexOf("nonstop_kernel") > -1;
+ } else if (family.equals(FAMILY_UNIX)) {
+ isFamily = PATH_SEP.equals(":")
+ && !isFamily(FAMILY_VMS)
+ && (!isFamily(FAMILY_MAC) || OS_NAME.endsWith("x"));
+ } else if (family.equals(FAMILY_ZOS)) {
+ isFamily = OS_NAME.indexOf(FAMILY_ZOS) > -1
|| OS_NAME.indexOf("os/390") > -1;
- } else if (family.equals("os/400")) {
- isFamily = OS_NAME.indexOf("os/400") > -1;
- } else if (family.equals("openvms")) {
- isFamily = OS_NAME.indexOf("openvms") > -1;
+ } else if (family.equals(FAMILY_OS400)) {
+ isFamily = OS_NAME.indexOf(FAMILY_OS400) > -1;
+ } else if (family.equals(FAMILY_VMS)) {
+ isFamily = OS_NAME.indexOf(FAMILY_VMS) > -1;
} else {
throw new BuildException(
"Don\'t know how to detect os family \""