+# change dependency to specname
+# common changes:
+# - perl(Package::Name) -> perl-Package-Name
+depspecname() {
+ local package="$1"
+
+ package=$(echo "$package" | sed -e '/perl(.*)/{s,perl(\(.*\)),perl-\1,;s,::,-,g}')
+ echo "$package"
+}
+
+update_shell_title() {
+ [ -t 1 ] || return
+ local len=${COLUMNS:-80}
+ local msg=$(echo "$*" | cut -c-$len)
+
+ if [ -n "$BE_VERBOSE" ]; then
+ echo >&2 "$(date +%s.%N) $*"
+ fi
+
+ if [ "x$TITLECHANGE" == "xyes" -o "x$TITLECHANGE" == "x" ]; then
+ local pkg
+ if [ -n "$PACKAGE_NAME" ]; then
+ pkg=${PACKAGE_NAME}-${PACKAGE_VERSION}-${PACKAGE_RELEASE}
+ else
+ pkg=${SPECFILE}
+ fi
+
+ msg="$pkg: ${SHELL_TITLE_PREFIX:+$SHELL_TITLE_PREFIX }$msg"
+ msg="$(echo $msg | tr -d '\n\r')"
+ case "$TERM" in
+ cygwin|xterm*)
+ echo >&2 -ne "\033]1;$msg\007\033]2;$msg\007"
+ ;;
+ screen*)
+ echo >&2 -ne "\033]0;$msg\007"
+ ;;
+ esac
+ fi
+}
+
+# set TARGET from BuildArch: from SPECFILE
+set_spec_target() {
+ if [ -n "$SPECFILE" ] && [ -z "$TARGET" ]; then
+ tmp=$(awk '/^BuildArch:/ { print $NF}' $SPECFILE)
+ if [ "$tmp" ]; then
+ target_platform=$(rpm -E '%{_target_vendor}-%{_target_os}%{?_gnu}')
+ TARGET="$tmp"
+ case "$RPMBUILD" in
+ "rpmbuild")
+ TARGET_SWITCH="--target ${TARGET}-${target_platform}" ;;
+ "rpm")
+ TARGET_SWITCH="--target=$TARGET" ;;
+ esac
+ fi
+ fi
+}
+
+# runs rpm with minimal macroset
+minirpm() {
+ # we reset macros not to contain macros.build as all the %() macros are
+ # executed here, while none of them are actually needed.
+ # at the time of this writing macros.build + macros contained 70 "%(...)" macros.
+ safe_macrofiles=$(rpm --showrc | awk -F: '/^macrofiles/ { gsub(/^macrofiles[ \t]+:/, "", $0); gsub(/:.*macros.build:/, ":", $0); print $0 } ')
+
+ # TODO: move these to /usr/lib/rpm/macros
+ cat > $BUILDER_MACROS <<'EOF'
+%x8664 x86_64 amd64 ia32e
+%alt_kernel %{nil}
+%_alt_kernel %{nil}
+%requires_releq_kernel_up %{nil}
+%requires_releq_kernel_smp %{nil}
+%requires_releq_kernel %{nil}
+%requires_releq() %{nil}
+%pyrequires_eq() %{nil}
+%requires_eq() %{nil}
+%requires_eq_to() %{nil}
+%releq_kernel_up ERROR
+%releq_kernel_smp ERROR
+%releq_kernel ERROR
+%kgcc_package ERROR
+%_fontsdir ERROR
+%ruby_version ERROR
+%ruby_ver_requires_eq() %{nil}
+%ruby_mod_ver_requires_eq() %{nil}
+%__php_api_requires() %{nil}
+%php_major_version ERROR
+%php_api_version ERROR
+%requires_xorg_xserver_extension %{nil}
+%requires_xorg_xserver_xinput %{nil}
+%requires_xorg_xserver_font %{nil}
+%requires_xorg_xserver_videodrv %{nil}
+%py_ver ERROR
+%perl_vendorarch ERROR
+%perl_vendorlib ERROR
+# damn. need it here! - copied from /usr/lib/rpm/macros.build
+%tmpdir %(echo "${TMPDIR:-/tmp}")
+%patchset_source(f:b:) %(
+ base=%{-b*}%{!-b*:10000};
+ start=$(expr $base + %1);
+ end=$(expr $base + %{?2}%{!?2:%{1}});
+ # we need to call seq twice as it doesn't allow two formats
+ seq -f 'Patch%g:' $start $end > %{tmpdir}/__ps1;
+ seq -f '%{-f*}' %1 %{?2}%{!?2:%{1}} > %{tmpdir}/__ps2;
+ paste %{tmpdir}/__ps{1,2};
+ rm -f %{tmpdir}/__ps{1,2};
+) \
+%{nil}
+EOF
+ if [ "$NOINIT" = "yes" ] ; then
+ cat >> $BUILDER_MACROS <<'EOF'
+%_specdir ./
+%_sourcedir ./
+EOF
+ fi
+ eval $RPMBUILD --macros "$safe_macrofiles:$BUILDER_MACROS" $QUIET $RPMOPTS $RPMBUILDOPTS $BCOND $TARGET_SWITCH $* 2>&1