diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah')
5 files changed, 464 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Gcjh.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Gcjh.java new file mode 100644 index 00000000..712bb76a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Gcjh.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.optional.javah; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.Execute; +import org.apache.tools.ant.taskdefs.optional.Javah; +import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.JavaEnvUtils; + +/** + * Adapter to the native gcjh compiler. + * + * @since Ant 1.8.2 + */ +public class Gcjh implements JavahAdapter { + + public static final String IMPLEMENTATION_NAME = "gcjh"; + + /** + * Performs the actual compilation. + */ + public boolean compile(Javah javah) throws BuildException { + Commandline cmd = setupGcjhCommand(javah); + try { + Execute.runCommand(javah, cmd.getCommandline()); + return true; + } catch (BuildException e) { + if (e.getMessage().indexOf("failed with return code") == -1) { + throw e; + } + } + return false; + } + + private Commandline setupGcjhCommand(Javah javah) { + Commandline cmd = new Commandline(); + cmd.setExecutable(JavaEnvUtils.getJdkExecutable("gcjh")); + + if (javah.getDestdir() != null) { + cmd.createArgument().setValue("-d"); + cmd.createArgument().setFile(javah.getDestdir()); + } + + if (javah.getOutputfile() != null) { + cmd.createArgument().setValue("-o"); + cmd.createArgument().setFile(javah.getOutputfile()); + } + + Path cp = new Path(javah.getProject()); + if (javah.getBootclasspath() != null) { + cp.append(javah.getBootclasspath()); + } + cp = cp.concatSystemBootClasspath("ignore"); + if (javah.getClasspath() != null) { + cp.append(javah.getClasspath()); + } + if (cp.size() > 0) { + cmd.createArgument().setValue("--classpath"); + cmd.createArgument().setPath(cp); + } + + if (!javah.getOld()) { + cmd.createArgument().setValue("-jni"); + } + + cmd.addArguments(javah.getCurrentArgs()); + + javah.logAndAddFiles(cmd); + return cmd; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapter.java new file mode 100644 index 00000000..121fa429 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapter.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs.optional.javah; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.optional.Javah; + +/** + * Interface for different backend implementations of the Javah task. + * + * @since Ant 1.6.3 + */ +public interface JavahAdapter { + /** + * Performs the actual compilation. + * @param javah the calling javah task. + * @return true if the compilation was successful. + * @throws BuildException if there is an error. + * @since Ant 1.6.3 + */ + boolean compile(Javah javah) throws BuildException; +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java new file mode 100644 index 00000000..d98b4276 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.optional.javah; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ProjectComponent; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.ClasspathUtils; +import org.apache.tools.ant.util.JavaEnvUtils; + +/** + * Creates the JavahAdapter based on the user choice and + * potentially the VM vendor. + * + * @since Ant 1.6.3 + */ +// CheckStyle:HideUtilityClassConstructorCheck OFF (bc) +public class JavahAdapterFactory { + + /** + * Determines the default choice of adapter based on the VM + * vendor. + * + * @return the default choice of adapter based on the VM + * vendor + */ + public static String getDefault() { + if (JavaEnvUtils.isKaffe()) { + return Kaffeh.IMPLEMENTATION_NAME; + } else if (JavaEnvUtils.isGij()) { + return Gcjh.IMPLEMENTATION_NAME; + } + return SunJavah.IMPLEMENTATION_NAME; + } + + /** + * Creates the JavahAdapter based on the user choice and + * potentially the VM vendor. + * + * @param choice the user choice (if any). + * @param log a ProjectComponent instance used to access Ant's + * logging system. + * @return The adapter to use. + * @throws BuildException if there is an error. + */ + public static JavahAdapter getAdapter(String choice, + ProjectComponent log) + throws BuildException { + return getAdapter(choice, log, null); + } + + /** + * Creates the JavahAdapter based on the user choice and + * potentially the VM vendor. + * + * @param choice the user choice (if any). + * @param log a ProjectComponent instance used to access Ant's + * logging system. + * @param classpath the classpath to use when looking up an + * adapter class + * @return The adapter to use. + * @throws BuildException if there is an error. + * @since Ant 1.8.0 + */ + public static JavahAdapter getAdapter(String choice, + ProjectComponent log, + Path classpath) + throws BuildException { + if ((JavaEnvUtils.isKaffe() && choice == null) + || Kaffeh.IMPLEMENTATION_NAME.equals(choice)) { + return new Kaffeh(); + } else if ((JavaEnvUtils.isGij() && choice == null) + || Gcjh.IMPLEMENTATION_NAME.equals(choice)) { + return new Gcjh(); + } else if (SunJavah.IMPLEMENTATION_NAME.equals(choice)) { + return new SunJavah(); + } else if (choice != null) { + return resolveClassName(choice, + // Memory leak in line below + log.getProject() + .createClassLoader(classpath)); + } + + // This default has been good enough until Ant 1.6.3, so stick + // with it + return new SunJavah(); + } + + /** + * Tries to resolve the given classname into a javah adapter. + * Throws a fit if it can't. + * + * @param className The fully qualified classname to be created. + * @param loader the classloader to use + * @throws BuildException This is the fit that is thrown if className + * isn't an instance of JavahAdapter. + */ + private static JavahAdapter resolveClassName(String className, + ClassLoader loader) + throws BuildException { + return (JavahAdapter) ClasspathUtils.newInstance(className, + loader != null ? loader : + JavahAdapterFactory.class.getClassLoader(), JavahAdapter.class); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Kaffeh.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Kaffeh.java new file mode 100644 index 00000000..d37f7717 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Kaffeh.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.optional.javah; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.Execute; +import org.apache.tools.ant.taskdefs.optional.Javah; +import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.JavaEnvUtils; + +/** + * Adapter to the native kaffeh compiler. + * + * @since Ant 1.6.3 + */ +public class Kaffeh implements JavahAdapter { + + /** the name of the javah adapter - kaffeh */ + public static final String IMPLEMENTATION_NAME = "kaffeh"; + + /** + * Performs the actual compilation. + * @param javah the calling javah task. + * @return true if the compilation was successful. + * @throws BuildException if there is an error. + * @since Ant 1.6.3 + */ + public boolean compile(Javah javah) throws BuildException { + Commandline cmd = setupKaffehCommand(javah); + try { + Execute.runCommand(javah, cmd.getCommandline()); + return true; + } catch (BuildException e) { + if (e.getMessage().indexOf("failed with return code") == -1) { + throw e; + } + } + return false; + } + + private Commandline setupKaffehCommand(Javah javah) { + Commandline cmd = new Commandline(); + cmd.setExecutable(JavaEnvUtils.getJdkExecutable("kaffeh")); + + if (javah.getDestdir() != null) { + cmd.createArgument().setValue("-d"); + cmd.createArgument().setFile(javah.getDestdir()); + } + + if (javah.getOutputfile() != null) { + cmd.createArgument().setValue("-o"); + cmd.createArgument().setFile(javah.getOutputfile()); + } + + Path cp = new Path(javah.getProject()); + if (javah.getBootclasspath() != null) { + cp.append(javah.getBootclasspath()); + } + cp = cp.concatSystemBootClasspath("ignore"); + if (javah.getClasspath() != null) { + cp.append(javah.getClasspath()); + } + if (cp.size() > 0) { + cmd.createArgument().setValue("-classpath"); + cmd.createArgument().setPath(cp); + } + + if (!javah.getOld()) { + cmd.createArgument().setValue("-jni"); + } + + cmd.addArguments(javah.getCurrentArgs()); + + javah.logAndAddFiles(cmd); + return cmd; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/SunJavah.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/SunJavah.java new file mode 100644 index 00000000..0b1655ad --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/SunJavah.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs.optional.javah; + +import java.io.File; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.launch.Locator; +import org.apache.tools.ant.taskdefs.ExecuteJava; +import org.apache.tools.ant.taskdefs.optional.Javah; +import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.types.Path; + + +/** + * Adapter to com.sun.tools.javah.oldjavah.Main or com.sun.tools.javah.Main. + * + * @since Ant 1.6.3 + */ +public class SunJavah implements JavahAdapter { + + /** the name of the javah adapter - sun */ + public static final String IMPLEMENTATION_NAME = "sun"; + + /** + * Performs the actual compilation. + * @param javah the calling javah task. + * @return true if the compilation was successful. + * @throws BuildException if there is an error. + * @since Ant 1.6.3 + */ + public boolean compile(Javah javah) throws BuildException { + Commandline cmd = setupJavahCommand(javah); + ExecuteJava ej = new ExecuteJava(); + Class c = null; + try { + try { + // first search for the "old" javah class in 1.4.2 tools.jar + c = Class.forName("com.sun.tools.javah.oldjavah.Main"); + } catch (ClassNotFoundException cnfe) { + // assume older than 1.4.2 tools.jar + c = Class.forName("com.sun.tools.javah.Main"); + } + } catch (ClassNotFoundException ex) { + throw new BuildException( + "Can't load javah", ex, javah.getLocation()); + } + cmd.setExecutable(c.getName()); + ej.setJavaCommand(cmd); + File f = Locator.getClassSource(c); + if (f != null) { + ej.setClasspath(new Path(javah.getProject(), f.getPath())); + } + return ej.fork(javah) == 0; + } + + private Commandline setupJavahCommand(Javah javah) { + Commandline cmd = new Commandline(); + + if (javah.getDestdir() != null) { + cmd.createArgument().setValue("-d"); + cmd.createArgument().setFile(javah.getDestdir()); + } + + if (javah.getOutputfile() != null) { + cmd.createArgument().setValue("-o"); + cmd.createArgument().setFile(javah.getOutputfile()); + } + + if (javah.getClasspath() != null) { + cmd.createArgument().setValue("-classpath"); + cmd.createArgument().setPath(javah.getClasspath()); + } + + if (javah.getVerbose()) { + cmd.createArgument().setValue("-verbose"); + } + if (javah.getOld()) { + cmd.createArgument().setValue("-old"); + } + if (javah.getForce()) { + cmd.createArgument().setValue("-force"); + } + if (javah.getStubs() && !javah.getOld()) { + throw new BuildException( + "stubs only available in old mode.", javah.getLocation()); + } + + if (javah.getStubs()) { + cmd.createArgument().setValue("-stubs"); + } + Path bcp = new Path(javah.getProject()); + if (javah.getBootclasspath() != null) { + bcp.append(javah.getBootclasspath()); + } + bcp = bcp.concatSystemBootClasspath("ignore"); + if (bcp.size() > 0) { + cmd.createArgument().setValue("-bootclasspath"); + cmd.createArgument().setPath(bcp); + } + + cmd.addArguments(javah.getCurrentArgs()); + + javah.logAndAddFiles(cmd); + return cmd; + } + +} |