私はプロジェクトを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.gir
は
shared_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です。
うーん、 '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
もっと混乱した後、私はValaソースのセットで 'gnome.generate_gir'を呼び出すことはできません。イントロスペクションファイルの作成中にインクルードされるヘッダーファイルを生成するにはValaが必要です。また、 'g-ir-scanner'は明らかにValaファイルを入力として受け取っていません。ですから 'gir'ファイルを生成するには' valac'が必要です。残念ながら、これは手動で生成する方が簡単です。 – geoffjay
申し訳ありませんが、それはValaだったという事実を見落としました。しかし出力girをサポートすることについて議論があるかもしれません。 – TingPing