yading@11
|
1 #! /bin/sh
|
yading@11
|
2
|
yading@11
|
3 config=$1
|
yading@11
|
4
|
yading@11
|
5 die(){
|
yading@11
|
6 echo "$@"
|
yading@11
|
7 exit 1
|
yading@11
|
8 }
|
yading@11
|
9
|
yading@11
|
10 test -r "$config" || die "usage: fate.sh <config>"
|
yading@11
|
11
|
yading@11
|
12 workdir=$(cd $(dirname $config) && pwd)
|
yading@11
|
13 make=make
|
yading@11
|
14 tar='tar c'
|
yading@11
|
15
|
yading@11
|
16 . "$config"
|
yading@11
|
17
|
yading@11
|
18 test -n "$slot" || die "slot not specified"
|
yading@11
|
19 test -n "$repo" || die "repo not specified"
|
yading@11
|
20 test -d "$samples" || die "samples location not specified"
|
yading@11
|
21
|
yading@11
|
22 lock(){
|
yading@11
|
23 lock=$1/fate.lock
|
yading@11
|
24 (set -C; exec >$lock) 2>/dev/null || return
|
yading@11
|
25 trap 'rm $lock' EXIT
|
yading@11
|
26 }
|
yading@11
|
27
|
yading@11
|
28 checkout(){
|
yading@11
|
29 case "$repo" in
|
yading@11
|
30 file:*|/*) src="${repo#file:}" ;;
|
yading@11
|
31 git:*) git clone "$repo" "$src" ;;
|
yading@11
|
32 esac
|
yading@11
|
33 }
|
yading@11
|
34
|
yading@11
|
35 update()(
|
yading@11
|
36 cd ${src} || return
|
yading@11
|
37 case "$repo" in
|
yading@11
|
38 git:*) git pull --quiet ;;
|
yading@11
|
39 esac
|
yading@11
|
40 )
|
yading@11
|
41
|
yading@11
|
42 configure()(
|
yading@11
|
43 cd ${build} || return
|
yading@11
|
44 ${shell} ${src}/configure \
|
yading@11
|
45 --prefix="${inst}" \
|
yading@11
|
46 --samples="${samples}" \
|
yading@11
|
47 --enable-gpl \
|
yading@11
|
48 --enable-memory-poisoning \
|
yading@11
|
49 ${arch:+--arch=$arch} \
|
yading@11
|
50 ${cpu:+--cpu="$cpu"} \
|
yading@11
|
51 ${cross_prefix:+--cross-prefix="$cross_prefix"} \
|
yading@11
|
52 ${cc:+--cc="$cc"} \
|
yading@11
|
53 ${ld:+--ld="$ld"} \
|
yading@11
|
54 ${target_os:+--target-os="$target_os"} \
|
yading@11
|
55 ${sysroot:+--sysroot="$sysroot"} \
|
yading@11
|
56 ${target_exec:+--target-exec="$target_exec"} \
|
yading@11
|
57 ${target_path:+--target-path="$target_path"} \
|
yading@11
|
58 ${extra_cflags:+--extra-cflags="$extra_cflags"} \
|
yading@11
|
59 ${extra_ldflags:+--extra-ldflags="$extra_ldflags"} \
|
yading@11
|
60 ${extra_libs:+--extra-libs="$extra_libs"} \
|
yading@11
|
61 ${extra_conf}
|
yading@11
|
62 )
|
yading@11
|
63
|
yading@11
|
64 compile()(
|
yading@11
|
65 cd ${build} || return
|
yading@11
|
66 ${make} ${makeopts} && ${make} install
|
yading@11
|
67 )
|
yading@11
|
68
|
yading@11
|
69 fate()(
|
yading@11
|
70 cd ${build} || return
|
yading@11
|
71 ${make} ${makeopts} -k fate
|
yading@11
|
72 )
|
yading@11
|
73
|
yading@11
|
74 clean(){
|
yading@11
|
75 rm -rf ${build} ${inst}
|
yading@11
|
76 }
|
yading@11
|
77
|
yading@11
|
78 report(){
|
yading@11
|
79 date=$(date -u +%Y%m%d%H%M%S)
|
yading@11
|
80 echo "fate:0:${date}:${slot}:${version}:$1:$2:${comment}" >report
|
yading@11
|
81 cat ${build}/config.fate ${build}/tests/data/fate/*.rep >>report
|
yading@11
|
82 test -n "$fate_recv" && $tar report *.log | gzip | $fate_recv
|
yading@11
|
83 }
|
yading@11
|
84
|
yading@11
|
85 fail(){
|
yading@11
|
86 report "$@"
|
yading@11
|
87 clean
|
yading@11
|
88 exit
|
yading@11
|
89 }
|
yading@11
|
90
|
yading@11
|
91 mkdir -p ${workdir} || die "Error creating ${workdir}"
|
yading@11
|
92 lock ${workdir} || die "${workdir} locked"
|
yading@11
|
93 cd ${workdir} || die "cd ${workdir} failed"
|
yading@11
|
94
|
yading@11
|
95 src=${workdir}/src
|
yading@11
|
96 : ${build:=${workdir}/build}
|
yading@11
|
97 : ${inst:=${workdir}/install}
|
yading@11
|
98
|
yading@11
|
99 test -d "$src" && update || checkout || die "Error fetching source"
|
yading@11
|
100
|
yading@11
|
101 cd ${workdir}
|
yading@11
|
102
|
yading@11
|
103 version=$(${src}/version.sh ${src})
|
yading@11
|
104 test "$version" = "$(cat version-$slot 2>/dev/null)" && exit 0
|
yading@11
|
105 echo ${version} >version-$slot
|
yading@11
|
106
|
yading@11
|
107 rm -rf "${build}" *.log
|
yading@11
|
108 mkdir -p ${build}
|
yading@11
|
109
|
yading@11
|
110 configure >configure.log 2>&1 || fail $? "error configuring"
|
yading@11
|
111 compile >compile.log 2>&1 || fail $? "error compiling"
|
yading@11
|
112 fate >test.log 2>&1 || fail $? "error testing"
|
yading@11
|
113 report 0 success
|
yading@11
|
114 clean
|