You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2003/02/10 11:06:43 UTC

DO NOT REPLY [Bug 16924] New: - and do not work

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16924>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=16924

<apply> and <exec> do not work

           Summary: <apply> and <exec> do not work
           Product: Ant
           Version: 1.5.1
          Platform: PC
        OS/Version: OS/2
            Status: NEW
          Severity: Major
          Priority: Other
         Component: Core tasks
        AssignedTo: ant-dev@jakarta.apache.org
        ReportedBy: wagner@cesnet.cz


Tasks <apply> and <exec> do not work in OS/2. The reason is that the "cd"
command does not recognize the "/d" switch an the working directory must be
changed in two steps, first the drive and second the directory. OS/2 does not
allow to use netbios paths in form \\computer\source\some\path, therefore I do
not check it. the problem is in main.org.apache.tools.ant.taskdefs.Execute, my
patch (verified with Revision 1.43.2.5) is below:

--- Execute.java.orig	Wed Oct  2 11:09:02 2002
+++ Execute.java	Thu Feb  6 12:05:10 2003
@@ -714,14 +714,26 @@
 
             // Use cmd.exe to change to the specified directory before running
             // the command
-            final int preCmdLength = 6;
+            int preCmdLength;
+            if (Os.isFamily("os/2")) preCmdLength = 7;
+            else preCmdLength = 6;
             String[] newcmd = new String[cmd.length + preCmdLength];
             newcmd[0] = "cmd";
             newcmd[1] = "/c";
-            newcmd[2] = "cd";
-            newcmd[3] = "/d";
-            newcmd[4] = commandDir.getAbsolutePath();
-            newcmd[5] = "&&";
+            if (preCmdLength == 6) {   // Windows
+                newcmd[2] = "cd";
+                newcmd[3] = "/d";
+                newcmd[4] = commandDir.getAbsolutePath();
+                newcmd[5] = "&&";
+            }
+            else {   // OS/2 does not have /d switch in cd
+                final String cmdDir = commandDir.getAbsolutePath();
+                newcmd[2] = cmdDir.substring(0, 2);
+                newcmd[3] = "&&";
+                newcmd[4] = "cd";
+                newcmd[5] = cmdDir.substring(2);
+                newcmd[6] = "&&";
+            }
             System.arraycopy(cmd, 0, newcmd, preCmdLength, cmd.length);
 
             return exec(project, newcmd, env);