scons を使用して setup.py ファイルを生成します。そこで、setup.py.in というテンプレートを作成し、scons を使用してテンプレートを展開し、setup.py を生成します。
これを行う私のプロジェクトへのリンクを次に示します。
setup.py.in テンプレート
Sコンストラクト
これは、キーと値のペアの辞書を計算して、setup.py.in テンプレートに代入し、setup.py を生成します。
したがって、エンド ユーザーは次の 2 つのことを行います。
scons setup.py
python setup.py install
警告: 少し前に書いたように、私の sconstruct は少し乱雑ですが、概念を示す必要があります。
適切な scons ツールの書き方を学べば、次のように単一のターゲットに変換できます。
scons --pymod
SWIG で Python ラッパーを生成する scons ツールを次に示します。
import SCons.Action
from SCons.Script import EnsureSConsVersion
SCons.Script.EnsureSConsVersion(0,96,92)
SwigGenAction = SCons.Action.Action('$SWIGGENCOM', '$SWIGGENCOMSTR')
def emitter(target, source, env):
"""
Add dependency from target to source
"""
env.Depends(target, source)
return target, source
def generate(env):
"""
Add builders and construction variables for the SwigGen builder.
"""
if 'SWIGCOM' not in env:
raise SystemError("SCons build environment could not detect tool: swig")
bld = env.Builder(
action = SwigGenAction,
emitter = emitter,
target_factory = env.fs.File)
env['BUILDERS']['SwigGen'] = bld
env['SWIGGENCOM'] = env['SWIGCOM']
def exists(env):
return env.Detect('swig')
SConstruct ファイルから、ラッパー コードを生成できます。
foobar_cc = env.SwigGen("foobar_wrap.cc", "foobar.i")
foobar.i を変更すると、foobar_wrap.cc が再生成されます。これを取得したら、実際に python setup.py install を実行するための他のツールを作成できるので、 --pymod が提供されると、python モジュールがビルドされます。