VERSION="\
Build package utility from PLD Linux CVS repository
-v0.14 (C) 1999-2006 Free Penguins".
+v0.15 (C) 1999-2006 Free Penguins".
PATH="/bin:/usr/bin:/usr/sbin:/sbin:/usr/X11R6/bin"
COMMAND="build"
NOCVS=""
NOCVSSPEC=""
NODIST=""
+NOINIT=""
UPDATE=""
UPDATE5=""
ADD5=""
CHMOD="no"
CHMOD_MODE="0444"
RPMOPTS=""
+RPMBUILDOPTS=""
BCOND=""
GROUP_BCONDS="no"
CVSIGNORE_DF="no"
ATTICDISTFILES_SERVER="://attic-distfiles.pld-linux.org"
DEF_NICE_LEVEL=19
+SCHEDTOOL="auto"
FAIL_IF_NO_SOURCES="yes"
#REMOVE_BUILD_REQUIRES="force"
#GROUP_BCONDS="yes"
#LOGFILE='../LOGS/log.$PACKAGE_NAME.$DATE'
+#TITLECHANGE=no
#
SU_SUDO=""
if [ -n "$HOME_ETC" ]; then
wget --help 2>&1 | grep -q ' \-\-no-check\-certificate ' && WGET_OPTS="$WGET_OPTS --no-check-certificate"
+if [ "$SCHEDTOOL" = "auto" ]; then
+ if [ -x /usr/bin/schedtool ] && schedtool -B -e echo >/dev/null; then
+ SCHEDTOOL="schedtool -B -e"
+ else
+ SCHEDTOOL="no"
+ fi
+fi
+
if [ -n "$USE_PROZILLA" ]; then
GETURI="proz --no-getch -r -P ./ -t$WGET_RETRIES $PROZILLA_OPTS"
GETURI2="$GETURI"
if [ -n "$LASTLOG_FILE" ]; then
echo "LASTLOG=$LOG" > $LASTLOG_FILE
fi
- (nice -n ${DEF_NICE_LEVEL} ${POLDEK_CMD} `while test $# -gt 0; do echo "$1 ";shift;done` ; echo $? > ${RES_FILE})|tee -a $LOG
+ (${NICE_COMMAND} ${POLDEK_CMD} `while test $# -gt 0; do echo "$1 ";shift;done` ; echo $? > ${RES_FILE})|tee -a $LOG
return $exit_pldk
else
- (nice -n ${DEF_NICE_LEVEL} ${POLDEK_CMD} `while test $# -gt 0; do echo "$1 ";shift;done` ; echo $? > ${RES_FILE}) 1>&2 >/dev/null
+ (${NICE_COMMAND} ${POLDEK_CMD} `while test $# -gt 0; do echo "$1 ";shift;done` ; echo $? > ${RES_FILE}) 1>&2 >/dev/null
return `cat ${RES_FILE}`
rm -rf ${RES_FILE}
fi
-ns, --no-srcs - don't download Sources
-ns0, --no-source0 - don't download Source0
-nn, --no-net - don't download anything from the net
+-ni, --no-init - don't initialize builder paths (SPECS and SOURCES)
-ske,
--skip-existing-files - skip existing files in get_files
--opts <rpm opts> - additional options for rpm
-FRB, --force-remove-build-requires
- remove all you fetched with -R or --fetch-build-requires
remember, this option works without confirmation,
+-sd, --source-distfiles - list sources available from distfiles (intended for offline
+ operations; does not work when Icon field is present
+ but icon file is absent),
+-sdp, --source-distfiles-paths - list sources available from distfiles -
+ paths relative to distfiles directory (intended for offline
+ operations; does not work when Icon field is present
+ but icon file is absent),
-sf, --source-files - list sources - bare filenames (intended for offline
operations; does not work when Icon field is present
- but icon file is absent),
+ but icon file is absent),
-sp, --source-paths - list sources - filenames with full local paths (intended for
offline operations; does not work when Icon field is present
- but icon file is absent),
+ but icon file is absent),
-su, --source-urls - list urls - urls to sources and patches
intended for copying urls with spec with lots of macros in urls
-T <cvstag> , --tag <cvstag>
--with feat1 feat2 feat3 --without feat4 feat5 --with feat6
constructions. Set GROUP_BCONDS to yes to make use of it.
--target <platform>, --target=<platform>
- - build for platform <platform>.
+ - build for platform <platform>.
+--init-rpm-dir - initialize ~/rpm directory structure
"
}
echo >&2 "$(date +%s.%N) $*"
fi
- msg="builder[$SPECFILE] ${SHELL_TITLE_PREFIX:+$SHELL_TITLE_PREFIX }$msg"
- 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
+ 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"
+ 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
fi
update_shell_title "cache_rpm_dump"
- local rpm_dump=`
+ local rpm_dump
+ rpm_dump=`
# we reset macros not to contain macros.build as all the %() macros are
- # executed here, while none of them are actually needed
+ # 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:$SPECS_DIR/.rpmmacros:~/etc/.rpmmacros:~/.rpmmacros"
- local dump='%{echo:dummy: PACKAGE_NAME %{name} }%dump'
+ # at the time of this writing macros.build + macros contained 70 "%(...)" macros.
+ macrofiles="/usr/lib/rpm/macros:$SPECS_DIR/.builder-rpmmacros:~/etc/.rpmmacros:~/.rpmmacros"
+ dump='%{echo:dummy: PACKAGE_NAME %{name} }%dump'
# FIXME: better ideas than .rpmrc?
- printf 'include:/usr/lib/rpm/rpmrc\nmacrofiles:%s\n' $macrofiles > .rpmrc
+ printf 'include:/usr/lib/rpm/rpmrc\nmacrofiles:%s\n' $macrofiles > .builder-rpmrc
# TODO: move these to /usr/lib/rpm/macros
- cat > .rpmmacros <<'EOF'
+ cat > .builder-rpmmacros <<'EOF'
%requires_releq_kernel_up %{nil}
%requires_releq_kernel_smp %{nil}
+%requires_releq() %{nil}
%pyrequires_eq() %{nil}
+%requires_eq() %{nil}
+%requires_eq_to() %{nil}
%releq_kernel_up ERROR
%releq_kernel_smp 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
+%py_ver ERROR
EOF
case "$RPMBUILD" in
- rpm )
- rpm --rcfile .rpmrc -bp --nodeps --define "prep $dump" $BCOND $TARGET_SWITCH $SPECFILE 2>&1
- ;;
- rpmbuild )
- rpmbuild --rcfile .rpmrc --nodigest --nodeps --nosignature --nobuild --define "prep $dump" $BCOND $TARGET_SWITCH $SPECFILE 2>&1
- ;;
- esac`
+ rpm)
+ ARGS='-bp'
+ ;;
+ rpmbuild)
+ ARGS='--nodigest --nosignature --nobuild'
+ ;;
+ esac
+ $RPMBUILD --rcfile .builder-rpmrc $ARGS --nodeps --define "prep $dump" $BCOND $TARGET_SWITCH $SPECFILE 2>&1
+ `
if [ $? -gt 0 ]; then
- error=$(echo "$rpm_dump_cache" | sed -ne '/^error:/,$p')
-
- # ignore error if it contains "Unable to open icon"
- if [[ $error != *error:?Unable?to?open?icon* ]]; then
- echo "$error" >&2
- Exit_error err_build_fail;
- fi
+ error=$(echo "$rpm_dump" | sed -ne '/^error:/,$p')
+ echo "$error" >&2
+ Exit_error err_build_fail;
fi
# make small dump cache
rpm_dump_cache=`echo "$rpm_dump" | awk '
- /SOURCEURL[0-9]+/ {print}
- /PATCHURL[0-9]+/ {print}
- /:.*nosource.*1"/ {print}
- /PACKAGE_/ {print}
+ $2 ~ /^SOURCEURL/ {print}
+ $2 ~ /^PATCHURL/ {print}
+ $2 ~ /^nosource/ {print}
+ $2 ~ /^PACKAGE_/ {print}
'`
update_shell_title "cache_rpm_dump: OK!"
set -v;
fi
- SOURCE_DIR="`$RPM --eval '%{_sourcedir}'`"
- SPECS_DIR="`$RPM --eval '%{_specdir}'`"
+ if [ "$NOINIT" != "yes" ] ; then
+ SOURCE_DIR="`eval $RPM $RPMOPTS --eval '%{_sourcedir}'`"
+ SPECS_DIR="`eval $RPM $RPMOPTS --eval '%{_specdir}'`"
+ else
+ SOURCE_DIR="."
+ SPECS_DIR="."
+ fi
__PWD="`pwd`"
}
fi
}
+distfiles_path ()
+{
+ echo "by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")"
+}
+
distfiles_url ()
{
- echo "$PROTOCOL$DISTFILES_SERVER/distfiles/by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")"
+ echo "$PROTOCOL$DISTFILES_SERVER/distfiles/$(distfiles_path "$1")"
}
distfiles_attic_url ()
{
- echo "$PROTOCOL$ATTICDISTFILES_SERVER/distfiles/Attic/by-md5/$(src_md5 "$1" | sed -e 's|^\(.\)\(.\)|\1/\2/&|')/$(basename "$1")"
+ echo "$PROTOCOL$ATTICDISTFILES_SERVER/distfiles/Attic/$(distfiles_path "$1")"
}
good_md5 ()
echo "LASTLOG=$LOG" > $LASTLOG_FILE
fi
RES_FILE=~/tmp/$RPMBUILD-exit-status.$RANDOM
- (time eval nice -n ${DEF_NICE_LEVEL} $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $BCOND $TARGET_SWITCH $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG
+ (time eval ${NICE_COMMAND} $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND $TARGET_SWITCH $SPECFILE; echo $? > $RES_FILE) 2>&1 |tee $LOG
RETVAL=`cat $RES_FILE`
rm $RES_FILE
if [ -n "$LOGDIROK" ] && [ -n "$LOGDIRFAIL" ]; then
fi
fi
else
- eval nice -n ${DEF_NICE_LEVEL} $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $BCOND $TARGET_SWITCH $SPECFILE
+ eval ${NICE_COMMAND} $RPMBUILD $BUILD_SWITCH -v $QUIET $CLEAN $RPMOPTS $RPMBUILDOPTS $BCOND $TARGET_SWITCH $SPECFILE
RETVAL=$?
fi
if [ "$RETVAL" -ne "0" ]; then
if [ -n "$TRY_UPGRADE" ]; then
- echo "\n!!! Package with new version cannot be build automagically\n"
+ echo "\n!!! Package with new version cannot be built automagically\n"
mv -f $SPECFILE.bak $SPECFILE
fi
Exit_error err_build_fail;
fi
}
+init_rpm_dir() {
+
+ TOP_DIR="`eval $RPM $RPMOPTS --eval '%{_topdir}'`"
+ CVSROOT=":pserver:cvs@$CVS_SERVER:/cvsroot"
+
+ mkdir -p $TOP_DIR/{RPMS,BUILD,SRPMS}
+ cd $TOP_DIR
+ cvs -d $CVSROOT co SOURCES/.cvsignore SPECS/{mirrors,adapter{,.awk},fetchsrc_request,builder,repackage.sh}
+
+ init_builder
+
+ echo "To checkout *all* .spec files:"
+ echo "- remove $SPECS_DIR/CVS/Entries.Static"
+ echo "- run cvs up in $SPECS_DIR dir"
+
+ echo ""
+ echo "To commit with your developer account:"
+ echo "- edit $SPECS_DIR/CVS/Root"
+ echo "- edit $SOURCE_DIR/CVS/Root"
+}
+
#---------------------------------------------
# main()
NOSRCS="yes"
ALWAYS_CVSUP="no"
shift;;
+ -ni | --no-init )
+ NOINIT="yes"
+ shift;;
--opts )
shift; RPMOPTS="$RPM_OPTS ${1}"; shift ;;
--nopatch | -np )
-FRB | --force-remove-build-requires)
REMOVE_BUILD_REQUIRES="force"
shift ;;
+ -sd | --sources-distfiles)
+ COMMAND="list-sources-distfiles"
+ shift ;;
+ -sdp | --sources-distfiles-paths)
+ COMMAND="list-sources-distfiles-paths"
+ shift ;;
-sf | --sources-files)
COMMAND="list-sources-files"
shift ;;
-Upi | --update-poldek-indexes )
UPDATE_POLDEK_INDEXES="yes"
shift ;;
+ --init-rpm-dir)
+ COMMAND="init_rpm_dir";
+ shift ;;
-u | --try-upgrade )
TRY_UPGRADE="1"; shift ;;
-un | --try-upgrade-with-float-version )
RPMOPTS="${RPMOPTS} --nodeps"
;;
-debug)
- RPMOPTS="${RPMOPTS} -debug"; shift ;;
+ RPMBUILDOPTS="${RPMBUILDOPTS} -debug"; shift ;;
* )
SPECFILE="${1}"
# check if specname was passed as specname:cvstag
esac
fi
+if [ "$SCHEDTOOL" != "no" ]; then
+ NICE_COMMAND="$SCHEDTOOL"
+else
+ NICE_COMMAND="nice -n ${DEF_NICE_LEVEL}"
+fi
+
update_shell_title "$COMMAND"
case "$COMMAND" in
"build" | "build-binary" | "build-source" | "build-prep" )
echo $SOURCE_DIR/$(echo $SAP | awk '{gsub(/.*\//,"") ; print }')
done
;;
+ "list-sources-distfiles-paths" )
+ init_builder
+ NOCVSSPEC="yes"
+ DONT_PRINT_REVISION="yes"
+ get_spec
+ parse_spec
+ SAPS="$SOURCES $PATCHES"
+ for SAP in $SAPS ; do
+ if [ -n "$(src_md5 "$SAP")" ]; then
+ distfiles_path "$SAP"
+ fi
+ done
+ ;;
+ "list-sources-distfiles" )
+ init_builder
+ NOCVSSPEC="yes"
+ DONT_PRINT_REVISION="yes"
+ get_spec
+ parse_spec
+ SAPS="$SOURCES $PATCHES"
+ for SAP in $SAPS ; do
+ if [ -n "$(src_md5 "$SAP")" ]; then
+ distfiles_url "$SAP"
+ fi
+ done
+ ;;
+ "init_rpm_dir")
+ init_rpm_dir
+ ;;
"usage" )
usage;;
"version" )