2017-08-09 5 views
1

J'utilise meson dans quelques projets C (projectA et projectB), où projectB liens à une bibliothèque de projectA. Dans projectA/meson.build, j'ai écrit un fichier pkg-configprojectA.pc en utilisant le meson, qui est installé à join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig') comme prévu. J'utilise dependency('projectA') pour rechercher le fichier projectA.pc.Définir PKG_CONFIG_PATH à l'intérieur de meson.build

Lorsque j'utilise est incapable de trouver le préfixe d'installation personnalisé pour construire projectA et projectB, mesonprojectA.pc lors de la construction projectB. Y at-il un moyen de spécifier un PKG_CONFIG_PATH de projectB/meson.build?

Ce numéro est reproduit avec ce exemple minimal:

projeta/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') 

Commandes :

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 

Est-il possible de dire que projectB/meson.builddependency() devrait se pencher sur join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')?

je tentais d'avoir une variable d'environnement définie à l'intérieur du méson dependency() appel, mais l'argument env n'existe pas pour dependency():

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

Malheureusement l'argument env: dans la dépendance est ignoré (il n'existe pas les docs). L'ajout du répertoire $ {prefix}/$ {libdir}/pkgconfig à PKG_CONFIG_PATH à partir du meson a du sens pour moi. Y a-t-il un moyen de le faire?

Répondre

0

Après avoir demandé sur l'IRC, j'ai été informé que PKG_CONFIG_PATH devrait être défini par l'utilisateur (pas par moi) afin que meson ne fournit pas un moyen de le changer.

La meilleure approche dans ce cas serait d'utiliser des sous-projets ou des wraps pour que meson gère tout en même temps.

0

définir PKG_CONFIG_PATHprojectA.pc est lorsque vous générez projectB.

Oui, PKG_CONFIG_PATH est pour les utilisateurs à coup sûr. Cependant, dans ce contexte, celui qui compile votre projectA et projectB est un utilisateur, même vous êtes.

ie) Lorsque vous voulez compiler projectB parce que vous voulez tester projectB par rapport à la nouvelle version de projectA qui est installée dans un répertoire différent, vous devez ajuster PKG_CONFIG_PATH.

Et oui, c'est beaucoup plus facile pour votre utilisateur si vous configurez projectB ayant projectA comme subproject.