fate.sh 3.01 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 47 48

. "$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" ;;
        svn:*)     svn co    "$repo" "$src" ;;
    esac
}

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

configure()(
    cd ${build} || return
    ${src}/configure                                                    \
        --prefix="${inst}"                                              \
        --samples="${samples}"                                          \
49
        --enable-gpl                                                    \
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
        ${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
)

74 75 76 77
clean(){
    rm -r ${build} ${inst}
}

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

fail(){
    report "$@"
87
    clean
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
    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}/version.sh ${src})
104 105
test "$version" = "$(cat version-$slot 2>/dev/null)" && exit 0
echo ${version} >version-$slot
106

107
rm -rf "${build}" *.log
108 109 110 111 112 113
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
114
clean