If it ever becomes needed in the future then it can be added. Until then YAGNI is probably a good principle git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271316 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -8,7 +8,11 @@ | |||||
| package org.apache.tools.ant.taskdefs.optional.dotnet; | package org.apache.tools.ant.taskdefs.optional.dotnet; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.aut.nativelib.ExecManager; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| 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.DirectoryScanner; | ||||
| /** | /** | ||||
| @@ -34,85 +38,76 @@ import org.apache.tools.ant.types.DirectoryScanner; | |||||
| * @author Steve Loughran steve_l@iseran.com | * @author Steve Loughran steve_l@iseran.com | ||||
| * @version 0.2 | * @version 0.2 | ||||
| */ | */ | ||||
| public class Ilasm | public class Ilasm | ||||
| extends org.apache.tools.ant.taskdefs.MatchingTask | |||||
| extends MatchingTask | |||||
| { | { | ||||
| /** | /** | ||||
| * name of the executable. the .exe suffix is deliberately not included in | * name of the executable. the .exe suffix is deliberately not included in | ||||
| * anticipation of the unix version | * anticipation of the unix version | ||||
| */ | */ | ||||
| protected final static String exe_name = "ilasm"; | |||||
| private final static String EXE_NAME = "ilasm"; | |||||
| /** | /** | ||||
| * what is the file extension we search on? | * what is the file extension we search on? | ||||
| */ | */ | ||||
| protected final static String file_ext = "il"; | |||||
| private final static String FILE_EXT = "il"; | |||||
| /** | /** | ||||
| * and now derive the search pattern from the extension | * and now derive the search pattern from the extension | ||||
| */ | */ | ||||
| protected final static String file_pattern = "**/*." + file_ext; | |||||
| private final static String FILE_PATTERN = "**/*." + FILE_EXT; | |||||
| /** | /** | ||||
| * title of task for external presentation | * title of task for external presentation | ||||
| */ | */ | ||||
| protected final static String exe_title = "ilasm"; | |||||
| private final static String EXE_TITLE = "ilasm"; | |||||
| /** | /** | ||||
| * debug flag. Controls generation of debug information. | * debug flag. Controls generation of debug information. | ||||
| */ | */ | ||||
| protected boolean _debug; | |||||
| private boolean m_debug; | |||||
| /** | /** | ||||
| * any extra command options? | * any extra command options? | ||||
| */ | */ | ||||
| protected String _extraOptions; | |||||
| /** | |||||
| * flag to control action on execution trouble | |||||
| */ | |||||
| protected boolean _failOnError; | |||||
| private String m_extraOptions; | |||||
| /** | /** | ||||
| * listing flag | * listing flag | ||||
| */ | */ | ||||
| protected boolean _listing; | |||||
| private boolean m_listing; | |||||
| /** | /** | ||||
| * output file. If not supplied this is derived from the source file | * output file. If not supplied this is derived from the source file | ||||
| */ | */ | ||||
| protected File _outputFile; | |||||
| private File m_outputFile; | |||||
| /** | /** | ||||
| * resource file (.res format) to include in the app. | * resource file (.res format) to include in the app. | ||||
| */ | */ | ||||
| protected File _resourceFile; | |||||
| private File m_resourceFile; | |||||
| /** | /** | ||||
| * type of target. Should be one of exe|library|module|winexe|(null) default | * type of target. Should be one of exe|library|module|winexe|(null) default | ||||
| * is exe; the actual value (if not null) is fed to the command line. <br> | * is exe; the actual value (if not null) is fed to the command line. <br> | ||||
| * See /target | * See /target | ||||
| */ | */ | ||||
| protected String _targetType; | |||||
| private String m_targetType; | |||||
| /** | /** | ||||
| * verbose flag | * verbose flag | ||||
| */ | */ | ||||
| protected boolean _verbose; | |||||
| private boolean m_verbose; | |||||
| /** | /** | ||||
| * file containing private key | * file containing private key | ||||
| */ | */ | ||||
| private File _keyfile; | |||||
| private File m_keyfile; | |||||
| /** | /** | ||||
| * source directory upon which the search pattern is applied | * source directory upon which the search pattern is applied | ||||
| */ | */ | ||||
| private File _srcDir; | |||||
| private File m_srcDir; | |||||
| /** | /** | ||||
| * constructor inits everything and set up the search pattern | * constructor inits everything and set up the search pattern | ||||
| @@ -120,18 +115,18 @@ public class Ilasm | |||||
| public Ilasm() | public Ilasm() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| Clear(); | |||||
| setIncludes( file_pattern ); | |||||
| setIncludes( FILE_PATTERN ); | |||||
| m_debug = true; | |||||
| } | } | ||||
| /** | /** | ||||
| * set the debug flag on or off | * set the debug flag on or off | ||||
| * | * | ||||
| * @param f on/off flag | |||||
| * @param debug on/off flag | |||||
| */ | */ | ||||
| public void setDebug( boolean f ) | |||||
| public void setDebug( final boolean debug ) | |||||
| { | { | ||||
| _debug = f; | |||||
| m_debug = debug; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -139,75 +134,50 @@ public class Ilasm | |||||
| * | * | ||||
| * @param extraOptions The new ExtraOptions value | * @param extraOptions The new ExtraOptions value | ||||
| */ | */ | ||||
| public void setExtraOptions( String extraOptions ) | |||||
| { | |||||
| this._extraOptions = extraOptions; | |||||
| } | |||||
| /** | |||||
| * set fail on error flag | |||||
| * | |||||
| * @param b The new FailOnError value | |||||
| */ | |||||
| public void setFailOnError( boolean b ) | |||||
| public void setExtraOptions( final String extraOptions ) | |||||
| { | { | ||||
| _failOnError = b; | |||||
| m_extraOptions = extraOptions; | |||||
| } | } | ||||
| public void setKeyfile( File keyfile ) | |||||
| public void setKeyfile( final File keyfile ) | |||||
| { | { | ||||
| this._keyfile = keyfile; | |||||
| m_keyfile = keyfile; | |||||
| } | } | ||||
| /** | /** | ||||
| * enable/disable listing | * enable/disable listing | ||||
| * | * | ||||
| * @param b flag set to true for listing on | |||||
| * @param listing flag set to true for listing on | |||||
| */ | */ | ||||
| public void setListing( boolean b ) | |||||
| public void setListing( final boolean listing ) | |||||
| { | { | ||||
| _listing = b; | |||||
| m_listing = listing; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the definitions | * Set the definitions | ||||
| * | |||||
| * @param params The new OutputFile value | |||||
| */ | |||||
| public void setOutputFile( File params ) | |||||
| { | |||||
| _outputFile = params; | |||||
| } | |||||
| /** | |||||
| * Sets the Owner attribute | |||||
| * | |||||
| * @param s The new Owner value | |||||
| */ | */ | ||||
| public void setOwner( String s ) | |||||
| public void setOutputFile( final File outputFile ) | |||||
| { | { | ||||
| getLogger().warn( "This option is not supported by ILASM as of Beta-2, and will be ignored" ); | |||||
| m_outputFile = outputFile; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the resource file | * Set the resource file | ||||
| * | * | ||||
| * @param fileName path to the file. Can be relative, absolute, whatever. | |||||
| * @param resourceFile path to the file. Can be relative, absolute, whatever. | |||||
| */ | */ | ||||
| public void setResourceFile( File fileName ) | |||||
| public void setResourceFile( final File resourceFile ) | |||||
| { | { | ||||
| _resourceFile = fileName; | |||||
| m_resourceFile = resourceFile; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the source dir to find the files to be compiled | * Set the source dir to find the files to be compiled | ||||
| * | |||||
| * @param srcDirName The new SrcDir value | |||||
| */ | */ | ||||
| public void setSrcDir( File srcDirName ) | |||||
| public void setSrcDir( final File srcDir ) | |||||
| { | { | ||||
| _srcDir = srcDirName; | |||||
| m_srcDir = srcDir; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -218,114 +188,61 @@ public class Ilasm | |||||
| * exe|library|module|winexe | * exe|library|module|winexe | ||||
| */ | */ | ||||
| public void setTargetType( String targetType ) | |||||
| public void setTargetType( final String targetType ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| targetType = targetType.toLowerCase(); | |||||
| if( targetType.equals( "exe" ) || targetType.equals( "library" ) ) | |||||
| final String type = targetType.toLowerCase(); | |||||
| if( type.equals( "exe" ) || type.equals( "library" ) ) | |||||
| { | { | ||||
| _targetType = targetType; | |||||
| m_targetType = type; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| throw new TaskException( "targetType " + targetType + " is not a valid type" ); | |||||
| final String message = "targetType " + targetType + " is not a valid type"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * enable/disable verbose ILASM output | * enable/disable verbose ILASM output | ||||
| * | * | ||||
| * @param b flag set to true for verbose on | |||||
| */ | |||||
| public void setVerbose( boolean b ) | |||||
| { | |||||
| _verbose = b; | |||||
| } | |||||
| /** | |||||
| * query the debug flag | |||||
| * | |||||
| * @return true if debug is turned on | |||||
| * @param verbose flag set to true for verbose on | |||||
| */ | */ | ||||
| public boolean getDebug() | |||||
| public void setVerbose( final boolean verbose ) | |||||
| { | { | ||||
| return _debug; | |||||
| } | |||||
| /** | |||||
| * Gets the ExtraOptions attribute | |||||
| * | |||||
| * @return The ExtraOptions value | |||||
| */ | |||||
| public String getExtraOptions() | |||||
| { | |||||
| return this._extraOptions; | |||||
| } | |||||
| /** | |||||
| * query fail on error flag | |||||
| * | |||||
| * @return The FailFailOnError value | |||||
| */ | |||||
| public boolean getFailFailOnError() | |||||
| { | |||||
| return _failOnError; | |||||
| } | |||||
| /** | |||||
| * accessor method for target type | |||||
| * | |||||
| * @return the current target option | |||||
| */ | |||||
| public String getTargetType() | |||||
| { | |||||
| return _targetType; | |||||
| } | |||||
| /** | |||||
| * reset all contents. | |||||
| */ | |||||
| public void Clear() | |||||
| { | |||||
| _targetType = null; | |||||
| _srcDir = null; | |||||
| _listing = false; | |||||
| _verbose = false; | |||||
| _debug = true; | |||||
| _outputFile = null; | |||||
| _failOnError = true; | |||||
| _resourceFile = null; | |||||
| _extraOptions = null; | |||||
| m_verbose = verbose; | |||||
| } | } | ||||
| /** | /** | ||||
| * This is the execution entry point. Build a list of files and call ilasm | * This is the execution entry point. Build a list of files and call ilasm | ||||
| * on each of them. | * on each of them. | ||||
| * | * | ||||
| * @throws TaskException if the assembly failed and FailOnError is true | |||||
| * @throws TaskException if the assembly failed | |||||
| */ | */ | ||||
| public void execute() | public void execute() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( _srcDir == null ) | |||||
| if( null == m_srcDir ) | |||||
| { | { | ||||
| _srcDir = getBaseDirectory(); | |||||
| m_srcDir = getBaseDirectory(); | |||||
| } | } | ||||
| //get dependencies list. | //get dependencies list. | ||||
| DirectoryScanner scanner = super.getDirectoryScanner( _srcDir ); | |||||
| String[] dependencies = scanner.getIncludedFiles(); | |||||
| getLogger().info( "assembling " + dependencies.length + " file" + ( ( dependencies.length == 1 ) ? "" : "s" ) ); | |||||
| String baseDir = scanner.getBasedir().toString(); | |||||
| final DirectoryScanner scanner = super.getDirectoryScanner( m_srcDir ); | |||||
| final String[] dependencies = scanner.getIncludedFiles(); | |||||
| final String baseDir = scanner.getBasedir().toString(); | |||||
| final String message = "assembling " + dependencies.length + " file" + | |||||
| ( ( dependencies.length == 1 ) ? "" : "s" ); | |||||
| getLogger().info( message ); | |||||
| //add to the command | //add to the command | ||||
| for( int i = 0; i < dependencies.length; i++ ) | for( int i = 0; i < dependencies.length; i++ ) | ||||
| { | { | ||||
| String targetFile = dependencies[ i ]; | |||||
| targetFile = baseDir + File.separator + targetFile; | |||||
| final String targetFile = baseDir + File.separator + dependencies[ i ]; | |||||
| executeOneFile( targetFile ); | executeOneFile( targetFile ); | ||||
| } | } | ||||
| }// end execute | |||||
| } | |||||
| /** | /** | ||||
| * do the work for one file by building the command line then calling it | * do the work for one file by building the command line then calling it | ||||
| @@ -333,31 +250,33 @@ public class Ilasm | |||||
| * @param targetFile name of the the file to assemble | * @param targetFile name of the the file to assemble | ||||
| * @throws TaskException if the assembly failed and FailOnError is true | * @throws TaskException if the assembly failed and FailOnError is true | ||||
| */ | */ | ||||
| public void executeOneFile( String targetFile ) | |||||
| public void executeOneFile( final String targetFile ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| NetCommand command = new NetCommand( this, exe_title, exe_name ); | |||||
| command.setFailOnError( getFailFailOnError() ); | |||||
| //DEBUG helper | |||||
| command.setTraceCommandLine( true ); | |||||
| //fill in args | |||||
| command.addArgument( getDebugParameter() ); | |||||
| command.addArgument( getTargetTypeParameter() ); | |||||
| command.addArgument( getListingParameter() ); | |||||
| command.addArgument( getOutputFileParameter() ); | |||||
| command.addArgument( getResourceFileParameter() ); | |||||
| command.addArgument( getVerboseParameter() ); | |||||
| command.addArgument( getKeyfileParameter() ); | |||||
| command.addArgument( getExtraOptionsParameter() ); | |||||
| /* | |||||
| * space for more argumentativeness | |||||
| * command.addArgument(); | |||||
| * command.addArgument(); | |||||
| */ | |||||
| command.addArgument( targetFile ); | |||||
| //now run the command of exe + settings + file | |||||
| command.runCommand(); | |||||
| final ExecManager execManager = (ExecManager)getService( ExecManager.class ); | |||||
| final Execute exe = new Execute( execManager ); | |||||
| exe.setReturnCode( 0 ); | |||||
| final Commandline cmd = exe.getCommandline(); | |||||
| cmd.setExecutable( EXE_NAME ); | |||||
| addArgument( cmd, getDebugParameter() ); | |||||
| addArgument( cmd, getTargetTypeParameter() ); | |||||
| addArgument( cmd, getListingParameter() ); | |||||
| addArgument( cmd, getOutputFileParameter() ); | |||||
| addArgument( cmd, getResourceFileParameter() ); | |||||
| addArgument( cmd, getVerboseParameter() ); | |||||
| addArgument( cmd, getKeyfileParameter() ); | |||||
| addArgument( cmd, getExtraOptionsParameter() ); | |||||
| addArgument( cmd, targetFile ); | |||||
| exe.execute(); | |||||
| } | |||||
| private void addArgument( final Commandline cmd, final String argument ) | |||||
| { | |||||
| if( null != argument && 0 != argument.length() ) | |||||
| { | |||||
| cmd.addArgument( argument ); | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -365,9 +284,9 @@ public class Ilasm | |||||
| * | * | ||||
| * @return The DebugParameter value | * @return The DebugParameter value | ||||
| */ | */ | ||||
| protected String getDebugParameter() | |||||
| private String getDebugParameter() | |||||
| { | { | ||||
| return _debug ? "/debug" : null; | |||||
| return m_debug ? "/debug" : null; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -375,11 +294,11 @@ public class Ilasm | |||||
| * | * | ||||
| * @return The ExtraOptions Parameter to CSC | * @return The ExtraOptions Parameter to CSC | ||||
| */ | */ | ||||
| protected String getExtraOptionsParameter() | |||||
| private String getExtraOptionsParameter() | |||||
| { | { | ||||
| if( _extraOptions != null && _extraOptions.length() != 0 ) | |||||
| if( m_extraOptions != null && m_extraOptions.length() != 0 ) | |||||
| { | { | ||||
| return _extraOptions; | |||||
| return m_extraOptions; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -389,14 +308,12 @@ public class Ilasm | |||||
| /** | /** | ||||
| * get the argument or null for no argument needed | * get the argument or null for no argument needed | ||||
| * | |||||
| * @return The KeyfileParameter value | |||||
| */ | */ | ||||
| protected String getKeyfileParameter() | |||||
| private String getKeyfileParameter() | |||||
| { | { | ||||
| if( _keyfile != null ) | |||||
| if( m_keyfile != null ) | |||||
| { | { | ||||
| return "/keyfile:" + _keyfile.toString(); | |||||
| return "/keyfile:" + m_keyfile.toString(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -409,9 +326,9 @@ public class Ilasm | |||||
| * | * | ||||
| * @return the appropriate string from the state of the listing flag | * @return the appropriate string from the state of the listing flag | ||||
| */ | */ | ||||
| protected String getListingParameter() | |||||
| private String getListingParameter() | |||||
| { | { | ||||
| return _listing ? "/listing" : "/nolisting"; | |||||
| return m_listing ? "/listing" : "/nolisting"; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -419,21 +336,20 @@ public class Ilasm | |||||
| * | * | ||||
| * @return the argument string or null for no argument | * @return the argument string or null for no argument | ||||
| */ | */ | ||||
| protected String getOutputFileParameter() | |||||
| private String getOutputFileParameter() | |||||
| { | { | ||||
| if( _outputFile == null || _outputFile.length() == 0 ) | |||||
| if( null == m_outputFile || 0 == m_outputFile.length() ) | |||||
| { | { | ||||
| return null; | return null; | ||||
| } | } | ||||
| File f = _outputFile; | |||||
| return "/output=" + f.toString(); | |||||
| return "/output=" + m_outputFile.toString(); | |||||
| } | } | ||||
| protected String getResourceFileParameter() | |||||
| private String getResourceFileParameter() | |||||
| { | { | ||||
| if( _resourceFile != null ) | |||||
| if( null != m_resourceFile ) | |||||
| { | { | ||||
| return "/resource=" + _resourceFile.toString(); | |||||
| return "/resource=" + m_resourceFile.toString(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -447,17 +363,17 @@ public class Ilasm | |||||
| * @return The TargetTypeParameter value | * @return The TargetTypeParameter value | ||||
| */ | */ | ||||
| protected String getTargetTypeParameter() | |||||
| private String getTargetTypeParameter() | |||||
| { | { | ||||
| if( !notEmpty( _targetType ) ) | |||||
| if( !notEmpty( m_targetType ) ) | |||||
| { | { | ||||
| return null; | return null; | ||||
| } | } | ||||
| if( _targetType.equals( "exe" ) ) | |||||
| if( m_targetType.equals( "exe" ) ) | |||||
| { | { | ||||
| return "/exe"; | return "/exe"; | ||||
| } | } | ||||
| else if( _targetType.equals( "library" ) ) | |||||
| else if( m_targetType.equals( "library" ) ) | |||||
| { | { | ||||
| return "/dll"; | return "/dll"; | ||||
| } | } | ||||
| @@ -472,20 +388,18 @@ public class Ilasm | |||||
| * | * | ||||
| * @return null or the appropriate command line string | * @return null or the appropriate command line string | ||||
| */ | */ | ||||
| protected String getVerboseParameter() | |||||
| private String getVerboseParameter() | |||||
| { | { | ||||
| return _verbose ? null : "/quiet"; | |||||
| return m_verbose ? null : "/quiet"; | |||||
| } | } | ||||
| /** | /** | ||||
| * test for a string containing something useful | * test for a string containing something useful | ||||
| * | * | ||||
| * @param s Description of Parameter | |||||
| * @return Description of the Returned Value | |||||
| * @returns true if the argument is not null or empty | * @returns true if the argument is not null or empty | ||||
| */ | */ | ||||
| protected boolean notEmpty( String s ) | |||||
| private boolean notEmpty( final String string ) | |||||
| { | { | ||||
| return s != null && s.length() != 0; | |||||
| }// end executeOneFile | |||||
| }//class | |||||
| return string != null && string.length() != 0; | |||||
| } | |||||
| } | |||||
| @@ -1,199 +0,0 @@ | |||||
| /* | |||||
| * 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.tools.ant.taskdefs.optional.dotnet;// imports | |||||
| import java.io.File; | |||||
| import org.apache.aut.nativelib.ExecManager; | |||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| import org.apache.myrmidon.api.TaskException; | |||||
| import org.apache.myrmidon.framework.Execute; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.types.Commandline; | |||||
| /** | |||||
| * This is a helper class to spawn net commands out. In its initial form it | |||||
| * contains no .net specifics, just contains all the command line/exe | |||||
| * construction stuff. However, it may be handy in future to have a means of | |||||
| * setting the path to point to the dotnet bin directory; in which case the | |||||
| * shared code should go in here. | |||||
| * | |||||
| * @author Steve Loughran steve_l@iseran.com | |||||
| * @version 0.3 | |||||
| * @created 2000-11-01 | |||||
| */ | |||||
| public class NetCommand | |||||
| extends AbstractLogEnabled | |||||
| { | |||||
| /** | |||||
| * trace flag | |||||
| */ | |||||
| protected boolean _traceCommandLine = false; | |||||
| /** | |||||
| * what is the command line | |||||
| */ | |||||
| protected Commandline _commandLine; | |||||
| /** | |||||
| * executabe | |||||
| */ | |||||
| protected Execute _exe; | |||||
| /** | |||||
| * flag to control action on execution trouble | |||||
| */ | |||||
| protected boolean _failOnError; | |||||
| /** | |||||
| * owner project | |||||
| */ | |||||
| protected Task _owner; | |||||
| /** | |||||
| * actual program to invoke | |||||
| */ | |||||
| protected String _program; | |||||
| /** | |||||
| * title of the command | |||||
| */ | |||||
| protected String _title; | |||||
| /** | |||||
| * constructor | |||||
| * | |||||
| * @param title (for logging/errors) | |||||
| * @param owner Description of Parameter | |||||
| * @param program Description of Parameter | |||||
| */ | |||||
| public NetCommand( Task owner, String title, String program ) | |||||
| throws TaskException | |||||
| { | |||||
| _owner = owner; | |||||
| _title = title; | |||||
| _program = program; | |||||
| _commandLine = new Commandline(); | |||||
| _commandLine.setExecutable( _program ); | |||||
| prepareExecutor(); | |||||
| } | |||||
| /** | |||||
| * set fail on error flag | |||||
| * | |||||
| * @param b fail flag -set to true to cause an exception to be raised if the | |||||
| * return value != 0 | |||||
| */ | |||||
| public void setFailOnError( boolean b ) | |||||
| { | |||||
| _failOnError = b; | |||||
| } | |||||
| /** | |||||
| * turn tracing on or off | |||||
| * | |||||
| * @param b trace flag | |||||
| */ | |||||
| public void setTraceCommandLine( boolean b ) | |||||
| { | |||||
| _traceCommandLine = b; | |||||
| } | |||||
| /** | |||||
| * query fail on error flag | |||||
| * | |||||
| * @return The FailFailOnError value | |||||
| */ | |||||
| public boolean getFailFailOnError() | |||||
| { | |||||
| return _failOnError; | |||||
| } | |||||
| /** | |||||
| * add an argument to a command line; do nothing if the arg is null or empty | |||||
| * string | |||||
| * | |||||
| * @param argument The feature to be added to the Argument attribute | |||||
| */ | |||||
| public void addArgument( String argument ) | |||||
| { | |||||
| if( argument != null && argument.length() != 0 ) | |||||
| { | |||||
| _commandLine.addArgument( argument ); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Run the command using the given Execute instance. | |||||
| * | |||||
| * @exception TaskException Description of Exception | |||||
| * @throws an exception of something goes wrong and the failOnError flag is | |||||
| * true | |||||
| */ | |||||
| public void runCommand() | |||||
| throws TaskException | |||||
| { | |||||
| int err = -1;// assume the worst | |||||
| if( _traceCommandLine ) | |||||
| { | |||||
| //_owner.getLogger().info( _commandLine.toString() ); | |||||
| } | |||||
| else | |||||
| { | |||||
| //in verbose mode we always log stuff | |||||
| logVerbose( _commandLine.toString() ); | |||||
| } | |||||
| _exe.setCommandline( _commandLine ); | |||||
| err = _exe.execute(); | |||||
| if( err != 0 ) | |||||
| { | |||||
| if( _failOnError ) | |||||
| { | |||||
| throw new TaskException( _title + " returned: " + err ); | |||||
| } | |||||
| else | |||||
| { | |||||
| getLogger().error( _title + " Result: " + err ); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * error text log | |||||
| * | |||||
| * @param msg message to display as an error | |||||
| */ | |||||
| protected void logError( String msg ) | |||||
| { | |||||
| getLogger().error( msg ); | |||||
| } | |||||
| /** | |||||
| * verbose text log | |||||
| * | |||||
| * @param msg string to add to log iff verbose is defined for the build | |||||
| */ | |||||
| protected void logVerbose( String msg ) | |||||
| { | |||||
| getLogger().debug( msg ); | |||||
| } | |||||
| /** | |||||
| * set up the command sequence.. | |||||
| */ | |||||
| protected void prepareExecutor() | |||||
| throws TaskException | |||||
| { | |||||
| // default directory to the project's base directory | |||||
| File dir = _owner.getBaseDirectory(); | |||||
| final ExecManager execManager = (ExecManager)_owner.getService( ExecManager.class ); | |||||
| _exe = new Execute( execManager ); | |||||
| _exe.setWorkingDirectory( dir ); | |||||
| } | |||||
| } | |||||
| @@ -8,7 +8,11 @@ | |||||
| package org.apache.tools.ant.taskdefs.optional.dotnet; | package org.apache.tools.ant.taskdefs.optional.dotnet; | ||||
| import java.io.File; | import java.io.File; | ||||
| import org.apache.aut.nativelib.ExecManager; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| 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.DirectoryScanner; | ||||
| /** | /** | ||||
| @@ -34,85 +38,76 @@ import org.apache.tools.ant.types.DirectoryScanner; | |||||
| * @author Steve Loughran steve_l@iseran.com | * @author Steve Loughran steve_l@iseran.com | ||||
| * @version 0.2 | * @version 0.2 | ||||
| */ | */ | ||||
| public class Ilasm | public class Ilasm | ||||
| extends org.apache.tools.ant.taskdefs.MatchingTask | |||||
| extends MatchingTask | |||||
| { | { | ||||
| /** | /** | ||||
| * name of the executable. the .exe suffix is deliberately not included in | * name of the executable. the .exe suffix is deliberately not included in | ||||
| * anticipation of the unix version | * anticipation of the unix version | ||||
| */ | */ | ||||
| protected final static String exe_name = "ilasm"; | |||||
| private final static String EXE_NAME = "ilasm"; | |||||
| /** | /** | ||||
| * what is the file extension we search on? | * what is the file extension we search on? | ||||
| */ | */ | ||||
| protected final static String file_ext = "il"; | |||||
| private final static String FILE_EXT = "il"; | |||||
| /** | /** | ||||
| * and now derive the search pattern from the extension | * and now derive the search pattern from the extension | ||||
| */ | */ | ||||
| protected final static String file_pattern = "**/*." + file_ext; | |||||
| private final static String FILE_PATTERN = "**/*." + FILE_EXT; | |||||
| /** | /** | ||||
| * title of task for external presentation | * title of task for external presentation | ||||
| */ | */ | ||||
| protected final static String exe_title = "ilasm"; | |||||
| private final static String EXE_TITLE = "ilasm"; | |||||
| /** | /** | ||||
| * debug flag. Controls generation of debug information. | * debug flag. Controls generation of debug information. | ||||
| */ | */ | ||||
| protected boolean _debug; | |||||
| private boolean m_debug; | |||||
| /** | /** | ||||
| * any extra command options? | * any extra command options? | ||||
| */ | */ | ||||
| protected String _extraOptions; | |||||
| /** | |||||
| * flag to control action on execution trouble | |||||
| */ | |||||
| protected boolean _failOnError; | |||||
| private String m_extraOptions; | |||||
| /** | /** | ||||
| * listing flag | * listing flag | ||||
| */ | */ | ||||
| protected boolean _listing; | |||||
| private boolean m_listing; | |||||
| /** | /** | ||||
| * output file. If not supplied this is derived from the source file | * output file. If not supplied this is derived from the source file | ||||
| */ | */ | ||||
| protected File _outputFile; | |||||
| private File m_outputFile; | |||||
| /** | /** | ||||
| * resource file (.res format) to include in the app. | * resource file (.res format) to include in the app. | ||||
| */ | */ | ||||
| protected File _resourceFile; | |||||
| private File m_resourceFile; | |||||
| /** | /** | ||||
| * type of target. Should be one of exe|library|module|winexe|(null) default | * type of target. Should be one of exe|library|module|winexe|(null) default | ||||
| * is exe; the actual value (if not null) is fed to the command line. <br> | * is exe; the actual value (if not null) is fed to the command line. <br> | ||||
| * See /target | * See /target | ||||
| */ | */ | ||||
| protected String _targetType; | |||||
| private String m_targetType; | |||||
| /** | /** | ||||
| * verbose flag | * verbose flag | ||||
| */ | */ | ||||
| protected boolean _verbose; | |||||
| private boolean m_verbose; | |||||
| /** | /** | ||||
| * file containing private key | * file containing private key | ||||
| */ | */ | ||||
| private File _keyfile; | |||||
| private File m_keyfile; | |||||
| /** | /** | ||||
| * source directory upon which the search pattern is applied | * source directory upon which the search pattern is applied | ||||
| */ | */ | ||||
| private File _srcDir; | |||||
| private File m_srcDir; | |||||
| /** | /** | ||||
| * constructor inits everything and set up the search pattern | * constructor inits everything and set up the search pattern | ||||
| @@ -120,18 +115,18 @@ public class Ilasm | |||||
| public Ilasm() | public Ilasm() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| Clear(); | |||||
| setIncludes( file_pattern ); | |||||
| setIncludes( FILE_PATTERN ); | |||||
| m_debug = true; | |||||
| } | } | ||||
| /** | /** | ||||
| * set the debug flag on or off | * set the debug flag on or off | ||||
| * | * | ||||
| * @param f on/off flag | |||||
| * @param debug on/off flag | |||||
| */ | */ | ||||
| public void setDebug( boolean f ) | |||||
| public void setDebug( final boolean debug ) | |||||
| { | { | ||||
| _debug = f; | |||||
| m_debug = debug; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -139,75 +134,50 @@ public class Ilasm | |||||
| * | * | ||||
| * @param extraOptions The new ExtraOptions value | * @param extraOptions The new ExtraOptions value | ||||
| */ | */ | ||||
| public void setExtraOptions( String extraOptions ) | |||||
| { | |||||
| this._extraOptions = extraOptions; | |||||
| } | |||||
| /** | |||||
| * set fail on error flag | |||||
| * | |||||
| * @param b The new FailOnError value | |||||
| */ | |||||
| public void setFailOnError( boolean b ) | |||||
| public void setExtraOptions( final String extraOptions ) | |||||
| { | { | ||||
| _failOnError = b; | |||||
| m_extraOptions = extraOptions; | |||||
| } | } | ||||
| public void setKeyfile( File keyfile ) | |||||
| public void setKeyfile( final File keyfile ) | |||||
| { | { | ||||
| this._keyfile = keyfile; | |||||
| m_keyfile = keyfile; | |||||
| } | } | ||||
| /** | /** | ||||
| * enable/disable listing | * enable/disable listing | ||||
| * | * | ||||
| * @param b flag set to true for listing on | |||||
| * @param listing flag set to true for listing on | |||||
| */ | */ | ||||
| public void setListing( boolean b ) | |||||
| public void setListing( final boolean listing ) | |||||
| { | { | ||||
| _listing = b; | |||||
| m_listing = listing; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the definitions | * Set the definitions | ||||
| * | |||||
| * @param params The new OutputFile value | |||||
| */ | |||||
| public void setOutputFile( File params ) | |||||
| { | |||||
| _outputFile = params; | |||||
| } | |||||
| /** | |||||
| * Sets the Owner attribute | |||||
| * | |||||
| * @param s The new Owner value | |||||
| */ | */ | ||||
| public void setOwner( String s ) | |||||
| public void setOutputFile( final File outputFile ) | |||||
| { | { | ||||
| getLogger().warn( "This option is not supported by ILASM as of Beta-2, and will be ignored" ); | |||||
| m_outputFile = outputFile; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the resource file | * Set the resource file | ||||
| * | * | ||||
| * @param fileName path to the file. Can be relative, absolute, whatever. | |||||
| * @param resourceFile path to the file. Can be relative, absolute, whatever. | |||||
| */ | */ | ||||
| public void setResourceFile( File fileName ) | |||||
| public void setResourceFile( final File resourceFile ) | |||||
| { | { | ||||
| _resourceFile = fileName; | |||||
| m_resourceFile = resourceFile; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the source dir to find the files to be compiled | * Set the source dir to find the files to be compiled | ||||
| * | |||||
| * @param srcDirName The new SrcDir value | |||||
| */ | */ | ||||
| public void setSrcDir( File srcDirName ) | |||||
| public void setSrcDir( final File srcDir ) | |||||
| { | { | ||||
| _srcDir = srcDirName; | |||||
| m_srcDir = srcDir; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -218,114 +188,61 @@ public class Ilasm | |||||
| * exe|library|module|winexe | * exe|library|module|winexe | ||||
| */ | */ | ||||
| public void setTargetType( String targetType ) | |||||
| public void setTargetType( final String targetType ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| targetType = targetType.toLowerCase(); | |||||
| if( targetType.equals( "exe" ) || targetType.equals( "library" ) ) | |||||
| final String type = targetType.toLowerCase(); | |||||
| if( type.equals( "exe" ) || type.equals( "library" ) ) | |||||
| { | { | ||||
| _targetType = targetType; | |||||
| m_targetType = type; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| throw new TaskException( "targetType " + targetType + " is not a valid type" ); | |||||
| final String message = "targetType " + targetType + " is not a valid type"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * enable/disable verbose ILASM output | * enable/disable verbose ILASM output | ||||
| * | * | ||||
| * @param b flag set to true for verbose on | |||||
| */ | |||||
| public void setVerbose( boolean b ) | |||||
| { | |||||
| _verbose = b; | |||||
| } | |||||
| /** | |||||
| * query the debug flag | |||||
| * | |||||
| * @return true if debug is turned on | |||||
| * @param verbose flag set to true for verbose on | |||||
| */ | */ | ||||
| public boolean getDebug() | |||||
| public void setVerbose( final boolean verbose ) | |||||
| { | { | ||||
| return _debug; | |||||
| } | |||||
| /** | |||||
| * Gets the ExtraOptions attribute | |||||
| * | |||||
| * @return The ExtraOptions value | |||||
| */ | |||||
| public String getExtraOptions() | |||||
| { | |||||
| return this._extraOptions; | |||||
| } | |||||
| /** | |||||
| * query fail on error flag | |||||
| * | |||||
| * @return The FailFailOnError value | |||||
| */ | |||||
| public boolean getFailFailOnError() | |||||
| { | |||||
| return _failOnError; | |||||
| } | |||||
| /** | |||||
| * accessor method for target type | |||||
| * | |||||
| * @return the current target option | |||||
| */ | |||||
| public String getTargetType() | |||||
| { | |||||
| return _targetType; | |||||
| } | |||||
| /** | |||||
| * reset all contents. | |||||
| */ | |||||
| public void Clear() | |||||
| { | |||||
| _targetType = null; | |||||
| _srcDir = null; | |||||
| _listing = false; | |||||
| _verbose = false; | |||||
| _debug = true; | |||||
| _outputFile = null; | |||||
| _failOnError = true; | |||||
| _resourceFile = null; | |||||
| _extraOptions = null; | |||||
| m_verbose = verbose; | |||||
| } | } | ||||
| /** | /** | ||||
| * This is the execution entry point. Build a list of files and call ilasm | * This is the execution entry point. Build a list of files and call ilasm | ||||
| * on each of them. | * on each of them. | ||||
| * | * | ||||
| * @throws TaskException if the assembly failed and FailOnError is true | |||||
| * @throws TaskException if the assembly failed | |||||
| */ | */ | ||||
| public void execute() | public void execute() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| if( _srcDir == null ) | |||||
| if( null == m_srcDir ) | |||||
| { | { | ||||
| _srcDir = getBaseDirectory(); | |||||
| m_srcDir = getBaseDirectory(); | |||||
| } | } | ||||
| //get dependencies list. | //get dependencies list. | ||||
| DirectoryScanner scanner = super.getDirectoryScanner( _srcDir ); | |||||
| String[] dependencies = scanner.getIncludedFiles(); | |||||
| getLogger().info( "assembling " + dependencies.length + " file" + ( ( dependencies.length == 1 ) ? "" : "s" ) ); | |||||
| String baseDir = scanner.getBasedir().toString(); | |||||
| final DirectoryScanner scanner = super.getDirectoryScanner( m_srcDir ); | |||||
| final String[] dependencies = scanner.getIncludedFiles(); | |||||
| final String baseDir = scanner.getBasedir().toString(); | |||||
| final String message = "assembling " + dependencies.length + " file" + | |||||
| ( ( dependencies.length == 1 ) ? "" : "s" ); | |||||
| getLogger().info( message ); | |||||
| //add to the command | //add to the command | ||||
| for( int i = 0; i < dependencies.length; i++ ) | for( int i = 0; i < dependencies.length; i++ ) | ||||
| { | { | ||||
| String targetFile = dependencies[ i ]; | |||||
| targetFile = baseDir + File.separator + targetFile; | |||||
| final String targetFile = baseDir + File.separator + dependencies[ i ]; | |||||
| executeOneFile( targetFile ); | executeOneFile( targetFile ); | ||||
| } | } | ||||
| }// end execute | |||||
| } | |||||
| /** | /** | ||||
| * do the work for one file by building the command line then calling it | * do the work for one file by building the command line then calling it | ||||
| @@ -333,31 +250,33 @@ public class Ilasm | |||||
| * @param targetFile name of the the file to assemble | * @param targetFile name of the the file to assemble | ||||
| * @throws TaskException if the assembly failed and FailOnError is true | * @throws TaskException if the assembly failed and FailOnError is true | ||||
| */ | */ | ||||
| public void executeOneFile( String targetFile ) | |||||
| public void executeOneFile( final String targetFile ) | |||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| NetCommand command = new NetCommand( this, exe_title, exe_name ); | |||||
| command.setFailOnError( getFailFailOnError() ); | |||||
| //DEBUG helper | |||||
| command.setTraceCommandLine( true ); | |||||
| //fill in args | |||||
| command.addArgument( getDebugParameter() ); | |||||
| command.addArgument( getTargetTypeParameter() ); | |||||
| command.addArgument( getListingParameter() ); | |||||
| command.addArgument( getOutputFileParameter() ); | |||||
| command.addArgument( getResourceFileParameter() ); | |||||
| command.addArgument( getVerboseParameter() ); | |||||
| command.addArgument( getKeyfileParameter() ); | |||||
| command.addArgument( getExtraOptionsParameter() ); | |||||
| /* | |||||
| * space for more argumentativeness | |||||
| * command.addArgument(); | |||||
| * command.addArgument(); | |||||
| */ | |||||
| command.addArgument( targetFile ); | |||||
| //now run the command of exe + settings + file | |||||
| command.runCommand(); | |||||
| final ExecManager execManager = (ExecManager)getService( ExecManager.class ); | |||||
| final Execute exe = new Execute( execManager ); | |||||
| exe.setReturnCode( 0 ); | |||||
| final Commandline cmd = exe.getCommandline(); | |||||
| cmd.setExecutable( EXE_NAME ); | |||||
| addArgument( cmd, getDebugParameter() ); | |||||
| addArgument( cmd, getTargetTypeParameter() ); | |||||
| addArgument( cmd, getListingParameter() ); | |||||
| addArgument( cmd, getOutputFileParameter() ); | |||||
| addArgument( cmd, getResourceFileParameter() ); | |||||
| addArgument( cmd, getVerboseParameter() ); | |||||
| addArgument( cmd, getKeyfileParameter() ); | |||||
| addArgument( cmd, getExtraOptionsParameter() ); | |||||
| addArgument( cmd, targetFile ); | |||||
| exe.execute(); | |||||
| } | |||||
| private void addArgument( final Commandline cmd, final String argument ) | |||||
| { | |||||
| if( null != argument && 0 != argument.length() ) | |||||
| { | |||||
| cmd.addArgument( argument ); | |||||
| } | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -365,9 +284,9 @@ public class Ilasm | |||||
| * | * | ||||
| * @return The DebugParameter value | * @return The DebugParameter value | ||||
| */ | */ | ||||
| protected String getDebugParameter() | |||||
| private String getDebugParameter() | |||||
| { | { | ||||
| return _debug ? "/debug" : null; | |||||
| return m_debug ? "/debug" : null; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -375,11 +294,11 @@ public class Ilasm | |||||
| * | * | ||||
| * @return The ExtraOptions Parameter to CSC | * @return The ExtraOptions Parameter to CSC | ||||
| */ | */ | ||||
| protected String getExtraOptionsParameter() | |||||
| private String getExtraOptionsParameter() | |||||
| { | { | ||||
| if( _extraOptions != null && _extraOptions.length() != 0 ) | |||||
| if( m_extraOptions != null && m_extraOptions.length() != 0 ) | |||||
| { | { | ||||
| return _extraOptions; | |||||
| return m_extraOptions; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -389,14 +308,12 @@ public class Ilasm | |||||
| /** | /** | ||||
| * get the argument or null for no argument needed | * get the argument or null for no argument needed | ||||
| * | |||||
| * @return The KeyfileParameter value | |||||
| */ | */ | ||||
| protected String getKeyfileParameter() | |||||
| private String getKeyfileParameter() | |||||
| { | { | ||||
| if( _keyfile != null ) | |||||
| if( m_keyfile != null ) | |||||
| { | { | ||||
| return "/keyfile:" + _keyfile.toString(); | |||||
| return "/keyfile:" + m_keyfile.toString(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -409,9 +326,9 @@ public class Ilasm | |||||
| * | * | ||||
| * @return the appropriate string from the state of the listing flag | * @return the appropriate string from the state of the listing flag | ||||
| */ | */ | ||||
| protected String getListingParameter() | |||||
| private String getListingParameter() | |||||
| { | { | ||||
| return _listing ? "/listing" : "/nolisting"; | |||||
| return m_listing ? "/listing" : "/nolisting"; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -419,21 +336,20 @@ public class Ilasm | |||||
| * | * | ||||
| * @return the argument string or null for no argument | * @return the argument string or null for no argument | ||||
| */ | */ | ||||
| protected String getOutputFileParameter() | |||||
| private String getOutputFileParameter() | |||||
| { | { | ||||
| if( _outputFile == null || _outputFile.length() == 0 ) | |||||
| if( null == m_outputFile || 0 == m_outputFile.length() ) | |||||
| { | { | ||||
| return null; | return null; | ||||
| } | } | ||||
| File f = _outputFile; | |||||
| return "/output=" + f.toString(); | |||||
| return "/output=" + m_outputFile.toString(); | |||||
| } | } | ||||
| protected String getResourceFileParameter() | |||||
| private String getResourceFileParameter() | |||||
| { | { | ||||
| if( _resourceFile != null ) | |||||
| if( null != m_resourceFile ) | |||||
| { | { | ||||
| return "/resource=" + _resourceFile.toString(); | |||||
| return "/resource=" + m_resourceFile.toString(); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -447,17 +363,17 @@ public class Ilasm | |||||
| * @return The TargetTypeParameter value | * @return The TargetTypeParameter value | ||||
| */ | */ | ||||
| protected String getTargetTypeParameter() | |||||
| private String getTargetTypeParameter() | |||||
| { | { | ||||
| if( !notEmpty( _targetType ) ) | |||||
| if( !notEmpty( m_targetType ) ) | |||||
| { | { | ||||
| return null; | return null; | ||||
| } | } | ||||
| if( _targetType.equals( "exe" ) ) | |||||
| if( m_targetType.equals( "exe" ) ) | |||||
| { | { | ||||
| return "/exe"; | return "/exe"; | ||||
| } | } | ||||
| else if( _targetType.equals( "library" ) ) | |||||
| else if( m_targetType.equals( "library" ) ) | |||||
| { | { | ||||
| return "/dll"; | return "/dll"; | ||||
| } | } | ||||
| @@ -472,20 +388,18 @@ public class Ilasm | |||||
| * | * | ||||
| * @return null or the appropriate command line string | * @return null or the appropriate command line string | ||||
| */ | */ | ||||
| protected String getVerboseParameter() | |||||
| private String getVerboseParameter() | |||||
| { | { | ||||
| return _verbose ? null : "/quiet"; | |||||
| return m_verbose ? null : "/quiet"; | |||||
| } | } | ||||
| /** | /** | ||||
| * test for a string containing something useful | * test for a string containing something useful | ||||
| * | * | ||||
| * @param s Description of Parameter | |||||
| * @return Description of the Returned Value | |||||
| * @returns true if the argument is not null or empty | * @returns true if the argument is not null or empty | ||||
| */ | */ | ||||
| protected boolean notEmpty( String s ) | |||||
| private boolean notEmpty( final String string ) | |||||
| { | { | ||||
| return s != null && s.length() != 0; | |||||
| }// end executeOneFile | |||||
| }//class | |||||
| return string != null && string.length() != 0; | |||||
| } | |||||
| } | |||||
| @@ -1,199 +0,0 @@ | |||||
| /* | |||||
| * 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.tools.ant.taskdefs.optional.dotnet;// imports | |||||
| import java.io.File; | |||||
| import org.apache.aut.nativelib.ExecManager; | |||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| import org.apache.myrmidon.api.TaskException; | |||||
| import org.apache.myrmidon.framework.Execute; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.types.Commandline; | |||||
| /** | |||||
| * This is a helper class to spawn net commands out. In its initial form it | |||||
| * contains no .net specifics, just contains all the command line/exe | |||||
| * construction stuff. However, it may be handy in future to have a means of | |||||
| * setting the path to point to the dotnet bin directory; in which case the | |||||
| * shared code should go in here. | |||||
| * | |||||
| * @author Steve Loughran steve_l@iseran.com | |||||
| * @version 0.3 | |||||
| * @created 2000-11-01 | |||||
| */ | |||||
| public class NetCommand | |||||
| extends AbstractLogEnabled | |||||
| { | |||||
| /** | |||||
| * trace flag | |||||
| */ | |||||
| protected boolean _traceCommandLine = false; | |||||
| /** | |||||
| * what is the command line | |||||
| */ | |||||
| protected Commandline _commandLine; | |||||
| /** | |||||
| * executabe | |||||
| */ | |||||
| protected Execute _exe; | |||||
| /** | |||||
| * flag to control action on execution trouble | |||||
| */ | |||||
| protected boolean _failOnError; | |||||
| /** | |||||
| * owner project | |||||
| */ | |||||
| protected Task _owner; | |||||
| /** | |||||
| * actual program to invoke | |||||
| */ | |||||
| protected String _program; | |||||
| /** | |||||
| * title of the command | |||||
| */ | |||||
| protected String _title; | |||||
| /** | |||||
| * constructor | |||||
| * | |||||
| * @param title (for logging/errors) | |||||
| * @param owner Description of Parameter | |||||
| * @param program Description of Parameter | |||||
| */ | |||||
| public NetCommand( Task owner, String title, String program ) | |||||
| throws TaskException | |||||
| { | |||||
| _owner = owner; | |||||
| _title = title; | |||||
| _program = program; | |||||
| _commandLine = new Commandline(); | |||||
| _commandLine.setExecutable( _program ); | |||||
| prepareExecutor(); | |||||
| } | |||||
| /** | |||||
| * set fail on error flag | |||||
| * | |||||
| * @param b fail flag -set to true to cause an exception to be raised if the | |||||
| * return value != 0 | |||||
| */ | |||||
| public void setFailOnError( boolean b ) | |||||
| { | |||||
| _failOnError = b; | |||||
| } | |||||
| /** | |||||
| * turn tracing on or off | |||||
| * | |||||
| * @param b trace flag | |||||
| */ | |||||
| public void setTraceCommandLine( boolean b ) | |||||
| { | |||||
| _traceCommandLine = b; | |||||
| } | |||||
| /** | |||||
| * query fail on error flag | |||||
| * | |||||
| * @return The FailFailOnError value | |||||
| */ | |||||
| public boolean getFailFailOnError() | |||||
| { | |||||
| return _failOnError; | |||||
| } | |||||
| /** | |||||
| * add an argument to a command line; do nothing if the arg is null or empty | |||||
| * string | |||||
| * | |||||
| * @param argument The feature to be added to the Argument attribute | |||||
| */ | |||||
| public void addArgument( String argument ) | |||||
| { | |||||
| if( argument != null && argument.length() != 0 ) | |||||
| { | |||||
| _commandLine.addArgument( argument ); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Run the command using the given Execute instance. | |||||
| * | |||||
| * @exception TaskException Description of Exception | |||||
| * @throws an exception of something goes wrong and the failOnError flag is | |||||
| * true | |||||
| */ | |||||
| public void runCommand() | |||||
| throws TaskException | |||||
| { | |||||
| int err = -1;// assume the worst | |||||
| if( _traceCommandLine ) | |||||
| { | |||||
| //_owner.getLogger().info( _commandLine.toString() ); | |||||
| } | |||||
| else | |||||
| { | |||||
| //in verbose mode we always log stuff | |||||
| logVerbose( _commandLine.toString() ); | |||||
| } | |||||
| _exe.setCommandline( _commandLine ); | |||||
| err = _exe.execute(); | |||||
| if( err != 0 ) | |||||
| { | |||||
| if( _failOnError ) | |||||
| { | |||||
| throw new TaskException( _title + " returned: " + err ); | |||||
| } | |||||
| else | |||||
| { | |||||
| getLogger().error( _title + " Result: " + err ); | |||||
| } | |||||
| } | |||||
| } | |||||
| /** | |||||
| * error text log | |||||
| * | |||||
| * @param msg message to display as an error | |||||
| */ | |||||
| protected void logError( String msg ) | |||||
| { | |||||
| getLogger().error( msg ); | |||||
| } | |||||
| /** | |||||
| * verbose text log | |||||
| * | |||||
| * @param msg string to add to log iff verbose is defined for the build | |||||
| */ | |||||
| protected void logVerbose( String msg ) | |||||
| { | |||||
| getLogger().debug( msg ); | |||||
| } | |||||
| /** | |||||
| * set up the command sequence.. | |||||
| */ | |||||
| protected void prepareExecutor() | |||||
| throws TaskException | |||||
| { | |||||
| // default directory to the project's base directory | |||||
| File dir = _owner.getBaseDirectory(); | |||||
| final ExecManager execManager = (ExecManager)_owner.getService( ExecManager.class ); | |||||
| _exe = new Execute( execManager ); | |||||
| _exe.setWorkingDirectory( dir ); | |||||
| } | |||||
| } | |||||