blob: 5de500986c85f88d97e4eb7bdf105c07d4940a1a (
plain) (
tree)
|
|
#! @BASH@
# This script is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# See the COPYING and AUTHORS files for more details.
if ! [ -r @SCRIPTS@/patchfns ]
then
echo "Cannot read library @SCRIPTS@/patchfns" >&2
exit 1
fi
. @SCRIPTS@/patchfns
cd ${SUBDIR:-.}
usage() {
echo "Usage: ${0##*/} specfile"
exit 1
}
if [ "$1" = -v ]
then
verbose=1
shift
fi
specfile=$1
if [ $# -ne 1 -o ! -f "$specfile" ]
then
usage
fi
if [ "${specfile:0:1}" != / ]
then
specfile="$PWD/$specfile"
fi
sourcedir=${specfile%/*}
tmpdir="$(gen_tempfile -d ${TMPDIR-/var/tmp}/${0##*/})"
mkdir -p $tmpdir || exit 1
trap "rm -rf $tmpdir" EXIT
mkdir -p $tmpdir/build
mkdir -p $tmpdir/bin
# Redirect file descriptors
if [ -n "$verbose" ]
then
exec 3>&1 4>/dev/null
else
exec 3>&1 4>&2 2>/dev/null
fi
# create md5 sums, also for uncompressed files
echo -n "### md5sum: " >&4
shopt -s nullglob
for file in *
do
file=${file##*/}
case "$file" in
ready|bigpack|MD5SUMS|MD5SUMS.meta|*.spec|*.changes)
continue
;;
esac
[ -f "$file" ] || continue
echo -n "." >&4
echo "md5sum < $file" >&2
set -- $(md5sum < "$file")
echo "$1 $file"
case "$(file -b "$file")" in
compress*|gzip*)
echo -n "g" >&4
echo "md5sum < <(gzip -cd $file)" >&2
set -- $(gzip -cd "$file" | md5sum)
echo "$1 $file"
;;
bzip2*)
echo -n "b" >&4
echo "md5sum < <(bzip2 -cd $file)" >&2
set -- $(bzip2 -cd "$file" | md5sum)
echo "$1 $file"
;;
esac
done > $tmpdir/md5sums
echo >&4
shopt -u nullglob
# wrapper script for patch and tar
cat <<-'EOF' > $tmpdir/bin/wrapper
#! @BASH@
# find original data file by md5sum
original_file() {
local file=$1 md5sum
set -- $(md5sum < $file)
md5sum=$1
while read md5sum_ file_
do
if [ $md5sum = $md5sum_ ]
then
echo $file_
return 0
fi
done < $tmpdir/md5sums
# Try harder
if ! [ -e $tmpdir/more-md5sums ]
then
( cd $RPM_BUILD_DIR
find . -type f \
| sed -e 's:^.\/::' \
| xargs md5sum \
) > $tmpdir/more-md5sums
fi
while read md5sum_ file_
do
if [ $md5sum = $md5sum_ ]
then
echo $file_
return 0
fi
done < $tmpdir/more-md5sums
return 1
}
# Extract the -p option from the command line
strip_option() {
while [ $# -ne 0 -a "${1:0:2}" != -p ]
do
shift
done
if [ "${1:0:2}" = -p ]
then
[ "$1" = -p ] && set -- "$1$2"
[ "$1" != -p1 ] && echo $1
fi
}
for file in "$@"; do
if [ -e "${file#-i}" ]; then
inputfile=${file#-i}
break
fi
done
tmpdir=${RPM_BUILD_DIR%/*}
rm -f $tmpdir/data
if [ -z "$inputfile" ]; then
# put data from stdin into tmpfile
cat > $tmpdir/data
fi
unpackfile="$(original_file ${inputfile:-$tmpdir/data})"
if [ -n "$unpackfile" ]
then
dir=${PWD/$RPM_BUILD_DIR}
dir=${dir##/}
case "${0##*/}" in
patch)
echo -n p >&4
echo "${0##*/} ${dir:-.} $unpackfile" \
$(strip_option "$@") >&3
;;
tar)
echo -n t >&4
echo "${0##*/} ${dir:-.} $unpackfile" >&3
;;
esac
fi
PATH=${PATH#*:}
if [ -n "$inputfile" ]; then
${0##*/} "$@"
else
${0##*/} "$@" < $tmpdir/data
fi
EOF
chmod 755 $tmpdir/bin/wrapper
ln -s wrapper $tmpdir/bin/patch
ln -s wrapper $tmpdir/bin/tar
# let rpm do all the dirty specfile stuff ...
echo -n "### rpmbuild: " >&4
export PATH="$tmpdir/bin:$PATH"
rpmbuild --eval "%define _sourcedir $sourcedir" \
--eval "%define _specdir $sourcedir" \
--eval "%define _builddir $tmpdir/build" \
--nodeps \
-bp "$specfile" < /dev/null >&2
status=$?
echo >&4
exit $status
### Local Variables:
### mode: shell-script
### End:
# vim:filetype=sh
|