Как использовать MATRIX_EVAL для включения строки матрицы сборки на основе компилятора?

Наш Трэвис построить матрицу включает строку, которая строится с помощью дезинфицирующего средства 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 в документах Трэвис.

Как мы используем MATRIX_EVAL включить строку UBsan, когда GCC 4,9 или выше? Или, может быть, если MATRIX_EVAL это неправильный инструмент, тогда как мы скажем Трэвису включить сборку, когда GCC 4.9 или выше?

1

Решение

Что ж это неловко. Я тот, кто написал этот пиар в документах — наткнулся на это из-за комментария о слитном пиаре.

MATRIX_EVAL в этом контексте это просто переменная окружения — обратите внимание, что она указана в env каждого matrix.include, В контексте связанная документация, before_install шаг, общий для каждой записи матрицы сборки, просто выполняется eval "${MATRIX_EVAL}",

Другими словами, MATRIX_EVAL ничего особенного Это всего лишь один из способов определения условного поведения в записи матрицы построения Travis. От .travis.yml файл, который вы связали, решение будет просто добавить сценарий оболочки при условии BUILD_MODE в script шаг.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]