fate.sh 2.96 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
#! /bin/sh

config=$1

die(){
    echo "$@"
    exit 1
}

test -r "$config"  || die "usage: fate.sh <config>"

12
workdir=$(cd $(dirname $config) && pwd)
13
make=make
14
tar='tar c'
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

. "$config"

test -n "$slot"    || die "slot not specified"
test -n "$repo"    || die "repo not specified"
test -d "$samples" || die "samples location not specified"

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 "$repo" "$src" ;;
    esac
}

update()(
    cd ${src} || return
    case "$repo" in
        git:*) git pull ;;
    esac
)

configure()(
    cd ${build} || return
    ${src}/configure                                                    \
        --prefix="${inst}"                                              \
        --samples="${samples}"                                          \
47
        --enable-gpl                                                    \
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
        ${arch:+--arch=$arch}                                           \
        ${cpu:+--cpu="$cpu"}                                            \
        ${cross_prefix:+--cross-prefix="$cross_prefix"}                 \
        ${cc:+--cc="$cc"}                                               \
        ${target_os:+--target-os="$target_os"}                          \
        ${sysroot:+--sysroot="$sysroot"}                                \
        ${target_exec:+--target-exec="$target_exec"}                    \
        ${target_path:+--target-path="$target_path"}                    \
        ${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()(
    cd ${build} || return
    ${make} ${makeopts} -k fate
)

72 73 74 75
clean(){
    rm -r ${build} ${inst}
}

76 77
report(){
    date=$(date -u +%Y%m%d%H%M%S)
Mans Rullgard's avatar
Mans Rullgard committed
78
    echo "fate:0:${date}:${slot}:${version}:$1:$2:${comment}" >report
79
    cat ${build}/config.fate ${build}/tests/data/fate/*.rep >>report
80
    test -n "$fate_recv" && $tar report *.log | gzip | $fate_recv
81 82 83 84
}

fail(){
    report "$@"
85
    clean
86 87 88 89 90 91 92 93
    exit
}

mkdir -p ${workdir} || die "Error creating ${workdir}"
lock ${workdir}     || die "${workdir} locked"
cd ${workdir}       || die "cd ${workdir} failed"

src=${workdir}/src
94 95
: ${build:=${workdir}/build}
: ${inst:=${workdir}/install}
96 97 98 99 100 101

test -d "$src" && update || checkout || die "Error fetching source"

cd ${workdir}

version=$(${src}/version.sh ${src})
102 103
test "$version" = "$(cat version-$slot 2>/dev/null)" && exit 0
echo ${version} >version-$slot
104

105
rm -rf "${build}" *.log
106 107 108 109 110 111
mkdir -p ${build}

configure >configure.log 2>&1 || fail $? "error configuring"
compile   >compile.log   2>&1 || fail $? "error compiling"
fate      >test.log      2>&1 || fail $? "error testing"
report 0 success
112
clean