• Wrap依赖系统可以使得Meson自动加载和编译所需要的依赖库。

  • 必须要在 subprojects 目录中,编写名为 <project_name>.wrap 的文件。该文件目前有四种类型:wrap-filewrap-gitwrap-hgwrap-svn。我们主要使用的是前两种,下面也主要介绍前两种。

1 wrap-file

我们以 gstreamer 中的 glib.wrap 为例。

[wrap-file]
directory = glib-2.74.1
source_url = https://download.gnome.org/sources/glib/2.74/glib-2.74.1.tar.xz
source_fallback_url = https://ftp.acc.umu.se/pub/gnome/sources/glib/2.74/glib-2.74.1.tar.xz
source_filename = glib-2.74.1.tar.xz
source_hash = 0ab981618d1db47845e56417b0d7c123f81a3427b2b9c93f5a46ff5bbb964964
wrapdb_version = 2.74.1-1

[provide]
# 可以在主项目中直接搜索 以下执行程序使用,比如 glib-compile-schemas
dependency_names = gthread-2.0, gobject-2.0, gmodule-no-export-2.0, gmodule-export-2.0, gmodule-2.0, glib-2.0, gio-2.0, gio-windows-2.0, gio-unix-2.0
program_names = glib-genmarshal, glib-mkenums, glib-compile-schemas, glib-compile-resources, gio-querymodules, gdbus-codegen

alt text

  • directory: 表示下载后的文件,解压到该目录中

  • source_url: 文件下载链接

  • source_fallback_url: 备用下载链接

  • source_filename: 下载后的文件名称

  • source_hash: 文件的哈希验证值

1.1 通过provide无需指定fallback

  1. 第一种方式是:子项目中使用了 meson.override_dependency ,我们可以使用 dependency_names 后,主项目中可以直接使用 dependency 查找该依赖,如果不能找到,自动就会通过wrap下载,不需要额外指定fallback。

    alt text

  2. 第二种就是,子项目没有使用 meson.override_dependency,我们可以通过 gobject-2.0=libgobject_dep 方式。主项目中可以直接使用 dependency 查找该依赖,如果不能找到,自动就会通过wrap下载,不需要额外指定fallback。

    alt text

    alt text

1.2 没有provide手动指定fallback

project('my_project', 'cpp', version: '1.0')

# 手动指定子项目 my_zlib 中的 zlib_dep 依赖
my_dep = dependency('my_zlib', required: true, fallback: ['my_zlib', 'zlib_dep'])

executable('demo', 'main.cpp',
           dependencies: my_dep)

2 wrap-git

这部分可以在 /assets/BuildSystem/Meson/16_subproject_wrap/参考

[wrap-git]
directory=simple
url=https://github.com/LieryangStack/libsimple.git

[provide]
simple=libsimple_dep