#!/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
	        
                PUSHDIR=$(pwd)
		cd "$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
		cd "$PUSHDIR" > /dev/null

		# Set the times of the directories.
		touch --date="$DATE" $(find "$JARDIR" -type d)

		# make the jar
                PUSHDIR=$(pwd)
		cd "$JARDIR" > /dev/null

		if [ -n "$(find -type f)" ]; then
			find -type f -print | LC_ALL=C sort | /usr/bin/zip -q -X -9 "$j" -@
		else
			# Put the empty jar back
			touch "$j"
		fi
		cd "$PUSHDIR" > /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
