SPECS: builder - experimental recursive builder -bb for rpm-getdep...

glen glen at pld-linux.org
Wed Dec 28 19:13:05 CET 2005


Author: glen                         Date: Wed Dec 28 18:13:05 2005 GMT
Module: SPECS                         Tag: HEAD
---- Log message:
- experimental recursive builder -bb for rpm-getdeps method when required package was not found by poldek

---- Files affected:
SPECS:
   builder (1.362 -> 1.363) 

---- Diffs:

================================================================
Index: SPECS/builder
diff -u SPECS/builder:1.362 SPECS/builder:1.363
--- SPECS/builder:1.362	Tue Dec 27 09:48:36 2005
+++ SPECS/builder	Wed Dec 28 19:13:00 2005
@@ -288,6 +288,7 @@
 
 update_shell_title() {
 	[ -t 1 ] || return
+	echo "$*"
 	local msg="builder[$SPECFILE] $*"
 	case "$TERM" in
 		cygwin|xterm*)
@@ -1155,7 +1156,7 @@
 run_sub_builder()
 {
 	package_name="${1}"
-	echo -ne "Package installation failed:\t$package_name\n"
+	update_shell_title "run_sub_builder $package_name"
 	#
 	# No i tutaj bym chciał zrobić sztuczną inteligencję, która spróbuje tego
 	# pakieta zbudować. Aktualnie niewiele dziala, bo generalnie nie widze do
@@ -1171,10 +1172,10 @@
 	parent_spec_name=''
 
 	# Istnieje taki spec? ${package}.spec
-	if [ -f "${SPECS_DIR}${package}.spec" ]; then
+	if [ -f "${SPECS_DIR}/${package}.spec" ]; then
 		parent_spec_name=${package}.spec
-	elif [ -f "${SPECS_DIR}`echo ${package_name}|sed -e s,-devel.*,,g -e s,-static,,g`.spec" ]; then
-		parent_spec_name="`echo ${package_name}|sed -e s,-devel.*,,g -e s,-static,,g`.spec"
+	elif [ -f "${SPECS_DIR}/`echo ${package_name} | sed -e s,-devel.*,,g -e s,-static,,g`.spec" ]; then
+		parent_spec_name="`echo ${package_name} | sed -e s,-devel.*,,g -e s,-static,,g`.spec"
 	else
 		for provides_line in `grep ^Provides:.*$package  ${SPECS_DIR} -R`
 		do
@@ -1183,24 +1184,33 @@
 	fi
 
 	if [ "${parent_spec_name}" != "" ]; then
-		sub_builder_opts=''
-		if [ "${FETCH_BUILD_REQUIRES}" == "yes" ]; then
-			sub_builder_opts="${sub_builder_opts} -R"
-		fi
-		if [ "${REMOVE_BUILD_REQUIRES}" == "nice" ]; then
-			sub_builder_opts="${sub_builder_opts} -RB"
-		elif [ "${REMOVE_BUILD_REQUIRES}" == "force" ]; then
-			sub_builder_opts="${sub_builder_opts} -FRB"
-		fi
-		if [ "${UPDATE_POLDEK_INDEXES}" == "yes" ]; then
-			sub_builder_opts="${sub_builder_opts} -Upi"
-		fi
-		cd "${SPECS_DIR}"
-		./builder ${sub_builder_opts} ${parent_spec_name}
+		spawn_sub_builder $parent_spec_name
 	fi
 	NOT_INSTALLED_PACKAGES="$NOT_INSTALLED_PACKAGES $package_name"
 }
 
+spawn_sub_builder()
+{
+	 package_name="${1}"
+	 update_shell_title "spawn_sub_builder $package_name"
+
+	 sub_builder_opts=''
+	 if [ "${FETCH_BUILD_REQUIRES}" == "yes" ]; then
+		  sub_builder_opts="${sub_builder_opts} -R"
+	 fi
+	 if [ "${REMOVE_BUILD_REQUIRES}" == "nice" ]; then
+		  sub_builder_opts="${sub_builder_opts} -RB"
+	 elif [ "${REMOVE_BUILD_REQUIRES}" == "force" ]; then
+		  sub_builder_opts="${sub_builder_opts} -FRB"
+	 fi
+	 if [ "${UPDATE_POLDEK_INDEXES}" == "yes" ]; then
+		  sub_builder_opts="${sub_builder_opts} -Upi"
+	 fi
+
+	 cd "${SPECS_DIR}"
+	 ./builder ${sub_builder_opts} "$@"
+}
+
 remove_build_requires()
 {
 	if [ "$INSTALLED_PACKAGES" != "" ]; then
@@ -1290,17 +1300,26 @@
 
 			update_shell_title "fetch_build_requires: update indexes"
 			if [ -n "$CONF" ] || [ -n "$DEPS" ]; then
-				$SU_SUDO /usr/bin/poldek --update || $SU_SUDO /usr/bin/poldek --upa
+				$SU_SUDO /usr/bin/poldek -q --update || $SU_SUDO /usr/bin/poldek -q --upa
 			fi
 			if [ -n "$CONF" ]; then
-				 update_shell_title "fetch_build_requires: uninstall conflicting packages"
+				update_shell_title "fetch_build_requires: uninstall conflicting packages"
 				echo "Trying to uninstall conflicting packages ($CONF):"
 				$SU_SUDO /usr/bin/poldek --noask --nofollow -ev $CONF
 			fi
 			if [ -n "$DEPS" ]; then
 				update_shell_title "fetch_build_requires: install deps ($DEPS)"
 				echo "Trying to install dependencies ($DEPS):"
-				$SU_SUDO /usr/bin/poldek --caplookup -uGv $DEPS
+				local log=.${SPECFILE}_poldek.log
+				$SU_SUDO /usr/bin/poldek --caplookup -uGq $DEPS | tee $log
+				failed=$(awk -F: '/^error:/{print $2}' $log)
+				rm -f $log
+				if [ -n "$failed" ]; then
+					 for package in $failed; do
+						  # FIXME: sanitise, deps could be not .spec files
+						  spawn_sub_builder -bb $package
+					 done
+				fi
 			fi
 			return
 		fi
@@ -1396,6 +1415,7 @@
 									;;
 								*)
 									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;
@@ -1415,6 +1435,7 @@
 						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;
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SPECS/builder?r1=1.362&r2=1.363&f=u



More information about the pld-cvs-commit mailing list