@@ -1,23 +1,95 @@
1−language: haskell
2−ghc:
3− # Idris won't build on 7.4 and earlier due to dependency
4− # problems. 7.10 isn't yet supported on Travis.
5− - 7.6
6− - 7.8
1+sudo: false
2+
3+language: c
4+
5+addons:
6+ apt:
7+ sources:
8+ - hvr-ghc
9+ packages:
10+ - ghc-7.6.3
11+ - ghc-7.8.4
12+ - ghc-7.10.2
13+ - cabal-install-1.20
14+ - cabal-install-1.22
15+ # test dependencies
16+ - expect
17+ - cppcheck
18+ - hscolour
19+
20+matrix:
21+ include:
22+ - env: CABALVER="1.20" GHCVER="7.6.3" TESTS="test_c"
23+ # separate caches for different compiler versions
24+ # until https://github.com/travis-ci/travis-ci/issues/4393 is resolved
25+ compiler: ": #GHC 7.6.3"
26+ - env: CABALVER="1.20" GHCVER="7.8.4" TESTS="lib_doc doc"
27+ compiler: ": #GHC 7.8.4"
28+ - env: CABALVER="1.20" GHCVER="7.8.4" TESTS="test_js"
29+ compiler: ": #GHC 7.8.4"
30+ - env: CABALVER="1.20" GHCVER="7.8.4" TESTS="test_c"
31+ compiler: ": #GHC 7.8.4"
32+ - env: CABALVER="1.22" GHCVER="7.10.2" TESTS="lib_doc doc"
33+ compiler: ": #GHC 7.10.2"
34+ - env: CABALVER="1.22" GHCVER="7.10.2" TESTS="test_js"
35+ compiler: ": #GHC 7.10.2"
36+ - env: CABALVER="1.22" GHCVER="7.10.2" TESTS="test_c"
37+ compiler: ": #GHC 7.10.2"
38+
39+cache:
40+ directories:
41+ - $HOME/.cabsnap
42+ - $HOME/.cabal/packages
43+
44+before_cache:
45+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
46+ - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar
747
848before_install:
9− - sudo apt-get update -qq
10− - sudo apt-get install -qq libghc-unordered-containers-dev libghc-mtl-dev libghc-network-dev libghc-transformers-dev libghc-text-dev libghc-utf8-string-dev libghc-vector-dev libghc-split-dev libghc-ansi-terminal-dev libghc-ansi-wl-pprint-dev
11− # trifecta dependencies
12− - sudo apt-get install -qq libghc-blaze-builder-dev libghc-blaze-html-dev libghc-bifunctors-dev libghc-hashable-dev libghc-semigroups-dev libghc-semigroupoids-dev libghc-parallel-dev libghc-comonad-dev libghc-terminfo-dev libghc-keys-dev
13− # Haddock dependencies
14− - sudo apt-get install hscolour
15− # test dependency
16− - sudo apt-get install -qq expect
17− - sudo apt-get install -qq cppcheck
49+ - unset CC
50+ - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.cabal/bin:$PATH
51+ - env
52+
1853install:
19− - cabal install -f FFI --enable-tests --dependencies-only --max-backjumps=-1
20− - ghc-pkg list
54+ - cabal --version
55+ - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"
56+ - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ];
57+ then
58+ zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz >
59+ $HOME/.cabal/packages/hackage.haskell.org/00-index.tar;
60+ fi
61+ - travis_retry cabal update -v
62+ # Run build with 2 parallel jobs
63+ # The container environment reports 16 cores,
64+ # causing cabal's default configuration (jobs: $ncpus)
65+ # to run into the GHC #9221 bug which can result in longer build-times.
66+ - sed -i -r 's/(^jobs:).*/\1 2/' $HOME/.cabal/config
67+ - cabal install -f FFI --only-dependencies --enable-tests --dry -v > installplan.txt
68+ - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt
69+
70+ # check whether current requested install-plan matches cached package-db snapshot
71+ - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt;
72+ then
73+ echo "cabal build-cache HIT";
74+ rm -rfv .ghc;
75+ cp -a $HOME/.cabsnap/ghc $HOME/.ghc;
76+ cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/;
77+ else
78+ echo "cabal build-cache MISS";
79+ rm -rf $HOME/.cabsnap;
80+ mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin;
81+ cabal install -f FFI --only-dependencies --enable-tests;
82+ fi
83+
84+ # snapshot package-db on cache miss
85+ - if [ ! -d $HOME/.cabsnap ];
86+ then
87+ echo "snapshotting package-db to build-cache";
88+ mkdir $HOME/.cabsnap;
89+ cp -a $HOME/.ghc $HOME/.cabsnap/ghc;
90+ cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/;
91+ fi
92+
2193before_script:
2294 - cabal sdist
2395 - cd ..
@@ -25,15 +97,13 @@ before_script:
2597 - cd idris*
2698script:
2799 - cabal configure -f FFI -f CI
28− - if [[ "$TESTS" != "doc" ]]; then cabal build; fi
29− - if [[ "$TESTS" != "doc" ]]; then cabal copy; fi
30− - if [[ "$TESTS" != "doc" ]]; then cabal register; fi
31− - if [[ "$TESTS" == "test_c" ]]; then cppcheck -j 2 --error-exitcode=1 ./rts/idris_bitstring.c ./rts/idris_bitstring.h ./rts/idris_gc.h ./rts/idris_gc.c ./rts/idris_gmp.h ./rts/idris_gmp.c ./rts/idris_heap.h ./rts/idris_heap.c ./rts/idris_main.c ./rts/idris_net.h ./rts/idris_net.c ./rts/idris_opts.h ./rts/idris_opts.c ./rts/idris_rts.h ./rts/idris_rts.c ./rts/idris_stats.h ./rts/idris_stats.c ./rts/idris_stdfgn.h ./rts/idris_stdfgn.c ./rts/libtest.c ; fi
32− - if [[ "$TESTS" == "test_llvm" ]]; then git clone --depth 1 https://github.com/idris-hackers/idris-llvm.git ; cd idris-llvm ; cabal install ; cd .. ; fi
33− - make -j2 $TESTS
34−env:
35− - TESTS="doc"
36− - TESTS="lib_doc"
37− - TESTS="test_c"
38− #- TESTS="test_llvm"
39− - TESTS="test_js"
100+ - cabal build
101+ - cabal copy
102+ - cabal register
103+ - if [[ "$TESTS" == "test_c" ]]; then
104+ cppcheck -i 'mini-gmp.c' rts;
105+ fi
106+ - for test in $TESTS; do
107+ echo "make -j2 $test";
108+ make -j2 $test;
109+ done