.travis.yml 11.1 KB
Newer Older
Niels's avatar
Niels committed
1
2
3
4
5
#########################
# project configuration #
#########################

# C++ project
Niels's avatar
Niels committed
6
7
language: cpp

Niels's avatar
Niels committed
8
9
dist: trusty
sudo: required
Niels's avatar
Niels committed
10

Niels's avatar
Niels committed
11

12
13
14
15
16
17
18
19
20
21
22
###################
# global settings #
###################

env:
  global:
   # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
   #   via the "travis encrypt" command using the project repo's public key
   - secure: "m89SSgE+ASLO38rSKx7MTXK3n5NkP9bIx95jwY71YEiuFzib30PDJ/DifKnXxBjvy/AkCGztErQRk/8ZCvq+4HXozU2knEGnL/RUitvlwbhzfh2D4lmS3BvWBGS3N3NewoPBrRmdcvnT0xjOGXxtZaJ3P74TkB9GBnlz/HmKORA="


Niels's avatar
Niels committed
23
24
25
################
# build matrix #
################
Niels's avatar
Niels committed
26

Niels's avatar
Niels committed
27
28
matrix:
  include:
Niels's avatar
Niels committed
29

Niels's avatar
Niels committed
30
31
32
33
34
35
36
37
38
39
40
41
  # Valgrind

  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - SPECIAL=valgrind
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: [g++-4.9, valgrind]
    after_success:
42
      - valgrind --error-exitcode=1 --leak-check=full test/json_unit
Niels's avatar
Niels committed
43

Niels's avatar
Niels committed
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  # cppcheck

  - os: linux
    compiler: gcc
    env:
      - COMPILER=g++-4.9
      - SPECIAL=cppcheck
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: [g++-4.9, cppcheck]
    after_success:
      - make cppcheck

Niels's avatar
Niels committed
58
  # Coveralls (http://gronlier.fr/blog/2015/01/adding-code-coverage-to-your-c-project/)
Niels's avatar
Niels committed
59
60
61
62
63
64

  - os: linux
    compiler: gcc
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
Niels's avatar
Niels committed
65
        packages: ['g++-4.9', 'ruby']
Niels's avatar
Niels committed
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
    before_script:
      - wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.11.orig.tar.gz
      - tar xf lcov_1.11.orig.tar.gz
      - sudo make -C lcov-1.11/ install
      - gem install coveralls-lcov
    after_success:
      - make clean
      - CXXFLAGS="--coverage -g -O0" CPPFLAGS="-DNDEBUG" make
      - test/json_unit "*"
      - coveralls --build-root test --exclude src/catch.hpp --exclude src/unit-algorithms.cpp --exclude src/unit-allocator.cpp --exclude src/unit-capacity.cpp --exclude src/unit-class_const_iterator.cpp --exclude src/unit-class_iterator.cpp --exclude src/unit-class_lexer.cpp --exclude src/unit-class_parser.cpp --exclude src/unit-comparison.cpp --exclude src/unit-concepts.cpp --exclude src/unit-constructor1.cpp --exclude src/unit-constructor2.cpp --exclude src/unit-convenience.cpp --exclude src/unit-conversions.cpp --exclude src/unit-deserialization.cpp --exclude src/unit-element_access1.cpp --exclude src/unit-element_access2.cpp --exclude src/unit-inspection.cpp --exclude src/unit-iterator_wrapper.cpp --exclude src/unit-iterators1.cpp --exclude src/unit-iterators2.cpp --exclude src/unit-json_patch.cpp --exclude src/unit-json_pointer.cpp --exclude src/unit-modifiers.cpp --exclude src/unit-pointer_access.cpp --exclude src/unit-readme.cpp --exclude src/unit-reference_access.cpp --exclude src/unit-regression.cpp --exclude src/unit-serialization.cpp --exclude src/unit-testsuites.cpp --exclude src/unit-unicode.cpp --include ../src/json.hpp --gcov-options '\-lp' --gcov 'gcov-4.9'
      - lcov --directory src --directory test/src --capture --output-file coverage.info --rc lcov_branch_coverage=1 --no-external
      - lcov --remove coverage.info 'test/src/*' --output-file coverage.info --rc lcov_branch_coverage=1
      - lcov --list coverage.info --rc lcov_branch_coverage=1
      - coveralls-lcov --repo-token F9bs4Nop10JRgqPQXRcifyQKYhb3FczkS coverage.info
    env:
      - COMPILER=g++-4.9
      - SPECIAL=coveralls

  # Coverity (only for branch coverity_scan)

  - os: linux
    compiler: gcc
    before_install: echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: ['g++-5', 'valgrind']
      coverity_scan:
        project:
          name: "nlohmann/json"
          description: "Build submitted via Travis CI"
        notification_email: niels.lohmann@gmail.com
        build_command_prepend: "make clean ; sudo cp $(which g++-5) $(which g++)"
        build_command: "make"
        branch_pattern: coverity_scan
    env:
      - COMPILER=g++-5
      - SPECIAL=coverity

