From e67a40fbb339967749e3c2f6e20d83cccbb22c58 Mon Sep 17 00:00:00 2001
From: Stefan Bodewig
Date: Fri, 1 Aug 2003 10:08:12 +0000
Subject: [PATCH] Revert part of the commit that made tasks use
Execute#isFailure.
On OpenVMS the Java VM will exit with a return code of 0 on success,
even though this is going to signal a failure for the OS. All tasks
that spawn new VMs have now been reverted to explicitly check for
retCode != 0 instead of Execite.isFailure(retCode).
We could as well introduce Execute#isJavaFailure or something like
this in case future VM's on OpenVMS will start to do the right thing.
git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275005 13f79535-47bb-0310-9956-ffa450edef68
---
docs/manual/CoreTasks/exec.html | 21 +++++++++++++------
.../apache/tools/ant/taskdefs/Execute.java | 9 ++++++++
.../org/apache/tools/ant/taskdefs/Java.java | 2 +-
.../apache/tools/ant/taskdefs/Javadoc.java | 2 +-
.../tools/ant/taskdefs/optional/ANTLR.java | 2 +-
.../ant/taskdefs/optional/ccm/CCMCheck.java | 2 +-
.../ant/taskdefs/optional/javacc/JJDoc.java | 2 +-
.../ant/taskdefs/optional/javacc/JJTree.java | 2 +-
.../metamata/AbstractMetamataTask.java | 2 +-
.../taskdefs/optional/metamata/MParse.java | 2 +-
10 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/docs/manual/CoreTasks/exec.html b/docs/manual/CoreTasks/exec.html
index 2cb5d4aa8..b8bf488dc 100644
--- a/docs/manual/CoreTasks/exec.html
+++ b/docs/manual/CoreTasks/exec.html
@@ -20,13 +20,22 @@ Windows executable and is not aware of Cygwin conventions.
OpenVMS Users
-The command specified using executable
and <arg>
-elements is executed exactly as specified inside a temporary DCL script. This means
-that paths have to be written in VMS style. It is also required that the logical
-JAVA$FORK_SUPPORT_CHDIR
is set to TRUE
(see the JDK Release
-Notes).
-
+
+The command specified using executable
and
+<arg>
elements is executed exactly as specified
+inside a temporary DCL script. This means that paths have to be
+written in VMS style. It is also required that the logical
+JAVA$FORK_SUPPORT_CHDIR
is set to TRUE
(see
+the JDK Release Notes).
+Please note that the Java VM provided by HP doesn't follow OpenVMS'
+conventions of exit codes. If you run a Java VM with this task, the
+task may falsely claim that an error occured (or silently ignore an
+error). Don't use this task to run JAVA.EXE
, use a
+<java>
task with the fork
attribute
+set ti true
instead as this task will follow the VM's
+interpretation of exit codes.
+
Parameters
diff --git a/src/main/org/apache/tools/ant/taskdefs/Execute.java b/src/main/org/apache/tools/ant/taskdefs/Execute.java
index 9e76abe03..045e5d212 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Execute.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Execute.java
@@ -577,6 +577,15 @@ public class Execute {
/**
* Checks whether exitValue
signals a failure on the current
* system (OS specific).
+ *
+ * Note that this method relies on the conventions of
+ * the OS, it will return false results if the application you are
+ * running doesn't follow these conventions. One notable
+ * exception is the Java VM provided by HP for OpenVMS - it will
+ * return 0 if successful (like on any other platform), but this
+ * signals a failure on OpenVMS. So if you execute a new Java VM
+ * on OpenVMS, you cannot trust this method.
+ *
* @param exitValue the exit value (return code) to be checked
* @return true
if exitValue
signals a failure
*/
diff --git a/src/main/org/apache/tools/ant/taskdefs/Java.java b/src/main/org/apache/tools/ant/taskdefs/Java.java
index 431255ba2..e42495d2f 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Java.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Java.java
@@ -109,7 +109,7 @@ public class Java extends Task {
int err = -1;
try {
err = executeJava();
- if (fork && Execute.isFailure(err)) {
+ if (fork && err != 0) {
if (failOnError) {
throw new BuildException("Java returned: " + err, getLocation());
} else {
diff --git a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
index 58004819c..314f51d70 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Javadoc.java
@@ -1984,7 +1984,7 @@ public class Javadoc extends Task {
try {
exe.setCommandline(toExecute.getCommandline());
int ret = exe.execute();
- if (Execute.isFailure(ret) && failOnError) {
+ if (ret != 0 && failOnError) {
throw new BuildException("Javadoc returned " + ret, getLocation());
}
} catch (IOException e) {
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java b/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
index 5d7a719b3..b43f9b1c2 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java
@@ -318,7 +318,7 @@ public class ANTLR extends Task {
log(commandline.describeCommand(), Project.MSG_VERBOSE);
int err = run(commandline.getCommandline());
- if (Execute.isFailure(err)) {
+ if (err != 0) {
throw new BuildException("ANTLR returned: " + err, getLocation());
} else {
String output = bos.toString();
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java
index b5b9b53d8..4dbc9ba94 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java
@@ -198,7 +198,7 @@ public class CCMCheck extends Continuus {
checkOptions(commandLine);
int result = run(commandLine);
- if (Execute.isFailure(0)) {
+ if (Execute.isFailure(result)) {
String msg = "Failed executing: " + commandLine.toString();
throw new BuildException(msg, getLocation());
}
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java
index 07aa534fe..3260bfd99 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java
@@ -194,7 +194,7 @@ public class JJDoc extends Task {
process.setCommandline(cmdl.getCommandline());
try {
- if (Execute.isFailure(process.execute())) {
+ if (process.execute() != 0) {
throw new BuildException("JJDoc failed.");
}
} catch (IOException e) {
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
index fa8002baa..9b1377973 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java
@@ -290,7 +290,7 @@ public class JJTree extends Task {
process.setCommandline(cmdl.getCommandline());
try {
- if (Execute.isFailure(process.execute())) {
+ if (process.execute() != 0) {
throw new BuildException("JJTree failed.");
}
} catch (IOException e) {
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
index 2399f4535..88a238fe3 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/AbstractMetamataTask.java
@@ -246,7 +246,7 @@ public abstract class AbstractMetamataTask extends Task {
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline());
try {
- if (Execute.isFailure(process.execute())) {
+ if (process.execute() != 0) {
throw new BuildException("Metamata task failed.");
}
} catch (IOException e) {
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
index 3627bc33c..e3027d6e8 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/metamata/MParse.java
@@ -183,7 +183,7 @@ public class MParse extends AbstractMetamataTask {
log(cmdl.describeCommand(), Project.MSG_VERBOSE);
process.setCommandline(cmdl.getCommandline());
try {
- if (Execute.isFailure(process.execute())) {
+ if (process.execute() != 0) {
throw new BuildException("Metamata task failed.");
}
} catch (IOException e) {