SPECS: builder - speed improvements: 60 times for example for "./b...
glen
glen at pld-linux.org
Tue Jan 17 21:04:02 CET 2006
Author: glen Date: Tue Jan 17 20:04:02 2006 GMT
Module: SPECS Tag: HEAD
---- Log message:
- speed improvements: 60 times for example for "./builder -bp -ncs -nn -ske php.spec"
---- Files affected:
SPECS:
builder (1.381 -> 1.382)
---- Diffs:
================================================================
Index: SPECS/builder
diff -u SPECS/builder:1.381 SPECS/builder:1.382
--- SPECS/builder:1.381 Tue Jan 17 14:34:18 2006
+++ SPECS/builder Tue Jan 17 21:03:56 2006
@@ -333,12 +333,20 @@
update_shell_title "cache_rpm_dump"
rpm_dump_cache=`
+ # we reset macros not to contain macros.build as all the %() macros are
+ # executed here, while none of them are actually needed
+ # what we need from dump is NAME, VERSION, RELEASE and PATCHES/SOURCES.
+ # macros.build + macros contained at the time of this writing 70 %() macros
+ local macrofiles='/usr/lib/rpm/macros:~/etc/.rpmmacros:~/.rpmmacros'
+ local dump='prep %{echo:z: PACKAGE_NAME %{name} }%dump'
case "$RPMBUILD" in
rpm )
- rpm -bp --nodeps --define 'prep %dump' $BCOND $TARGET_SWITCH $SPECFILE 2>&1
+ echo -e "include:/usr/lib/rpm/rpmrc\nmacrofiles:$macrofiles" | \
+ rpm --rcfile - -bp --nodeps --define "prep $dump" $BCOND $TARGET_SWITCH $SPECFILE 2>&1
;;
rpmbuild )
- rpmbuild --nodigest --nosignature --define 'prep %dump' $BCOND $TARGET_SWITCH $SPECFILE 2>&1
+ echo -e "include:/usr/lib/rpm/rpmrc\nmacrofiles:$macrofiles" | \
+ rpmbuild --rcfile - --nodigest --nosignature --define "prep $dump" $BCOND $TARGET_SWITCH $SPECFILE 2>&1
;;
esac`
update_shell_title "cache_rpm_dump: OK!"
@@ -360,7 +368,6 @@
fi
cd $SPECS_DIR
-
cache_rpm_dump
if [ "$NOSRCS" != "yes" ]; then
@@ -370,23 +377,11 @@
FAIL_IF_NO_SOURCES="no"
fi
- update_shell_title "parse_spec: Patches!"
PATCHES="`rpm_dump | awk '/PATCHURL[0-9]+/ {print $3}'`"
- update_shell_title "parse_spec: Icons!"
ICONS="`awk '/^Icon:/ {print $2}' ${SPECFILE}`"
- update_shell_title "parse_spec: PACKAGE_NAME!"
- PACKAGE_NAME="`$RPM -q --qf '%{NAME}\n' --specfile ${SPECFILE} 2> /dev/null | head -n 1`"
- update_shell_title "parse_spec: PACKAGE_VERSION!"
- PACKAGE_VERSION="`$RPM -q --qf '%{VERSION}\n' --specfile ${SPECFILE} 2> /dev/null| head -n 1`"
- update_shell_title "parse_spec: PACKAGE_RELEASE!"
- PACKAGE_RELEASE="`$RPM -q --qf '%{RELEASE}\n' --specfile ${SPECFILE} 2> /dev/null | head -n 1`"
-
-# These variables may be unset after first cache_rpm_dump call
-# (because of not-yet-retrieved icon file)
-#
-# if [ -z "$PACKAGE_NAME" -o -z "$PACKAGE_VERSION" -o -z "$PACKAGE_RELEASE" ]; then
-# Exit_error err_no_package_data;
-# fi
+ PACKAGE_NAME=$(rpm_dump | awk '$2 == "PACKAGE_NAME" { print $3}')
+ PACKAGE_VERSION=$(rpm_dump | awk '$2 == "PACKAGE_VERSION" { print $3}')
+ PACKAGE_RELEASE=$(rpm_dump | awk '$2 == "PACKAGE_RELEASE" { print $3}')
if [ -n "$BE_VERBOSE" ]; then
echo "- Sources : `nourl $SOURCES`"
@@ -1033,6 +1028,24 @@
return $?
}
+find_spec_bcond() {
+ # taken from find-spec-bcond, but with just getting the list
+ local SPEC="$1"
+ # quick revert hint: '$RPMBUILD --bcond $SPEC'
+ awk -F"\n" '
+ /^%changelog/ { exit }
+ /_with(out)?_[_a-zA-Z0-9]+/{
+ match($0, /_with(out)?_[_a-zA-Z0-9]+/);
+ print substr($0, RSTART, RLENGTH);
+ }
+ /^%bcond_with/{
+ match($0, /bcond_with(out)?[ \t]+[_a-zA-Z0-9]+/);
+ bcond = substr($0, RSTART +5 , RLENGTH -5);
+ gsub(/[ \t]+/,"_",bcond);
+ print bcond
+ }' $SPEC | LC_ALL=C sort -u
+}
+
set_bconds_values()
{
update_shell_title "set bcond values"
@@ -1044,9 +1057,11 @@
elif `egrep -q ^#\ *_with ${SPECFILE}`; then
BCOND_VERSION="OLD"
else
- BCOND_VERSION="NONE"
+ return
fi
+ local bcond_avail=$(find_spec_bcond $SPECFILE)
+
# expand bconds from ~/.bcondrc
# The file structure is like gentoo's package.use:
# ---
@@ -1055,27 +1070,23 @@
# w32codec-installer license_agreement
# php +mysqli
# ---
- if [ "${BCOND_VERSION}" != "NONE" ] && ( [ -f $HOME/.bcondrc ] || ( [ -n $HOME_ETC ] && [ -f $HOME_ETC/.bcondrc ] ) ) ; then
- # This takes package name, first defined in spec.
- # so consider that when defining flags for package.
- PN=`$RPM -q --qf '%{NAME}\n' --specfile $SPECFILE | head -n 1`
+ if ([ -f $HOME/.bcondrc ] || ([ -n $HOME_ETC ] && [ -f $HOME_ETC/.bcondrc ])); then
SN=${SPECFILE%%\.spec}
- AVAIL=`$RPMBUILD --bcond $SPECFILE`
- BCONDRC=$HOME/.bcondrc
- [ -n $HOME_ETC ] && [ -f $HOME_ETC/.bcondrc ] && BCONDRC=$HOME_ETC/.bcondrc
+ local bcondrc=$HOME/.bcondrc
+ [ -n $HOME_ETC ] && [ -f $HOME_ETC/.bcondrc ] && bcondrc=$HOME_ETC/.bcondrc
while read pkg flags; do
# ignore comments
[[ "$pkg" == \#* ]] && continue
# any package or current package?
- if [ "$pkg" = "*" ] || [ "$pkg" = "$PN" ] || [ "$pkg" = "$SN" ]; then
+ if [ "$pkg" = "*" ] || [ "$pkg" = "$PACKAGE_NAME" ] || [ "$pkg" = "$SN" ]; then
for flag in $flags; do
- opt=${flag#[+-]}
+ local opt=${flag#[+-]}
# use only flags which are in this package.
- if [[ $AVAIL = *${opt}* ]]; then
+ if [[ $bcond_avail = *${opt}* ]]; then
if [[ $flag = -* ]]; then
BCOND="$BCOND --without $opt"
else
@@ -1084,29 +1095,31 @@
fi
done
fi
- done < $BCONDRC
+ done < $bcondrc
+ update_shell_title "parse ~/.bcondrc: DONE!"
fi
+ update_shell_title "parse bconds"
case "${BCOND_VERSION}" in
- NONE)
+ NONE)
:
;;
OLD)
echo "Warning: This spec has old style bconds. Fix it || die."
- for opt in `$RPMBUILD --bcond $SPECFILE |grep ^_without_`
+ for opt in `echo "$bcond_avail" | grep ^_without_`
do
- AVAIL_BCOND_WITHOUT=`echo $opt|sed -e "s/^_without_//g"`
- if `echo $BCOND|grep -q -- "--without $AVAIL_BCOND_WITHOUT"`;then
+ AVAIL_BCOND_WITHOUT=${opt#_without_}
+ if [[ "$BCOND" = *--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_`
+ for opt in `echo "$bcond_avail" | grep ^_with_`
do
- AVAIL_BCOND_WITH=`echo $opt|sed -e "s/^_with_//g"`
- if `echo $BCOND|grep -q -- "--with $AVAIL_BCOND_WITH"`;then
+ AVAIL_BCOND_WITH=${opt#_with_}
+ if [[ "$BCOND" = *--with?${AVAIL_BCOND_WITH}* ]]; then
AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$AVAIL_BCOND_WITH>"
else
AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $AVAIL_BCOND_WITH"
@@ -1114,9 +1127,8 @@
done
;;
NEW)
- cond_type="" # with || without
- for opt in `$RPMBUILD --bcond $SPECFILE`
- do
+ local cond_type="" # with || without
+ for opt in $bcond_avail; do
case "$opt" in
_without)
cond_type="without"
@@ -1125,16 +1137,16 @@
cond_type="with"
;;
_without_*)
- AVAIL_BCOND_WITHOUT="`echo $opt | sed 's/^_without_//g'`"
- if `echo $BCOND|grep -q -- "--without $AVAIL_BCOND_WITHOUT"`;then
+ AVAIL_BCOND_WITHOUT=${opt#_without_}
+ if [[ "$BCOND" = *--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
;;
_with_*)
- AVAIL_BCOND_WITH="`echo $opt | sed 's/^_with_//g'`"
- if `echo $BCOND|grep -q -- "--with $AVAIL_BCOND_WITH"`;then
+ AVAIL_BCOND_WITH=${opt#_with_}
+ if [[ "$BCOND" = *--with?${AVAIL_BCOND_WITH}* ]]; then
AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$AVAIL_BCOND_WITH>"
else
AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $AVAIL_BCOND_WITH"
@@ -1145,7 +1157,7 @@
with)
cond_type=''
AVAIL_BCOND_WITH="$opt"
- if `echo $BCOND|grep -q -- "--with $AVAIL_BCOND_WITH"`;then
+ if [[ "$BCOND" = *--with?${AVAIL_BCOND_WITH}* ]]; then
AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH <$AVAIL_BCOND_WITH>"
else
AVAIL_BCONDS_WITH="$AVAIL_BCONDS_WITH $AVAIL_BCOND_WITH"
@@ -1154,7 +1166,7 @@
without)
cond_type=''
AVAIL_BCOND_WITHOUT="$opt"
- if `echo $BCOND|grep -q -- "--without $AVAIL_BCOND_WITHOUT"`;then
+ if [[ "$BCOND" = *--without?${AVAIL_BCOND_WITHOUT}* ]]; then
AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT <$AVAIL_BCOND_WITHOUT>"
else
AVAIL_BCONDS_WITHOUT="$AVAIL_BCONDS_WITHOUT $AVAIL_BCOND_WITHOUT"
@@ -1730,12 +1742,12 @@
init_builder;
if [ -n "$SPECFILE" ]; then
get_spec;
+ parse_spec;
set_bconds_values;
display_bconds;
display_branches;
[ X"$SHOW_BCONDS" = X"yes" ] && exit 0
fetch_build_requires;
- parse_spec;
if [ "$INTEGER_RELEASE" = "yes" ]; then
echo "Checking release $PACKAGE_RELEASE..."
if echo $PACKAGE_RELEASE | grep -q '^[^.]*\.[^.]*$' 2>/dev/null ; then
================================================================
---- CVS-web:
http://cvs.pld-linux.org/SPECS/builder?r1=1.381&r2=1.382&f=u
More information about the pld-cvs-commit
mailing list