Travis-CIのofficial R project buildのサポートは、この質問の時点でgcc
バージョン4.6です。Travis-CI Rプロジェクトビルド用の代替コンパイラの使用
CRANはgcc
4.9を使用し、CRANでうまくいくいくつかのパッケージはgcc
4.6のTravisで構築されません。
Rプロジェクト/パッケージビルド用のデフォルトのgcc
コンパイラを、CRANビルドとより密接にミラー化するにはどうすればよいですか?
Travis-CIのofficial R project buildのサポートは、この質問の時点でgcc
バージョン4.6です。Travis-CI Rプロジェクトビルド用の代替コンパイラの使用
CRANはgcc
4.9を使用し、CRANでうまくいくいくつかのパッケージはgcc
4.6のTravisで構築されません。
Rプロジェクト/パッケージビルド用のデフォルトのgcc
コンパイラを、CRANビルドとより密接にミラー化するにはどうすればよいですか?
私は本当にTravisを使ってndjson
パッケージをテストすることができたが、私が使っているC++ライブラリはgcc
4.6にコンパイルされません。
ndjson
パッケージは、(R-oldrel Windows上で私を少し気にしませんを除く)CRANとCRAN builds are fineにあるので、私はRはトラヴィスに使用するコンパイラを変更する方法を必要としていました。
私はgcc
5を以下の例で使用していますが、toolchain test buildsで利用可能な任意のバージョンを使用できます。理想的には、CRANのgcc
バージョンを模倣する必要があります。これはTravisの人々がRビルドのデフォルトを検討するかもしれないものかもしれません。同じオフ
.travis.yml
開始:
language: r
warnings_are_errors: true
sudo: required
env:
global:
- CRAN: http://cran.rstudio.com
は、私は新しいパッケージソースを追加するだけでなく、インストールするために必要なパッケージ(複数可)を指定するには、行列のビルド構成を追加しました。 clang
を(ついに)追加しようとしているので、私は行列構成でそれを残しました。
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
base64文字列をに相当:
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
次に、私は、オートデフォルトのコンパイラがgcc
この新しいに設定され、また、Rは、地元Makevars
を作成することによって、それを使用することを二重に確認作られてことを確認しました:
VER=-5
CC=gcc$(VER) -std=c11
CXX=g++$(VER)
SHLIB_CXXLD=g++$(VER)
FC=gfortran
F77=gfortran
このように(IMO)クリーナーです。
は理論的には、私がしなければならなかっただろうすべてが作成されMakevars
(すなわちデフォルトupdate-alternatives
とgcc
を変更する必要はない)が、それはではなく、実際の依存関係をインストールするときトラヴィスがMakevars
gcc
設定を使用していることが判明しましたパッケージビルド自体。だから、update-alternatives
が必要です。私はまた、-std=c11
を追加して、いくつかの依存関係をコンパイルするようにしなければなりませんでした(ビルドエラーなし)。
.travis.yml
構成のこれらの変更の後に、ndjson
が正常に構築されました。
代わりに、私は自分のパッケージsourcetools
の1つでカスタムシェルスクリプトを使用します。私の目標は、パッケージが(今の古代の)gcc-4.4コンパイラを使って構築されることを確実にすることでした。.travis.yml
では、私が持っている:
language: r
cache: packages
sudo: false
warnings_are_errors: true
before_install:
- source travis/before-install.sh
addons:
apt:
packages:
- gcc-4.4
- g++-4.4
- clang
r:
- oldrel
- release
- devel
env:
- COMPILER=gcc-4.4
- COMPILER=gcc
- COMPILER=clang
そしてtravis/before-install.sh
では、私が持っている:
#!/usr/bin/env sh
mkdir -p ~/.R
if [ "${COMPILER}" = "gcc-4.4" ]; then
echo "CC=gcc-4.4 -std=gnu99" >> ~/.R/Makevars
echo "CXX=g++-4.4" >> ~/.R/Makevars
echo "CXX1X=g++-4.4 -std=c++0x" >> ~/.R/Makevars
fi
if [ "${COMPILER}" = "gcc" ]; then
echo "CC=gcc -std=gnu99" >> ~/.R/Makevars
echo "CXX=g++" >> ~/.R/Makevars
echo "CXX1X=g++ -std=c++0x" >> ~/.R/Makevars
fi
if [ "${COMPILER}" = "clang" ]; then
echo "CC=clang -std=gnu99" >> ~/.R/Makevars
echo "CXX=clang++" >> ~/.R/Makevars
echo "CXX1X=clang++ -std=c++0x" >> ~/.R/Makevars
fi
最終的な結果は、基本的には同じであるが、それは、独自に「セットアップ」のロジックを分離するために、ややクリーナーですIMHO環境変数から完全に追い出されたスクリプトです。また、Travisはr
とenv
の順列を自動的に組み合わせます(手で行う必要はありません)ので、R行列の構築を簡単に行うことができます。
私が使用しているbefore-install.sh
スクリプトは、より一般的なクリーンアップ/作成が可能だと思いますが、まだそれを行う必要はありませんでした。
Nice setup Sir Ushey! (この情報は実際にGitHub reposのプロダクション設定以外にはどこにも書かれていないので、このFAQ-ish自己回答のQ&Aを始めてうれしく思います:-) – hrbrmstr
6人中6人、もう1人は6人です。 [他のいくつかのtravisファイル](https://github.com/skystrife/cpptoml/blob/master/.travis.yml)は、同じファイル内でこれを行列を使って行います。私はそれがきれいだと思う。 YMMV。主なことは、私たちがこれらのことを行うことができることは非常に涼しいことです。 –
eonsのためにそれをしています。例えば、[here](https://github.com/eddelbuettel/rcppcctz/blob/master/.travis.yml)や他のいくつかのreposを参照してください。 –
Aye。他人を助けようとしています。 – hrbrmstr
これは本当にシェルスクリプトのようなものです。あなたのPPAを追加するには、ゴールデンです。しかし、それは、以前に使用されていたトラビスのスタイルを必要とするかもしれません。例:[here](https://github.com/eddelbuettel/rquantlib/blob/master/.travis.yml)を参照してください。 –