packages: rpm-build-tools/builder.sh - update from r1.585
glen
glen at pld-linux.org
Sun Jun 28 18:55:36 CEST 2009
Author: glen Date: Sun Jun 28 16:55:36 2009 GMT
Module: packages Tag: HEAD
---- Log message:
- update from r1.585
---- Files affected:
packages/rpm-build-tools:
builder.sh (1.24 -> 1.25)
---- Diffs:
================================================================
Index: packages/rpm-build-tools/builder.sh
diff -u packages/rpm-build-tools/builder.sh:1.24 packages/rpm-build-tools/builder.sh:1.25
--- packages/rpm-build-tools/builder.sh:1.24 Wed Sep 24 16:56:39 2008
+++ packages/rpm-build-tools/builder.sh Sun Jun 28 18:55:30 2009
@@ -25,10 +25,13 @@
# TODO:
# - ability to do ./builder -bb foo.spec foo2.spec foo3.spec
-VERSION="v0.22-RELEASE"
+RCSID='$Id$'
+r=${RCSID#* * }
+rev=${r%% *}
+VERSION="v0.23/$rev"
VERSIONSTRING="\
Build package utility from PLD Linux CVS repository
-$VERSION (C) 1999-2008 Free Penguins".
+$VERSION (C) 1999-2009 Free Penguins".
PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin"
@@ -65,6 +68,8 @@
# Example: LOGFILE='../log.$PACKAGE_NAME'
# Example: LOGFILE='../LOGS/log.$PACKAGE_NAME.$DATE'
+# Example: LOGFILE='$PACKAGE_NAME/$PACKAGE_NAME.$DATE.log'
+# Example: LOGFILE='$PACKAGE_NAME.$DATE.log'
# Yes, you can use variable name! Note _single_ quotes!
LOGFILE=''
@@ -79,7 +84,9 @@
RPMBUILDOPTS=""
BCOND=""
GROUP_BCONDS="no"
-CVSIGNORE_DF="no"
+
+# create symlinks for tools in PACKAGE_DIR, see get_spec()
+SYMLINK_TOOLS="yes"
PATCHES=""
SOURCES=""
@@ -90,13 +97,16 @@
ASSUMED_NAME=""
PROTOCOL="ftp"
WGET_RETRIES=${MAX_WGET_RETRIES:-0}
-CVS_RETRIES=${MAX_CVS_RETRIES:-1000}
+CVS_COMMAND=${CVS_COMMAND:-cvs}
+CVS_FORCE=""
+CVSIGNORE_DF="yes"
+CVS_RETRIES=${MAX_CVS_RETRIES:-1000}
+CVS_SERVER="cvs.pld-linux.org"
CVSTAG=""
+
RES_FILE=""
-CVS_FORCE=""
-CVS_SERVER="cvs.pld-linux.org"
DISTFILES_SERVER="://distfiles.pld-linux.org"
ATTICDISTFILES_SERVER="://attic-distfiles.pld-linux.org"
@@ -195,14 +205,13 @@
# are we using cvs-nserver ?
#
CVS_NSERVER=0
-cvs --version 2>&1 | grep -q 'CVS-nserver'
+$CVS_COMMAND --version 2>&1 | grep -q 'CVS-nserver'
[ $? -eq 0 ] && CVS_NSERVER=1
POLDEK_INDEX_DIR="$($RPM --eval %_rpmdir)/"
POLDEK_CMD="$SU_SUDO /usr/bin/poldek --noask"
-run_poldek()
-{
+run_poldek() {
RES_FILE=$(mktemp -t builder.XXXXXX || ${TMPDIR:-/tmp}/builder.$RANDOM)
if [ -n "$LOGFILE" ]; then
LOG=`eval echo $LOGFILE`
@@ -221,8 +230,7 @@
#---------------------------------------------
# functions
-usage()
-{
+usage() {
if [ -n "$DEBUG" ]; then set -xv; fi
echo "\
Usage: builder [-D|--debug] [-V|--version] [--short-version] [-a|--as_anon] [-b|-ba|--build]
@@ -281,7 +289,7 @@
-nd, --no-distfiles - don't download from distfiles
-nm, --no-mirrors - don't download from mirror, if source URL is given,
-nu, --no-urls - don't try to download from FTP/HTTP location,
--ns, --no-srcs - don't download Sources
+-ns, --no-srcs - don't download Sources/Patches
-ns0, --no-source0 - don't download Source0
-nn, --no-net - don't download anything from the net
-pm, --prefer-mirrors - prefer mirrors (if any) over distfiles for SOURCES
@@ -403,7 +411,7 @@
# set TARGET from BuildArch: from SPECFILE
set_spec_target() {
if [ -n "$SPECFILE" ] && [ -z "$TARGET" ]; then
- tmp=$(awk '/^BuildArch:/ { print $NF}' $SPECFILE)
+ tmp=$(awk '/^BuildArch:/ { print $NF}' $ASSUMED_NAME/$SPECFILE)
if [ "$tmp" ]; then
target_platform=$(rpm -E '%{_target_vendor}-%{_target_os}%{?_gnu}')
TARGET="$tmp"
@@ -445,6 +453,7 @@
%ruby_ver_requires_eq() %{nil}
%ruby_mod_ver_requires_eq() %{nil}
%__php_api_requires() %{nil}
+%__php /usr/bin/php
%php_major_version ERROR
%php_api_version ERROR
%requires_xorg_xserver_extension %{nil}
@@ -531,10 +540,9 @@
echo "$rpm_dump_cache"
}
-get_icons()
-{
+get_icons() {
update_shell_title "get icons"
- ICONS=$(awk '/^Icon:/ {print $2}' ${SPECFILE})
+ ICONS=$(awk '/^Icon:/ {print $2}' ${ASSUMED_NAME}/${SPECFILE})
if [ -z "$ICONS" ]; then
return
fi
@@ -542,8 +550,7 @@
rpm_dump_cache="kalasaba" NODIST="yes" get_files $ICONS
}
-parse_spec()
-{
+parse_spec() {
update_shell_title "parsing specfile"
if [ -n "$DEBUG" ]; then
set -x
@@ -553,19 +560,19 @@
# icons are needed for successful spec parse
get_icons
- cd $SPEC_DIR
+ cd $PACKAGE_DIR
cache_rpm_dump
- if [ "$NOSRCS" != "yes" ]; then
- SOURCES=$(rpm_dump | awk '/SOURCEURL[0-9]+/ {print $3}')
- fi
-
if (rpm_dump | grep -qEi ":.*nosource.*1"); then
FAIL_IF_NO_SOURCES="no"
fi
- PATCHES=$(rpm_dump | awk '/PATCHURL[0-9]+/ {print $3}')
- ICONS=$(awk '/^Icon:/ {print $2}' ${SPECFILE})
+ if [ "$NOSRCS" != "yes" ]; then
+ SOURCES=$(rpm_dump | awk '$2 ~ /^SOURCEURL[0-9]+/ {print substr($2, length("SOURCEURL") + 1), $3}' | LC_ALL=C sort -n | awk '{print $2}')
+ PATCHES=$(rpm_dump | awk '$2 ~ /^PATCHURL[0-9]+/ {print substr($2, length("PATCHURL") + 1), $3}' | LC_ALL=C sort -n | awk '{print $2}')
+ ICONS=$(awk '/^Icon:/ {print $2}' ${SPECFILE})
+ fi
+
PACKAGE_NAME=$(rpm_dump | awk '$2 == "PACKAGE_NAME" { print $3; exit}')
PACKAGE_VERSION=$(rpm_dump | awk '$2 == "PACKAGE_VERSION" { print $3; exit}')
PACKAGE_RELEASE=$(rpm_dump | awk '$2 == "PACKAGE_RELEASE" { print $3; exit}')
@@ -594,8 +601,7 @@
update_shell_title "parse_spec: OK!"
}
-Exit_error()
-{
+Exit_error() {
if [ -n "$DEBUG" ]; then
set -x
set -v
@@ -648,30 +654,25 @@
exit 100
}
-init_builder()
-{
+init_builder() {
if [ -n "$DEBUG" ]; then
set -x
set -v
fi
if [ "$NOINIT" != "yes" ] ; then
- local extra
- if [ "$ASSUMED_NAME" ]; then
- extra="--define 'name $ASSUMED_NAME'"
- fi
- SOURCE_DIR=$(eval $RPM $RPMOPTS $extra --eval '%{_sourcedir}')
- SPEC_DIR=$(eval $RPM $RPMOPTS $extra --eval '%{_specdir}')
+ TOP_DIR=$(eval $RPM $RPMOPTS --eval '%{_topdir}')
+ REPO_DIR=$TOP_DIR
+ PACKAGE_DIR=$REPO_DIR/$ASSUMED_NAME
else
- SOURCE_DIR="."
- SPEC_DIR="."
+ REPO_DIR="."
+ PACKAGE_DIR="."
fi
__PWD=$(pwd)
}
-get_spec()
-{
+get_spec() {
update_shell_title "get_spec"
@@ -680,8 +681,8 @@
set -v
fi
- cd "$SPEC_DIR"
- if [ ! -f "$SPECFILE" ]; then
+ cd "$REPO_DIR"
+ if [ ! -f "$ASSUMED_NAME/$SPECFILE" ]; then
SPECFILE="$(basename $SPECFILE .spec).spec"
fi
if [ "$NOCVSSPEC" != "yes" ]; then
@@ -691,28 +692,44 @@
NOCVSSPEC="yes"
fi
- cvsup "$SPECFILE" || Exit_error err_no_spec_in_repo
+ if [ -d "$ASSUMED_NAME" ]; then
+ cvsup "$ASSUMED_NAME/$SPECFILE" || Exit_error err_no_spec_in_repo
+ else
+ cvsup -c -d $ASSUMED_NAME "packages/$ASSUMED_NAME/$SPECFILE" || Exit_error err_no_spec_in_repo
+
+ # remove Entries.Static -- so 'cvs up' would update all files in a repo
+ rm "$ASSUMED_NAME/CVS/Entries.Static"
+ cvsignore_df .cvsignore
+
+ # create symlinks for tools
+ if [ "$SYMLINK_TOOLS" != "no" ]; then
+ for a in dropin md5 adapter builder {relup,compile,repackage,rsync}.sh; do
+ [ -f $a ] || continue
+ ln -s ../$a $ASSUMED_NAME
+ cvsignore_df $a
+ done
+ fi
+ fi
fi
- if [ ! -f "$SPECFILE" ]; then
+ if [ ! -f "$ASSUMED_NAME/$SPECFILE" ]; then
Exit_error err_no_spec_in_repo
fi
if [ "$CHMOD" = "yes" -a -n "$SPECFILE" ]; then
- chmod $CHMOD_MODE $SPECFILE
+ chmod $CHMOD_MODE $ASSUMED_NAME/$SPECFILE
fi
unset OPTIONS
- [ -n "$DONT_PRINT_REVISION" ] || grep -E -m 1 "^#.*Revision:.*Date" $SPECFILE
+ [ -n "$DONT_PRINT_REVISION" ] || grep -E -m 1 "^#.*Revision:.*Date" $ASSUMED_NAME/$SPECFILE
set_spec_target
}
-find_mirror()
-{
- cd "$SPEC_DIR"
+find_mirror() {
+ cd "$REPO_DIR"
local url="$1"
if [ ! -f "mirrors" -a "$NOCVSSPEC" != "yes" ] ; then
- cvs update mirrors >&2
+ $CVS_COMMAND update mirrors >&2
fi
IFS="|"
@@ -734,21 +751,19 @@
}
# Warning: unpredictable results if same URL used twice
-src_no ()
-{
- cd $SPEC_DIR
+src_no() {
+ cd $PACKAGE_DIR
rpm_dump | \
grep "SOURCEURL[0-9]*[ ]*$1""[ ]*$" | \
sed -e 's/.*SOURCEURL\([0-9][0-9]*\).*/\1/' | \
head -n 1 | xargs
}
-src_md5()
-{
+src_md5() {
[ "$NO5" = "yes" ] && return
no=$(src_no "$1")
[ -z "$no" ] && return
- cd $SPEC_DIR
+ cd $PACKAGE_DIR
local md5
if [ -f additional-md5sums ]; then
@@ -789,49 +804,49 @@
fi
}
-distfiles_path ()
-{
+distfiles_path() {
echo "by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")"
}
-distfiles_url ()
-{
+distfiles_url() {
echo "$PROTOCOL$DISTFILES_SERVER/distfiles/$(distfiles_path "$1")"
}
-distfiles_attic_url ()
-{
+distfiles_attic_url() {
echo "$PROTOCOL$ATTICDISTFILES_SERVER/distfiles/Attic/$(distfiles_path "$1")"
}
-good_md5 ()
-{
+good_md5() {
md5=$(src_md5 "$1")
[ "$md5" = "" ] || \
[ "$md5" = "$(md5sum $(nourl "$1") 2> /dev/null | sed -e 's/ .*//')" ]
}
-good_size ()
-{
+good_size() {
size=$(find $(nourl "$1") -printf "%s" 2>/dev/null)
[ -n "$size" -a "$size" -gt 0 ]
}
-cvsignore_df ()
-{
+cvsignore_df() {
if [ "$CVSIGNORE_DF" != "yes" ]; then
return
fi
- cvsignore=${SOURCE_DIR}/.cvsignore
- if ! grep -q "^$1\$" $cvsignore 2> /dev/null; then
+ cvsignore=${PACKAGE_DIR}/.cvsignore
+
+ # add only if not yet there
+ if ! awk -vf="$1" -vc=1 '$0 == f { c = 0 } END { exit c }' $cvsignore 2>/dev/null; then
echo "$1" >> $cvsignore
fi
}
-cvsup()
-{
+cvsup() {
update_shell_title "cvsup"
local OPTIONS="up "
+
+ if [ "$1" = "-c" ]; then
+ OPTIONS="co "
+ shift
+ fi
if [ -n "$CVSROOT" ]; then
OPTIONS="-d $CVSROOT $OPTIONS"
fi
@@ -856,7 +871,7 @@
fi
while [ "$result" != "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; do
retries_counter=$(( $retries_counter + 1 ))
- output=$(LC_ALL=C cvs $OPTIONS "$@" 2>&1)
+ output=$(LC_ALL=C $CVS_COMMAND $OPTIONS "$@" 2>&1)
result=$?
[ -n "$output" ] && echo "$output"
if (echo "$output" | grep -qE "(Cannot connect to|connect to .* failed|Connection reset by peer|Connection timed out|Unknown host)") && [ "$result" -ne "0" -a "$retries_counter" -le "$CVS_RETRIES" ]; then
@@ -873,8 +888,7 @@
}
# returns true if "$1" is ftp, http or https protocol url
-is_url()
-{
+is_url() {
case "$1" in
ftp://*|http://*|https://*)
return 0
@@ -883,8 +897,7 @@
return 1
}
-update_md5()
-{
+update_md5() {
if [ $# -eq 0 ]; then
return
fi
@@ -895,7 +908,7 @@
set -v
fi
- cd "$SOURCE_DIR"
+ cd "$PACKAGE_DIR"
# pass 1: check files to be fetched
local todo
@@ -905,10 +918,10 @@
local srcno=$(src_no "$i")
if [ -n "$ADD5" ]; then
[ "$fp" = "$i" ] && continue # FIXME what is this check doing?
- grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $SPEC_DIR/$SPECFILE && continue
- grep -qiE '^BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $SPEC_DIR/$SPECFILE && continue
+ grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $PACKAGE_DIR/$SPECFILE && continue
+ grep -qiE '^BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $PACKAGE_DIR/$SPECFILE && continue
else
- grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $SPEC_DIR/$SPECFILE || grep -qiE '^BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $SPEC_DIR/$SPECFILE || continue
+ grep -qiE '^#[ ]*Source'$srcno'-md5[ ]*:' $PACKAGE_DIR/$SPECFILE || grep -qiE '^BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $PACKAGE_DIR/$SPECFILE || continue
fi
if [ ! -f "$fp" ] || [ $ALWAYS_CVSUP = "yes" ]; then
need_files="$need_files $i"
@@ -924,9 +937,9 @@
for i in "$@"; do
local fp=$(nourl "$i")
local srcno=$(src_no "$i")
- local md5=$(grep -iE '^#[ ]*(No)?Source'$srcno'-md5[ ]*:' $SPEC_DIR/$SPECFILE )
+ local md5=$(grep -iE '^#[ ]*(No)?Source'$srcno'-md5[ ]*:' $PACKAGE_DIR/$SPECFILE )
if [ -z "$md5" ]; then
- md5=$(grep -iE '^[ ]*BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $SPEC_DIR/$SPECFILE )
+ md5=$(grep -iE '^[ ]*BuildRequires:[ ]*digest[(]%SOURCE'$srcno'[)][ ]*=' $PACKAGE_DIR/$SPECFILE )
fi
if [ -n "$ADD5" ] && is_url $i || [ -n "$md5" ]; then
local tag="# Source$srcno-md5:\t"
@@ -941,13 +954,12 @@
print unless (/^\s*#\s*(No)?Source'$srcno'-md5\s*:/i or /^\s*BuildRequires:\s*digest\(%SOURCE'$srcno'\)/i);
print "'"$tag$md5"'\n" if /^Source'$srcno'\s*:\s+/;
' \
- $SPEC_DIR/$SPECFILE
+ $PACKAGE_DIR/$SPECFILE
fi
done
}
-check_md5()
-{
+check_md5() {
[ "$NO5" = "yes" ] && return
update_shell_title "check md5"
@@ -963,8 +975,7 @@
done
}
-get_files()
-{
+get_files() {
update_shell_title "get_files"
if [ -n "$DEBUG" ]; then
@@ -973,7 +984,7 @@
fi
if [ $# -gt 0 ]; then
- cd "$SOURCE_DIR"
+ cd "$PACKAGE_DIR"
if [ ! -s CVS/Root -a "$NOCVS" != "yes" ]; then
echo "Warning: No CVS access defined for SOURCES"
@@ -1192,13 +1203,12 @@
TAG=$1
- cd "$SPEC_DIR"
- cvs status -v $SPECFILE | grep -Eiq "${TAG}.+(branch: [0-9.]+)"
+ cd "$PACKAGE_DIR"
+ $CVS_COMMAND status -v $SPECFILE | grep -Eiq "${TAG}.+(branch: [0-9.]+)"
return $?
}
-tag_files()
-{
+tag_files() {
TAG_FILES="$@"
if [ -n "$DEBUG" ]; then
@@ -1235,7 +1245,7 @@
OPTIONS="$OPTIONS -B"
fi;
- cd "$SOURCE_DIR"
+ cd "$PACKAGE_DIR"
local tag_files
for i in $TAG_FILES; do
# don't tag files stored on distfiles
@@ -1254,7 +1264,7 @@
if [ "$TAG_VERSION" = "yes" ]; then
update_shell_title "tag sources: $TAGVER"
printf "Tagging %d files\n" $(echo $tag_files | wc -w)
- cvs $OPTIONS $TAGVER $tag_files || exit
+ $CVS_COMMAND $OPTIONS $TAGVER $tag_files || exit
fi
if [ -n "$TAG" ]; then
update_shell_title "tag sources: $TAG"
@@ -1262,25 +1272,24 @@
while [ "$tag_files" ]; do
local chunk=$(echo $tag_files | tr ' ' '\n' | head -n 100)
printf "Tagging %d files\n" $(echo $chunk | wc -w)
- cvs $OPTIONS $TAG $chunk || exit
+ $CVS_COMMAND $OPTIONS $TAG $chunk || exit
tag_files=$(echo $tag_files | tr ' ' '\n' | tail +101)
done
fi
fi
- cd "$SPEC_DIR"
+ cd "$PACKAGE_DIR"
if [ "$TAG_VERSION" = "yes" ]; then
update_shell_title "tag spec: $TAGVER"
- cvs $OPTIONS $TAGVER $SPECFILE || exit
+ $CVS_COMMAND $OPTIONS $TAGVER $SPECFILE || exit
fi
if [ -n "$TAG" ]; then
update_shell_title "tag spec: $TAG"
- cvs $OPTIONS $TAG $SPECFILE || exit
+ $CVS_COMMAND $OPTIONS $TAG $SPECFILE || exit
fi
}
-branch_files()
-{
+branch_files() {
TAG=$1
echo "CVS branch tag: $TAG"
shift
@@ -1303,7 +1312,7 @@
if [ -n "$CVSROOT" ]; then
OPTIONS="-d $CVSROOT $OPTIONS"
fi
- cd "$SOURCE_DIR"
+ cd "$PACKAGE_DIR"
local tag_files
for i in $TAG_FILES; do
local fp=`nourl "$i"`
@@ -1316,11 +1325,11 @@
fi
done
if [ "$tag_files" ]; then
- cvs $OPTIONS $TAG $tag_files || exit
+ $CVS_COMMAND $OPTIONS $TAG $tag_files || exit
fi
- cd "$SPEC_DIR"
- cvs $OPTIONS $TAG $SPECFILE || exit
+ cd "$PACKAGE_DIR"
+ $CVS_COMMAND $OPTIONS $TAG $SPECFILE || exit
}
@@ -1336,16 +1345,14 @@
fi
}
-
-build_package()
-{
+build_package() {
update_shell_title "build_package"
if [ -n "$DEBUG" ]; then
set -x
set -v
fi
- cd "$SPEC_DIR"
+ cd "$PACKAGE_DIR"
if [ -n "$TRY_UPGRADE" ]; then
update_shell_title "build_package: try_upgrade"
@@ -1373,7 +1380,7 @@
unset TOLDVER TNEWVER TNOTIFY
fi
fi
- cd "$SPEC_DIR"
+ cd "$PACKAGE_DIR"
case "$COMMAND" in
build )
@@ -1406,7 +1413,7 @@
fi
RES_FILE=$(mktemp -t builder.XXXXXX || ${TMPDIR:-/tmp}/builder.$RANDOM)
- (time eval ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG
+ (time eval ${NICE_COMMAND} $RPMBUILD $TARGET_SWITCH $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND --define \'_specdir $PACKAGE_DIR\' --define \'_sourcedir $PACKAGE_DIR\' $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG
RETVAL=`cat $RES_FILE`
rm $RES_FILE
if [ -n "$LOGDIROK" ] && [ -n "$LOGDIRFAIL" ]; then
@@ -1417,7 +1424,7 @@
fi
fi
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/rpm-build-tools/builder.sh?r1=1.24&r2=1.25&f=u
More information about the pld-cvs-commit
mailing list