+
+
+install_required_packages()
+{
+ run_poldek -vi $1
+ return $?
+}
+
+set_bconds_values()
+{
+ AVAIL_BCONDS_WITHOUT=""
+ AVAIL_BCONDS_WITH=""
+ if `grep -q ^%bcond ${SPECFILE}`; then
+ BCOND_VERSION="NEW"
+ elif `grep -q bcond ${SPECFILE}`; then
+ BCOND_VERSION="OLD"
+ else
+ BCOND_VERSION="NONE"
+ fi
+ case "${BCOND_VERSION}" in
+ NONE)
+ :
+ ;;
+ OLD)
+ echo "Warning: This spec has old style bconds. Fix it || die."
+ for opt in `$RPMBUILD --bcond $SPECFILE |grep ^_without_`
+ do
+ AVAIL_BCOND_WITHOUT=`echo $opt|sed -e "s/^_without_//g"`
+ if `echo $BCOND|grep -q -- "--without $AVAIL_BCOND_WITHOUT"`;then
+ AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT <$AVAIL_BCOND_WITHOUT>"
+ else
+ AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT $AVAIL_BCOND_WITHOUT"
+ fi
+ done
+
+ for opt in `$RPMBUILD --bcond $SPECFILE |grep ^_with_`
+ do
+ AVAIL_BCOND_WITH=`echo $opt|sed -e "s/^_with_//g"`
+ if `echo $BCOND|grep -q -- "--with $AVAIL_BCOND_WITH"`;then
+ AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$AVAIL_BCOND_WITH>"
+ else
+ AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $AVAIL_BCOND_WITH"
+ fi
+ done
+ ;;
+ NEW)
+ cond_type="" # with || without
+ for opt in `$RPMBUILD --bcond $SPECFILE`
+ do
+ case "$opt" in
+ _without)
+ cond_type="without"
+ ;;
+ _with)
+ cond_type="with"
+ ;;
+ *)
+ case "$cond_type" in
+ with)
+ cond_type=''
+ AVAIL_BCOND_WITH="$opt"
+ if `echo $BCOND|grep -q -- "--with $AVAIL_BCOND_WITH"`;then
+ AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$AVAIL_BCOND_WITH>"
+ else
+ AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $AVAIL_BCOND_WITH"
+ fi
+ ;;
+ without)
+ cond_type=''
+ AVAIL_BCOND_WITHOUT="$opt"
+ if `echo $BCOND|grep -q -- "--without $AVAIL_BCOND_WITHOUT"`;then
+ AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT <$AVAIL_BCOND_WITHOUT>"
+ else
+ AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT $AVAIL_BCOND_WITHOUT"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ done
+ ;;
+ esac
+}
+
+run_sub_builder()
+{
+ package_name="${1}"
+ echo -ne "Package installation failed:\t$package_name\n"
+ #
+ # No i tutaj bym chcia³ zrobiæ sztuczn± inteligencjê, która spróbuje tego
+ # pakieta zbudowaæ. Aktualnie niewiele dziala, bo generalnie nie widze do
+ # konca algorytmu... Ale damy rade. :) Na razie po prostu sie wyjebie tak samo
+ # jakby nie bylo tego kawalka kodu.
+ #
+ # Update: Poprawi³em parê rzeczy i zaczê³o generowaæ pakiety spoza zadanej listy.
+ # Jednym s³owem budowanie niespoldkowanych zale¿no¶ci dzia³a w paru przypadkach.
+ #
+ #
+ # y0shi.
+
+ parent_spec_name=''
+
+
+ # Istnieje taki spec? ${package}.spec
+ 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"
+ else
+ for provides_line in `grep ^Provides:.*$package ${SPECS_DIR} -R`
+ do
+ echo $provides_line
+ done
+ 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}
+ fi
+ NOT_INSTALLED_PACKAGES="$NOT_INSTALLED_PACKAGES $package_name"
+}
+
+remove_build_requires()
+{
+ if [ "$INSTALLED_PACKAGES" != "" ]; then
+ case "$REMOVE_BUILD_REQUIRES" in
+ "force")
+ run_poldek --noask -ve $INSTALLED_PACKAGES
+ ;;
+ "nice")
+ run_poldek --ask -ve $INSTALLED_PACKAGES
+ ;;
+ *)
+ echo You may want to manually remove following BuildRequires fetched:
+ echo $INSTALLED_PACKAGES
+ echo Try poldek -e \`cat `pwd`/.${SPECFILE}_INSTALLED_PACKAGES\`
+ ;;
+ esac
+ fi
+}
+
+display_bconds()
+{
+ if [ "$AVAIL_BCONDS_WITH" != "" ] || [ "$AVAIL_BCONDS_WITHOUT" != "" ]; then
+ echo -ne "We are going to build $SPECFILE with the following conditional flags:\n"
+ if [ "$BCOND" != "" ]; then
+ echo -ne "$BCOND"
+ else
+ echo -ne "No --with || --without conditions passed to $0!"
+ fi
+ echo -ne "\n\nfrom available:\n\n"
+ echo -ne "--with :\t$AVAIL_BCONDS_WITH\n--without:\t$AVAIL_BCONDS_WITHOUT\n\n"
+ fi
+}
+
+fetch_build_requires()
+{
+ if [ "${FETCH_BUILD_REQUIRES}" == "yes" ]; then
+ 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,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
+ if `echo $AVAIL_BCONDS_WITHOUT|grep -q "<$COND_NAME>"`; 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
+ if `echo $AVAIL_BCONDS_WITH|grep -q "<$COND_NAME>"`; 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"
+ export PROMPT_COMMAND=`echo -ne "\033]0;${SPECFILE}: Installing BuildRequired package: ${package_name}\007"`
+ install_required_packages $package;
+ else
+ echo -ne "Installing (sub)Required package:\t$package_name\n"
+ export PROMPT_COMMAND=`echo -ne "\033]0;${SPECFILE}: Installing (sub)Required package: ${package_name}\007"`
+ 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..."
+ 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..."
+ 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
+ export PROMPT_COMMAND=`echo -ne "\033]0;${SPECFILE}\007"`
+ if [ "$NOT_INSTALLED_PACKAGES" != "" ]; then
+ echo "Nie uda³o siê zainstalowaæ nastêpuj±cych pakietów i ich zale¿no¶ci:"
+ for pkg in "$NOT_INSTALLED_PACKAGES"
+ do
+ echo $pkg
+ done
+ remove_build_requires
+ exit 8
+ fi
+ fi
+}
+