bodewig 2003/05/13 00:22:02
Modified: . WHATSNEW docs/manual/OptionalTasks rpm.html src/main/org/apache/tools/ant/taskdefs/optional Rpm.java Log: Make <rpm> deal with RedHat 8+'s rpmbuild command. PR: 14650 Submitted by: Ville Skytta <ville dot skytta at iki dot fi> Revision Changes Path 1.415 +3 -0 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.414 retrieving revision 1.415 diff -u -r1.414 -r1.415 --- WHATSNEW 12 May 2003 14:00:08 -0000 1.414 +++ WHATSNEW 13 May 2003 07:22:02 -0000 1.415 @@ -313,6 +313,9 @@ add new-line characters at the end of files that get concatenated but don't end in newlines. Bugzilla Report 12511. +* <rpm> will detect the rpmbuild executable of RedHat 8.0 and newer + and use that if it is on your PATH. Bugzilla Report 14650. + Changes from Ant 1.5.2 to Ant 1.5.3 =================================== 1.6 +13 -3 ant/docs/manual/OptionalTasks/rpm.html Index: rpm.html =================================================================== RCS file: /home/cvs/ant/docs/manual/OptionalTasks/rpm.html,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- rpm.html 9 Jul 2002 21:05:52 -0000 1.5 +++ rpm.html 13 May 2003 07:22:02 -0000 1.6 @@ -23,7 +23,7 @@ </tr> <tr> <td valign="top">specFile</td> - <td valign="top">The name of the spec File to be used.</td> + <td valign="top">The name of the spec file to be used.</td> <td valign="top" align="center">Yes</td> </tr> <tr> @@ -52,7 +52,17 @@ to remove the sources after the build. See the the <tt>--rmsource</tt> option of rpmbuild.</td> <td align="center" valign="top">No</td> - </tr> <tr> + </tr> + <tr> + <td valign="top">rpmBuildCommand</td> + <td valign="top">The executable to use for building the RPM. + Defaults to <code>rpmbuild</code> if it can be found or + <code>rpm</code> otherwise. Set this if you don't have either on + your PATH or want to use a different executable. <em>Since Ant + 1.6</em>.</td> + <td valign="top" align="center">No</td> + </tr> + <tr> <td valign="top">command</td> <td valign="top">very similar idea to the cvs task. the default is "-bb"</td> <td align="center" valign="top">No</td> @@ -65,7 +75,7 @@ </table> <hr> -<p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights +<p align="center">Copyright © 2001-2003 Apache Software Foundation. All rights Reserved.</p> </body> 1.14 +62 -4 ant/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java Index: Rpm.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- Rpm.java 10 Feb 2003 14:13:45 -0000 1.13 +++ Rpm.java 13 May 2003 07:22:02 -0000 1.14 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001-2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,6 +59,8 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; +import java.util.Enumeration; +import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; @@ -67,11 +69,14 @@ import org.apache.tools.ant.taskdefs.LogOutputStream; import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.PumpStreamHandler; +import org.apache.tools.ant.taskdefs.condition.Os; import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.types.Path; /** * Invokes the rpm tool to build a Linux installation file. - * @author [EMAIL PROTECTED] + * + * @author [EMAIL PROTECTED] */ public class Rpm extends Task { @@ -91,6 +96,12 @@ private String command = "-bb"; /** + * The executable to use for building the packages. + * @since Ant 1.6 + */ + private String rpmBuildCommand = null; + + /** * clean BUILD directory */ private boolean cleanBuildDir = false; @@ -119,7 +130,9 @@ Commandline toExecute = new Commandline(); - toExecute.setExecutable("rpm"); + toExecute.setExecutable(rpmBuildCommand == null + ? guessRpmBuildCommand() + : rpmBuildCommand); if (topDir != null) { toExecute.createArgument().setValue("--define"); toExecute.createArgument().setValue("_topdir" + topDir); @@ -206,7 +219,7 @@ } /** - * What command to issue to the rpm tool; optional. + * What command to issue to the rpm build tool; optional. * The default is "-bb" */ public void setCommand(String c) { @@ -259,5 +272,50 @@ */ public void setError(File error) { this.error = error; + } + + /** + * The executable to run when building; optional. + * The default is <code>rpmbuild</code>. + * + * @since Ant 1.6 + * @param c the rpm build executable + */ + public void setRpmBuildCommand(String c) { + this.rpmBuildCommand = c; + } + + /** + * Checks whether <code>rpmbuild</code> is on the PATH and returns + * the absolute path to it - falls back to <code>rpm</code> + * otherwise. + * + * @since 1.6 + */ + protected String guessRpmBuildCommand() { + Vector env = Execute.getProcEnvironment(); + String path = null; + for (Enumeration enum = env.elements(); enum.hasMoreElements();) { + String var = (String) enum.nextElement(); + if (var.startsWith("PATH=") || var.startsWith("Path=")) { + path = var.substring(6 /* "PATH=".length() + 1 */); + break; + } + } + + if (path != null) { + Path p = new Path(getProject(), path); + String[] pElements = p.list(); + for (int i = 0; i < pElements.length; i++) { + File f = new File(pElements[i], + "rpmbuild" + + (Os.isFamily("dos") ? ".exe" : "")); + if (f.canRead()) { + return f.getAbsolutePath(); + } + } + } + + return "rpm"; } }