+ local DEPS
+
+ if [ $# -gt 0 ]; then
+ DEPS="$@"
+ else
+ DEPS=$(cat)
+ fi
+
+ rpm -q --whatprovides $DEPS 2>/dev/null | awk '!/no package provides/ { print }'
+}
+
+fetch_build_requires()
+{
+ if [ "${FETCH_BUILD_REQUIRES}" = "yes" ]; then
+ update_shell_title "fetch build requires"
+ if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ] || [ "$FETCH_BUILD_REQUIRES_RPMSPECSRPM" = "yes" ]; then
+ if [ "$FETCH_BUILD_REQUIRES_RPMGETDEPS" = "yes" ]; then
+ # TODO: Conflicts list doesn't check versions
+ local CNFL=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\-/ { print $3 } ' | _rpm_cnfl_check | xargs)
+ local DEPS=$(rpm-getdeps $BCOND $SPECFILE 2> /dev/null | awk '/^\+/ { print $3 } ' | _rpm_prov_check | xargs)
+ fi
+ if [ "$FETCH_BUILD_REQUIRES_RPMSPECSRPM" = "yes" ]; then
+ local CNFL=$(rpm -q --specsrpm --conflicts $BCOND $SPECFILE | awk '{print $1}' | _rpm_cnfl_check | xargs)
+ local DEPS=$(rpm -q --specsrpm --requires $BCOND $SPECFILE | awk '{print $1}' | _rpm_prov_check | xargs)
+ fi
+
+ if [ -n "$CNFL" ] || [ -n "$DEPS" ]; then
+ echo "fetch BuildRequires: install [$DEPS]; remove [$CNFL]"
+ update_shell_title "poldek: install [$DEPS]; remove [$CNFL]"
+ $SU_SUDO /usr/bin/poldek -q --update || $SU_SUDO /usr/bin/poldek -q --upa
+ fi
+ if [ -n "$CNFL" ]; then
+ update_shell_title "uninstall conflicting packages: $CNFL"
+ echo "Trying to uninstall conflicting packages ($CNFL):"
+ $SU_SUDO /usr/bin/poldek --noask --nofollow -ev $CNFL
+ fi
+
+ while [ "$DEPS" ]; do
+ update_shell_title "install deps: $DEPS"
+ echo "Trying to install dependencies ($DEPS):"
+ local log=.${SPECFILE}_poldek.log
+ $SU_SUDO /usr/bin/poldek --caplookup -uGqQ $DEPS | tee $log
+ failed=$(awk '/^error:/{a=$2; sub(/^error: /, "", a); sub(/:$/, "", a); print a}' $log)
+ rm -f $log
+ local ok
+ if [ -n "$failed" ]; then
+ for package in $failed; do
+ spawn_sub_builder -bb $(depspecname $package) && ok="$ok $package"
+ done
+ DEPS="$ok"
+ else
+ DEPS=""
+ fi
+ done
+ return
+ fi
+
+ echo -ne "\nAll packages installed by fetch_build_requires() are written to:\n"
+ echo -ne "`pwd`/.${SPECFILE}_INSTALLED_PACKAGES\n"
+ echo -ne "\nIf anything fails, you may get rid of them by executing:\n"
+ echo "poldek -e \`cat `pwd`/.${SPECFILE}_INSTALLED_PACKAGES\`\n\n"
+ echo > `pwd`/.${SPECFILE}_INSTALLED_PACKAGES
+ for package_item in `cat $SPECFILE|grep -B100000 ^%changelog|grep -v ^#|grep BuildRequires|grep -v ^-|sed -e "s/^.*BuildRequires://g"|awk '{print $1}'|sed -e s,perl\(,perl-,g -e s,::,-,g -e s,\(.*\),,g -e s,%{,,g -e s,},,g|grep -v OpenGL-devel|sed -e s,sh-utils,coreutils,g -e s,fileutils,coreutils,g -e s,textutils,coreutils,g -e s,kgcc_package,gcc,g -e s,\),,g`
+ do
+ package_item="`echo $package_item|sed -e s,rpmbuild,rpm-build,g |sed -e s,__perl,perl,g |sed -e s,gasp,binutils-gasp,g -e s,binutils-binutils,binutils,g -e s,apxs,apache,g|sed -e s,apache\(EAPI\)-devel,apache-devel,g -e s,kernel-headers\(netfilter\),kernel-headers,g -e s,awk,mawk,g -e s,mmawk,mawk,g -e s,motif,openmotif,g -e s,openopenmotif,openmotif,g`"
+ GO="yes"
+ package=`basename "$package_item"|sed -e "s/}$//g"`
+ COND_ARCH_TST="`cat $SPECFILE|grep -B1 BuildRequires|grep -B1 $package|grep ifarch|sed -e "s/^.*ifarch//g"`"
+ mach=`uname -m`
+
+ COND_TST=`cat $SPECFILE|grep BuildRequires|grep "$package"`
+ if `echo $COND_TST|grep -q '^BuildRequires:'`; then
+ if [ "$COND_ARCH_TST" != "" ] && [ "`echo $COND_ARCH_TST|sed -e "s/i.86/ix86/g"`" != "`echo $mach|sed -e "s/i.86/ix86/g"`" ]; then
+ GO="yes"
+ fi
+ # bcond:
+ else
+ COND_NAME=`echo $COND_TST|sed -e s,:BuildRequires:.*$,,g`
+ GO=""
+ # %{without}
+ if `echo $COND_TST|grep -q 'without_'`; then
+ COND_NAME=`echo $COND_NAME|sed -e s,^.*without_,,g`
+ if `echo $COND_TST|grep -q !`; then
+ COND_STATE="with"
+ else
+ COND_STATE="wout"
+ fi
+ COND_WITH=`echo $AVAIL_BCONDS_WITH|grep "<$COND_NAME>"`
+ COND_WITHOUT=`echo $AVAIL_BCONDS_WITHOUT|grep "<$COND_NAME>"`
+ if [ -n "$COND_WITHOUT" ] || [ -z "$COND_WITH" ]; then
+ COND_ARGV="wout"
+ else
+ COND_ARGV="with"
+ fi
+ # %{with}
+ elif `echo $COND_TST|grep -q 'with_'`; then
+ COND_NAME=`echo $COND_NAME|sed -e s,^.*with_,,g`
+ if `echo $COND_TST|grep -q !`; then
+ COND_STATE="wout"
+ else
+ COND_STATE="with"
+ fi
+ COND_WITH=`echo $AVAIL_BCONDS_WITH|grep "<$COND_NAME>"`
+ COND_WITHOUT=`echo $AVAIL_BCONDS_WITHOUT|grep "<$COND_NAME>"`
+ if [ -n "$COND_WITH" ] || [ -z "$COND_WITHOUT" ]; then
+ COND_ARGV="with"
+ else
+ COND_ARGV="wout"
+ fi
+ fi
+ RESULT="${COND_STATE}-${COND_ARGV}"
+ case "$RESULT" in
+ "with-wout" | "wout-with" )
+ GO=""
+ ;;
+ "wout-wout" | "with-with" )
+ GO="yes"
+ ;;
+ * )
+ echo "Action '$RESULT' was not defined for package '$package_item'"
+ GO="yes"
+ ;;
+ esac
+ fi
+
+ if [ "$GO" = "yes" ]; then
+ if [ "`rpm -q $package|sed -e "s/$package.*/$package/g"`" != "$package" ]; then
+ echo "Testing if $package has subrequirements..."
+ run_poldek -t -i $package --dumpn=".$package-req.txt"
+ if [ -f ".$package-req.txt" ]; then
+ for package_name in `cat ".$package-req.txt"|grep -v ^#`
+ do
+ if [ "$package_name" = "$package" ]; then
+ echo -ne "Installing BuildRequired package:\t$package_name\n"
+ update_shell_title "Installing BuildRequired package: ${package_name}"
+ install_required_packages $package
+ else
+ echo -ne "Installing (sub)Required package:\t$package_name\n"
+ update_shell_title "Installing (sub)Required package: ${package_name}"
+ install_required_packages $package_name
+ fi
+ case $? in
+ 0)
+ INSTALLED_PACKAGES="$package_name $INSTALLED_PACKAGES"
+ echo $package_name >> `pwd`/.${SPECFILE}_INSTALLED_PACKAGES
+ ;;
+ *)
+ echo "Attempting to run spawn sub - builder..."
+ echo -ne "Package installation failed:\t$package_name\n"
+ run_sub_builder $package_name
+ if [ $? -eq 0 ]; then
+ install_required_packages $package_name
+ case $? in
+ 0)
+ INSTALLED_PACKAGES="$package_name $INSTALLED_PACKAGES"
+ echo $package_name >> `pwd`/.${SPECFILE}_INSTALLED_PACKAGES
+ ;;
+ *)
+ NOT_INSTALLED_PACKAGES="$package_name $NOT_INSTALLED_PACKAGES"
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ done
+ rm -f ".$package-req.txt"
+ else
+ echo "Attempting to run spawn sub - builder..."
+ echo -ne "Package installation failed:\t$package\n"
+ run_sub_builder $package
+ if [ $? -eq 0 ]; then
+ install_required_packages $package
+ case $? in
+ 0)
+ INSTALLED_PACKAGES="$package_name $INSTALLED_PACKAGES"
+ echo $package_name >> `pwd`/.${SPECFILE}_INSTALLED_PACKAGES
+ ;;
+ *)
+ NOT_INSTALLED_PACKAGES="$package_name $NOT_INSTALLED_PACKAGES"
+ ;;
+ esac
+ fi
+ fi
+ else
+ echo "Package $package is already installed. BuildRequirement satisfied."
+ fi
+ fi
+ done
+ if [ "$NOT_INSTALLED_PACKAGES" != "" ]; then
+ echo "Unable to install following packages and their dependencies:"
+ for pkg in "$NOT_INSTALLED_PACKAGES"
+ do
+ echo $pkg
+ done
+ remove_build_requires
+ exit 8
+ fi
+ fi
+}
+
+init_rpm_dir() {
+
+ TOP_DIR="`eval $RPM $RPMOPTS --eval '%{_topdir}'`"
+ CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot"
+
+ mkdir -p $TOP_DIR/{RPMS,BUILD,SRPMS}
+ cd $TOP_DIR
+ cvs -d $CVSROOT co SOURCES/{.cvsignore,dropin} SPECS/{mirrors,md5,adapter{,.awk},fetchsrc_request,builder,{relup,compile,repackage}.sh}
+
+ init_builder
+
+ echo "To checkout *all* .spec files:"
+ echo "- remove $SPEC_DIR/CVS/Entries.Static"
+ echo "- run cvs up in $SPEC_DIR dir"
+
+ echo ""
+ echo "To commit with your developer account:"
+ echo "- edit $SPEC_DIR/CVS/Root"
+ echo "- edit $SOURCE_DIR/CVS/Root"
+}
+
+get_greed_sources() {
+ CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot"
+ if [ -n "BE_VERBOSE" ]; then
+ echo "Try greed download: $1 from: $CVSROOT"
+ fi
+ cvs -d $CVSROOT get SOURCES/$1
+ if [ $? != 0 ]; then
+ Exit_error err_no_source_in_repo $1
+ fi
+
+}
+
+# remove entries from CVS/Entries
+cvs_entry_remove() {
+ local cvsdir="$1"; shift
+ if [ ! -d "$cvsdir" ]; then
+ echo >&2 "cvs_entry_remove: $cvsdir is not a directory"
+ exit 1
+ fi
+
+ for file in "$@"; do
+ rm -f $cvsdir/CVS/Entries.new || return 1
+ awk -ve="${file##*/}" -F/ '$2 != e {print}' $cvsdir/CVS/Entries > $cvsdir/CVS/Entries.new || return 1
+ mv -f $cvsdir/CVS/Entries.new $cvsdir/CVS/Entries || return 1
+ done
+ return 0
+}
+
+mr_proper() {
+ init_builder
+ NOCVSSPEC="yes"
+ DONT_PRINT_REVISION="yes"
+ get_spec
+ parse_spec
+
+ # remove from CVS/Entries
+ cvs_entry_remove $SPEC_DIR $SPECFILE
+ cvs_entry_remove $SOURCE_DIR $SOURCES $PATCHES
+
+ # remove spec and sources
+ $RPMBUILD --clean --rmsource --rmspec --nodeps $SPECFILE