Установите PKG_CONFIG_PATH внутри meson.build

Я использую meson в нескольких проектах C (projectA и projectB), где projectB ссылается на библиотеку из projectA. В projectA/meson.build я написал pkg-config projectA.pc файл, используя meson, который, как и ожидалось, установлен в join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig').

В projectB/meson.build я использую dependency('projectA') для поиска projectA.pc файла.

Когда я использую специальный префикс установки для сборки projectA и projectB, meson не может найти projectA.pc при сборке projectB. Есть ли способ указать PKG_CONFIG_PATH от projectB/meson.build?

Эта проблема воспроизводится на следующем минимальном примере:

projectA / meson.build:

project('projectA', 'c', version: '1')

pkg = import('pkgconfig')

pkg.generate(name : 'projectA',
             description: 'ProjectA',
             version: meson.project_version())

projectB / meson.build:

project('projectB', 'c', version: '1')
dep = dependency('projectA')

Команды:

meson buildA projectA  --prefix=$PWD/install
(cd buildA && ninja install)
#[0/1] Installing files.
#Installing /tmp/test/buildA/meson-private/projectA.pc to /tmp/test/install/lib/x86_64-linux-gnu/pkgconfig
# [ The error: ]
meson buildB projectB  --prefix=$PWD/install
#Native dependency 'projectA' not found
# [ My workaround: ]
PKG_CONFIG_PATH="$PWD/install/lib/x86_64-linux-gnu/pkgconfig" meson buildB projectB  --prefix=$PWD/install
# Native dependency projectA found: YES 1

Есть ли способ сказать projectB/meson.build, что dependency() следует изучить join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')?

Я пытался установить переменную среды внутри вызова meson dependency(), но аргумент env не существует для dependency():

pkgconfigpath = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
message('pkgconfig: @0@'.format(pkgconfigpath))
env_pkgconfig = environment()
env_pkgconfig.set('PKG_CONFIG_PATH', pkgconfigpath)
projectA_dep = dependency('projectA', env: env_pkgconfig)

К сожалению, аргумент env: в зависимости игнорируется (его нет в документации).

Добавление каталога $ {prefix} / $ {libdir} / pkgconfig к PKG_CONFIG_PATH от meson имеет для меня смысл. Есть способ сделать это?


person zeehio    schedule 09.08.2017    source источник


Ответы (2)


После того, как я спросил в IRC, мне сообщили, что PKG_CONFIG_PATH должен быть установлен пользователем (не мной), поэтому meson не предоставляет способ его изменить.

Лучшим подходом в этом случае было бы использование подпроектов или оберток, чтобы meson обрабатывал все сразу.

person zeehio    schedule 09.08.2017

установите PKG_CONFIG_PATH в то место, где находится .pc файл projectA при сборке projectB.

Да, PKG_CONFIG_PATH точно для пользователей. Однако в этом контексте тот, кто компилирует ваши projectA и projectB, является пользователем, даже вы.

т.е.) Если вы хотите скомпилировать projectB, потому что хотите протестировать projectB на новой версии projectA, установленной в другой каталог, вы должны настроить PKG_CONFIG_PATH.

И да, вашему пользователю будет намного проще, если вы настроите projectB наличие projectA в качестве подпроекта.

person Yasushi Shoji    schedule 10.08.2017