.travis.yml 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. language: cpp
  2. branches:
  3. except:
  4. - /dev-appveyor.*/
  5. common_sources: &all_sources
  6. - ubuntu-toolchain-r-test
  7. - llvm-toolchain-trusty
  8. - llvm-toolchain-trusty-3.9
  9. - llvm-toolchain-trusty-4.0
  10. - llvm-toolchain-xenial-5.0
  11. - llvm-toolchain-xenial-6.0
  12. matrix:
  13. include:
  14. # 1/ Linux Clang Builds
  15. - os: linux
  16. compiler: clang
  17. addons:
  18. apt:
  19. sources: *all_sources
  20. packages: ['clang-3.5']
  21. env: COMPILER='clang++-3.5'
  22. - os: linux
  23. compiler: clang
  24. addons:
  25. apt:
  26. sources: *all_sources
  27. packages: ['clang-3.6']
  28. env: COMPILER='clang++-3.6'
  29. # Clang 3.7 is intentionally skipped as we cannot get it easily on
  30. # TravisCI container
  31. - os: linux
  32. compiler: clang
  33. addons:
  34. apt:
  35. sources: *all_sources
  36. packages: ['lcov', 'clang-3.8']
  37. env: COMPILER='clang++-3.8'
  38. - os: linux
  39. compiler: clang
  40. addons:
  41. apt:
  42. sources: *all_sources
  43. packages: ['clang-3.9']
  44. env: COMPILER='clang++-3.9'
  45. - os: linux
  46. compiler: clang
  47. addons:
  48. apt:
  49. sources: *all_sources
  50. packages: ['clang-4.0']
  51. env: COMPILER='clang++-4.0'
  52. - os: linux
  53. dist: xenial
  54. compiler: clang
  55. addons:
  56. apt:
  57. sources: *all_sources
  58. packages: ['clang-5.0']
  59. env: COMPILER='clang++-5.0'
  60. - os: linux
  61. dist: xenial
  62. compiler: clang
  63. addons:
  64. apt:
  65. sources: *all_sources
  66. packages: ['clang-6.0']
  67. env: COMPILER='clang++-6.0'
  68. # 2/ Linux GCC Builds
  69. - os: linux
  70. compiler: gcc
  71. addons:
  72. apt:
  73. sources: *all_sources
  74. packages: ['g++-4.8']
  75. env: COMPILER='g++-4.8'
  76. - os: linux
  77. compiler: gcc
  78. addons:
  79. apt:
  80. sources: *all_sources
  81. packages: ['g++-4.9']
  82. env: COMPILER='g++-4.9'
  83. - os: linux
  84. compiler: gcc
  85. addons:
  86. apt:
  87. sources: *all_sources
  88. packages: ['g++-5']
  89. env: COMPILER='g++-5'
  90. - os: linux
  91. compiler: gcc
  92. addons: &gcc6
  93. apt:
  94. sources: *all_sources
  95. packages: ['g++-6']
  96. env: COMPILER='g++-6'
  97. - os: linux
  98. compiler: gcc
  99. addons: &gcc7
  100. apt:
  101. sources: *all_sources
  102. packages: ['g++-7']
  103. env: COMPILER='g++-7'
  104. - os: linux
  105. compiler: gcc
  106. addons: &gcc8
  107. apt:
  108. sources: *all_sources
  109. packages: ['g++-8']
  110. env: COMPILER='g++-8'
  111. # 3b/ Linux C++14 Clang builds
  112. # Note that we need newer libstdc++ for C++14 support
  113. - os: linux
  114. compiler: clang
  115. addons:
  116. apt:
  117. packages: ['clang-3.8', 'libstdc++-6-dev']
  118. sources:
  119. - ubuntu-toolchain-r-test
  120. - llvm-toolchain-trusty
  121. env: COMPILER='clang++-3.8' CPP14=1
  122. - os: linux
  123. compiler: clang
  124. addons:
  125. apt:
  126. sources: *all_sources
  127. packages: ['clang-3.9', 'libstdc++-6-dev']
  128. env: COMPILER='clang++-3.9' CPP14=1
  129. - os: linux
  130. compiler: clang
  131. addons:
  132. apt:
  133. sources: *all_sources
  134. packages: ['clang-4.0', 'libstdc++-6-dev']
  135. env: COMPILER='clang++-4.0' CPP14=1
  136. - os: linux
  137. dist: xenial
  138. compiler: clang
  139. addons:
  140. apt:
  141. sources: *all_sources
  142. packages: ['clang-5.0', 'libstdc++-6-dev']
  143. env: COMPILER='clang++-5.0' CPP14=1
  144. - os: linux
  145. dist: xenial
  146. compiler: clang
  147. addons:
  148. apt:
  149. sources: *all_sources
  150. packages: ['clang-6.0', 'libstdc++-6-dev']
  151. env: COMPILER='clang++-6.0' CPP14=1
  152. # 4a/ Linux C++14 GCC builds
  153. - os: linux
  154. compiler: gcc
  155. addons: *gcc6
  156. env: COMPILER='g++-6' CPP14=1
  157. - os: linux
  158. compiler: gcc
  159. addons: *gcc7
  160. env: COMPILER='g++-7' CPP14=1
  161. - os: linux
  162. compiler: gcc
  163. addons: *gcc8
  164. env: COMPILER='g++-8' CPP14=1
  165. # 5/ OSX Clang Builds
  166. - os: osx
  167. osx_image: xcode7.3
  168. compiler: clang
  169. env: COMPILER='clang++'
  170. - os: osx
  171. osx_image: xcode8
  172. compiler: clang
  173. env: COMPILER='clang++'
  174. - os: osx
  175. osx_image: xcode9
  176. compiler: clang
  177. env: COMPILER='clang++'
  178. - os: osx
  179. osx_image: xcode9.1
  180. compiler: clang
  181. env: COMPILER='clang++'
  182. - os: osx
  183. osx_image: xcode9.1
  184. compiler: clang
  185. env: COMPILER='clang++' CPP14=1
  186. # 6/ Special builds -- examples, coverage, valgrind, etc.
  187. - os: linux
  188. compiler: gcc
  189. addons:
  190. apt:
  191. sources: *all_sources
  192. packages: ['lcov', 'g++-7']
  193. env: COMPILER='g++-7' CPP14=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1
  194. - os: linux
  195. compiler: clang
  196. addons:
  197. apt:
  198. packages: ['clang-3.8', 'lcov']
  199. sources:
  200. - ubuntu-toolchain-r-test
  201. - llvm-toolchain-trusty
  202. env: COMPILER='clang++-3.8' EXAMPLES=1 COVERAGE=1 EXTRAS=1
  203. - os: linux
  204. compiler: gcc
  205. addons:
  206. apt:
  207. sources: *all_sources
  208. packages: ['valgrind', 'lcov', 'g++-7']
  209. env: COMPILER='g++-7' CPP14=1 VALGRIND=1
  210. - os: osx
  211. osx_image: xcode9.1
  212. compiler: clang
  213. env: COMPILER='clang++' CPP14=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1
  214. # 7/ C++17 builds
  215. - os: linux
  216. compiler: gcc
  217. addons: *gcc7
  218. env: COMPILER='g++-7' CPP17=1
  219. - os: linux
  220. compiler: gcc
  221. addons: *gcc7
  222. env: COMPILER='g++-7' EXAMPLES=1 COVERAGE=1 EXTRAS=1 CPP17=1
  223. - os: linux
  224. dist: xenial
  225. compiler: clang
  226. addons:
  227. apt:
  228. sources: *all_sources
  229. packages: ['clang-6.0', 'libstdc++-8-dev']
  230. env: COMPILER='clang++-6.0' CPP17=1
  231. - os: linux
  232. dist: xenial
  233. compiler: clang
  234. addons:
  235. apt:
  236. sources: *all_sources
  237. packages: ['clang-6.0', 'libstdc++-8-dev']
  238. env: COMPILER='clang++-6.0' CPP17=1 EXAMPLES=1 COVERAGE=1 EXTRAS=1
  239. # 8/ Conan
  240. - language: python
  241. python:
  242. - "3.7"
  243. dist: xenial
  244. install:
  245. - pip install conan-package-tools
  246. env:
  247. - CONAN_GCC_VERSIONS=8
  248. - CONAN_DOCKER_IMAGE=conanio/gcc8
  249. script:
  250. - python .conan/build.py
  251. install:
  252. - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
  253. - mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
  254. - |
  255. if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
  256. CMAKE_URL="http://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.tar.gz"
  257. mkdir cmake && travis_retry wget --no-check-certificate --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C cmake
  258. export PATH=${DEPS_DIR}/cmake/bin:${PATH}
  259. elif [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
  260. which cmake || brew install cmake;
  261. fi
  262. before_script:
  263. - export CXX=${COMPILER}
  264. - cd ${TRAVIS_BUILD_DIR}
  265. # Regenerate single header file, so it is tested in the examples...
  266. - python scripts/generateSingleHeader.py
  267. - |
  268. if [[ ${CPP17} -eq 1 ]]; then
  269. export CPP_STANDARD=17
  270. elif [[ ${CPP14} -eq 1 ]]; then
  271. export CPP_STANDARD=14
  272. else
  273. export CPP_STANDARD=11
  274. fi
  275. # Use Debug builds for running Valgrind and building examples
  276. - cmake -H. -BBuild-Debug -DCMAKE_BUILD_TYPE=Debug -Wdev -DCATCH_USE_VALGRIND=${VALGRIND} -DCATCH_BUILD_EXAMPLES=${EXAMPLES} -DCATCH_ENABLE_COVERAGE=${COVERAGE} -DCATCH_BUILD_EXTRA_TESTS=${EXTRAS} -DCMAKE_CXX_STANDARD=${CPP_STANDARD} -DCMAKE_CXX_STANDARD_REQUIRED=On -DCMAKE_CXX_EXTENSIONS=OFF
  277. # Don't bother with release build for coverage build
  278. - cmake -H. -BBuild-Release -DCMAKE_BUILD_TYPE=Release -Wdev -DCMAKE_CXX_STANDARD=${CPP_STANDARD} -DCMAKE_CXX_STANDARD_REQUIRED=On -DCMAKE_CXX_EXTENSIONS=OFF
  279. script:
  280. - cd Build-Debug
  281. - make -j 2
  282. - CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
  283. # Coverage collection does not work for OS X atm
  284. - |
  285. if [[ "${TRAVIS_OS_NAME}" == "linux" ]] && [[ "${COVERAGE}" == "1" ]]; then
  286. make gcov
  287. make lcov
  288. bash <(curl -s https://codecov.io/bash) -X gcov || echo "Codecov did not collect coverage reports"
  289. fi
  290. - # Go to release build
  291. - cd ../Build-Release
  292. - make -j 2
  293. - CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2