#!/bin/sh
set -e
update=1
sources=0
changes=1
arch=`dpkg-architecture -qDEB_BUILD_ARCH`
cvsroot=":pserver:cvs@root.cern.ch:/user/cvs"
svnroot="https://root.cern.ch/svn/root/"
version=
clean=1
debug=0
lintian=1
build=1
orig_only=0
workdir=
srcdir=
tag=
branch=
savdir=`pwd`
scrdir=
sign=1
pbuild=0
# ____________________________________________________________________
message()
{
opt=
post=
while test $# -gt 0 ; do
case $1 in
-n) post=" ..." ; opt="$opt $1" ;;
-*) opt="$opt $1" ;;
*) break;;
esac
shift
done
echo $opt "[1m$@[0m${post}"
}
# ____________________________________________________________________
check_retval()
{
retval=$?
if test $# -gt 0 ; then
message -n $@ ":"
fi
if test $retval -ne 0 ; then
echo "[1;31m Failure[0m"
cd $savdir
exit $retval
else
echo "[1;32m OK[0m"
fi
}
# ____________________________________________________________________
get_original()
{
# if test -f $orig && test ! -d ${origdir}; then
# echo -n "Extracting existing orig file ... "
# tar -xzf ${orig}
# echo "done"
# fi
if test -f ${orig} && test $sources -eq 0 ; then
message -n "Using existing source tar-ball ${orig}"
check_retval
return 0
fi
if test ! -d ${origdir} ; then
message -n "Getting original sources w/tag=$tag, w/branch=$branch"
if test "x$tag" != "x" ; then
cmd="co"
dir="tags/${tag}"
elif test "x$branch" != "x" ; then
cmd="co"
dir="branches/${branch}"
else
cmd="co"
dir="trunk"
fi
# cvs -qd $cvsroot $cmd -d ${origdir} root > orig-${version}.log
svn co $svnroot/$dir ${origdir} > $workdir/orig-${version}.log 2>&1
check_retval
fi
if test ${origdir} -nt ${orig} || test $sources -gt 0 ; then
cd ${origdir}
if test $update -gt 0 ; then
message "Updating original sources (`pwd`)"
${scrdir}/changes.sh --verbose --update-only --srcdir ${srcdir} \
>> $workdir/orig-${version}.log 2>&1
else
message "Preparing directory $origdir"
./build/package/lib/makedebdir.sh --no-setup --purge
>> $workdir/orig-${version}.log 2>&1
fi
check_retval "Update original sources"
cd ..
message -n "Creating tar-ball"
#cp extra/s050000l.p* ${origdir}/build/package/common/
#cp extra/root-system-bin.png ${origdir}/build/package/debian/
tar --exclude=CVS \
--exclude=.cvsignore \
--exclude=.svn \
-czf ${orig} ${origdir}
check_retval
fi
}
# ____________________________________________________________________
prep_sources()
{
rm -f \
io/xml/inc/TXMLEngine.h \
io/xml/src/TXMLEngine.cxx
# proof/proofplayer/inc/TFileMerger.h \
# proof/proofplayer/src/TFileMerger.cxx
# proof/proofplayer/inc/TFileMerger.h \
# proof/proofplayer/src/TFileMerger.cxx
# geom/geompainter/inc/TGeoOverlap.h \
# geom/geompainter/src/TGeoOverlap.cxx \
rm -f \
math/unuran/src/.bogus.tar.gz
rm -rf htmldoc
copts=""
if test $update -gt 0 ; then copts="$opts --update" ; fi
if test $changes -gt 0 ; then copts="$opts --changes" ; fi
message "Preparing sources ($copts)"
if test "x$copts" != "x" ; then
${scrdir}/changes.sh ${revision} --verbose ${copts}
else
./build/package/lib/makedebdir.sh --purge --no-setup --leave-old
fi
check_retval "Preparing sources"
message "Running prep script ..."
./build/package/lib/makedebdir.sh --clean
check_retval "Running prep script"
for p in ${scrdir}/extra/*.patch ; do
if test ! -f $p ; then continue ; fi
message -n "Applying patch $p"
patch -d. -p1 < $p
check_retval
done
rm -f debian/control
message "Making control file ..."
fakeroot debian/rules debian/control
check_retval "Making control file"
}
# ____________________________________________________________________
build_package()
{
message "Now building"
opt="-i"
if test $pbuild -lt 1 ; then opt="$opt -rfakeroot" ; fi
if test $clean -lt 1 ; then opt="$opt -nc" ; fi
if test $pbuild -lt 1 ; then opt="$opt -ICVS"; fi
if test $sign -lt 1 ; then opt="$opt -us -uc" ; fi
if test $nobin -gt 0 ; then opt="$opt -S" ; fi
if test $debug -gt 0 ; then
export DEB_BUILD_OPTIONS="debug nostrip noopt"
fi
cmd=dpkg-buildpackage
lognam=build
if test $pbuild -gt 0 ; then
opt="--debbuildopts \"$opt\""
cmd=pdebuild
lognam=pbuild
fi
echo $cmd $opt
$cmd ${opt} 2> /dev/stdout | \
tee ${workdir}/${lognam}-${version}-${revision}.log
check_retval "Building package"
cd ../
if test $lintian -gt 0 && test $pbuild -lt 1; then
lintian -i root-system_${version}-${revision}_${arch}.changes \
2> /dev/stdout | tee ${workdir}/lintian_${version}-${revision}.log
fi
}
# ____________________________________________________________________
usage()
{
cat <<EOF
Usage: $0 [OPTIONS]
Options:
-h,--help Show this help
-b,--no-build Do not build the packages, just prepare
-u,--no-update Do not run the updates
-c,--no-changes Do not make changes
-s,--sources Force remake of source tar-ball
-P,--source-pkg Only generate a source package
-o,--orig-only Only make the orig tar-ball
-n,--no-clean Do not clean Debian directory
-g,--no-sign Do not sign packages
-p,--pbuilder Use pbuilder (clean-room chroot build)
-d,--debug Build debug packages
-l,--lint Run lintian on the packages
-S,--source-dir Set the source directory
-w,--workdir Set the working directory
EOF
exit 0
}
# ____________________________________________________________________
while test $# -gt 0 ; do
case $1 in
-h|--help) usage ;;
-u|--no-update) update=0; ;;
-c|--no-changes) changes=0 ;;
-s|--sources) sources=1 ;;
-n|--no-clean) clean=0 ;;
-b|--no-build) build=0 ;;
-d|--debug) debug=1 ;;
-l|--lint) lintian=1 ;;
-o|--orig-only) orig_only=1 ;;
-S|--source-dir) srcdir=$2 ; shift ;;
-g|--no-sign) sign=0 ;;
-w|--workdir) workdir=$2 ; shift ;;
-B|--scriptdir) scrdir=$2 ; shift ;;
-p|--pbuilder) pbuild=1 ; lintian=0 ;;
-P|--source-pkg) nobin=1 ; lintian=0 ; pbuild=0 ;;
*) version=$1 ;;
esac
shift
done
# ____________________________________________________________________
if test "x$workdir" = "x" ; then
workdir=`pwd`
workdir=`dirname $workdir`
fi
if test "x$srcdir" = "x" ; then
srcdir=$workdir/root
fi
if test "x$scrdir" = "x" ; then
scrdir=`dirname $0`
fi
# ____________________________________________________________________
savdir=`pwd`
if test ! -d ${srcdir} ; then
echo "Directory ${srcdir} not found"
exit 2;
fi
message -n "Getting the version number ... "
version=`cat ${srcdir}/build/version_number | tr '/' '.'`
case $version in
*.*.00*) branch="v`echo $version | sed 's,[./],-,'g`-patches" ;;
*)
esac
version=`echo $version | sed 's/\([0-9.]*\).*/\1/'`
orig=root-system_${version}.orig.tar.gz
origdir=root-system-${version}.orig
check_retval "$version"
# ____________________________________________________________________
message -n "Getting the revision number ..."
revision=`head -n 1 ${srcdir}/build/package/debian/changelog | sed "s/root-system (${version}-\([0-9][-0-9]*\)).*/\1/"`
# echo "Version: $version Revision: $revision"
check_retval $revision
cd ${workdir}
get_original
if test $orig_only -gt 0 ; then
exit 0
fi
# ____________________________________________________________________
message "Changing directory to ${srcdir}"
cd ${srcdir}
prep_sources
if test $build -gt 0 ; then
build_package
fi
cd ${savdir}
# ____________________________________________________________________
#
# EOF
#