Niels's avatar
Niels committed
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
  # OSX / Clang

  - os: osx
    osx_image: beta-xcode6.1

  - os: osx
    osx_image: beta-xcode6.2

  - os: osx
    osx_image: beta-xcode6.3

  - os: osx
    osx_image: xcode6.4

  - os: osx
    osx_image: xcode7.1

  - os: osx
    osx_image: xcode7.2

Niels's avatar
Niels committed
125
126
127
128
129
130
  - os: osx
    osx_image: xcode7.3

  - os: osx
    osx_image: xcode8

131
132
133
  - os: osx
    osx_image: xcode8.1

Niels's avatar
Niels committed
134
135
  # Linux / GCC

Niels's avatar
Niels committed
136
137
  - os: linux
    compiler: gcc
Niels's avatar
Niels committed
138
139
140
    env: COMPILER=g++-4.9
    addons:
      apt:
Niels's avatar
Niels committed
141
        sources: ['ubuntu-toolchain-r-test']
Niels's avatar
Niels committed
142
143
144
145
146
147
148
        packages: g++-4.9

  - os: linux
    compiler: gcc
    env: COMPILER=g++-5
    addons:
      apt:
Niels's avatar
Niels committed
149
        sources: ['ubuntu-toolchain-r-test']
Niels's avatar
Niels committed
150
        packages: g++-5
Niels's avatar
Niels committed
151

Niels's avatar
Niels committed
152
153
154
155
156
157
158
159
  - os: linux
    compiler: gcc
    env: COMPILER=g++-6
    addons:
      apt:
        sources: ['ubuntu-toolchain-r-test']
        packages: g++-6

Niels's avatar
Niels committed
160
161
  # Linux / Clang

Niels's avatar
Niels committed
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
  - os: linux
    env: LLVM_VERSION=3.6.0
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.6.1
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.6.2
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.7.0
    compiler: clang

  - os: linux
    env: LLVM_VERSION=3.7.1
    compiler: clang

182
183
184
  #- os: linux
  #  env: LLVM_VERSION=3.8.0
  #  compiler: clang
Niels's avatar
Niels committed
185

Niels's avatar
Niels committed
186
187
188
189
  - os: linux
    env: LLVM_VERSION=3.8.1
    compiler: clang

Niels's avatar
Niels committed
190
191
192
193
#####################
# installation step #
#####################

194
# set directories to cache
Niels's avatar
Niels committed
195
196
cache:
  directories:
Niels's avatar
Niels committed
197
198
199
200
201
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.2
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.1
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.6.0
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.0
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.7.1
Niels's avatar
Niels committed
202
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.0
Niels's avatar
Niels committed
203
    - ${TRAVIS_BUILD_DIR}/deps/llvm-3.8.1
