Наша матрица сборки Travis включает строку, которая строится с помощью дезинфицирующего средства Undefined Behavior. :
matrix:
- BUILD_MODE="all"
- BUILD_MODE="no-asm"
- BUILD_MODE="asan"
- BUILD_MODE="ubsan"
GCC требует 4.9 (или, может быть, 5.0) для UBsan, и это приводит к сбою нашего теста на Trusty:
...
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
...
g++ -DNDEBUG -g2 -O2 -fPIC -march=native -pipe -fsanitize=undefined -DCRYPTOPP_COVERAGE -c cryptlib.cpp
g++: error: unrecognized command line option ‘-fsanitize=undefined’
make: *** [cryptlib.o] Error 1
The command "make "$BUILD_MODE" && ./cryptest.exe v && ./cryptest.exe tv all" exited with 2.
У Трэвиса есть что-то под названием MATRIX_EVAL
, похожее на какой-то селектор. Я думаю, что его можно использовать для включения или отключения строки в матрице построения, но мне не ясно, как его использовать. Документация находится по адресу добавить документацию по обновлению gcc и clang, но это плохо объяснено. Также см. раздел Создание проекта C в документации Travis.
Как мы можем использовать MATRIX_EVAL
для включения строки UBsan, когда GCC 4.9 или выше? Или, может быть, если MATRIX_EVAL
— неправильный инструмент, то как мы можем сказать Трэвису включить сборку, когда GCC 4.9 или выше?