diff --git a/.travis.yml b/.travis.yml index e541ee1608848..8a70383576a08 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,25 +2,30 @@ language: c sudo: false os: - linux - - osx +compiler: + - clang +matrix: + exclude: + - os: osx + compiler: gcc addons: apt: packages: - yasm - diffutils -compiler: - - clang - - gcc cache: directories: - ffmpeg-samples before_install: + - git fetch --depth=1000000 + - openssl aes-256-cbc -K $encrypted_9601c2dd51ac_key -iv $encrypted_9601c2dd51ac_iv + -in .travis/ssh_key.enc -out .travis/ssh_key -d - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update --all; fi install: - if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install yasm; fi script: - mkdir -p ffmpeg-samples - - ./configure --samples=ffmpeg-samples --cc=$CC - - make -j 8 - - make fate-rsync - - make check -j 8 + - rsync -vrltLW --timeout=60 rsync://fate-suite.ffmpeg.org/fate-suite/ ffmpeg-samples + - cp -a .travis $HOME/ffmpeg-travis + - git reset --hard HEAD^ + - sh $HOME/ffmpeg-travis/fate.sh $HOME/ffmpeg-travis/fate_config.sh diff --git a/.travis/fate.sh b/.travis/fate.sh new file mode 100755 index 0000000000000..1809149b5ac03 --- /dev/null +++ b/.travis/fate.sh @@ -0,0 +1,122 @@ +#! /bin/sh + +config=$1 + +die(){ + echo "$@" + exit 1 +} + +test -r "$config" || die "usage: fate.sh " + +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 \ + ${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} -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}/config.fate >>report + cat ${build}/tests/data/fate/*.rep >>report || 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}/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 | tee configure.log || fail 3 "error configuring" +compile | tee compile.log || fail 2 "error compiling" +fate | tee test.log || fail 1 "error testing" +report 0 success +clean diff --git a/.travis/fate_config.sh b/.travis/fate_config.sh new file mode 100644 index 0000000000000..c38a69e133a71 --- /dev/null +++ b/.travis/fate_config.sh @@ -0,0 +1,39 @@ +if [ "$TRAVIS_OS_NAME" = linux ]; then + if echo "$CC" | grep -q clang; then + slot=x86_64-linux-gnu-clang-3.4-travis + else + slot=x86_64-linux-gnu-gcc-4.6-travis + fi +elif [ "$TRAVIS_OS_NAME" = osx ]; then + slot=x86_64-darwin-clang-apple-6.1-travis +fi +repo=$(pwd) # the source repository +branch=master # the branch to test +samples=ffmpeg-samples # path to samples directory +workdir=$HOME/fate-work # directory in which to do all the work +mkdir -p $workdir +fate_recv="ssh -i $HOME/ffmpeg-travis/ssh_key -T fate@fate.ffmpeg.org" # command to submit report +comment='Travis CI' # optional description +build_only= # set to "yes" for a compile-only instance that skips tests + +# the following are optional and map to configure options +arch= +cpu= +cross_prefix= +as= +cc=$CC +ld= +target_os= +sysroot= +target_exec= +target_path= +target_samples= +extra_cflags= +extra_ldflags= +extra_libs= +extra_conf= # extra configure options not covered above + +#make= # name of GNU make if not 'make' +makeopts= # extra options passed to 'make' +#tar= # command to create a tar archive from its arguments on stdout, + # defaults to 'tar c' diff --git a/.travis/ssh_key.enc b/.travis/ssh_key.enc new file mode 100644 index 0000000000000..e65eae797b86a Binary files /dev/null and b/.travis/ssh_key.enc differ