Niels's avatar
Niels committed
204
205


Niels's avatar
Niels committed
206
install:
207
  # create deps dir if not existing
Niels's avatar
Niels committed
208
  - DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
Niels's avatar
Niels committed
209
  - mkdir -p ${DEPS_DIR}
Niels's avatar
Niels committed
210

211
  # make sure CXX is correctly set
Niels's avatar
Niels committed
212
213
  - if [[ "${COMPILER}" != "" ]]; then export CXX=${COMPILER}; fi

214
  # install LLVM/clang when LLVM_VERSION is set
Niels's avatar
Niels committed
215
216
217
218
  - |
     if [[ "${LLVM_VERSION}" != "" ]]; then
       LLVM_DIR=${DEPS_DIR}/llvm-${LLVM_VERSION}
       if [[ -z "$(ls -A ${LLVM_DIR})" ]]; then
Niels's avatar
Niels committed
219
220
221
222
         travis_retry wget --quiet https://cmake.org/files/v3.6/cmake-3.6.1.tar.gz
         tar xfz cmake-3.6.1.tar.gz
         (cd cmake-3.6.1 && ./configure --prefix=${LLVM_DIR}/cmake && make install)
         export PATH="${LLVM_DIR}/cmake/bin:${PATH}"
Niels's avatar
Niels committed
223
224
225
226
227
228
229
230
231
232
233
234
235
         LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz"
         LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz"
         LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz"
         CLANG_URL="http://llvm.org/releases/${LLVM_VERSION}/clang+llvm-${LLVM_VERSION}-x86_64-linux-gnu-ubuntu-14.04.tar.xz"
         mkdir -p ${LLVM_DIR} ${LLVM_DIR}/build ${LLVM_DIR}/projects/libcxx ${LLVM_DIR}/projects/libcxxabi ${LLVM_DIR}/clang
         travis_retry wget --quiet -O - ${LLVM_URL}      | tar --strip-components=1 -xJ -C ${LLVM_DIR}
         travis_retry wget --quiet -O - ${LIBCXX_URL}    | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxx
         travis_retry wget --quiet -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C ${LLVM_DIR}/projects/libcxxabi
         travis_retry wget --quiet -O - ${CLANG_URL}     | tar --strip-components=1 -xJ -C ${LLVM_DIR}/clang
         (cd ${LLVM_DIR}/build && cmake .. -DCMAKE_INSTALL_PREFIX=${LLVM_DIR}/install -DCMAKE_CXX_COMPILER=clang++)
         (cd ${LLVM_DIR}/build/projects/libcxx && make install -j2)
         (cd ${LLVM_DIR}/build/projects/libcxxabi && make install -j2)
       fi
Niels's avatar
Niels committed
236
       export CXXFLAGS="-nostdinc++ -isystem ${LLVM_DIR}/install/include/c++/v1"
Niels's avatar
Niels committed
237
238
239
240
       export LDFLAGS="-L ${LLVM_DIR}/install/lib -l c++ -l c++abi"
       export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${LLVM_DIR}/install/lib"
       export PATH="${LLVM_DIR}/clang/bin:${PATH}"
     fi
Niels's avatar
Niels committed
241
242
243
244
245

################
# build script #
################

Niels's avatar
Niels committed
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
script:
  # show OS/compiler version
  - uname -a
  - $CXX --version

  # compile
  - make

  # execute unit tests
  - test/json_unit "*"

  # check if homebrew works (only checks develop branch)
  - if [ `which brew` ]; then
    brew update ;
    brew tap nlohmann/json ;
    brew install nlohmann_json --HEAD ;
    brew test nlohmann_json ;
Niels's avatar
Niels committed
263
    fi
Niels's avatar
Niels committed
264

