hereの質問に基づいて、指定されたビルドバリエーションに基づいてさまざまなソースを使用したいと思ったところで、doxygenドキュメントを構築するのに同じ問題があるようです。私はビルドバリアントに基づいて異なる設定が必要です。wafのdoxygen機能への入力として異なる設定ソースを使用
例は全く同じままですが、少し長いのget:
ディレクトリ構造は次のようになります。doxgenの
- a.conf番号の設定
- ドキュメントソースのソース
- b.conf#ソースbのdoxgenソースの設定
- #同じstylesheetfile
- SRC
- AC
- BC
- doxygen.py
- のWScript
両方がWAF doxygen.py
implementionであるためwafプロジェクトのGitHubのリポジトリと同じdoxygen.py。
wafスクリプトは、doxygen
オプションを受け入れるように拡張されています。しかし、doxygen
という定義の中では、ビルドバリアント(ここではbld.variant
)に対してチェックすることはできません。これは、doxygen機能で定義されたビルドバリアントがないため、エラーにつながります。
ビルドバリアントを確認する部分は、矢印の例でマークされています。
doxygen機能が動作し、ビルドバリアントに基づいて正しい構成を使用すること、何がどこでどのように変更を実装する必要がありますか?
MWE:
def options(opt):
opt.load(['doxygen'], tooldir=os.path.join('doxygen.py'))
def configure(ctx):
load('compiler_c')
def build(bld):
if not bld.variant:
bld.fatal('call 'waf build_a' or 'waf build_b', and try 'waf --help'')
if bld.variant == 'a':
bld.program(source='a.c', target='app', includes='.', features=['doxygen'])
elif bld.variant == 'b':
bld.program(source='b.c', target='app', includes='.', features=['doxygen'])
else:
bld.fatal('err')
# create build and clean commands for each build context
from waflib.Build import BuildContext, CleanContext
for x in 'a b'.split():
for y in (BuildContext, CleanContext):
name = y.__name__.replace('Context','').lower()
class tmp(y):
__doc__ = '''executes the {} of {}'''.format(name, x)
cmd = name + '_' + x
variant = x
def doxygen(bld):
import sys
import logging
from waflib import Logs
if bld.env.DOXYGEN:
if bld.variant == 'a': # <=================
_conf = 'src/a.conf' # <=================
elif bld.variant == 'b': # <=================
_conf = 'src/b.conf' # <=================
else: # <=================
bld.fatal('err') # <=================
bld.logger = Logs.make_logger('doxy.log', out)
hdlr = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('%(message)s')
hdlr.setFormatter(formatter)
bld.logger.addHandler(hdlr)
bld(features='doxygen', doxyfile=_conf)