forked from FFmpeg/FFmpeg
![Diego Biurrun](/assets/img/avatar_default.png)
If configure fails before config.fate is generated, the report file misses some values and gets discarded by the FATE server. In these cases, print those values as "failed" along with the failing configure command line.
123 lines
3.8 KiB
Bash
Executable file
123 lines
3.8 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
config=$1
|
|
|
|
die(){
|
|
echo "$@"
|
|
exit 1
|
|
}
|
|
|
|
test -r "$config" || die "usage: fate.sh <config>"
|
|
|
|
workdir=$(cd $(dirname $config) && pwd)
|
|
make=make
|
|
tar='tar c'
|
|
|
|
. "$config"
|
|
|
|
test -n "$slot" || die "slot not specified"
|
|
test -n "$repo" || die "repo not specified"
|
|
test -d "$samples" || die "samples location not specified"
|
|
|
|
: ${branch:=master}
|
|
|
|
lock(){
|
|
lock=$1/fate.lock
|
|
(set -C; exec >$lock) 2>/dev/null || return
|
|
trap 'rm $lock' EXIT
|
|
}
|
|
|
|
checkout(){
|
|
case "$repo" in
|
|
file:*|/*) src="${repo#file:}" ;;
|
|
git:*) git clone --quiet --branch "$branch" "$repo" "$src" ;;
|
|
esac
|
|
}
|
|
|
|
update()(
|
|
cd ${src} || return
|
|
case "$repo" in
|
|
git:*) git fetch --quiet --force && git reset --quiet --hard "origin/$branch" ;;
|
|
esac
|
|
)
|
|
|
|
configure()(
|
|
cd ${build} || return
|
|
${shell} ${src}/configure \
|
|
--prefix="${inst}" \
|
|
--samples="${samples}" \
|
|
--enable-gpl \
|
|
--enable-memory-poisoning \
|
|
--enable-avresample \
|
|
${ignore_tests:+--ignore-tests="$ignore_tests"} \
|
|
${arch:+--arch=$arch} \
|
|
${cpu:+--cpu="$cpu"} \
|
|
${toolchain:+--toolchain="$toolchain"} \
|
|
${cross_prefix:+--cross-prefix="$cross_prefix"} \
|
|
${as:+--as="$as"} \
|
|
${cc:+--cc="$cc"} \
|
|
${ld:+--ld="$ld"} \
|
|
${target_os:+--target-os="$target_os"} \
|
|
${sysroot:+--sysroot="$sysroot"} \
|
|
${target_exec:+--target-exec="$target_exec"} \
|
|
${target_path:+--target-path="$target_path"} \
|
|
${target_samples:+--target-samples="$target_samples"} \
|
|
${extra_cflags:+--extra-cflags="$extra_cflags"} \
|
|
${extra_ldflags:+--extra-ldflags="$extra_ldflags"} \
|
|
${extra_libs:+--extra-libs="$extra_libs"} \
|
|
${extra_conf}
|
|
)
|
|
|
|
compile()(
|
|
cd ${build} || return
|
|
${make} ${makeopts} && ${make} install
|
|
)
|
|
|
|
fate()(
|
|
test "$build_only" = "yes" && return
|
|
cd ${build} || return
|
|
${make} ${makeopts_fate-${makeopts}} -k fate
|
|
)
|
|
|
|
clean(){
|
|
rm -rf ${build} ${inst}
|
|
}
|
|
|
|
report(){
|
|
date=$(date -u +%Y%m%d%H%M%S)
|
|
echo "fate:1:${date}:${slot}:${version}:$1:$2:${branch}:${comment}" >report
|
|
cat ${build}/ffbuild/config.fate >>report
|
|
cat ${build}/tests/data/fate/*.rep >>report 2>/dev/null || for i in ${build}/tests/data/fate/*.rep ; do cat "$i" >>report 2>/dev/null; done
|
|
test -n "$fate_recv" && $tar report *.log | gzip | $fate_recv
|
|
}
|
|
|
|
fail(){
|
|
report "$@"
|
|
clean
|
|
exit
|
|
}
|
|
|
|
mkdir -p ${workdir} || die "Error creating ${workdir}"
|
|
lock ${workdir} || die "${workdir} locked"
|
|
cd ${workdir} || die "cd ${workdir} failed"
|
|
|
|
src=${workdir}/src
|
|
: ${build:=${workdir}/build}
|
|
: ${inst:=${workdir}/install}
|
|
|
|
test -d "$src" && update || checkout || die "Error fetching source"
|
|
|
|
cd ${workdir}
|
|
|
|
version=$(${src}/ffbuild/version.sh ${src})
|
|
test "$version" = "$(cat version-$slot 2>/dev/null)" && exit 0
|
|
echo ${version} >version-$slot
|
|
|
|
rm -rf "${build}" *.log
|
|
mkdir -p ${build}
|
|
|
|
configure >configure.log 2>&1 || fail 3 "error configuring"
|
|
compile >compile.log 2>&1 || fail 2 "error compiling"
|
|
fate >test.log 2>&1 || fail 1 "error testing"
|
|
report 0 success
|
|
clean
|