C++/Python: Python3.2, 3.3, 3.4 の全てで Boost.Python プロジェクトの Travis CI を回す
前回(mog project: C++/Python: Travis CI with Boost.Python and Python3)の続き。
Boost をソースからインストールすることで、Python 3.2, 3.3, 3.4 に対応した
Boost.Python のテストを Travis CI 上で回すことができるようになった。
.travis.yml
mog-cli/.travis.yml at master · mogproject/mog-cli
--- language: python os: - linux - osx python: - "3.2" - "3.3" - "3.4" env: global: - BOOST_VERSION=1.57.0 matrix: - CC=gcc-4.8 CXX=g++-4.8 before_install: # LINUX - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install ${CXX}; fi install: # LINUX - if [ "$TRAVIS_OS_NAME" = "linux" ]; then scripts/install_boost_python.sh; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo ln -s /tmp/boost_${BOOST_VERSION//[.]/_}/boost /usr/local/include/boost; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo ln -s /tmp/boost_${BOOST_VERSION//[.]/_}/stage-python${TRAVIS_PYTHON_VERSION}/lib/* /usr/local/lib/; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo ldconfig; fi # OSX - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install boost-python --with-python3; fi - pip install coveralls script: - python3 setup.py build - coverage run --source=src setup.py test after_success: - coveralls
- before_install タスクで g++-4.8 をインストールするのは前回と同じ
- Linux(Ubuntu)向けのBoostインストール処理は別のシェルスクリプトに切り出した
- Travis CI の制限により、シェルの実行に sudo を付けることはできない
- /tmp 配下でビルドを実行し、/usr/local へのリンクは sudo を付けて実行
- 環境変数 TRAVIS_PYTHON_VERSION で Python のバージョンを取得可能
- ライブラリをリンクしたら、root 権限での ldconfig 実行が必須
- これを行わないと boost_python3 ライブラリが not found 状態となり、
Python 実行時にロードエラーが発生する
ldconfig 実行前に ldd を実行した例。
# ldd ./cmogcore.cpytho-32mu.so linux-vdso.so.1 => (0x00007fff3b1fd000) libboost_python3.so.1.57.0 => not found libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff4ca726000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff4ca50e000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff4ca2f1000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff4c9f32000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff4c9c35000) /lib64/ld-linux-x86-64.so.2 (0x00007ff4cac5f000)
Boost インストール スクリプト
mog-cli/install_boost_python.sh at master · mogproject/mog-cli
- sourceforge から対象バージョンの Boost のソースをダウンロードし、/tmp 配下に展開
- user-config.jam ファイルの作成
- g++-4.8 をここで指定する
- bootstrap.sh を実行し、Boost.Python のみをビルド対象とする
- ここで Python のバージョンを --with-python に指定するのが重要
- b2 スクリプトを実行
- 時間短縮のため、threading=single link=shared のみに限定している
(フルセットは threading=single,multi link=shared,static) - 余計なメッセージを抑制するため、-Wno-unused-local-typedefs オプションを追加
- HomeBrew の boost-python Formula を参考にした
- /tmp/boost_1_57_0/boost 配下にヘッダーファイルが存在し、
/tmp/boost_1_57_0/stage-python3.x/lib 配下に共有ライブラリが生成される
Related Posts
0 件のコメント:
コメントを投稿