librariesmeson-buildbuild-dependencies

How to get the library paths of a meson dependency?


Use case: I have a dependency that falls back to a subproject:

./
./subprojects/
./subprojects/mylib.wrap

src/meson.build contains:

mylib_dep = dependency('mylib')  # Searches for mylib with pkg-config then fall backs to mylib.wrap.
myexec_exe = executable ('myexec', 'myexec.c', dependencies : mylib_dep)

Dependency mylib_dep provides libraries, which, if not installed on the system, make the main executable of my project unusable:

$ meson build && cd build && meson compile src/my_exec
...snip'd...
$ src/my_exec
src/my_exec: error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory

My testing script build/tests/mytests.sh is configure_filed from tests/mytests.sh.in to indicate the location of myexec, and I'd like to pass to it the library paths, so that it can adjust LD_LIBRARY_PATH and run the executable. For instance, in tests/meson.build:

conf_data = configuration_data ()
conf_data.set_quoted ('MYEXEC_PATH', myexec_exe.full_path ())
conf_data.set_quoted ('MYLIB_PATH', mylib_dep.??????)
mytest_exe = configure_file (input : 'mytests.sh.in', output : 'mytests.sh', configuration : conf_data)

and in tests/mytests.sh.in:

MYEXEC_PATH=@MYEXEC_PATH@
MYLIB_PATH=@MYLIB_PATH@
export LD_LIBRARY_PATH=$(dirname "$MYLIB_PATH"):$LD_LIBRARY_PATH
$MYEXEC_PATH

Question: What should go at the ?????? above? In other words, given a dependency object, how can I extract the libraries within it, and get their full paths?


Solution

  • Usually in meson you wouldn't configure_file this, you'd pass the library/executable(s) to the script as arguments in the test command:

    test(
      'mytest',
      find_program('mytest.sh')
      args : [executable_target, library_target, ...],
    )