外部プロジェクトモジュール
注記: このモジュールの機能は、ビルドシステムの混在に関するMesonのルールによって管理されています。
これは実験的なモジュールであり、APIは変更される可能性があります。
0.56.0に追加
このモジュールを使用すると、Meson以外のビルドシステムを使用するコードをビルドできます。このモジュールは、依存関係がシステムに見つからない場合(例:古いディストロバージョン)のフォールバックとして、Autotoolsサブプロジェクトをビルドするために使用することを目的としています。
プロジェクトは、Mesonのビルドディレクトリ内でツリーの外でコンパイルされます。プロジェクトは、makeのDESTDIR
機能を使用して、Mesonのビルドディレクトリ内にもインストールされます。プロジェクトのインストールステップ中に、そのDESTDIRは目的の場所にそのままコピーされます。
pkg.generate()
によって生成された*-uninstalled.pc
ファイルのおかげで、外部サブプロジェクトは、pkg-configを使用してMeson(メインプロジェクトまたは他のサブプロジェクト)によってビルドされたライブラリを使用できます。
外部ビルドシステムの要件
- ツリー外のビルドをサポートする必要があります。configureスクリプトは、Mesonのビルドディレクトリ内の現在の作業ディレクトリで呼び出され、サブプロジェクトの最上位ソースディレクトリでは呼び出されません。
- configureスクリプトは、現在の作業ディレクトリに
Makefile
を生成する必要があります。 - configureスクリプトは、prefix、libdirなど、共通のディレクトリをコマンドライン引数として受け入れる必要があります。
- configureスクリプトは、CFLAGS、CCなど、共通の環境変数をサポートする必要があります。
- コンパイルステップは、再設定が必要な場合にそれを検出し、透過的に実行する必要があります。
既知の制限事項
- 外部プロジェクトの実行ファイルは、アンインストールされた状態で使用できません。最終的な場所にライブラリをインストールする必要があるためです。そのため、
find_program()
メソッドはありません。 - configureスクリプトは
Makefile
を生成する必要があります。他のビルドシステムはまだサポートされていません。 - クロスコンパイルする場合、環境変数に
PKG_CONFIG_SYSROOT_DIR
が設定されている場合、またはクロスファイルのプロパティにsys_root
が設定されている場合、外部サブプロジェクトは、pkg-configを使用してMesonによってビルドされた依存関係を見つけることができません。理由は、pkg-configとpkgconfの両方が、-uninstalled.pc
ファイルからの-I
と-L
引数にsysrootパスをプリペンドするためです。これは、将来のバージョンのpkg-config/pkgconfで修正できるバグと考えられます。
1.7.0以降 [Meson devenv][Commands.md#devenv] は、プログラムを実行できるようにPATH
とLD_LIBRARY_PATH
を設定します。
関数
add_project()
この関数は、別のビルドシステムを使用するプロジェクトのルートディレクトリで呼び出す必要があります。通常はサブプロジェクトの最上位ディレクトリに配置されたmeson.build
ファイル内で行いますが、任意のサブディレクトリ内でも可能です。
その最初の位置引数は、実行するconfigureスクリプトの名前です(例:configure
)。そのファイルは現在のディレクトリに存在し、実行可能である必要があります。ブートストラップスクリプトが必要な場合(例:tarballではなくgitからビルドする場合のautogen.sh
)、add_project()
メソッドを呼び出す前にrun_command()
を使用して実行できます。
0.60.0以降 最初の位置引数が'waf'
の場合、wafビルドシステムに対して特別な処理が行われます。waf実行ファイルは、現在のディレクトリまたはシステムのPATH
で見つける必要があります。
キーワード引数
-
configure_options
: configureスクリプトに引数として渡される文字列の配列。一部の特別なタグは、configureスクリプトに渡す前にMesonによって置き換えられます:@PREFIX@
、@LIBDIR@
、@INCLUDEDIR@
。libdir
とincludedir
のパスはMesonではprefix
に対する相対パスですが、一部のconfigureスクリプトは絶対パスを要求します。その場合、'--libdir=@PREFIX@/@LIBDIR@'
として渡すことができます。0.57.0以降configure_options
に一部のタグが見つからない場合に、デフォルトの引数が追加されます:'--prefix=@PREFIX@'
、'--libdir=@PREFIX@/@LIBDIR@'
、'--includedir=@PREFIX@/@INCLUDEDIR@'
。以前は、それらを指定しないことは致命的エラーと見なされていました。1.7.0以降@BINDIR@
と'--bindir=@PREFIX@/@BINDIR@'
のデフォルト引数が追加されました。 -
cross_configure_options
: クロスコンパイル時のみ、configure_options
に追加される追加のオプション。特別なタグ@HOST@
は'{}-{}-{}'.format(host_machine.cpu_family(), build_machine.system(), host_machine.system()
によって置き換えられます。省略した場合は、['--host=@HOST@']
がデフォルトになります。 -
verbose
:true
に設定すると、プロジェクトを設定、ビルド、インストールするために実行されたサブコマンドの出力がMesonのstdoutに出力されます。 -
env
: 設定する環境変数(例:['NAME1=value1', 'NAME2=value2']
)、辞書、またはenv
オブジェクト。 -
depends
: 0.63.0以降 このプロジェクトが指定されたターゲットに依存しており、この外部プロジェクトをビルドするためにmake
を実行する前にビルドする必要があることを指定します。これは、たとえば、外部プロジェクトがMesonのlibrary()
にリンクし、configure
スクリプトがMesonによって生成された-uninstalled.pc
pkg-configファイルを使用してそれを見つける場合に使用します。
ExternalProject
オブジェクトを返します。
ExternalProject
オブジェクト
メソッド
dependency(libname)
外部プロジェクトのライブラリに対してターゲットをビルドするために使用できる依存関係オブジェクトを返します。
キーワード引数
-
ヘッダー検索パスに追加する
includedir
に対する相対パスsubdir
。
サブプロジェクトの例となるmeson.build
ファイル
project('My Autotools Project', 'c',
meson_version : '>=0.56.0',
)
mod = import('unstable-external_project')
p = mod.add_project('configure',
configure_options : ['--prefix=@PREFIX@',
'--libdir=@LIBDIR@',
'--incdir=@INCLUDEDIR@',
'--enable-foo',
],
)
mylib_dep = p.dependency('mylib')
meson.override_dependency('mylib', mylib_dep)
wrapファイルの使用
ほとんどの場合、プロジェクトはサブプロジェクトとしてビルドされ、.wrap
ファイルを使用して取得されます。その場合、サブプロジェクトをビルドするために必要な単純なmeson.build
ファイルは、wrapファイルにpatch_directory=mysubproject
行を追加し、ビルド定義ファイルをsubprojects/packagefiles/mysubproject/meson.build
に配置することで提供できます。
検索の結果は次のとおりです。