読者です 読者をやめる 読者になる 読者になる

swigでpythonバインディングをvs8で。

やろうと思ったがpython26.libがvs9で萎えたのでやめた。
折角なのでmake.batだけでも晒しておきます。

@echo off
setlocal

set SWIG=c:\cygwin\bin\swig.exe
call "%VS80COMNTOOLS%vsvars32.bat"

set PAYTHON_DIR=f:\Python26
set PAYTHON_LIB=%PAYTHON_DIR%\libs
set INC=/I%PAYTHON_DIR%\include /I%PAYTHON_DIR%\PC
set CFLAGS=/EHsc /Ob2 /Ox /Ot /arch:SSE2 /MD
set PAYTHON=%PYTHON_DIR%\python.exe

set NAME=hoge
set TARGET=_%NAME%.pyd

if /I "%~1" == "clean" goto :clean
if /I "%~1" == "test" goto :test

:all
    "%SWIG%" -o %NAME%_wrap.cpp -c++ -python %NAME%.i
    cl %CFLAGS% %INC% /c /Fo%NAME%_wrap.obj %NAME%_wrap.cpp
    cl %CFLAGS% %INC% /c /Fo%NAME%.obj %NAME%.cpp
    link /OUT:%TARGET% /DLL /LIBPATH:"%PAYTHON_LIB%" /MACHINE:x86 python26.lib %NAME%_wrap.obj %NAME%.obj
    goto :eof

:test
    call :all
    %PYTHON% %NAME%_test.py
    goto :eof

:clean
    del *.obj *.pyc %TARGET% %NAME%.py %NAME%_wrap.*
    goto :eof

ビルドはできたけどランタイムの不整合でモジュールが読み込めませんでした(T〜T
vs9環境を入れてやればmake testでうまく動作するはず。
密かにc++ビルドに変わってます。

余談

この前にsetup.py(distutils)も試してみましたが、msvcビルドの場合はvs9の環境設定バッチが必要でコケ。mingw32はcygwingccが.lnk経由になっているのでwin版のpythonからはうまく呼び出せず。もうちょっと気合入れて設定すればいけると思いますが、個人的にはmakeが一番わかりやすくてしっくりきてます。

次回はc++のvirtualをpythonで派生可能にするdirector機能について。