Naprawdę chciałem móc użyć Travisa do przetestowania mojego pakietu ndjson
, ale biblioteka C++, której używam, nie będzie się kompilować pod gcc
4.6.
Pakiet ndjson
jest na CRAN i CRAN builds are fine (z wyjątkiem r-oldrel w systemie Windows, który nie przeszkadza mi trochę), więc potrzebowałem sposób zmienić kompilator, że R używa na Travisa.
Używam gcc
5 w poniższym przykładzie, ale możesz użyć dowolnej wersji dostępnej w toolchain test builds. Najlepiej byłoby naśladować wersję CRAN gcc
i może to być coś, co ludzie z Travis mogliby uznać za domyślną dla wersji R.
W .travis.yml
zaczyna się tak samo:
language: r
warnings_are_errors: true
sudo: required
env:
global:
- CRAN: http://cran.rstudio.com
Dodałem konfigurację budowania macierzy, aby dodać nowe źródło pakietów, a także określić pakiet (y), że potrzebne do zainstalowania. Zostawiłem to w konfiguracji macierzowej, ponieważ zamierzam spróbować (ostatecznie) dodać clang
.
matrix:
include:
- os: linux
compiler: gcc
addons:
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-5']
env:
- COMPILER=g++-5
- CC=gcc=5
- CXX=g++-5
Następnie zrobiłem pewien, że auto domyślny kompilator jest ustawiony na ten nowszy gcc
a także podwójnie pewny, że R użyłby go tworząc lokalny Makevars
:
before_install:
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 100
- mkdir -p ~/.R
- echo "VkVSPS01CkNDPWdjYyQoVkVSKSAtc3RkPWMxMSAKQ1hYPWcrKyQoVkVSKQpTSExJQl9DWFhMRD1nKyskKFZFUikKRkM9Z2ZvcnRyYW4KRjc3PWdmb3J0cmFuCg==" | base64 -d > ~/.R/Makevars
- cat ~/.R/Makevars
ciąg base64 równa się :
VER=-5
CC=gcc$(VER) -std=c11
CXX=g++$(VER)
SHLIB_CXXLD=g++$(VER)
FC=gfortran
F77=gfortran
i jest po prostu (IMO) czystszy w ten sposób.
Teoretycznie wszystko bym musiał zrobić, to stworzyć Makevars
(czyli nie trzeba zmieniać domyślnego gcc
z update-alternatives
), ale okazało się, że Travis używane ustawienia Makevars
gcc
podczas instalowania zależności ale nie za rzeczywiste sama kompilacja pakietu. Tak więc konieczna jest wersja update-alternatives
. Musiałem także dodać -std=c11
, aby zapewnić skompilowanie kilku zależności (kompilacja nie powiodła się).
Po wprowadzeniu tych modyfikacji w konfiguracji .travis.yml
, poprawiono wbudowanie ndjson
.
Pewnie. Robiłeś to przez eony, patrz np. [Tutaj] (https://github.com/eddelbuettel/rcppcctz/blob/master/.travis.yml) oraz w kilku innych repozytoriach. –
Aye. Po prostu staram się pomóc innym. – hrbrmstr
Fajnie, że to tak naprawdę jest jak skryptowanie powłoki. Dodatkowym elementem, który jest złoty, jest ... dodawanie własnych PPA. Ale to może wymagać wcześniejszego stylu użycia Travis, który preferuje. Zobacz np. [Tutaj] (https://github.com/eddelbuettel/rquantlib/blob/master/.travis.yml). –