Niels's avatar
Niels committed
265
266
267
268
269
270
271
272
273
274
275
276
277
278
#language: cpp
#
#dist: trusty
#sudo: required
#
#env:
#  global:
#   # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
#   #   via the "travis encrypt" command using the project repo's public key
#   - secure: "m89SSgE+ASLO38rSKx7MTXK3n5NkP9bIx95jwY71YEiuFzib30PDJ/DifKnXxBjvy/AkCGztErQRk/8ZCvq+4HXozU2knEGnL/RUitvlwbhzfh2D4lmS3BvWBGS3N3NewoPBrRmdcvnT0xjOGXxtZaJ3P74TkB9GBnlz/HmKORA="
#
## from http://stackoverflow.com/a/32127147/266378
#matrix:
#  include:
Niels's avatar
Niels committed
279
#    - os: linux
Niels's avatar
Niels committed
280
#      compiler: gcc
Niels's avatar
Niels committed
281
282
#      addons:
#        apt:
Niels's avatar
Niels committed
283
284
285
286
287
288
289
290
291
292
293
#          sources: ['ubuntu-toolchain-r-test']
#          packages: ['g++-4.9', 'valgrind', 'python-pip', 'python-yaml']
#      before_script:
#        - pip install --user git+git://github.com/eddyxu/cpp-coveralls.git
#      after_success:
#        - make clean
#        - touch src/json.hpp
#        - make json_unit CXXFLAGS="-fprofile-arcs -ftest-coverage -std=c++11 -lstdc++" CXX=$COMPILER
#        - test/json_unit "*"
#        - coveralls --build-root test --exclude src/catch.hpp --exclude src/unit-algorithms.cpp --exclude src/unit-allocator.cpp --exclude src/unit-capacity.cpp --exclude src/unit-class_const_iterator.cpp --exclude src/unit-class_iterator.cpp --exclude src/unit-class_lexer.cpp --exclude src/unit-class_parser.cpp --exclude src/unit-comparison.cpp --exclude src/unit-concepts.cpp --exclude src/unit-constructor1.cpp --exclude src/unit-constructor2.cpp --exclude src/unit-convenience.cpp --exclude src/unit-conversions.cpp --exclude src/unit-deserialization.cpp --exclude src/unit-element_access1.cpp --exclude src/unit-element_access2.cpp --exclude src/unit-inspection.cpp --exclude src/unit-iterator_wrapper.cpp --exclude src/unit-iterators1.cpp --exclude src/unit-iterators2.cpp --exclude src/unit-json_patch.cpp --exclude src/unit-json_pointer.cpp --exclude src/unit-modifiers.cpp --exclude src/unit-pointer_access.cpp --exclude src/unit-readme.cpp --exclude src/unit-reference_access.cpp --exclude src/unit-regression.cpp --exclude src/unit-serialization.cpp --exclude src/unit-testsuites.cpp --exclude src/unit-unicode.cpp --include ../src/json.hpp --gcov-options '\-lp' --gcov 'gcov-4.9'
#      env: COMPILER=g++-4.9  
Niels's avatar
Niels committed
294
295
#
#    - os: linux
Niels's avatar
Niels committed
296
297
#      compiler: gcc
#      before_install: echo -n | openssl s_client -connect scan.coverity.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | sudo tee -a /etc/ssl/certs/ca-certificates.crt
Niels's avatar
Niels committed
298
299
#      addons:
#        apt:
Niels's avatar
Niels committed
300
301
302
303
304
305
306
307
308
309
310
#          sources: ['ubuntu-toolchain-r-test']
#          packages: ['g++-5', 'valgrind']
#        coverity_scan:
#          project:
#            name: "nlohmann/json"
#            description: "Build submitted via Travis CI"
#          notification_email: niels.lohmann@gmail.com
#          build_command_prepend: "make clean ; sudo cp $(which g++-5) $(which g++)"
#          build_command: "make"
#          branch_pattern: coverity_scan
#      env: COMPILER=g++-5
Niels's avatar
Niels committed
311
#