blob: 25cb7cc4fb4a5bf0cc37520cf2031d9257a182f9 [file] [log] [blame]
#!/bin/bash
# update all known gstreamer modules
# build them one by one
# report failures at the end
# run this from a directory that contains the checkouts for each of the
# modules
PIDS=
CORE="\
gstreamer gst-plugins-base"
MODULES="\
gst-plugins-good gst-plugins-ugly gst-plugins-bad \
gst-libav"
EXTRA_MODULES="\
gst-editing-services \
gst-rtsp-server \
gst-python"
tmp=${TMPDIR-/tmp}
tmp=$tmp/git-update.$(date +%Y%m%d-%H%M-).$RANDOM.$RANDOM.$RANDOM.$$
(umask 077 && mkdir "$tmp") || {
echo "Could not create temporary directory! Exiting." 1>&2
exit 1
}
ERROR_LOG="$tmp/failures.log"
ERROR_RETURN=255
CPUCORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo "1")
for m in $CORE $MODULES $EXTRA_MODULES; do
if test -d $m; then
echo "+ updating $m"
cd $m
git pull --rebase
if test $? -ne 0
then
echo "$m: update (trying stash, pull, stash apply)" >> $ERROR_LOG
git stash
git pull --rebase
if test $? -ne 0
then
echo "$m: update" >> $ERROR_LOG
cd ..
continue
fi
git stash apply
fi
git submodule update
if test $? -ne 0
then
echo "$m: update (submodule)" >> $ERROR_LOG
cd ..
continue
fi
cd ..
fi
done
build()
{
if test -d $1; then
cd $1
if test ! -e Makefile
then
if test -e autoregen.sh
then
echo "+ $1: autoregen.sh"
./autoregen.sh > "$tmp/$1-regen.log" 2>&1
if test $? -ne 0
then
echo "$1: autoregen.sh [$tmp/$1-regen.log]" >> $ERROR_LOG
cd ..
return $ERROR_RETURN
fi
echo "+ $1: autoregen.sh done"
else
echo "+ $1: autogen.sh"
./autogen.sh > "$tmp/$1-gen.log" 2>&1
if test $? -ne 0
then
echo "$1: autogen.sh [$tmp/$1-gen.log]" >> $ERROR_LOG
cd ..
return $ERROR_RETURN
fi
echo "+ $1: autogen.sh done"
fi
fi
echo "+ $1: make"
MAKEFLAGS="-j$CPUCORES $MAKEFLAGS" make > "$tmp/$1-make.log" 2>&1
if test $? -ne 0
then
echo "$1: make [$tmp/$1-make.log]" >> $ERROR_LOG
cd ..
return $ERROR_RETURN
fi
echo "+ $1: make done"
if test "x$CHECK" != "x"; then
echo "+ $1: make check"
make check > "$tmp/$1-check.log" 2>&1
if test $? -ne 0
then
echo "$1: check [$tmp/$1-check.log]" >> $ERROR_LOG
cd ..
return
fi
echo "+ $1: make check done"
fi
cd ..
fi
}
beach()
{
if test -e $ERROR_LOG; then
echo "Failures:"
echo
cat $ERROR_LOG
else
echo "Update done"
rm -rf "$tmp"
fi
exit
}
# build core and base plugins sequentially
# exit if build fails (excluding checks)
for m in $CORE; do
build $m
if [ $? -eq $ERROR_RETURN ]; then
beach
fi
done
# build other modules in parallel
for m in $MODULES $EXTRA_MODULES; do
build $m &
PIDS="$PIDS $!"
done
wait $PIDS
beach