2017-08-10 16 views
0

私はプロジェクトをmeson/ninjaに切り替えようとしていますが、成功するためにはninjaを複数回実行しています。一見すると初期の失敗はそれよりも前にあるはずのビルドステップが不完全です。順番が違うような手順は通常、までsedを呼び出して、別のライブラリ(lib-a)に依存するライブラリ(lib-b)のコンパイル中に自動生成された出力を修正するのです。これは私が(lib-b)のために持っているもの、本質的である:meson/ninjaでビルドすると完了するまでに複数回実行する

lib_b = shared_library('lib-b-' + apiversion, lib_b_sources, 
    link_args: [ '-Wl,--version-script' ], 
    vala_header: 'lib-b.h', 
    vala_args: lib_b_vala_args, 
    vala_vapi: '[email protected]@.vapi'.format(apiversion), 
     vala_gir: '[email protected]@.gir'.format(apiversion), 
    dependencies: lib_b_deps, 
     c_args: lib_b_args, 
    soversion: soversion, 
     install: true, 
    install_dir: [ true, true, true, false ], 
) 

custom_target('[email protected]@.gir'.format(apiversion), 
     command: [ sed, 
       '-e', 's|Lib[.]|LibB.|g', 
       '-e', 's|namespace name="Lib"|namespace name="LibB"|g', 
       '-e', 's|LibB[.]Foo|LibA.Foo|g', 
       '-e', 's|<package name="[email protected]@"/>|<include name="LibA" version="@[email protected]"/><package name="[email protected]@"/>|'.format(apiversion), 
       join_paths(meson.current_build_dir(), '[email protected]@.gir'.format(apiversion)), 
       ], 
     output: '[email protected]@.gir'.format(apiversion), 
     capture: true, 
     install: true, 
    install_dir: dir_gir, 
) 

if g_ir_compiler.found() 
    custom_target('[email protected]@.typelib'.format(apiversion), 
     command: [ g_ir_compiler, 
        '--shared-library', lib_b.full_path(), 
        '--includedir', lib_a_girdir, 
        '--output', '@[email protected]', 
        join_paths(meson.current_build_dir(), '[email protected]@.gir'.format(apiversion)), 
       ], 
     output: '[email protected]@.typelib'.format(apiversion), 
     depends: lib_b, 
     install: true, 
    install_dir: dir_typelib, 
) 
endif 

ninjaの最初の実行後、私はこのようなエラーが出る:

Lib-1.0.girshared_libraryの出力のうちの一つであると考えられる
FAILED: src/lib/b/LibB-1.0.gir 
/usr/bin/python3 /usr/bin/meson --internal exe /home/user/proj/_build/meson-private/meson_exe_sed_3429069bbdfaffa2d113b782ce02a55d5fd96973.dat 
/usr/bin/sed: can't read /home/user/proj/_build/src/lib/b/Lib-1.0.gir: No such file or directory 

コマンド。もう一度実行すると、ファイルが作成され、さらに作成され、同様のエラーが表示されます。今度はもう一度実行しますが、作成されていないファイルに依存する他の内部プロジェクトのエラーです。私はそれを最後に実行し、それが完了します。

meson/ninjaは、1つが先行しなければならないシーケンスでビルドステップを実行することができない場合、私を驚かせるでしょう。私はここで何か偉大な/愚かな何かをしましたか?私は基本的にautotoolsの設定で動作しますが、slooooowです。

答えて

0

custom_targetのキーワードinputに出力を入れて、依存関係を理解し​​て正しい順序で実行する必要があります。

また、あなたはGIRファイルを生成するために、GNOMEモジュールを使用する必要があります。http://mesonbuild.com/Gnome-module.html#gnomegenerate_gir

+0

うーん、 'valac'は直接' gir'を出力したときに、 'gnome'モジュールを使用することが不要と思われます。とにかく試してみましたが、 'gnome.generate_gir'は別の' custom_target'の 'input'として使用できるファイルを出力しません。私がコンパイルすると、 'src/lib/b/Lib-1.0.gir'でエラーが発生し、 'src/lib/b/LibB-1.0.gir'で必要です。私が '中間子 'を使ってやろうとしていることをするのは間違っているかもしれませんが、コンパイラによって生成されたファイルに対して' sed | awk | whatever'を実行できるはずだと主張します。 – geoffjay

+0

もっと混乱した後、私はValaソースのセットで 'gnome.generate_gir'を呼び出すことはできません。イントロスペクションファイルの作成中にインクルードされるヘッダーファイルを生成するにはValaが必要です。また、 'g-ir-scanner'は明らかにValaファイルを入力として受け取っていません。ですから 'gir'ファイルを生成するには' valac'が必要です。残念ながら、これは手動で生成する方が簡単です。 – geoffjay

+0

申し訳ありませんが、それはValaだったという事実を見落としました。しかし出力girをサポートすることについて議論があるかもしれません。 – TingPing

関連する問題