2017-12-13 8 views
1

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) 

答えて

1

あなたの問題は、doxygenのコマンドのためにあなたのバリアントを定義していないということです。

variants = ['a', 'b'] 

for variant in variants: 
    dox = "doxygen" 
    class tmp(BuildContext): 
     __doc__ = '''executes the {} of {}'''.format(dox, variant) 
     cmd = dox + '_' + variant 
     fun = dox 
     variant = variant 

最小限の作業例:あなたは次のようなものを追加する必要があり

def configure(conf): 
    pass 

def doxygen(bld): 
    print "variant =", bld.variant 

# Create build commands with variants 

from waflib.Build import BuildContext 

variants = ['a', 'b'] 
for variant in variants: 
    dox = "doxygen" 
    class tmp(BuildContext): 
     __doc__ = '''executes the {} of {}'''.format(dox, variant) 
     cmd = dox + '_' + variant 
     fun = dox 
     variant = variant 
関連する問題