diff --git a/proposal/myrmidon/src/java/org/apache/antlib/nativelib/Exec.java b/proposal/myrmidon/src/java/org/apache/antlib/nativelib/Exec.java index 63e473cb4..166b4f0f3 100644 --- a/proposal/myrmidon/src/java/org/apache/antlib/nativelib/Exec.java +++ b/proposal/myrmidon/src/java/org/apache/antlib/nativelib/Exec.java @@ -72,8 +72,7 @@ public class Exec } /** - * Only execute the process if os.name is included in this - * string. + * Only execute the process if running on the specified OS family. */ public void setOs( final String os ) { diff --git a/proposal/myrmidon/src/java/org/apache/antlib/vfile/CopyFilesTask.java b/proposal/myrmidon/src/java/org/apache/antlib/vfile/CopyFilesTask.java index 6cadccba7..1a3fdcf6a 100644 --- a/proposal/myrmidon/src/java/org/apache/antlib/vfile/CopyFilesTask.java +++ b/proposal/myrmidon/src/java/org/apache/antlib/vfile/CopyFilesTask.java @@ -14,6 +14,7 @@ import java.util.Iterator; import org.apache.aut.vfs.FileObject; import org.apache.aut.vfs.FileSystemException; import org.apache.aut.vfs.FileType; +import org.apache.aut.vfs.NameScope; import org.apache.avalon.excalibur.i18n.ResourceManager; import org.apache.avalon.excalibur.i18n.Resources; import org.apache.myrmidon.api.AbstractTask; @@ -129,9 +130,10 @@ public class CopyFilesTask continue; } - // TODO - use scope here, to make sure that the result - // is a descendent of the dest dir - final FileObject destFile = m_destDir.resolveFile( path ); + // Locate the destination file + final FileObject destFile = m_destDir.resolveFile( path, NameScope.DESCENDENT ); + + // Copy the file across copyFile( srcFile, destFile ); } } diff --git a/proposal/myrmidon/src/java/org/apache/aut/nativelib/Os.java b/proposal/myrmidon/src/java/org/apache/aut/nativelib/Os.java index 12cc6fbe1..3dfcfac06 100644 --- a/proposal/myrmidon/src/java/org/apache/aut/nativelib/Os.java +++ b/proposal/myrmidon/src/java/org/apache/aut/nativelib/Os.java @@ -7,9 +7,11 @@ */ package org.apache.aut.nativelib; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; import java.util.Locale; -import org.apache.avalon.excalibur.i18n.ResourceManager; -import org.apache.avalon.excalibur.i18n.Resources; +import java.util.Set; /** * Class to help determining the OS. @@ -20,9 +22,6 @@ import org.apache.avalon.excalibur.i18n.Resources; */ public class Os { - private final static Resources REZ = - ResourceManager.getPackageResources( Os.class ); - private final static String OS_NAME = System.getProperty( "os.name" ).toLowerCase( Locale.US ); private final static String OS_ARCH = @@ -31,6 +30,123 @@ public class Os System.getProperty( "os.version" ).toLowerCase( Locale.US ); private final static String PATH_SEP = System.getProperty( "path.separator" ); + private final static OsFamily OS_FAMILY; + private final static OsFamily[] OS_ALL_FAMILIES; + + /** All Windows based OSes. */ + public final static OsFamily OS_FAMILY_WINDOWS = new OsFamily( "windows" ); + + /** All DOS based OSes. */ + public final static OsFamily OS_FAMILY_DOS + = new OsFamily( "dos", new OsFamily[]{OS_FAMILY_WINDOWS} ); + + /** All Windows NT based OSes. */ + public final static OsFamily OS_FAMILY_WINNT + = new OsFamily( "nt", new OsFamily[]{OS_FAMILY_WINDOWS} ); + + /** All Windows 9x based OSes. */ + public final static OsFamily OS_FAMILY_WIN9X + = new OsFamily( "win9x", new OsFamily[]{OS_FAMILY_WINDOWS, OS_FAMILY_DOS} ); + + /** OS/2 */ + public final static OsFamily OS_FAMILY_OS2 + = new OsFamily( "os/2", new OsFamily[]{OS_FAMILY_DOS} ); + + /** Netware */ + public final static OsFamily OS_FAMILY_NETWARE + = new OsFamily( "netware" ); + + /** All UNIX based OSes. */ + public final static OsFamily OS_FAMILY_UNIX + = new OsFamily( "unix" ); + + /** All Mac based OSes. */ + public final static OsFamily OS_FAMILY_MAC + = new OsFamily( "mac" ); + + /** OSX */ + public final static OsFamily OS_FAMILY_OSX + = new OsFamily( "osx", new OsFamily[]{OS_FAMILY_UNIX, OS_FAMILY_MAC} ); + + private final static OsFamily[] ALL_FAMILIES = + { + OS_FAMILY_DOS, + OS_FAMILY_MAC, + OS_FAMILY_NETWARE, + OS_FAMILY_OS2, + OS_FAMILY_OSX, + OS_FAMILY_UNIX, + OS_FAMILY_WINDOWS, + OS_FAMILY_WINNT, + OS_FAMILY_WIN9X + }; + + static + { + // Determine the most specific OS family + if( OS_NAME.indexOf( "windows" ) > -1 ) + { + if( OS_NAME.indexOf( "xp" ) > -1 + || OS_NAME.indexOf( "2000" ) > -1 + || OS_NAME.indexOf( "nt" ) > -1 ) + { + OS_FAMILY = OS_FAMILY_WINNT; + } + else + { + OS_FAMILY = OS_FAMILY_WIN9X; + } + } + else if( OS_NAME.indexOf( "os/2" ) > -1 ) + { + OS_FAMILY = OS_FAMILY_OS2; + } + else if( OS_NAME.indexOf( "netware" ) > -1 ) + { + OS_FAMILY = OS_FAMILY_NETWARE; + } + else if( OS_NAME.indexOf( "mac" ) > -1 ) + { + if( OS_NAME.endsWith( "x" ) ) + { + OS_FAMILY = OS_FAMILY_OSX; + } + else + { + OS_FAMILY = OS_FAMILY_MAC; + } + } + else if( PATH_SEP.equals( ":" ) ) + { + OS_FAMILY = OS_FAMILY_UNIX; + } + else + { + OS_FAMILY = null; + } + + // Otherwise, unknown OS + + // Determine all families the current OS belongs to + Set allFamilies = new HashSet(); + if( OS_FAMILY != null ) + { + List queue = new ArrayList(); + queue.add( OS_FAMILY ); + while( queue.size() > 0 ) + { + final OsFamily family = (OsFamily)queue.remove( 0 ); + allFamilies.add( family ); + final OsFamily[] families = family.getFamilies(); + for( int i = 0; i < families.length; i++ ) + { + OsFamily parent = families[ i ]; + queue.add( parent ); + } + } + } + OS_ALL_FAMILIES = (OsFamily[])allFamilies.toArray( new OsFamily[ allFamilies.size() ] ); + } /** * Private constructor to block instantiation. @@ -45,34 +161,36 @@ public class Os */ public static boolean isVersion( final String version ) { - return isOs( null, null, null, version ); + return isOs( (OsFamily)null, null, null, version ); } /** * Determines if the OS on which Ant is executing matches the given OS * architecture. - * - * @param arch Description of Parameter - * @return The Arch value */ public static boolean isArch( final String arch ) { - return isOs( null, null, arch, null ); + return isOs( (OsFamily)null, null, arch, null ); } /** * Determines if the OS on which Ant is executing matches the given OS * family. - * - * @param family Description of Parameter - * @return The Family value - * @since 1.5 */ public static boolean isFamily( final String family ) { return isOs( family, null, null, null ); } + /** + * Determines if the OS on which Ant is executing matches the given OS + * family. + */ + public static boolean isFamily( final OsFamily family ) + { + return isOs( family, null, null, null ); + } + /** * Determines if the OS on which Ant is executing matches the given OS name. * @@ -82,7 +200,7 @@ public class Os */ public static boolean isName( final String name ) { - return isOs( null, name, null, null ); + return isOs( (OsFamily)null, name, null, null ); } /** @@ -99,6 +217,24 @@ public class Os final String name, final String arch, final String version ) + { + return isOs( getFamily( family ), name, arch, version ); + } + + /** + * Determines if the OS on which Ant is executing matches the given OS + * family, name, architecture and version + * + * @param family The OS family + * @param name The OS name + * @param arch The OS architecture + * @param version The OS version + * @return The Os value + */ + public static boolean isOs( final OsFamily family, + final String name, + final String arch, + final String version ) { if( family != null || name != null || arch != null || version != null ) { @@ -115,6 +251,25 @@ public class Os } } + /** + * Locates an OsFamily by name (case-insensitive). + * + * @return the OS family, or null if not found. + */ + public static OsFamily getFamily( final String name ) + { + for( int i = 0; i < ALL_FAMILIES.length; i++ ) + { + final OsFamily osFamily = ALL_FAMILIES[ i ]; + if( osFamily.getName().equalsIgnoreCase( name ) ) + { + return osFamily; + } + } + + return null; + } + private static boolean versionMatches( final String version ) { boolean isVersion = true; @@ -145,42 +300,20 @@ public class Os return isName; } - private static boolean familyMatches( final String family ) + private static boolean familyMatches( final OsFamily family ) { - boolean isFamily = true; - if( family != null ) + 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( "unix" ) ) - { - isFamily = PATH_SEP.equals( ":" ) && - ( !isFamily( "mac" ) || OS_NAME.endsWith( "x" ) ); - } - else + return false; + } + for( int i = 0; i < OS_ALL_FAMILIES.length; i++ ) + { + final OsFamily osFamily = OS_ALL_FAMILIES[ i ]; + if( family == osFamily ) { - final String message = REZ.getString( "unknown-os-family", family ); - throw new IllegalArgumentException( message ); + return true; } } - return isFamily; + return false; } } diff --git a/proposal/myrmidon/src/java/org/apache/aut/nativelib/OsFamily.java b/proposal/myrmidon/src/java/org/apache/aut/nativelib/OsFamily.java new file mode 100644 index 000000000..c8532d656 --- /dev/null +++ b/proposal/myrmidon/src/java/org/apache/aut/nativelib/OsFamily.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) The Apache Software Foundation. All rights reserved. + * + * This software is published under the terms of the Apache Software License + * version 1.1, a copy of which has been included with this distribution in + * the LICENSE.txt file. + */ +package org.apache.aut.nativelib; + +/** + * An enumerated type, which represents an OS family. + * + * @author Adam Murdoch + * @version $Revision$ $Date$ + */ +public final class OsFamily +{ + private final String m_name; + private final OsFamily[] m_families; + + OsFamily( final String name ) + { + m_name = name; + m_families = new OsFamily[0]; + } + + OsFamily( final String name, final OsFamily[] families ) + { + m_name = name; + m_families = families; + } + + /** + * Returns the name of this family. + */ + public String getName() + { + return m_name; + } + + /** + * Returns the OS families that this family belongs to. + */ + public OsFamily[] getFamilies() + { + return m_families; + } +} diff --git a/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/DefaultExecManager.java b/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/DefaultExecManager.java index 345e89dd9..65c994875 100644 --- a/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/DefaultExecManager.java +++ b/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/DefaultExecManager.java @@ -11,7 +11,6 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.Locale; import java.util.Properties; import org.apache.aut.nativelib.ExecException; import org.apache.aut.nativelib.ExecManager; @@ -174,37 +173,28 @@ public class DefaultExecManager { CommandLauncher launcher = null; - if( Os.isFamily( "mac" ) ) + if( Os.isFamily( Os.OS_FAMILY_MAC ) ) { // Mac launcher = new MacCommandLauncher(); } - else if( Os.isFamily( "os/2" ) ) + else if( Os.isFamily( Os.OS_FAMILY_OS2 ) ) { // OS/2 - use same mechanism as Windows 2000 launcher = new WinNTCommandLauncher(); } - else if( Os.isFamily( "windows" ) ) + else if( Os.isFamily( Os.OS_FAMILY_WINNT ) ) { - // Windows. Need to determine which JDK we're running in - - // Determine if we're running under 2000/NT or 98/95 - final String osname = - System.getProperty( "os.name" ).toLowerCase( Locale.US ); - - if( osname.indexOf( "nt" ) >= 0 || osname.indexOf( "2000" ) >= 0 ) - { - // Windows 2000/NT - launcher = new WinNTCommandLauncher(); - } - else - { - // Windows 98/95 - need to use an auxiliary script - final String script = resolveCommand( homeDir, "bin/antRun.bat" ); - launcher = new ScriptCommandLauncher( script ); - } + // Windows 2000/NT + launcher = new WinNTCommandLauncher(); + } + else if( Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) + { + // Windows 98/95 - need to use an auxiliary script + final String script = resolveCommand( homeDir, "bin/antRun.bat" ); + launcher = new ScriptCommandLauncher( script ); } - else if( Os.isFamily( "netware" ) ) + else if( Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { // NetWare. Need to determine which JDK we're running in final String perlScript = resolveCommand( homeDir, "bin/antRun.pl" ); diff --git a/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/Environment.java b/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/Environment.java index 2452c719d..c21a9f5bc 100644 --- a/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/Environment.java +++ b/proposal/myrmidon/src/java/org/apache/aut/nativelib/impl/Environment.java @@ -12,14 +12,13 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.StringReader; -import java.util.Locale; import java.util.Properties; import org.apache.aut.nativelib.ExecException; import org.apache.aut.nativelib.ExecManager; import org.apache.aut.nativelib.ExecMetaData; import org.apache.aut.nativelib.Os; -import org.apache.avalon.excalibur.util.StringUtil; import org.apache.avalon.excalibur.io.IOUtil; +import org.apache.avalon.excalibur.util.StringUtil; /** * This is the class that can be used to retrieve the environment @@ -178,33 +177,27 @@ final class Environment private static String[] getEnvCommand() throws ExecException { - if( Os.isFamily( "os/2" ) ) + if( Os.isFamily( Os.OS_FAMILY_OS2 ) ) { // OS/2 - use same mechanism as Windows 2000 return CMD_EXE; } - else if( Os.isFamily( "windows" ) ) + else if( Os.isFamily( Os.OS_FAMILY_WINNT ) ) { - final String osname = - System.getProperty( "os.name" ).toLowerCase( Locale.US ); - // Determine if we're running under 2000/NT or 98/95 - if( osname.indexOf( "nt" ) >= 0 || osname.indexOf( "2000" ) >= 0 ) - { - // Windows 2000/NT - return CMD_EXE; - } - else - { - // Windows 98/95 - need to use an auxiliary script - return COMMAND_COM; - } + // Windows 2000/NT + return CMD_EXE; + } + else if( Os.isFamily( Os.OS_FAMILY_WINDOWS) ) + { + // Windows 98/95 - need to use an auxiliary script + return COMMAND_COM; } - else if( Os.isFamily( "unix" ) ) + else if( Os.isFamily( Os.OS_FAMILY_UNIX ) ) { // Generic UNIX return ENV_CMD; } - else if( Os.isFamily( "netware" ) ) + else if( Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { return ENV_RAW; } diff --git a/proposal/myrmidon/src/java/org/apache/aut/tar/TarEntry.java b/proposal/myrmidon/src/java/org/apache/aut/tar/TarEntry.java index 6803cf455..e9fca9443 100644 --- a/proposal/myrmidon/src/java/org/apache/aut/tar/TarEntry.java +++ b/proposal/myrmidon/src/java/org/apache/aut/tar/TarEntry.java @@ -9,6 +9,7 @@ package org.apache.aut.tar; import java.io.File; import java.util.Date; +import org.apache.aut.nativelib.Os; /** * This class represents an entry in a Tar archive. It consists of the entry's @@ -178,37 +179,29 @@ public class TarEntry m_file = file; String name = file.getPath(); - final String osname = System.getProperty( "os.name" ); - if( osname != null ) + // Strip off drive letters! + if( Os.isFamily( Os.OS_FAMILY_WINDOWS) ) { - // Strip off drive letters! - // REVIEW Would a better check be "(File.separator == '\')"? - final String win32Prefix = "Windows"; - final String prefix = osname.substring( 0, win32Prefix.length() ); - - if( prefix.equalsIgnoreCase( win32Prefix ) ) + if( name.length() > 2 ) { - if( name.length() > 2 ) + final char ch1 = name.charAt( 0 ); + final char ch2 = name.charAt( 1 ); + + if( ch2 == ':' && + ( ( ch1 >= 'a' && ch1 <= 'z' ) || + ( ch1 >= 'A' && ch1 <= 'Z' ) ) ) { - final char ch1 = name.charAt( 0 ); - final char ch2 = name.charAt( 1 ); - - if( ch2 == ':' && - ( ( ch1 >= 'a' && ch1 <= 'z' ) || - ( ch1 >= 'A' && ch1 <= 'Z' ) ) ) - { - name = name.substring( 2 ); - } + name = name.substring( 2 ); } } - else if( osname.toLowerCase().indexOf( "netware" ) > -1 ) + } + else if( Os.isFamily( Os.OS_FAMILY_NETWARE) ) + { + final int colon = name.indexOf( ':' ); + if( colon != -1 ) { - final int colon = name.indexOf( ':' ); - if( colon != -1 ) - { - name = name.substring( colon + 1 ); - } + name = name.substring( colon + 1 ); } } @@ -584,7 +577,7 @@ public class TarEntry /** * Write an entry's header information to a header buffer. * - * @param outbuf The tar entry header buffer to fill in. + * @param buffer The tar entry header buffer to fill in. */ public void writeEntryHeader( final byte[] buffer ) { diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/DependSet.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/DependSet.java index c91806149..f1e1e526a 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/DependSet.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/DependSet.java @@ -141,7 +141,7 @@ public class DependSet extends MatchingTask * be able to check file modification times. * (Windows has a max resolution of two secs for modification times) */ - if( Os.isFamily( "windows" ) ) + if( Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) { now += 2000; } diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Javac.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Javac.java index e0737395c..d787e72a4 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Javac.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/Javac.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import java.util.Iterator; import org.apache.aut.nativelib.Os; import org.apache.myrmidon.api.TaskException; -import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.framework.JavaVersion; import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; @@ -726,7 +725,7 @@ public class Javac extends MatchingTask { // This is the most common extension case - exe for windows and OS/2, // nothing for *nix. - String extension = Os.isFamily( "dos" ) ? ".exe" : ""; + String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; // Look for java in the java.home/../bin directory. Unfortunately // on Windows java.home doesn't always refer to the correct location, @@ -736,7 +735,7 @@ public class Javac extends MatchingTask new java.io.File( System.getProperty( "java.home" ) + "/../bin/javac" + extension ); - if( jExecutable.exists() && !Os.isFamily( "netware" ) ) + if( jExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { return jExecutable.getAbsolutePath(); } diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/PathConvert.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/PathConvert.java index c8e1ca784..4d16c8f85 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/PathConvert.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/PathConvert.java @@ -9,6 +9,7 @@ package org.apache.tools.ant.taskdefs; import java.io.File; import java.util.ArrayList; +import org.apache.aut.nativelib.Os; import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.api.TaskException; import org.apache.tools.ant.types.Path; @@ -45,7 +46,7 @@ public class PathConvert extends AbstractTask /** * Override the default path separator string for the target os * - * @param sep The new PathSep value + * @param pathSep The new PathSep value */ public void setPathSep( final String pathSep ) { @@ -64,7 +65,7 @@ public class PathConvert extends AbstractTask /** * Set the value of the targetos attribute * - * @param target The new Targetos value + * @param targetOS The new Targetos value */ public void setTargetos( String targetOS ) throws TaskException @@ -121,13 +122,10 @@ public class PathConvert extends AbstractTask // And Unix is everything that is not Windows // (with the exception for NetWare below) - String osname = System.getProperty( "os.name" ).toLowerCase(); - // for NetWare, piggy-back on Windows, since here and in the // apply code, the same assumptions can be made as with windows - // that \\ is an OK separator, and do comparisons case-insensitive. - m_onWindows = ( ( osname.indexOf( "windows" ) >= 0 ) || - ( osname.indexOf( "netware" ) >= 0 ) ); + m_onWindows = ( Os.isFamily( Os.OS_FAMILY_WINDOWS ) || Os.isFamily( Os.OS_FAMILY_NETWARE ) ); // Determine the from/to char mappings for dir sep char fromDirSep = m_onWindows ? '\\' : '/'; diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java index bf38015e3..e572de2fe 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java @@ -845,7 +845,7 @@ public class Javadoc { // This is the most common extension case - exe for windows and OS/2, // nothing for *nix. - String extension = Os.isFamily( "dos" ) ? ".exe" : ""; + String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; // Look for javadoc in the java.home/../bin directory. Unfortunately // on Windows java.home doesn't always refer to the correct location, @@ -854,17 +854,12 @@ public class Javadoc File jdocExecutable = new File( System.getProperty( "java.home" ) + "/../bin/javadoc" + extension ); - if( jdocExecutable.exists() && !Os.isFamily( "netware" ) ) + if( jdocExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { return jdocExecutable.getAbsolutePath(); } else { - if( !Os.isFamily( "netware" ) ) - { - getLogger().debug( "Unable to locate " + jdocExecutable.getAbsolutePath() + - ". Using \"javadoc\" instead." ); - } return "javadoc"; } } diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java index f48f51d50..4ba03072e 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java @@ -17,8 +17,8 @@ import java.util.Iterator; import org.apache.aut.nativelib.ExecManager; import org.apache.aut.nativelib.Os; import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.myrmidon.framework.Execute; +import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.DirectoryScanner; import org.apache.tools.ant.types.FileSet; @@ -103,7 +103,7 @@ public class Cab getLogger().info( "Building cab: " + m_cabFile.getAbsolutePath() ); - if( !Os.isFamily( "windows" ) ) + if( !Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) { getLogger().debug( "Using listcab/libcabinet" ); diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/text/FixCRLF.java b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/text/FixCRLF.java index 9bea1f3ee..1964d521a 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/text/FixCRLF.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/text/FixCRLF.java @@ -21,6 +21,7 @@ import java.io.Reader; import java.io.Writer; import java.util.Iterator; import java.util.NoSuchElementException; +import org.apache.aut.nativelib.Os; import org.apache.avalon.excalibur.io.FileUtil; import org.apache.myrmidon.api.TaskException; import org.apache.tools.ant.taskdefs.MatchingTask; @@ -122,25 +123,23 @@ public class FixCRLF public FixCRLF() { tabs = ASIS; - if( File.pathSeparator.equals( ":" ) ) + if( Os.isFamily( Os.OS_FAMILY_WINDOWS) ) + { + ctrlz = ASIS; + eol = CRLF; + eolstr = "\r\n"; + } + else if( Os.isFamily( Os.OS_FAMILY_MAC ) ) { ctrlz = REMOVE; - if( System.getProperty( "os.name" ).indexOf( "Mac" ) > -1 ) - { - eol = CR; - eolstr = "\r"; - } - else - { - eol = LF; - eolstr = "\n"; - } + eol = CR; + eolstr = "\r"; } else { - ctrlz = ASIS; - eol = CRLF; - eolstr = "\r\n"; + ctrlz = REMOVE; + eol = LF; + eolstr = "\n"; } } @@ -618,9 +617,7 @@ public class FixCRLF } else {// (tabs != ASIS) - int ptr; - - while( ( ptr = line.getNext() ) < linelen ) + while( line.getNext() < linelen ) { switch( lines.getState() ) diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/types/CommandlineJava.java b/proposal/myrmidon/src/main/org/apache/tools/ant/types/CommandlineJava.java index c012cda9a..020cc76e2 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/types/CommandlineJava.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/types/CommandlineJava.java @@ -264,7 +264,7 @@ public class CommandlineJava { // This is the most common extension case - exe for windows and OS/2, // nothing for *nix. - String extension = Os.isFamily( "dos" ) ? ".exe" : ""; + String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; // Look for java in the java.home/../bin directory. Unfortunately // on Windows java.home doesn't always refer to the correct location, @@ -274,7 +274,7 @@ public class CommandlineJava new File( System.getProperty( "java.home" ) + "/../bin/java" + extension ); - if( jExecutable.exists() && !Os.isFamily( "netware" ) ) + if( jExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { // NetWare may have a "java" in that directory, but 99% of // the time, you don't want to execute it -- Jeff Tulley diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/types/SourceFileScanner.java b/proposal/myrmidon/src/main/org/apache/tools/ant/types/SourceFileScanner.java index fd14b07f3..91a108f65 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/types/SourceFileScanner.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/types/SourceFileScanner.java @@ -56,7 +56,7 @@ public class SourceFileScanner * not have it, so if we could reliably passively test for an NTFS * file systems we could turn this off... */ - if( Os.isFamily( "windows" ) ) + if( Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) { now += 2000; } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/DependSet.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/DependSet.java index c91806149..f1e1e526a 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/DependSet.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/DependSet.java @@ -141,7 +141,7 @@ public class DependSet extends MatchingTask * be able to check file modification times. * (Windows has a max resolution of two secs for modification times) */ - if( Os.isFamily( "windows" ) ) + if( Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) { now += 2000; } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Javac.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Javac.java index e0737395c..d787e72a4 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Javac.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/Javac.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import java.util.Iterator; import org.apache.aut.nativelib.Os; import org.apache.myrmidon.api.TaskException; -import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.framework.JavaVersion; import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter; import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory; @@ -726,7 +725,7 @@ public class Javac extends MatchingTask { // This is the most common extension case - exe for windows and OS/2, // nothing for *nix. - String extension = Os.isFamily( "dos" ) ? ".exe" : ""; + String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; // Look for java in the java.home/../bin directory. Unfortunately // on Windows java.home doesn't always refer to the correct location, @@ -736,7 +735,7 @@ public class Javac extends MatchingTask new java.io.File( System.getProperty( "java.home" ) + "/../bin/javac" + extension ); - if( jExecutable.exists() && !Os.isFamily( "netware" ) ) + if( jExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { return jExecutable.getAbsolutePath(); } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/PathConvert.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/PathConvert.java index c8e1ca784..4d16c8f85 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/PathConvert.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/PathConvert.java @@ -9,6 +9,7 @@ package org.apache.tools.ant.taskdefs; import java.io.File; import java.util.ArrayList; +import org.apache.aut.nativelib.Os; import org.apache.myrmidon.api.AbstractTask; import org.apache.myrmidon.api.TaskException; import org.apache.tools.ant.types.Path; @@ -45,7 +46,7 @@ public class PathConvert extends AbstractTask /** * Override the default path separator string for the target os * - * @param sep The new PathSep value + * @param pathSep The new PathSep value */ public void setPathSep( final String pathSep ) { @@ -64,7 +65,7 @@ public class PathConvert extends AbstractTask /** * Set the value of the targetos attribute * - * @param target The new Targetos value + * @param targetOS The new Targetos value */ public void setTargetos( String targetOS ) throws TaskException @@ -121,13 +122,10 @@ public class PathConvert extends AbstractTask // And Unix is everything that is not Windows // (with the exception for NetWare below) - String osname = System.getProperty( "os.name" ).toLowerCase(); - // for NetWare, piggy-back on Windows, since here and in the // apply code, the same assumptions can be made as with windows - // that \\ is an OK separator, and do comparisons case-insensitive. - m_onWindows = ( ( osname.indexOf( "windows" ) >= 0 ) || - ( osname.indexOf( "netware" ) >= 0 ) ); + m_onWindows = ( Os.isFamily( Os.OS_FAMILY_WINDOWS ) || Os.isFamily( Os.OS_FAMILY_NETWARE ) ); // Determine the from/to char mappings for dir sep char fromDirSep = m_onWindows ? '\\' : '/'; diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java index bf38015e3..e572de2fe 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/javadoc/Javadoc.java @@ -845,7 +845,7 @@ public class Javadoc { // This is the most common extension case - exe for windows and OS/2, // nothing for *nix. - String extension = Os.isFamily( "dos" ) ? ".exe" : ""; + String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; // Look for javadoc in the java.home/../bin directory. Unfortunately // on Windows java.home doesn't always refer to the correct location, @@ -854,17 +854,12 @@ public class Javadoc File jdocExecutable = new File( System.getProperty( "java.home" ) + "/../bin/javadoc" + extension ); - if( jdocExecutable.exists() && !Os.isFamily( "netware" ) ) + if( jdocExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { return jdocExecutable.getAbsolutePath(); } else { - if( !Os.isFamily( "netware" ) ) - { - getLogger().debug( "Unable to locate " + jdocExecutable.getAbsolutePath() + - ". Using \"javadoc\" instead." ); - } return "javadoc"; } } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Cab.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Cab.java index f48f51d50..4ba03072e 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Cab.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/optional/Cab.java @@ -17,8 +17,8 @@ import java.util.Iterator; import org.apache.aut.nativelib.ExecManager; import org.apache.aut.nativelib.Os; import org.apache.myrmidon.api.TaskException; -import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.myrmidon.framework.Execute; +import org.apache.tools.ant.taskdefs.MatchingTask; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.DirectoryScanner; import org.apache.tools.ant.types.FileSet; @@ -103,7 +103,7 @@ public class Cab getLogger().info( "Building cab: " + m_cabFile.getAbsolutePath() ); - if( !Os.isFamily( "windows" ) ) + if( !Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) { getLogger().debug( "Using listcab/libcabinet" ); diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/text/FixCRLF.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/text/FixCRLF.java index 9bea1f3ee..1964d521a 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/text/FixCRLF.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/taskdefs/text/FixCRLF.java @@ -21,6 +21,7 @@ import java.io.Reader; import java.io.Writer; import java.util.Iterator; import java.util.NoSuchElementException; +import org.apache.aut.nativelib.Os; import org.apache.avalon.excalibur.io.FileUtil; import org.apache.myrmidon.api.TaskException; import org.apache.tools.ant.taskdefs.MatchingTask; @@ -122,25 +123,23 @@ public class FixCRLF public FixCRLF() { tabs = ASIS; - if( File.pathSeparator.equals( ":" ) ) + if( Os.isFamily( Os.OS_FAMILY_WINDOWS) ) + { + ctrlz = ASIS; + eol = CRLF; + eolstr = "\r\n"; + } + else if( Os.isFamily( Os.OS_FAMILY_MAC ) ) { ctrlz = REMOVE; - if( System.getProperty( "os.name" ).indexOf( "Mac" ) > -1 ) - { - eol = CR; - eolstr = "\r"; - } - else - { - eol = LF; - eolstr = "\n"; - } + eol = CR; + eolstr = "\r"; } else { - ctrlz = ASIS; - eol = CRLF; - eolstr = "\r\n"; + ctrlz = REMOVE; + eol = LF; + eolstr = "\n"; } } @@ -618,9 +617,7 @@ public class FixCRLF } else {// (tabs != ASIS) - int ptr; - - while( ( ptr = line.getNext() ) < linelen ) + while( line.getNext() < linelen ) { switch( lines.getState() ) diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/CommandlineJava.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/CommandlineJava.java index c012cda9a..020cc76e2 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/CommandlineJava.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/CommandlineJava.java @@ -264,7 +264,7 @@ public class CommandlineJava { // This is the most common extension case - exe for windows and OS/2, // nothing for *nix. - String extension = Os.isFamily( "dos" ) ? ".exe" : ""; + String extension = Os.isFamily( Os.OS_FAMILY_DOS ) ? ".exe" : ""; // Look for java in the java.home/../bin directory. Unfortunately // on Windows java.home doesn't always refer to the correct location, @@ -274,7 +274,7 @@ public class CommandlineJava new File( System.getProperty( "java.home" ) + "/../bin/java" + extension ); - if( jExecutable.exists() && !Os.isFamily( "netware" ) ) + if( jExecutable.exists() && !Os.isFamily( Os.OS_FAMILY_NETWARE ) ) { // NetWare may have a "java" in that directory, but 99% of // the time, you don't want to execute it -- Jeff Tulley diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/SourceFileScanner.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/SourceFileScanner.java index fd14b07f3..91a108f65 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/SourceFileScanner.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/SourceFileScanner.java @@ -56,7 +56,7 @@ public class SourceFileScanner * not have it, so if we could reliably passively test for an NTFS * file systems we could turn this off... */ - if( Os.isFamily( "windows" ) ) + if( Os.isFamily( Os.OS_FAMILY_WINDOWS ) ) { now += 2000; }