cmake

CMake Tutorial | CMake
CMake by Example – Mirko Kiefer’s blog
CMake Useful Variables - KitwarePublic
Are CMAKE_SOURCE_DIR and PROJECT_SOURCE_DIR the same in CMake? - Stack Overflow
Is it better to specify source files with GLOB or each file individually in CMake? - Stack Overflow
CMAKE によるビルド自動化とテスト実行 - zonomasaの日記
CMake: 便利なコマンド・変数 - Qiita

http://www.cs.gunma-u.ac.jp/~nagai/wiki/index.php?cmake%20%A4%CE%BB%C8%A4%A4%CA%FD
cmake - How do you add Boost libraries in CMakeLists.txt? - Stack Overflow
c++ - Debug vs Release in CMake - Stack Overflow

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -Wall")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Wall")
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake -DCMAKE_BUILD_TYPE=Debug ..
cmake -DCMAKE_CXX_COMPILER='clang++' -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ..
make VERBOSE=1

C-APIで作ったpythonモジュールのメモリリークのチェック

以下のサイトを参考にやってみる。
Using AddressSanitizer - Atomic Simulation Environment

Pythonソースコードはこちらから。
Python Source Releases | Python.org

export CC='gcc -fsanitize=address'
export CXX='g++ -fsanitize=address'
export LSAN_OPTIONS=exitcode=0
cd ~/code/pysanitize/Python-3.5.2
./configure  --prefix=~/code/pysanitize --without-pymalloc --disable-ipv6
make
make install
export PATH=~/code/pysanitize/bin:$PATH

setuptools, cython, numpyの順にインストールしていく。ソースコードPyPIからダウンロード。
setuptools 30.2.0 : Python Package Index
Cython 0.25.1 : Python Package Index
numpy 1.12.0b1 : Python Package Index

インストールはsetup.pyで行う。

python3 setup.py install --prefix=~/code/pysanitize

同様にmatplotlib, h5pyもインストールする。ただし、その前に以下のパッケージを先にシステムのパッケージマネージャでインストールする。

sudo aptitude install libfreetype6-dev libpng-dev libhdf5-dev

Index of Packages : Python Package Index
matplotlib 1.5.3 : Python Package Index
PyYAML 3.12 : Python Package Index

Ubuntu-mate 16.04の場合、デフォルトでシステムにインストールしているnumpyが邪魔をするので、setup.pyや実行するpython scriptのなかで、例えば以下のようにしてsys.pathから取り除く必要があるかもしれない。

import sys
del_i = []
for i, p in enumerate(sys.path):
    if 'dist-packages' in p:
        del_i.append(i)
    if 'local' in p:
        del_i.append(i)
for i in del_i:
    del sys.path[i]