bodewig 2003/03/27 05:14:31
Modified: . WHATSNEW docs/manual/CoreTasks apply.html src/main/org/apache/tools/ant/taskdefs ExecuteOn.java Log: Add a forwardslash attribute to <apply> Submitted by: Zdenek Wagner <wagner at cesnet dot cz> Revision Changes Path 1.374 +5 -0 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.373 retrieving revision 1.374 diff -u -r1.373 -r1.374 --- WHATSNEW 27 Mar 2003 10:02:02 -0000 1.373 +++ WHATSNEW 27 Mar 2003 13:14:31 -0000 1.374 @@ -179,6 +179,11 @@ * New task <sync> that synchronizes two directory trees. +* <apply> has new forwardslash attribute that can force filenames to + use forward slashes (/) as file separators even on platforms with a + different separator. This is useful if you want to run certain + ported Unix tools. + Changes from Ant 1.5.2 to Ant 1.5.3 =================================== 1.19 +9 -1 ant/docs/manual/CoreTasks/apply.html Index: apply.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/apply.html,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- apply.html 26 Sep 2002 13:55:28 -0000 1.18 +++ apply.html 27 Mar 2003 13:14:31 -0000 1.19 @@ -58,6 +58,14 @@ <td align="center" valign="top">No, default is <i>false</i></td> </tr> <tr> + <td valign="top">forwardslash</td> + <td valign="top">whether the absolute file names should be passed + with forward slashes even if the operating system requires other + file separator. The option is ignored if the system file separator + is a forward slash.</td> + <td align="center" valign="top">No, default is <i>false</i></td> + </tr> + <tr> <td valign="top">os</td> <td valign="top">list of Operating Systems on which the command may be executed.</td> @@ -220,7 +228,7 @@ <code>.o</code>, replacing TARGETFILE with the absolute filename of the <code>.o</code> and SOURCEFILE with the absolute name of the <code>.c</code> file.</p> -<hr><p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights +<hr><p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights Reserved.</p> </body> 1.38 +18 -1 ant/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java Index: ExecuteOn.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- ExecuteOn.java 7 Mar 2003 11:23:01 -0000 1.37 +++ ExecuteOn.java 27 Mar 2003 13:14:31 -0000 1.38 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2000-2002 The Apache Software Foundation. All rights + * Copyright (c) 2000-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -83,6 +83,7 @@ protected Vector filesets = new Vector(); private boolean relative = false; private boolean parallel = false; + private boolean forwardSlash = false; protected String type = "file"; protected Commandline.Marker srcFilePos = null; private boolean skipEmpty = false; @@ -145,6 +146,14 @@ } /** + * The source and target file names on Windows and OS/2 must use + * forward slash as file separator. + */ + public void setForwardslash(boolean forwardSlash) { + this.forwardSlash = forwardSlash; + } + + /** * Marker that indicates where the name of the source file should * be put on the command line. */ @@ -284,6 +293,7 @@ * @param baseDir filenames are relative to this dir */ protected String[] getCommandline(String[] srcFiles, File[] baseDirs) { + final char fileSeparator = File.separatorChar; Vector targets = new Vector(); if (targetFilePos != null) { Hashtable addedFiles = new Hashtable(); @@ -297,6 +307,9 @@ } else { name = subTargets[j]; } + if (forwardSlash && fileSeparator != '/') { + name = name.replace(fileSeparator, '/'); + } if (!addedFiles.contains(name)) { targets.addElement(name); addedFiles.put(name, name); @@ -379,6 +392,10 @@ (new File(baseDirs[i], srcFiles[i])).getAbsolutePath(); } else { result[srcIndex + i] = srcFiles[i]; + } + if (forwardSlash && fileSeparator != '/') { + result[srcIndex + i] = + result[srcIndex + i].replace(fileSeparator, '/'); } } return result;