aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java364
1 files changed, 364 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
new file mode 100644
index 00000000..b395a16c
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java
@@ -0,0 +1,364 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.taskdefs.optional;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.Map;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.taskdefs.Execute;
+import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
+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;
+import org.apache.tools.ant.util.FileUtils;
+
+/**
+ * Invokes the rpm tool to build a Linux installation file.
+ *
+ */
+public class Rpm extends Task {
+
+ private static final String PATH1 = "PATH";
+ private static final String PATH2 = "Path";
+ private static final String PATH3 = "path";
+
+ /**
+ * the spec file
+ */
+ private String specFile;
+
+ /**
+ * the rpm top dir
+ */
+ private File topDir;
+
+ /**
+ * the rpm command to use
+ */
+ 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;
+
+ /**
+ * remove spec file
+ */
+ private boolean removeSpec = false;
+
+ /**
+ * remove sources
+ */
+ private boolean removeSource = false;
+
+ /**
+ * the file to direct standard output from the command
+ */
+ private File output;
+
+ /**
+ * the file to direct standard error from the command
+ */
+ private File error;
+
+ /**
+ * Halt on error return value from rpm build.
+ */
+ private boolean failOnError = false;
+
+ /**
+ * Don't show output of RPM build command on console. This does not affect
+ * the printing of output and error messages to files.
+ */
+ private boolean quiet = false;
+
+ /**
+ * Execute the task
+ *
+ * @throws BuildException is there is a problem in the task execution.
+ */
+ public void execute() throws BuildException {
+
+ 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);
+ }
+ log(msg, Project.MSG_ERR);
+ }
+ } catch (IOException e) {
+ throw new BuildException(e, getLocation());
+ } finally {
+ FileUtils.close(outputstream);
+ FileUtils.close(errorstream);
+ }
+ }
+
+ /**
+ * The directory which will have the expected
+ * subdirectories, SPECS, SOURCES, BUILD, SRPMS ; optional.
+ * If this isn't specified,
+ * the <tt>baseDir</tt> value is used
+ *
+ * @param td the directory containing the normal RPM directories.
+ */
+ public void setTopDir(File td) {
+ this.topDir = td;
+ }
+
+ /**
+ * What command to issue to the rpm build tool; optional.
+ * The default is "-bb"
+ * @param c the command to use.
+ */
+ public void setCommand(String c) {
+ this.command = c;
+ }
+
+ /**
+ * The name of the spec File to use; required.
+ * @param sf the spec file name to use.
+ */
+ public void setSpecFile(String sf) {
+ if ((sf == null) || (sf.trim().length() == 0)) {
+ throw new BuildException("You must specify a spec file", getLocation());
+ }
+ this.specFile = sf;
+ }
+
+ /**
+ * Flag (optional, default=false) to remove
+ * the generated files in the BUILD directory
+ * @param cbd a <code>boolean</code> value.
+ */
+ public void setCleanBuildDir(boolean cbd) {
+ cleanBuildDir = cbd;
+ }
+
+ /**
+ * Flag (optional, default=false) to remove the spec file from SPECS
+ * @param rs a <code>boolean</code> value.
+ */
+ public void setRemoveSpec(boolean rs) {
+ removeSpec = rs;
+ }
+
+ /**
+ * Flag (optional, default=false)
+ * to remove the sources after the build.
+ * See the <tt>--rmsource</tt> option of rpmbuild.
+ * @param rs a <code>boolean</code> value.
+ */
+ public void setRemoveSource(boolean rs) {
+ removeSource = rs;
+ }
+
+ /**
+ * Optional file to save stdout to.
+ * @param output the file to save stdout to.
+ */
+ public void setOutput(File output) {
+ this.output = output;
+ }
+
+ /**
+ * Optional file to save stderr to
+ * @param error the file to save error output to.
+ */
+ 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;
+ }
+
+ /**
+ * If <code>true</code>, stop the build process when the rpmbuild command
+ * exits with an error status.
+ * @param value <code>true</code> if it should halt, otherwise
+ * <code>false</code>. The default is <code>false</code>.
+ *
+ * @since Ant 1.6.3
+ */
+ public void setFailOnError(boolean value) {
+ failOnError = value;
+ }
+
+ /**
+ * If true, output from the RPM build command will only be logged to DEBUG.
+ * @param value <code>false</code> if output should be logged, otherwise
+ * <code>true</code>. The default is <code>false</code>.
+ *
+ * @since Ant 1.6.3
+ */
+ public void setQuiet(boolean value) {
+ quiet = value;
+ }
+
+ /**
+ * Checks whether <code>rpmbuild</code> is on the PATH and returns
+ * the absolute path to it - falls back to <code>rpm</code>
+ * otherwise.
+ *
+ * @return the command used to build RPM's
+ *
+ * @since 1.6
+ */
+ protected String guessRpmBuildCommand() {
+ Map/*<String, String>*/ env = Execute.getEnvironmentVariables();
+ String path = (String) env.get(PATH1);
+ if (path == null) {
+ path = (String) env.get(PATH2);
+ if (path == null) {
+ path = (String) env.get(PATH3);
+ }
+ }
+
+ 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";
+ }
+
+ /**
+ * Get the execute object.
+ * @param toExecute the command line to use.
+ * @param streamhandler the stream handler to use.
+ * @return the execute object.
+ * @since Ant 1.6.3
+ */
+ protected Execute getExecute(Commandline toExecute,
+ ExecuteStreamHandler streamhandler) {
+ Execute exe = new Execute(streamhandler, null);
+
+ exe.setAntRun(getProject());
+ if (topDir == null) {
+ topDir = getProject().getBaseDir();
+ }
+ exe.setWorkingDirectory(topDir);
+
+ exe.setCommandline(toExecute.getCommandline());
+ return exe;
+ }
+}