NetWare case for <property environment=... />. Simplify OS based decisions. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269851 13f79535-47bb-0310-9956-ffa450edef68master
@@ -55,6 +55,7 @@ | |||||
package org.apache.tools.ant.taskdefs; | package org.apache.tools.ant.taskdefs; | ||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.taskdefs.condition.Os; | |||||
import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
import org.apache.tools.ant.types.PatternSet; | import org.apache.tools.ant.types.PatternSet; | ||||
@@ -202,10 +203,6 @@ public class Chmod extends ExecuteOn { | |||||
} | } | ||||
protected boolean isValidOs() { | protected boolean isValidOs() { | ||||
// XXX if OS=unix | |||||
return System.getProperty("path.separator").equals(":") | |||||
&& (!System.getProperty("os.name").startsWith("Mac") | |||||
|| System.getProperty("os.name").endsWith("X")) | |||||
&& super.isValidOs(); | |||||
return Os.isFamily("unix") && super.isValidOs(); | |||||
} | } | ||||
} | } |
@@ -171,7 +171,7 @@ public class DependSet extends MatchingTask { | |||||
be able to check file modification times. | be able to check file modification times. | ||||
(Windows has a max resolution of two secs for modification times) | (Windows has a max resolution of two secs for modification times) | ||||
*/ | */ | ||||
if ((new Os("windows")).eval()) { | |||||
if (Os.isFamily("windows")) { | |||||
now += 2000; | now += 2000; | ||||
} | } | ||||
@@ -111,15 +111,15 @@ public class Execute { | |||||
// Ignore and keep try | // Ignore and keep try | ||||
} | } | ||||
if ( (new Os("mac")).eval() ) { | |||||
if ( Os.isFamily("mac") ) { | |||||
// Mac | // Mac | ||||
shellLauncher = new MacCommandLauncher(new CommandLauncher()); | shellLauncher = new MacCommandLauncher(new CommandLauncher()); | ||||
} | } | ||||
else if ( (new Os("os/2")).eval() ) { | |||||
else if ( Os.isFamily("os/2") ) { | |||||
// OS/2 - use same mechanism as Windows 2000 | // OS/2 - use same mechanism as Windows 2000 | ||||
shellLauncher = new WinNTCommandLauncher(new CommandLauncher()); | shellLauncher = new WinNTCommandLauncher(new CommandLauncher()); | ||||
} | } | ||||
else if ( (new Os("windows")).eval() ) { | |||||
else if ( Os.isFamily("windows") ) { | |||||
// Windows. Need to determine which JDK we're running in | // Windows. Need to determine which JDK we're running in | ||||
CommandLauncher baseLauncher; | CommandLauncher baseLauncher; | ||||
@@ -203,13 +203,13 @@ public class Execute { | |||||
} | } | ||||
private static String[] getProcEnvCommand() { | private static String[] getProcEnvCommand() { | ||||
if ( (new Os("os/2")).eval() ) { | |||||
if ( Os.isFamily("os/2") ) { | |||||
// OS/2 - use same mechanism as Windows 2000 | // OS/2 - use same mechanism as Windows 2000 | ||||
// Not sure | // Not sure | ||||
String[] cmd = {"cmd", "/c", "set" }; | String[] cmd = {"cmd", "/c", "set" }; | ||||
return cmd; | return cmd; | ||||
} | } | ||||
else if ( (new Os("windows")).eval() ) { | |||||
else if ( Os.isFamily("windows") ) { | |||||
String osname = | String osname = | ||||
System.getProperty("os.name").toLowerCase(Locale.US); | System.getProperty("os.name").toLowerCase(Locale.US); | ||||
// Determine if we're running under 2000/NT or 98/95 | // Determine if we're running under 2000/NT or 98/95 | ||||
@@ -224,14 +224,18 @@ public class Execute { | |||||
return cmd; | return cmd; | ||||
} | } | ||||
} | } | ||||
else if ( (new Os("unix")).eval() ) { | |||||
else if ( Os.isFamily("unix") ) { | |||||
// Generic UNIX | // Generic UNIX | ||||
// Alternatively one could use: /bin/sh -c env | // Alternatively one could use: /bin/sh -c env | ||||
String[] cmd = {"/usr/bin/env"}; | String[] cmd = {"/usr/bin/env"}; | ||||
return cmd; | return cmd; | ||||
} | |||||
else if ( Os.isFamily("netware") ) { | |||||
String[] cmd = {"env"}; | |||||
return cmd; | |||||
} | } | ||||
else { | else { | ||||
// MAC OS 9 and previous, Netware | |||||
// MAC OS 9 and previous | |||||
// TODO: I have no idea how to get it, someone must fix it | // TODO: I have no idea how to get it, someone must fix it | ||||
String[] cmd = null; | String[] cmd = null; | ||||
return cmd; | return cmd; | ||||
@@ -1159,7 +1159,7 @@ public class Javadoc extends Task { | |||||
{ | { | ||||
// This is the most common extension case - exe for windows and OS/2, | // This is the most common extension case - exe for windows and OS/2, | ||||
// nothing for *nix. | // nothing for *nix. | ||||
String extension = (new Os("dos")).eval() ? ".exe" : ""; | |||||
String extension = Os.isFamily("dos") ? ".exe" : ""; | |||||
// Look for javadoc in the java.home/../bin directory. Unfortunately | // Look for javadoc in the java.home/../bin directory. Unfortunately | ||||
// on Windows java.home doesn't always refer to the correct location, | // on Windows java.home doesn't always refer to the correct location, | ||||
@@ -1168,14 +1168,16 @@ public class Javadoc extends Task { | |||||
File jdocExecutable = new File( System.getProperty("java.home") + | File jdocExecutable = new File( System.getProperty("java.home") + | ||||
"/../bin/javadoc" + extension ); | "/../bin/javadoc" + extension ); | ||||
if (jdocExecutable.exists()) | |||||
if (jdocExecutable.exists() && !Os.isFamily("netware")) | |||||
{ | { | ||||
return jdocExecutable.getAbsolutePath(); | return jdocExecutable.getAbsolutePath(); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
log( "Unable to locate " + jdocExecutable.getAbsolutePath() + | |||||
". Using \"javadoc\" instead.", Project.MSG_VERBOSE ); | |||||
if (!Os.isFamily("netware")) { | |||||
log( "Unable to locate " + jdocExecutable.getAbsolutePath() + | |||||
". Using \"javadoc\" instead.", Project.MSG_VERBOSE ); | |||||
} | |||||
return "javadoc"; | return "javadoc"; | ||||
} | } | ||||
} | } | ||||
@@ -65,6 +65,10 @@ import java.util.Locale; | |||||
* @version $Revision$ | * @version $Revision$ | ||||
*/ | */ | ||||
public class Os implements Condition { | public class Os implements Condition { | ||||
private static final String osName = | |||||
System.getProperty("os.name").toLowerCase(Locale.US); | |||||
private static final String pathSep = System.getProperty("path.separator"); | |||||
private String family; | private String family; | ||||
public Os() {} | public Os() {} | ||||
@@ -93,8 +97,16 @@ public class Os implements Condition { | |||||
* @see Os#setFamily(String) | * @see Os#setFamily(String) | ||||
*/ | */ | ||||
public boolean eval() throws BuildException { | public boolean eval() throws BuildException { | ||||
String osName = System.getProperty("os.name").toLowerCase(Locale.US); | |||||
String pathSep = System.getProperty("path.separator"); | |||||
return isFamily(family); | |||||
} | |||||
/** | |||||
* Determines if the OS on which Ant is executing matches the | |||||
* given OS family. | |||||
* | |||||
* @since 1.5 | |||||
*/ | |||||
public static boolean isFamily(String family) { | |||||
if (family != null) { | if (family != null) { | ||||
if (family.equals("windows")) { | if (family.equals("windows")) { | ||||
return osName.indexOf("windows") > -1; | return osName.indexOf("windows") > -1; | ||||
@@ -103,12 +115,12 @@ public class Os implements Condition { | |||||
} else if (family.equals("netware")) { | } else if (family.equals("netware")) { | ||||
return osName.indexOf("netware") > -1; | return osName.indexOf("netware") > -1; | ||||
} else if (family.equals("dos")) { | } else if (family.equals("dos")) { | ||||
return pathSep.equals(";"); | |||||
return pathSep.equals(";") && !isFamily("netware"); | |||||
} else if (family.equals("mac")) { | } else if (family.equals("mac")) { | ||||
return osName.indexOf("mac") > -1; | return osName.indexOf("mac") > -1; | ||||
} else if (family.equals("unix")) { | } else if (family.equals("unix")) { | ||||
return pathSep.equals(":") | return pathSep.equals(":") | ||||
&& (!osName.startsWith("mac") || osName.endsWith("x")); | |||||
&& (!isFamily("mac") || osName.endsWith("x")); | |||||
} | } | ||||
throw new BuildException("Don\'t know how to detect os family \"" | throw new BuildException("Don\'t know how to detect os family \"" | ||||
+ family + "\""); | + family + "\""); | ||||
@@ -92,7 +92,6 @@ public class Cab extends MatchingTask { | |||||
protected String archiveType = "cab"; | protected String archiveType = "cab"; | ||||
private static String myos; | private static String myos; | ||||
private static boolean isWindows = (new Os("windows")).eval(); | |||||
/** | /** | ||||
* This is the name/location of where to | * This is the name/location of where to | ||||
@@ -310,7 +309,7 @@ public class Cab extends MatchingTask { | |||||
log("Building "+ archiveType +": "+ cabFile.getAbsolutePath()); | log("Building "+ archiveType +": "+ cabFile.getAbsolutePath()); | ||||
// we must be on Windows to continue | // we must be on Windows to continue | ||||
if (!isWindows) { | |||||
if (Os.isFamily("windows")) { | |||||
log("Using listcab/libcabinet", Project.MSG_VERBOSE); | log("Using listcab/libcabinet", Project.MSG_VERBOSE); | ||||
StringBuffer sb = new StringBuffer(); | StringBuffer sb = new StringBuffer(); | ||||
@@ -347,7 +347,7 @@ public class CommandlineJava implements Cloneable { | |||||
private String getJavaExecutableName() { | private String getJavaExecutableName() { | ||||
// This is the most common extension case - exe for windows and OS/2, | // This is the most common extension case - exe for windows and OS/2, | ||||
// nothing for *nix. | // nothing for *nix. | ||||
String extension = (new Os("dos")).eval() ? ".exe" : ""; | |||||
String extension = Os.isFamily("dos") ? ".exe" : ""; | |||||
// Look for java in the java.home/../bin directory. Unfortunately | // Look for java in the java.home/../bin directory. Unfortunately | ||||
// on Windows java.home doesn't always refer to the correct location, | // on Windows java.home doesn't always refer to the correct location, | ||||
@@ -357,7 +357,10 @@ public class CommandlineJava implements Cloneable { | |||||
new java.io.File(System.getProperty("java.home") + | new java.io.File(System.getProperty("java.home") + | ||||
"/../bin/java" + extension ); | "/../bin/java" + extension ); | ||||
if (jExecutable.exists()) { | |||||
if (jExecutable.exists() && !Os.isFamily("netware")) { | |||||
// NetWare may have a "java" in that directory, but 99% of | |||||
// the time, you don't want to execute it -- Jeff Tulley | |||||
// <JTULLEY@novell.com> | |||||
return jExecutable.getAbsolutePath(); | return jExecutable.getAbsolutePath(); | ||||
} else { | } else { | ||||
return "java"; | return "java"; | ||||
@@ -107,7 +107,7 @@ public class SourceFileScanner { | |||||
be able to check file modification times. | be able to check file modification times. | ||||
(Windows has a max resolution of two secs for modification times) | (Windows has a max resolution of two secs for modification times) | ||||
*/ | */ | ||||
if ((new Os("windows")).eval()) { | |||||
if (Os.isFamily("windows")) { | |||||
now += 2000; | now += 2000; | ||||
} | } | ||||