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 件のコメント:
コメントを投稿