0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

meson の subproject

Posted at

わりと癖がある。自前で meson.build を記述する場合は、ある程度理解していないとにっちもさっちもいかない。

subproject を使う

dependency() の fallback で発動させる

dependency() が pkg-config などしてみつからなかったときに fallback で発動する。

  • dependency() の返り値が fallback して subproject であった
  • 返り値(dep) を executable や library の dependencies 引数として使った

の条件が成立したときに使われる。

subproject() で subdir() のように使う

直接参照する。ビルドに含まれる。わかりやすい。

libsimple_proj = subproject('libsimple')
libsimple_dep = libsimple_proj.get_variable('libsimple_dep')

subproject(wrap) の動作

だいたい以下のような動きをしているようだ。

  • wrap が発動する。
  • wrap の記述に基づいて、source を download する
  • wrap の記述により download したアーカイブを解凍する
  • wrap の記述により download したディレクトリに patch を上書きする
  • download_dir/meson.build の処理へ

subproject の meson.build を自前で用意する例

この手法を使うことで meson.build が無いプロジェクトや、あってもうまく動かないプロジェクトに対処することができる。

# project files
meson.build
subprojects
  lua.wrap

patch_directory を指定します。

lua.wrap
[wrap-file]
directory = lua-5.4.4
source_url = https://www.lua.org/ftp/lua-5.4.4.tar.gz
source_filename = lua-5.4.4.tar.gz
source_hash = 164c7849653b80ae67bec4b7473b884bf5cc8d2dca05653475ec2ed27b9ebf61
patch_directory = lua # 👈 これ

[provide]
lua = lua_dep

patch_directorysubprojects/packagefiles からの相対パスです。

subprojects/packagefiles/lua/meson.build を記述することで 外部のソース + 自前の meson.build という構成ができます。

subprojects/lua-5.4.4 が展開された後で subprojects/packagefiles/lua/meson.buildsubprojects/lua-5.4.4/meson.build にコピーされます。

patch_directory で指定した meson.build が反映されるタイミングは、 subprojects/lua が展開されるタイミング一度だけ

subprojects/packagefiles/lua/meson.build を試行錯誤しながら書き換えている場合、
meson setup build を実行する前に、subprojects/lua-5.4.4 を毎回削除する必要があります。
さもないと、同じ内容の subprojects/lua-5.4.4/meson.build が使われ続けます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?