From 1f0ad116aafc9db7d4a7edb174b65ac7fc4fe6ba Mon Sep 17 00:00:00 2001
From: lutoff <lutoff@localhost>
Date: Mon, 14 Jan 2008 15:11:07 +0000
Subject: [PATCH] Fix for issue #2640 (Provide RPM delivery)
---
opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateRpm.java | 251 +++++++++++++++++++++++++++++++++++++++++
opendj-sdk/opends/build.xml | 62 ++++++++++
2 files changed, 313 insertions(+), 0 deletions(-)
diff --git a/opendj-sdk/opends/build.xml b/opendj-sdk/opends/build.xml
index 6ebdaf8..b09a021 100644
--- a/opendj-sdk/opends/build.xml
+++ b/opendj-sdk/opends/build.xml
@@ -945,6 +945,7 @@
filemode="755" dirmode="755" />
</zip>
<property name="package.built" value="true"/>
+
<!-- print a time stamp in Unix 'date' format -->
<tstamp>
<format property="package.built.ts" pattern="EEE MMM dd HH:mm:ss zzz yyyy" />
@@ -952,6 +953,67 @@
<echo message="Package Built: ${package.built.ts}"/>
</target>
+ <!-- Package the Directory Server for the RPM distribution. -->
+ <target name="package-RPM"
+ description="Package the Directory Server for RPM distribution.">
+ <taskdef name="getversionnumber"
+ classname="org.opends.build.tools.CreateVersionString">
+ <classpath>
+ <fileset dir="${build.dir}/build-tools">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </taskdef>
+
+ <getversionnumber property="VERSION_NUMBER_STRING" />
+
+ <property name="prefix" value="/opt/opends"/>
+ <property name="release" value="0"/>
+ <typedef name="genrpm"
+ classname="org.opends.build.tools.GenerateRpm">
+ <classpath>
+ <fileset dir="${build.dir}/build-tools">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </typedef>
+
+ <mkdir dir="${build.dir}/rpm/noarch" />
+ <mkdir dir="${build.dir}/rpm/i486" />
+ <mkdir dir="${build.dir}/rpm/i586" />
+ <mkdir dir="${build.dir}/rpm/i686" />
+ <mkdir dir="${build.dir}/rpm/BUILD" />
+ <mkdir dir="${build.dir}/rpm/RPMS" />
+ <mkdir dir="${build.dir}/rpm/SOURCES/${prefix}" />
+ <mkdir dir="${build.dir}/rpm/i386" />
+ <mkdir dir="${build.dir}/rpm/SPECS" />
+ <mkdir dir="${build.dir}/rpm/SRPMS" />
+
+ <genrpm
+ topDir="${build.dir}/rpm"
+ prefix="${prefix}"
+ sourceDirName="${package.dir}/${SHORT_NAME}-${VERSION_NUMBER_STRING}"
+ specFileName="${build.dir}/rpm/SPECS/specFile"
+ version="${VERSION_NUMBER_STRING}"
+ release="${release}"
+ overwrite="true">
+ </genrpm>
+
+ <rpm
+ specfile="specFile"
+ topdir="${build.dir}/rpm"
+ quiet="true"
+ />
+
+ <copy todir="${package.dir}">
+ <fileset dir="${build.dir}/rpm/RPMS/noarch">
+ <include name="*.rpm" />
+ </fileset>
+ </copy>
+
+ <delete dir="${build.dir}/rpm"/>
+ </target>
+
<!-- Prepare the Directory Server DSML library. -->
diff --git a/opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateRpm.java b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateRpm.java
new file mode 100644
index 0000000..c33c7da
--- /dev/null
+++ b/opendj-sdk/opends/src/build-tools/org/opends/build/tools/GenerateRpm.java
@@ -0,0 +1,251 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007-2008 Sun Microsystems, Inc.
+ */
+package org.opends.build.tools;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.BuildException;
+
+import static org.opends.build.tools.Utilities.*;
+
+import java.io.File;
+import java.io.PrintWriter;
+
+/**
+ * Generates an RPM spec file.
+ */
+public class GenerateRpm extends Task {
+
+ private File topDir;
+ private String topDirAbsolutePath;
+ private String sourceDirName;
+ private File destFile;
+ private String prefix;
+ private String version;
+ private String release;
+ private boolean overwrite;
+ private StringBuilder sb;
+
+ private final String filePrefix="%{_prefix}";
+ private final String dirPrefix="%dir %{_prefix}";
+
+
+ /**
+ * Sets the top directory for the rpm build.
+ * @param topDir File representing top directory for rpm build directory
+ */
+ public void setTopDir(File topDir) {
+ this.topDir = topDir;
+ topDirAbsolutePath = topDir.getAbsolutePath();
+ }
+
+ /**
+ * Sets the prefix for the RPM.
+ * @param prefix Used for package relocation
+ */
+ public void setPrefix(String prefix) {
+ this.prefix = prefix;
+ }
+
+ /**
+ * Sets the name of the source directory.
+ * @param sourceDirName name of the source directory.
+ */
+ public void setSourceDirName(String sourceDirName) {
+ this.sourceDirName = sourceDirName;
+ }
+
+
+ /**
+ * Sets the RPM spec file that will be generated.
+ * @param dest The spec file
+ *
+ */
+ public void setSpecFileName(File dest) {
+ this.destFile = dest;
+ }
+
+ /**
+ * Sets the version number.
+ * @param version The version number
+ *
+ */
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ /**
+ * Sets the release number.
+ * @param release The release number
+ *
+ */
+ public void setRelease(String release) {
+ this.release = release;
+ }
+
+ /**
+ * Indicates when true that an existing destination
+ * file will be overwritten.
+ * @param o boolean where true means overwrite
+ */
+ public void setOverwrite(boolean o) {
+ this.overwrite = o;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void execute() throws BuildException {
+
+ try {
+ if (!topDir.exists()) {
+ throw new BuildException("directory " + topDir.getName()
+ + " does not exist");
+ }
+ if (!topDir.isDirectory()) {
+ throw new BuildException(topDir.getName() + " is not a directory");
+ }
+
+ if (destFile.exists()) {
+ if (this.overwrite) {
+ destFile.delete();
+ log("Regenerating " + destFile.getName() + " from "
+ + topDir.getName());
+ } else {
+ log(destFile.getName() + " has not been regenerated");
+ }
+ }
+
+ sb = new StringBuilder();
+ File rootDir = new File(sourceDirName);
+ String opendsDir = rootDir.getName();
+
+ // Generate the package information
+ sb.append("Summary : OpenDS Directory Server" + EOL);
+ sb.append("Name : opends" + EOL);
+ sb.append("Version : " + version + EOL);
+ sb.append("Release : " + release + EOL);
+ sb.append("License : CDDL" + EOL);
+ sb.append("Group : Applications/Network" + EOL);
+ sb.append("URL : https://opends.org" + EOL);
+ sb.append( EOL);
+ sb.append("BuildArchitectures : noarch" + EOL);
+ sb.append("BuildRoot : " + topDirAbsolutePath + "/SOURCES"+ EOL);
+ sb.append("Prefix : " + prefix + EOL);
+ sb.append( EOL);
+ sb.append("%define _prefix " + prefix + EOL);
+ sb.append( EOL);
+ sb.append("%Description" + EOL);
+ sb.append("OpenDS Directory Server" + EOL);
+ sb.append( EOL);
+ sb.append("# =========================" + EOL);
+ sb.append("# pre/post installation" + EOL);
+ sb.append("# =========================" + EOL);
+ sb.append("# The order is:" + EOL);
+ sb.append("# 1. %pre new" + EOL);
+ sb.append("# 2. install new" + EOL);
+ sb.append("# 3. %post new" + EOL);
+ sb.append("# 4. %preun old" + EOL);
+ sb.append("# 5. delete old" + EOL);
+ sb.append("# 6. %postun old" + EOL);
+ sb.append("# Note: \"$1 equals \"1\" it means \"fresh install" + EOL);
+ sb.append( EOL);
+ sb.append("# PRE INSTALL" + EOL);
+ sb.append("%pre" + EOL);
+ sb.append("if [ \"$1\" != \"1\" ]; then" + EOL);
+ sb.append("echo \" This version of the OpenDS RPM does not work" + EOL);
+ sb.append("echo \" with the standard RPM upgrade mechanism" + EOL);
+ sb.append("echo \" (rpm -U or rpm -F)." + EOL);
+ sb.append("echo \" To perform an upgrade, use the OpenDS upgrade" + EOL);
+ sb.append("echo \" tool included in the package delivery." + EOL);
+ sb.append("echo \" For more information about the upgrade process"+ EOL);
+ sb.append("echo \" with RPM see https://www.opends.org/wiki//page/OpendsRPM."+ EOL);
+ sb.append("exit 1" + EOL);
+ sb.append("fi" + EOL);
+ sb.append( EOL);
+ sb.append("# POST INSTALL" + EOL);
+ sb.append("%post" + EOL);
+ sb.append( EOL);
+ sb.append("# PRE UNINSTALL" + EOL);
+ sb.append("%preun" + EOL);
+ sb.append("${RPM_INSTALL_PREFIX}/OpenDS-1.0.0/bin/stop-ds" + EOL);
+ sb.append( EOL);
+ sb.append("# POST UNINSTALL" + EOL);
+ sb.append("%postun" + EOL);
+ sb.append("rm -rf ${RPM_INSTALL_PREFIX}/" + opendsDir + EOL);
+ sb.append("rmdir --ignore-fail-on-non-empty ${RPM_INSTALL_PREFIX}" + EOL);
+ sb.append( EOL);
+ sb.append("# =========================" + EOL);
+ sb.append("# Prepare, Build, Install" + EOL);
+ sb.append("# =========================" + EOL);
+ sb.append("%prep" + EOL);
+ sb.append("cd "+ topDirAbsolutePath +"/SOURCES" + prefix +
+ " ; cp -r " + sourceDirName + " ." + EOL);
+ sb.append("%build" + EOL);
+ sb.append("%install" + EOL);
+ sb.append( EOL);
+ sb.append("# =========================" + EOL);
+ sb.append("# FILES LAYOUT" + EOL);
+ sb.append("# =========================" + EOL);
+ sb.append("%files" + EOL);
+ sb.append(dirPrefix + EOL);
+ generatedLevel("", rootDir);
+
+ // flush the spec file.
+ PrintWriter destWriter = new PrintWriter(destFile);
+ destWriter.print(sb.toString());
+ destWriter.close();
+ } catch (Exception e) {
+ // Don't leave a malformed file laying around. Delete
+ // it so it will be forced to be regenerated.
+ if (destFile.exists()) {
+ destFile.deleteOnExit();
+ }
+ e.printStackTrace();
+ throw new BuildException("Error processing " + topDir + ": "
+ + e.getMessage());
+ }
+ }
+
+ private void generatedLevel (String parent, File source )
+ {
+ if (source.isDirectory())
+ {
+ sb.append(dirPrefix + parent + "/" +source.getName());
+ sb.append(EOL);
+ for (File child : source.listFiles())
+ {
+ generatedLevel( parent + "/" +source.getName(), child);
+ }
+ }
+ else
+ {
+ sb.append(filePrefix + parent + "/" +source.getName());
+ sb.append(EOL);
+ }
+ }
+}
--
Gitblit v1.10.0