git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270580 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,27 @@ | |||||
| /* | |||||
| * 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; | |||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| public class ClassArgument | |||||
| extends AbstractLogEnabled | |||||
| { | |||||
| private String m_name; | |||||
| public void setName( String name ) | |||||
| { | |||||
| m_name = name; | |||||
| getLogger().info( "ClassArgument.name=" + name ); | |||||
| } | |||||
| public String getName() | |||||
| { | |||||
| return m_name; | |||||
| } | |||||
| } | |||||
| @@ -12,12 +12,10 @@ import java.util.ArrayList; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.framework.JavaVersion; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.types.Reference; | |||||
| /** | /** | ||||
| * Task to generate JNI header files using javah. This task can take the | * Task to generate JNI header files using javah. This task can take the | ||||
| @@ -53,267 +51,209 @@ import org.apache.tools.ant.types.Reference; | |||||
| * richard.beton@physics.org</a> | * richard.beton@physics.org</a> | ||||
| */ | */ | ||||
| public class Javah extends Task | |||||
| public class Javah | |||||
| extends AbstractLogEnabled | |||||
| { | { | ||||
| private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | ||||
| private ArrayList classes = new ArrayList( 2 ); | |||||
| private Path classpath = null; | |||||
| private File outputFile = null; | |||||
| private boolean verbose = false; | |||||
| private boolean force = false; | |||||
| private boolean old = false; | |||||
| private boolean stubs = false; | |||||
| private Path bootclasspath; | |||||
| private String cls; | |||||
| private File destDir; | |||||
| /** | |||||
| * Adds a reference to a CLASSPATH defined elsewhere. | |||||
| * | |||||
| * @param r The new BootClasspathRef value | |||||
| */ | |||||
| public void setBootClasspathRef( Reference r ) | |||||
| { | |||||
| createBootclasspath().setRefid( r ); | |||||
| } | |||||
| public void setBootclasspath( Path src ) | |||||
| private ArrayList m_classes = new ArrayList( 2 ); | |||||
| private Path m_classpath; | |||||
| private File m_outputFile; | |||||
| private boolean m_verbose; | |||||
| private boolean m_force; | |||||
| private boolean m_old; | |||||
| private boolean m_stubs; | |||||
| private Path m_bootclasspath; | |||||
| private String m_cls; | |||||
| private File m_destDir; | |||||
| public void setBootclasspath( final Path bootclasspath ) | |||||
| throws TaskException | |||||
| { | { | ||||
| if( bootclasspath == null ) | |||||
| if( m_bootclasspath == null ) | |||||
| { | { | ||||
| bootclasspath = src; | |||||
| m_bootclasspath = bootclasspath; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| bootclasspath.append( src ); | |||||
| m_bootclasspath.append( bootclasspath ); | |||||
| } | } | ||||
| } | } | ||||
| public void setClass( String cls ) | |||||
| public void setClass( final String cls ) | |||||
| { | { | ||||
| this.cls = cls; | |||||
| m_cls = cls; | |||||
| } | } | ||||
| public void setClasspath( Path src ) | |||||
| public void setClasspath( final Path classpath ) | |||||
| throws TaskException | |||||
| { | { | ||||
| if( classpath == null ) | |||||
| if( m_classpath == null ) | |||||
| { | { | ||||
| classpath = src; | |||||
| m_classpath = classpath; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| classpath.append( src ); | |||||
| m_classpath.append( classpath ); | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Adds a reference to a CLASSPATH defined elsewhere. | |||||
| * | |||||
| * @param r The new ClasspathRef value | |||||
| */ | |||||
| public void setClasspathRef( Reference r ) | |||||
| { | |||||
| createClasspath().setRefid( r ); | |||||
| } | |||||
| /** | /** | ||||
| * Set the destination directory into which the Java source files should be | * Set the destination directory into which the Java source files should be | ||||
| * compiled. | * compiled. | ||||
| * | * | ||||
| * @param destDir The new Destdir value | * @param destDir The new Destdir value | ||||
| */ | */ | ||||
| public void setDestdir( File destDir ) | |||||
| public void setDestdir( final File destDir ) | |||||
| { | { | ||||
| this.destDir = destDir; | |||||
| m_destDir = destDir; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the force-write flag. | * Set the force-write flag. | ||||
| * | |||||
| * @param force The new Force value | |||||
| */ | */ | ||||
| public void setForce( boolean force ) | |||||
| public void setForce( final boolean force ) | |||||
| { | { | ||||
| this.force = force; | |||||
| m_force = force; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the old flag. | * Set the old flag. | ||||
| * | |||||
| * @param old The new Old value | |||||
| */ | */ | ||||
| public void setOld( boolean old ) | |||||
| public void setOld( final boolean old ) | |||||
| { | { | ||||
| this.old = old; | |||||
| m_old = old; | |||||
| } | } | ||||
| ///** | |||||
| // * Sets the extension directories that will be used during the | |||||
| // * compilation. | |||||
| // */ | |||||
| //public void setExtdirs(Path extdirs) { | |||||
| // if (this.extdirs == null) { | |||||
| // this.extdirs = extdirs; | |||||
| // } else { | |||||
| // this.extdirs.append(extdirs); | |||||
| // } | |||||
| //} | |||||
| ///** | |||||
| // * Maybe creates a nested classpath element. | |||||
| // */ | |||||
| //public Path createExtdirs() { | |||||
| // if (extdirs == null) { | |||||
| // extdirs = new Path(project); | |||||
| // } | |||||
| // return extdirs.createPath(); | |||||
| //} | |||||
| /** | /** | ||||
| * Set the output file name. | * Set the output file name. | ||||
| * | |||||
| * @param outputFile The new OutputFile value | |||||
| */ | */ | ||||
| public void setOutputFile( File outputFile ) | |||||
| public void setOutputFile( final File outputFile ) | |||||
| { | { | ||||
| this.outputFile = outputFile; | |||||
| m_outputFile = outputFile; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the stubs flag. | * Set the stubs flag. | ||||
| * | |||||
| * @param stubs The new Stubs value | |||||
| */ | */ | ||||
| public void setStubs( boolean stubs ) | |||||
| public void setStubs( final boolean stubs ) | |||||
| { | { | ||||
| this.stubs = stubs; | |||||
| m_stubs = stubs; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the verbose flag. | * Set the verbose flag. | ||||
| * | |||||
| * @param verbose The new Verbose value | |||||
| */ | */ | ||||
| public void setVerbose( boolean verbose ) | |||||
| public void setVerbose( final boolean verbose ) | |||||
| { | { | ||||
| this.verbose = verbose; | |||||
| m_verbose = verbose; | |||||
| } | } | ||||
| public Path createBootclasspath() | public Path createBootclasspath() | ||||
| { | { | ||||
| if( bootclasspath == null ) | |||||
| if( m_bootclasspath == null ) | |||||
| { | { | ||||
| bootclasspath = new Path(); | |||||
| m_bootclasspath = new Path(); | |||||
| } | } | ||||
| return bootclasspath.createPath(); | |||||
| return m_bootclasspath.createPath(); | |||||
| } | } | ||||
| public ClassArgument createClass() | public ClassArgument createClass() | ||||
| { | { | ||||
| ClassArgument ga = new ClassArgument(); | |||||
| classes.add( ga ); | |||||
| final ClassArgument ga = new ClassArgument(); | |||||
| setupLogger( ga ); | |||||
| m_classes.add( ga ); | |||||
| return ga; | return ga; | ||||
| } | } | ||||
| public Path createClasspath() | public Path createClasspath() | ||||
| { | { | ||||
| if( classpath == null ) | |||||
| if( m_classpath == null ) | |||||
| { | { | ||||
| classpath = new Path(); | |||||
| m_classpath = new Path(); | |||||
| } | } | ||||
| return classpath.createPath(); | |||||
| return m_classpath.createPath(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Executes the task. | * Executes the task. | ||||
| * | |||||
| * @exception TaskException Description of Exception | |||||
| */ | */ | ||||
| public void execute() | public void execute() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| // first off, make sure that we've got a srcdir | |||||
| validate(); | |||||
| if( ( cls == null ) && ( classes.size() == 0 ) ) | |||||
| if( m_classpath == null ) | |||||
| { | { | ||||
| throw new TaskException( "class attribute must be set!" ); | |||||
| m_classpath = Path.systemClasspath; | |||||
| } | } | ||||
| if( ( cls != null ) && ( classes.size() > 0 ) ) | |||||
| { | |||||
| throw new TaskException( "set class attribute or class element, not both." ); | |||||
| } | |||||
| doClassicCompile(); | |||||
| } | |||||
| if( destDir != null ) | |||||
| private void validate() throws TaskException | |||||
| { | |||||
| if( ( m_cls == null ) && ( m_classes.size() == 0 ) ) | |||||
| { | { | ||||
| if( !destDir.isDirectory() ) | |||||
| { | |||||
| throw new TaskException( "destination directory \"" + destDir + "\" does not exist or is not a directory" ); | |||||
| } | |||||
| if( outputFile != null ) | |||||
| { | |||||
| throw new TaskException( "destdir and outputFile are mutually exclusive" ); | |||||
| } | |||||
| final String message = "class attribute must be set!"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| if( classpath == null ) | |||||
| if( ( m_cls != null ) && ( m_classes.size() > 0 ) ) | |||||
| { | { | ||||
| classpath = Path.systemClasspath; | |||||
| final String message = "set class attribute or class element, not both."; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| String compiler = getProject().getProperty( "build.compiler" ); | |||||
| if( compiler == null ) | |||||
| if( m_destDir != null ) | |||||
| { | { | ||||
| if( JavaVersion.JAVA1_2 != JavaVersion.getCurrentJavaVersion() ) | |||||
| if( !m_destDir.isDirectory() ) | |||||
| { | { | ||||
| compiler = "modern"; | |||||
| final String message = "destination directory \"" + m_destDir + | |||||
| "\" does not exist or is not a directory"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| else | |||||
| if( m_outputFile != null ) | |||||
| { | { | ||||
| compiler = "classic"; | |||||
| final String message = "destdir and outputFile are mutually exclusive"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| } | } | ||||
| doClassicCompile(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Logs the compilation parameters, adds the files to compile and logs the | * Logs the compilation parameters, adds the files to compile and logs the | ||||
| * &qout;niceSourceList" | * &qout;niceSourceList" | ||||
| * | |||||
| * @param cmd Description of Parameter | |||||
| */ | */ | ||||
| protected void logAndAddFilesToCompile( Commandline cmd ) | |||||
| private void logAndAddFilesToCompile( final Commandline cmd ) | |||||
| { | { | ||||
| int n = 0; | int n = 0; | ||||
| getLogger().debug( "Compilation args: " + cmd.toString() ); | getLogger().debug( "Compilation args: " + cmd.toString() ); | ||||
| StringBuffer niceClassList = new StringBuffer(); | StringBuffer niceClassList = new StringBuffer(); | ||||
| if( cls != null ) | |||||
| if( m_cls != null ) | |||||
| { | { | ||||
| StringTokenizer tok = new StringTokenizer( cls, ",", false ); | |||||
| final StringTokenizer tok = new StringTokenizer( m_cls, ",", false ); | |||||
| while( tok.hasMoreTokens() ) | while( tok.hasMoreTokens() ) | ||||
| { | { | ||||
| String aClass = tok.nextToken().trim(); | |||||
| final String aClass = tok.nextToken().trim(); | |||||
| cmd.createArgument().setValue( aClass ); | cmd.createArgument().setValue( aClass ); | ||||
| niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | ||||
| n++; | n++; | ||||
| } | } | ||||
| } | } | ||||
| Iterator enum = classes.iterator(); | |||||
| final Iterator enum = m_classes.iterator(); | |||||
| while( enum.hasNext() ) | while( enum.hasNext() ) | ||||
| { | { | ||||
| ClassArgument arg = (ClassArgument)enum.next(); | |||||
| String aClass = arg.getName(); | |||||
| final ClassArgument arg = (ClassArgument)enum.next(); | |||||
| final String aClass = arg.getName(); | |||||
| cmd.createArgument().setValue( aClass ); | cmd.createArgument().setValue( aClass ); | ||||
| niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | ||||
| n++; | n++; | ||||
| } | } | ||||
| StringBuffer prefix = new StringBuffer( "Class" ); | |||||
| final StringBuffer prefix = new StringBuffer( "Class" ); | |||||
| if( n > 1 ) | if( n > 1 ) | ||||
| { | { | ||||
| prefix.append( "es" ); | prefix.append( "es" ); | ||||
| @@ -326,65 +266,62 @@ public class Javah extends Task | |||||
| /** | /** | ||||
| * Does the command line argument processing common to classic and modern. | * Does the command line argument processing common to classic and modern. | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| private Commandline setupJavahCommand() | private Commandline setupJavahCommand() | ||||
| throws TaskException | |||||
| { | { | ||||
| Commandline cmd = new Commandline(); | |||||
| final Commandline cmd = new Commandline(); | |||||
| if( destDir != null ) | |||||
| if( m_destDir != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-d" ); | cmd.createArgument().setValue( "-d" ); | ||||
| cmd.createArgument().setFile( destDir ); | |||||
| cmd.createArgument().setFile( m_destDir ); | |||||
| } | } | ||||
| if( outputFile != null ) | |||||
| if( m_outputFile != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-o" ); | cmd.createArgument().setValue( "-o" ); | ||||
| cmd.createArgument().setFile( outputFile ); | |||||
| cmd.createArgument().setFile( m_outputFile ); | |||||
| } | } | ||||
| if( classpath != null ) | |||||
| if( m_classpath != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-classpath" ); | cmd.createArgument().setValue( "-classpath" ); | ||||
| cmd.createArgument().setPath( classpath ); | |||||
| cmd.createArgument().setPath( m_classpath ); | |||||
| } | } | ||||
| if( verbose ) | |||||
| if( m_verbose ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-verbose" ); | cmd.createArgument().setValue( "-verbose" ); | ||||
| } | } | ||||
| if( old ) | |||||
| if( m_old ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-old" ); | cmd.createArgument().setValue( "-old" ); | ||||
| } | } | ||||
| if( force ) | |||||
| if( m_force ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-force" ); | cmd.createArgument().setValue( "-force" ); | ||||
| } | } | ||||
| if( stubs ) | |||||
| if( m_stubs ) | |||||
| { | { | ||||
| if( !old ) | |||||
| if( !m_old ) | |||||
| { | { | ||||
| throw new TaskException( "stubs only available in old mode." ); | |||||
| final String message = "stubs only available in old mode."; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| cmd.createArgument().setValue( "-stubs" ); | cmd.createArgument().setValue( "-stubs" ); | ||||
| } | } | ||||
| if( bootclasspath != null ) | |||||
| if( m_bootclasspath != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-bootclasspath" ); | cmd.createArgument().setValue( "-bootclasspath" ); | ||||
| cmd.createArgument().setPath( bootclasspath ); | |||||
| cmd.createArgument().setPath( m_bootclasspath ); | |||||
| } | } | ||||
| logAndAddFilesToCompile( cmd ); | logAndAddFilesToCompile( cmd ); | ||||
| return cmd; | return cmd; | ||||
| } | } | ||||
| // XXX | |||||
| // we need a way to not use the current classpath. | |||||
| /** | /** | ||||
| * Peforms a compile using the classic compiler that shipped with JDK 1.1 | * Peforms a compile using the classic compiler that shipped with JDK 1.1 | ||||
| * and 1.2. | * and 1.2. | ||||
| @@ -433,25 +370,5 @@ public class Javah extends Task | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| public class ClassArgument | |||||
| { | |||||
| private String name; | |||||
| public ClassArgument() | |||||
| { | |||||
| } | |||||
| public void setName( String name ) | |||||
| { | |||||
| this.name = name; | |||||
| getLogger().info( "ClassArgument.name=" + name ); | |||||
| } | |||||
| public String getName() | |||||
| { | |||||
| return name; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -0,0 +1,27 @@ | |||||
| /* | |||||
| * 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; | |||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| public class ClassArgument | |||||
| extends AbstractLogEnabled | |||||
| { | |||||
| private String m_name; | |||||
| public void setName( String name ) | |||||
| { | |||||
| m_name = name; | |||||
| getLogger().info( "ClassArgument.name=" + name ); | |||||
| } | |||||
| public String getName() | |||||
| { | |||||
| return m_name; | |||||
| } | |||||
| } | |||||
| @@ -12,12 +12,10 @@ import java.util.ArrayList; | |||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import java.util.StringTokenizer; | import java.util.StringTokenizer; | ||||
| import org.apache.avalon.excalibur.util.StringUtil; | import org.apache.avalon.excalibur.util.StringUtil; | ||||
| import org.apache.avalon.framework.logger.AbstractLogEnabled; | |||||
| import org.apache.myrmidon.api.TaskException; | import org.apache.myrmidon.api.TaskException; | ||||
| import org.apache.myrmidon.framework.JavaVersion; | |||||
| import org.apache.tools.ant.Task; | |||||
| import org.apache.tools.ant.types.Commandline; | import org.apache.tools.ant.types.Commandline; | ||||
| import org.apache.tools.ant.types.Path; | import org.apache.tools.ant.types.Path; | ||||
| import org.apache.tools.ant.types.Reference; | |||||
| /** | /** | ||||
| * Task to generate JNI header files using javah. This task can take the | * Task to generate JNI header files using javah. This task can take the | ||||
| @@ -53,267 +51,209 @@ import org.apache.tools.ant.types.Reference; | |||||
| * richard.beton@physics.org</a> | * richard.beton@physics.org</a> | ||||
| */ | */ | ||||
| public class Javah extends Task | |||||
| public class Javah | |||||
| extends AbstractLogEnabled | |||||
| { | { | ||||
| private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | private final static String FAIL_MSG = "Compile failed, messages should have been provided."; | ||||
| private ArrayList classes = new ArrayList( 2 ); | |||||
| private Path classpath = null; | |||||
| private File outputFile = null; | |||||
| private boolean verbose = false; | |||||
| private boolean force = false; | |||||
| private boolean old = false; | |||||
| private boolean stubs = false; | |||||
| private Path bootclasspath; | |||||
| private String cls; | |||||
| private File destDir; | |||||
| /** | |||||
| * Adds a reference to a CLASSPATH defined elsewhere. | |||||
| * | |||||
| * @param r The new BootClasspathRef value | |||||
| */ | |||||
| public void setBootClasspathRef( Reference r ) | |||||
| { | |||||
| createBootclasspath().setRefid( r ); | |||||
| } | |||||
| public void setBootclasspath( Path src ) | |||||
| private ArrayList m_classes = new ArrayList( 2 ); | |||||
| private Path m_classpath; | |||||
| private File m_outputFile; | |||||
| private boolean m_verbose; | |||||
| private boolean m_force; | |||||
| private boolean m_old; | |||||
| private boolean m_stubs; | |||||
| private Path m_bootclasspath; | |||||
| private String m_cls; | |||||
| private File m_destDir; | |||||
| public void setBootclasspath( final Path bootclasspath ) | |||||
| throws TaskException | |||||
| { | { | ||||
| if( bootclasspath == null ) | |||||
| if( m_bootclasspath == null ) | |||||
| { | { | ||||
| bootclasspath = src; | |||||
| m_bootclasspath = bootclasspath; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| bootclasspath.append( src ); | |||||
| m_bootclasspath.append( bootclasspath ); | |||||
| } | } | ||||
| } | } | ||||
| public void setClass( String cls ) | |||||
| public void setClass( final String cls ) | |||||
| { | { | ||||
| this.cls = cls; | |||||
| m_cls = cls; | |||||
| } | } | ||||
| public void setClasspath( Path src ) | |||||
| public void setClasspath( final Path classpath ) | |||||
| throws TaskException | |||||
| { | { | ||||
| if( classpath == null ) | |||||
| if( m_classpath == null ) | |||||
| { | { | ||||
| classpath = src; | |||||
| m_classpath = classpath; | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| classpath.append( src ); | |||||
| m_classpath.append( classpath ); | |||||
| } | } | ||||
| } | } | ||||
| /** | |||||
| * Adds a reference to a CLASSPATH defined elsewhere. | |||||
| * | |||||
| * @param r The new ClasspathRef value | |||||
| */ | |||||
| public void setClasspathRef( Reference r ) | |||||
| { | |||||
| createClasspath().setRefid( r ); | |||||
| } | |||||
| /** | /** | ||||
| * Set the destination directory into which the Java source files should be | * Set the destination directory into which the Java source files should be | ||||
| * compiled. | * compiled. | ||||
| * | * | ||||
| * @param destDir The new Destdir value | * @param destDir The new Destdir value | ||||
| */ | */ | ||||
| public void setDestdir( File destDir ) | |||||
| public void setDestdir( final File destDir ) | |||||
| { | { | ||||
| this.destDir = destDir; | |||||
| m_destDir = destDir; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the force-write flag. | * Set the force-write flag. | ||||
| * | |||||
| * @param force The new Force value | |||||
| */ | */ | ||||
| public void setForce( boolean force ) | |||||
| public void setForce( final boolean force ) | |||||
| { | { | ||||
| this.force = force; | |||||
| m_force = force; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the old flag. | * Set the old flag. | ||||
| * | |||||
| * @param old The new Old value | |||||
| */ | */ | ||||
| public void setOld( boolean old ) | |||||
| public void setOld( final boolean old ) | |||||
| { | { | ||||
| this.old = old; | |||||
| m_old = old; | |||||
| } | } | ||||
| ///** | |||||
| // * Sets the extension directories that will be used during the | |||||
| // * compilation. | |||||
| // */ | |||||
| //public void setExtdirs(Path extdirs) { | |||||
| // if (this.extdirs == null) { | |||||
| // this.extdirs = extdirs; | |||||
| // } else { | |||||
| // this.extdirs.append(extdirs); | |||||
| // } | |||||
| //} | |||||
| ///** | |||||
| // * Maybe creates a nested classpath element. | |||||
| // */ | |||||
| //public Path createExtdirs() { | |||||
| // if (extdirs == null) { | |||||
| // extdirs = new Path(project); | |||||
| // } | |||||
| // return extdirs.createPath(); | |||||
| //} | |||||
| /** | /** | ||||
| * Set the output file name. | * Set the output file name. | ||||
| * | |||||
| * @param outputFile The new OutputFile value | |||||
| */ | */ | ||||
| public void setOutputFile( File outputFile ) | |||||
| public void setOutputFile( final File outputFile ) | |||||
| { | { | ||||
| this.outputFile = outputFile; | |||||
| m_outputFile = outputFile; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the stubs flag. | * Set the stubs flag. | ||||
| * | |||||
| * @param stubs The new Stubs value | |||||
| */ | */ | ||||
| public void setStubs( boolean stubs ) | |||||
| public void setStubs( final boolean stubs ) | |||||
| { | { | ||||
| this.stubs = stubs; | |||||
| m_stubs = stubs; | |||||
| } | } | ||||
| /** | /** | ||||
| * Set the verbose flag. | * Set the verbose flag. | ||||
| * | |||||
| * @param verbose The new Verbose value | |||||
| */ | */ | ||||
| public void setVerbose( boolean verbose ) | |||||
| public void setVerbose( final boolean verbose ) | |||||
| { | { | ||||
| this.verbose = verbose; | |||||
| m_verbose = verbose; | |||||
| } | } | ||||
| public Path createBootclasspath() | public Path createBootclasspath() | ||||
| { | { | ||||
| if( bootclasspath == null ) | |||||
| if( m_bootclasspath == null ) | |||||
| { | { | ||||
| bootclasspath = new Path(); | |||||
| m_bootclasspath = new Path(); | |||||
| } | } | ||||
| return bootclasspath.createPath(); | |||||
| return m_bootclasspath.createPath(); | |||||
| } | } | ||||
| public ClassArgument createClass() | public ClassArgument createClass() | ||||
| { | { | ||||
| ClassArgument ga = new ClassArgument(); | |||||
| classes.add( ga ); | |||||
| final ClassArgument ga = new ClassArgument(); | |||||
| setupLogger( ga ); | |||||
| m_classes.add( ga ); | |||||
| return ga; | return ga; | ||||
| } | } | ||||
| public Path createClasspath() | public Path createClasspath() | ||||
| { | { | ||||
| if( classpath == null ) | |||||
| if( m_classpath == null ) | |||||
| { | { | ||||
| classpath = new Path(); | |||||
| m_classpath = new Path(); | |||||
| } | } | ||||
| return classpath.createPath(); | |||||
| return m_classpath.createPath(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Executes the task. | * Executes the task. | ||||
| * | |||||
| * @exception TaskException Description of Exception | |||||
| */ | */ | ||||
| public void execute() | public void execute() | ||||
| throws TaskException | throws TaskException | ||||
| { | { | ||||
| // first off, make sure that we've got a srcdir | |||||
| validate(); | |||||
| if( ( cls == null ) && ( classes.size() == 0 ) ) | |||||
| if( m_classpath == null ) | |||||
| { | { | ||||
| throw new TaskException( "class attribute must be set!" ); | |||||
| m_classpath = Path.systemClasspath; | |||||
| } | } | ||||
| if( ( cls != null ) && ( classes.size() > 0 ) ) | |||||
| { | |||||
| throw new TaskException( "set class attribute or class element, not both." ); | |||||
| } | |||||
| doClassicCompile(); | |||||
| } | |||||
| if( destDir != null ) | |||||
| private void validate() throws TaskException | |||||
| { | |||||
| if( ( m_cls == null ) && ( m_classes.size() == 0 ) ) | |||||
| { | { | ||||
| if( !destDir.isDirectory() ) | |||||
| { | |||||
| throw new TaskException( "destination directory \"" + destDir + "\" does not exist or is not a directory" ); | |||||
| } | |||||
| if( outputFile != null ) | |||||
| { | |||||
| throw new TaskException( "destdir and outputFile are mutually exclusive" ); | |||||
| } | |||||
| final String message = "class attribute must be set!"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| if( classpath == null ) | |||||
| if( ( m_cls != null ) && ( m_classes.size() > 0 ) ) | |||||
| { | { | ||||
| classpath = Path.systemClasspath; | |||||
| final String message = "set class attribute or class element, not both."; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| String compiler = getProject().getProperty( "build.compiler" ); | |||||
| if( compiler == null ) | |||||
| if( m_destDir != null ) | |||||
| { | { | ||||
| if( JavaVersion.JAVA1_2 != JavaVersion.getCurrentJavaVersion() ) | |||||
| if( !m_destDir.isDirectory() ) | |||||
| { | { | ||||
| compiler = "modern"; | |||||
| final String message = "destination directory \"" + m_destDir + | |||||
| "\" does not exist or is not a directory"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| else | |||||
| if( m_outputFile != null ) | |||||
| { | { | ||||
| compiler = "classic"; | |||||
| final String message = "destdir and outputFile are mutually exclusive"; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| } | } | ||||
| doClassicCompile(); | |||||
| } | } | ||||
| /** | /** | ||||
| * Logs the compilation parameters, adds the files to compile and logs the | * Logs the compilation parameters, adds the files to compile and logs the | ||||
| * &qout;niceSourceList" | * &qout;niceSourceList" | ||||
| * | |||||
| * @param cmd Description of Parameter | |||||
| */ | */ | ||||
| protected void logAndAddFilesToCompile( Commandline cmd ) | |||||
| private void logAndAddFilesToCompile( final Commandline cmd ) | |||||
| { | { | ||||
| int n = 0; | int n = 0; | ||||
| getLogger().debug( "Compilation args: " + cmd.toString() ); | getLogger().debug( "Compilation args: " + cmd.toString() ); | ||||
| StringBuffer niceClassList = new StringBuffer(); | StringBuffer niceClassList = new StringBuffer(); | ||||
| if( cls != null ) | |||||
| if( m_cls != null ) | |||||
| { | { | ||||
| StringTokenizer tok = new StringTokenizer( cls, ",", false ); | |||||
| final StringTokenizer tok = new StringTokenizer( m_cls, ",", false ); | |||||
| while( tok.hasMoreTokens() ) | while( tok.hasMoreTokens() ) | ||||
| { | { | ||||
| String aClass = tok.nextToken().trim(); | |||||
| final String aClass = tok.nextToken().trim(); | |||||
| cmd.createArgument().setValue( aClass ); | cmd.createArgument().setValue( aClass ); | ||||
| niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | ||||
| n++; | n++; | ||||
| } | } | ||||
| } | } | ||||
| Iterator enum = classes.iterator(); | |||||
| final Iterator enum = m_classes.iterator(); | |||||
| while( enum.hasNext() ) | while( enum.hasNext() ) | ||||
| { | { | ||||
| ClassArgument arg = (ClassArgument)enum.next(); | |||||
| String aClass = arg.getName(); | |||||
| final ClassArgument arg = (ClassArgument)enum.next(); | |||||
| final String aClass = arg.getName(); | |||||
| cmd.createArgument().setValue( aClass ); | cmd.createArgument().setValue( aClass ); | ||||
| niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | niceClassList.append( " " + aClass + StringUtil.LINE_SEPARATOR ); | ||||
| n++; | n++; | ||||
| } | } | ||||
| StringBuffer prefix = new StringBuffer( "Class" ); | |||||
| final StringBuffer prefix = new StringBuffer( "Class" ); | |||||
| if( n > 1 ) | if( n > 1 ) | ||||
| { | { | ||||
| prefix.append( "es" ); | prefix.append( "es" ); | ||||
| @@ -326,65 +266,62 @@ public class Javah extends Task | |||||
| /** | /** | ||||
| * Does the command line argument processing common to classic and modern. | * Does the command line argument processing common to classic and modern. | ||||
| * | |||||
| * @return Description of the Returned Value | |||||
| */ | */ | ||||
| private Commandline setupJavahCommand() | private Commandline setupJavahCommand() | ||||
| throws TaskException | |||||
| { | { | ||||
| Commandline cmd = new Commandline(); | |||||
| final Commandline cmd = new Commandline(); | |||||
| if( destDir != null ) | |||||
| if( m_destDir != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-d" ); | cmd.createArgument().setValue( "-d" ); | ||||
| cmd.createArgument().setFile( destDir ); | |||||
| cmd.createArgument().setFile( m_destDir ); | |||||
| } | } | ||||
| if( outputFile != null ) | |||||
| if( m_outputFile != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-o" ); | cmd.createArgument().setValue( "-o" ); | ||||
| cmd.createArgument().setFile( outputFile ); | |||||
| cmd.createArgument().setFile( m_outputFile ); | |||||
| } | } | ||||
| if( classpath != null ) | |||||
| if( m_classpath != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-classpath" ); | cmd.createArgument().setValue( "-classpath" ); | ||||
| cmd.createArgument().setPath( classpath ); | |||||
| cmd.createArgument().setPath( m_classpath ); | |||||
| } | } | ||||
| if( verbose ) | |||||
| if( m_verbose ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-verbose" ); | cmd.createArgument().setValue( "-verbose" ); | ||||
| } | } | ||||
| if( old ) | |||||
| if( m_old ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-old" ); | cmd.createArgument().setValue( "-old" ); | ||||
| } | } | ||||
| if( force ) | |||||
| if( m_force ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-force" ); | cmd.createArgument().setValue( "-force" ); | ||||
| } | } | ||||
| if( stubs ) | |||||
| if( m_stubs ) | |||||
| { | { | ||||
| if( !old ) | |||||
| if( !m_old ) | |||||
| { | { | ||||
| throw new TaskException( "stubs only available in old mode." ); | |||||
| final String message = "stubs only available in old mode."; | |||||
| throw new TaskException( message ); | |||||
| } | } | ||||
| cmd.createArgument().setValue( "-stubs" ); | cmd.createArgument().setValue( "-stubs" ); | ||||
| } | } | ||||
| if( bootclasspath != null ) | |||||
| if( m_bootclasspath != null ) | |||||
| { | { | ||||
| cmd.createArgument().setValue( "-bootclasspath" ); | cmd.createArgument().setValue( "-bootclasspath" ); | ||||
| cmd.createArgument().setPath( bootclasspath ); | |||||
| cmd.createArgument().setPath( m_bootclasspath ); | |||||
| } | } | ||||
| logAndAddFilesToCompile( cmd ); | logAndAddFilesToCompile( cmd ); | ||||
| return cmd; | return cmd; | ||||
| } | } | ||||
| // XXX | |||||
| // we need a way to not use the current classpath. | |||||
| /** | /** | ||||
| * Peforms a compile using the classic compiler that shipped with JDK 1.1 | * Peforms a compile using the classic compiler that shipped with JDK 1.1 | ||||
| * and 1.2. | * and 1.2. | ||||
| @@ -433,25 +370,5 @@ public class Javah extends Task | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| public class ClassArgument | |||||
| { | |||||
| private String name; | |||||
| public ClassArgument() | |||||
| { | |||||
| } | |||||
| public void setName( String name ) | |||||
| { | |||||
| this.name = name; | |||||
| getLogger().info( "ClassArgument.name=" + name ); | |||||
| } | |||||
| public String getName() | |||||
| { | |||||
| return name; | |||||
| } | |||||
| } | |||||
| } | } | ||||