Fields Summary |
---|
private static final String | PATH1 |
private static final String | PATH2 |
private static final String | PATH3 |
private static final int | PATH_LEN |
private String | specFilethe spec file |
private File | topDirthe rpm top dir |
private String | commandthe rpm command to use |
private String | rpmBuildCommandThe executable to use for building the packages. |
private boolean | cleanBuildDirclean BUILD directory |
private boolean | removeSpecremove spec file |
private boolean | removeSourceremove sources |
private File | outputthe file to direct standard output from the command |
private File | errorthe file to direct standard error from the command |
private boolean | failOnErrorHalt on error return value from rpm build. |
private boolean | quietDon't show output of RPM build command on console. This does not affect
the printing of output and error messages to files. |
Methods Summary |
---|
public void | execute()Execute the task
Commandline toExecute = new Commandline();
toExecute.setExecutable(rpmBuildCommand == null
? guessRpmBuildCommand()
: rpmBuildCommand);
if (topDir != null) {
toExecute.createArgument().setValue("--define");
toExecute.createArgument().setValue("_topdir" + topDir);
}
toExecute.createArgument().setLine(command);
if (cleanBuildDir) {
toExecute.createArgument().setValue("--clean");
}
if (removeSpec) {
toExecute.createArgument().setValue("--rmspec");
}
if (removeSource) {
toExecute.createArgument().setValue("--rmsource");
}
toExecute.createArgument().setValue("SPECS/" + specFile);
ExecuteStreamHandler streamhandler = null;
OutputStream outputstream = null;
OutputStream errorstream = null;
if (error == null && output == null) {
if (!quiet) {
streamhandler = new LogStreamHandler(this, Project.MSG_INFO,
Project.MSG_WARN);
} else {
streamhandler = new LogStreamHandler(this, Project.MSG_DEBUG,
Project.MSG_DEBUG);
}
} else {
if (output != null) {
try {
BufferedOutputStream bos
= new BufferedOutputStream(new FileOutputStream(output));
outputstream = new PrintStream(bos);
} catch (IOException e) {
throw new BuildException(e, getLocation());
}
} else if (!quiet) {
outputstream = new LogOutputStream(this, Project.MSG_INFO);
} else {
outputstream = new LogOutputStream(this, Project.MSG_DEBUG);
}
if (error != null) {
try {
BufferedOutputStream bos
= new BufferedOutputStream(new FileOutputStream(error));
errorstream = new PrintStream(bos);
} catch (IOException e) {
throw new BuildException(e, getLocation());
}
} else if (!quiet) {
errorstream = new LogOutputStream(this, Project.MSG_WARN);
} else {
errorstream = new LogOutputStream(this, Project.MSG_DEBUG);
}
streamhandler = new PumpStreamHandler(outputstream, errorstream);
}
Execute exe = getExecute(toExecute, streamhandler);
try {
log("Building the RPM based on the " + specFile + " file");
int returncode = exe.execute();
if (Execute.isFailure(returncode)) {
String msg = "'" + toExecute.getExecutable()
+ "' failed with exit code " + returncode;
if (failOnError) {
throw new BuildException(msg);
} else {
log(msg, Project.MSG_ERR);
}
}
} catch (IOException e) {
throw new BuildException(e, getLocation());
} finally {
FileUtils.close(outputstream);
FileUtils.close(errorstream);
}
|
protected org.apache.tools.ant.taskdefs.Execute | getExecute(org.apache.tools.ant.types.Commandline toExecute, org.apache.tools.ant.taskdefs.ExecuteStreamHandler streamhandler)Get the execute object.
Execute exe = new Execute(streamhandler, null);
exe.setAntRun(getProject());
if (topDir == null) {
topDir = getProject().getBaseDir();
}
exe.setWorkingDirectory(topDir);
exe.setCommandline(toExecute.getCommandline());
return exe;
|
protected java.lang.String | guessRpmBuildCommand()Checks whether rpmbuild is on the PATH and returns
the absolute path to it - falls back to rpm
otherwise.
Vector env = Execute.getProcEnvironment();
String path = null;
for (Enumeration e = env.elements(); e.hasMoreElements();) {
String var = (String) e.nextElement();
if (var.startsWith(PATH1) || var.startsWith(PATH2) || var.startsWith(PATH3)) {
path = var.substring(PATH_LEN);
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";
|
public void | setCleanBuildDir(boolean cbd)Flag (optional, default=false) to remove
the generated files in the BUILD directory
cleanBuildDir = cbd;
|
public void | setCommand(java.lang.String c)What command to issue to the rpm build tool; optional.
The default is "-bb"
this.command = c;
|
public void | setError(java.io.File error)Optional file to save stderr to
this.error = error;
|
public void | setFailOnError(boolean value)If true , stop the build process when the rpmbuild command
exits with an error status.
failOnError = value;
|
public void | setOutput(java.io.File output)Optional file to save stdout to.
this.output = output;
|
public void | setQuiet(boolean value)If true, output from the RPM build command will only be logged to DEBUG.
quiet = value;
|
public void | setRemoveSource(boolean rs)Flag (optional, default=false)
to remove the sources after the build.
See the --rmsource option of rpmbuild.
removeSource = rs;
|
public void | setRemoveSpec(boolean rs)Flag (optional, default=false) to remove the spec file from SPECS
removeSpec = rs;
|
public void | setRpmBuildCommand(java.lang.String c)The executable to run when building; optional.
The default is rpmbuild .
this.rpmBuildCommand = c;
|
public void | setSpecFile(java.lang.String sf)The name of the spec File to use; required.
if ((sf == null) || (sf.trim().equals(""))) {
throw new BuildException("You must specify a spec file", getLocation());
}
this.specFile = sf;
|
public void | setTopDir(java.io.File td)The directory which will have the expected
subdirectories, SPECS, SOURCES, BUILD, SRPMS ; optional.
If this isn't specified,
the baseDir value is used
this.topDir = td;
|