libclang の Python binding を使用する 〜 Config 編〜

前回は Python binding を導入する記事を書きました。
今回は Config 周りについて書きます。


libclang の Python binding(以下、cindex.py)では Config クラスで読み込む動的ライブラリ(以下 libclang)の管理を行います。
Config では以下のような設定を行うことができます。

[ソース]

# -*- coding: utf-8 -*
import sys

import clang.cindex
from clang.cindex import Config

# 動的ライブラリの読み込み時にその関数が定義されているかどうかのチェックを行う設定
# True が設定されていれば読み込み時に関数が存在しなければ例外が飛ぶ(既定値)
# False が設定されていれば読み込み時にはチェックは行われない
# 例えば、一部の関数が実装されていない古い libclang を読み込む場合は、
# False を設定しておくとよいでしょう
Config.set_compatibility_check(False)

# 読み込んでくる libclang のディレクトリパスを設定する
Config.set_library_path("D:/LLVM/BUILD_3_3/bin")


conf = Config()

# 読み込まれる libclang のパス(ファイル名込み)を取得
print conf.get_filename()

[出力]

D:/LLVM/BUILD_3_3/bin/libclang.dll

[読み込んだ libclang のバージョンを取得]

Clang 3.3、3.4 の両方の cindex.py では読み込んだ libclang のバージョンを取得するインターフェースがありません。
ただ、 libclang 側ではバージョンを取得する関数は存在しているので、それを呼び出せば読み込まれている libclang のバージョンを取得する事が可能です。

[ソース]

# -*- coding: utf-8 -*
import sys

import clang.cindex
from clang.cindex import Config
from clang.cindex import _CXString

Config.set_compatibility_check(False)
Config.set_library_path("D:/LLVM/BUILD_3_3/bin")


conf = Config()


# 動的ライブラリの関数を適切に呼び出せるように設定
conf.lib.clang_getClangVersion.restype  = _CXString
conf.lib.clang_getClangVersion.errcheck = _CXString.from_result

# バージョンの取得
print conf.lib.clang_getClangVersion()

[出力]

clang version 3.3 (tags/RELEASE_33/final)


今回はこんなところ。
次は Index について簡単に書こうと思います。