Browse Source

Os gets

-specific test for nt based systems
 -refactored (less recursive) OS analysis
 -constant strings for every family
Patched into chmod.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278154 13f79535-47bb-0310-9956-ffa450edef68
master
Steve Loughran 20 years ago
parent
commit
9d42c87a1a
3 changed files with 101 additions and 27 deletions
  1. +3
    -1
      docs/manual/CoreTasks/conditions.html
  2. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Chmod.java
  3. +97
    -25
      src/main/org/apache/tools/ant/taskdefs/condition/Os.java

+ 3
- 1
docs/manual/CoreTasks/conditions.html View File

@@ -113,7 +113,9 @@ the tests succeed.
<li>netware (for Novell NetWare)</li>
<li>os/2 (for OS/2)</li>
<li>tandem (for HP's NonStop Kernel - formerly Tandem)</li>
<li>win9x for Microsoft Windows 95 and 98</li>
<li>win9x for Microsoft Windows 95 and 98, ME and CE</li>
<li>nt for Microsoft Windows NT-based systems, including Windows 2000, XP and
successors</li>
<li>z/os for z/OS and OS/390</li>
<li>os/400 for OS/400</li>
<li>openvms for OpenVMS</li>


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Chmod.java View File

@@ -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();
}
}

+ 97
- 25
src/main/org/apache/tools/ant/taskdefs/condition/Os.java View File

@@ -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 \""


Loading…
Cancel
Save