From e053cecd416d037659dd8f933e9f1a3a418e0fa6 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 19 Jun 2007 15:13:23 +0000 Subject: [PATCH] add script that does repacking of jar files to avoid multilib conflicts. originally written by Ben Konrath --- brp-java-repack-jars | 95 ++++++++++++++++++++++++++++++++++++++++++++ macros | 1 + 2 files changed, 96 insertions(+) create mode 100644 brp-java-repack-jars diff --git a/brp-java-repack-jars b/brp-java-repack-jars new file mode 100644 index 0000000..e205088 --- /dev/null +++ b/brp-java-repack-jars @@ -0,0 +1,95 @@ +#!/bin/sh + +# If using normal root, avoid changing anything. +if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then + exit 0 +fi + +# If zip is not installed, we can't repack the jars. +if [ ! -x /usr/bin/zip ]; then + exit 0 +fi +if [ ! -x /usr/bin/unzip ]; then + exit 0 +fi + +JARS=`find $RPM_BUILD_ROOT -type f -name \*.jar` +if [ ! -z "$JARS" ]; then + + # make $RPM_BUILD_ROOT/tmp if it doesn't exist + rmtmp=0 + if [ ! -x "$RPM_BUILD_ROOT/tmp" ]; then + mkdir -p $RPM_BUILD_ROOT/tmp + rmtmp=1 + fi + + # unpack every jar, set the date of the files and directories and + # repack the jar + for j in $JARS ; do + JARNAME=`basename $j` + TMPDIR=`mktemp -d -p $RPM_BUILD_ROOT/tmp $JARNAME.tmpdir.XXXXXXXXXX` || exit 1 + JARDIR=`mktemp -d -p $RPM_BUILD_ROOT/tmp $JARNAME.jardir.XXXXXXXXXX` || exit 1 + TIMEREF=`mktemp -p $RPM_BUILD_ROOT/tmp $JARNAME.timeref.XXXXXXXXXX` || exit 1 + + pushd $TMPDIR > /dev/null + /usr/bin/unzip -qq -o $j + rm -f $j + + # Create the directories first. + for d in `find -type d | LC_ALL=C sort`; do + mkdir -p $JARDIR/$d + done + + # Get the modtime from the newest ChangeLog. If the project + # doesn't have a ChangeLog, Jan 1, 1970 will be used. + DATE="1970-01-01 UTC" + + if [ -z $_PACKAGE_BUILD_DIR ]; then + _PACKAGE_BUILD_DIR=$RPM_BUILD_DIR/$RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION + fi + + if [ -d $_PACKAGE_BUILD_DIR ]; then + CHANGELOGS=`find $_PACKAGE_BUILD_DIR -type f -name ChangeLog` + if [ ! -z "$CHANGELOGS" ]; then + for c in $CHANGELOGS; do + TMPDATE=`stat -c %y $c | cut -d " " -f 1-2` + if [ `date --date="$TMPDATE" +%s` -gt `date --date="$DATE" +%s` ]; then + DATE="$TMPDATE" + fi + done + fi + fi + + # move the contents over to the a new directory in order and set + # the times. + for f in `find -type f | LC_ALL=C sort`; do + cp $f $JARDIR/$f + touch --date="$DATE" $JARDIR/$f + done + popd > /dev/null + + # Set the times of the directories. + touch --date="$DATE" `find $JARDIR -type d` + + # make the jar + pushd $JARDIR > /dev/null + + if [ -n "`find -not -name '.'`" ]; then + find * -not -name '.' | LC_ALL=C sort | /usr/bin/zip -q -X -9 $j -@ + else + # Put the empty jar back + touch $j + fi + popd > /dev/null + + # Cleanup. + rm -rf $TMPDIR + rm -rf $JARDIR + rm -f $TIMEREF + done + + # remove $RPM_BUILD_ROOT/tmp if we created it + if [ $rmtmp -eq 1 ]; then + rm -rf $RPM_BUILD_ROOT/tmp + fi +fi diff --git a/macros b/macros index 4cea385..a717ae1 100644 --- a/macros +++ b/macros @@ -86,6 +86,7 @@ /usr/lib/rpm/redhat/brp-strip-static-archive %{__strip} \ /usr/lib/rpm/redhat/brp-strip-comment-note %{__strip} %{__objdump} \ /usr/lib/rpm/brp-python-bytecompile \ + /usr/lib/rpm/redhat/brp-java-repack-jars \ %{nil} # /usr/lib/rpm/redhat/brp-implant-ident-static