Skip to content

Commit

Permalink
Add test for pkgconfig generation and usage.
Browse files Browse the repository at this point in the history
This builds a project with pkg-config file, installs it and then
builds a second project that uses that dependency and runs the result.
  • Loading branch information
jpakkane committed Mar 16, 2018
1 parent a20c5cc commit d532650
Show file tree
Hide file tree
Showing 7 changed files with 76 additions and 2 deletions.
28 changes: 26 additions & 2 deletions run_unittests.py
Original file line number Diff line number Diff line change
Expand Up @@ -585,10 +585,11 @@ def clean(self):
def run_tests(self):
self._run(self.test_command, workdir=self.builddir)

def install(self):
def install(self, *, use_destdir=True):
if self.backend is not Backend.ninja:
raise unittest.SkipTest('{!r} backend can\'t install files'.format(self.backend.name))
os.environ['DESTDIR'] = self.installdir
if use_destdir:
os.environ['DESTDIR'] = self.installdir
self._run(self.install_command, workdir=self.builddir)

def uninstall(self):
Expand Down Expand Up @@ -2712,6 +2713,29 @@ def test_old_gnome_module_codepaths(self):
self.build()
mesonbuild.modules.gnome.native_glib_version = None

@unittest.skipIf(shutil.which('pkg-config') is None, 'Pkg-config not found.')
def test_pkgconfig_usage(self):
testdir1 = os.path.join(self.unit_test_dir, '24 pkgconfig usage/dependency')
testdir2 = os.path.join(self.unit_test_dir, '24 pkgconfig usage/dependee')
with tempfile.TemporaryDirectory() as tempdirname:
self.init(testdir1, ['--prefix=' + tempdirname, '--libdir=lib'], default_args=False)
self.install(use_destdir=False)
shutil.rmtree(self.builddir)
os.mkdir(self.builddir)
pkg_dir = os.path.join(tempdirname, 'lib/pkgconfig')
self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'libpkgdep.pc')))
lib_dir = os.path.join(tempdirname, 'lib')
os.environ['PKG_CONFIG_PATH'] = pkg_dir
self.init(testdir2)
self.build()
myenv = os.environ.copy()
myenv['LD_LIBRARY_PATH'] = lib_dir
self.assertTrue(os.path.isdir(lib_dir))
self.assertTrue(os.path.isfile(os.path.join(lib_dir, 'libpkgdep.so')))
test_exe = os.path.join(self.builddir, 'pkguser')
self.assertTrue(os.path.isfile(test_exe))
subprocess.check_call(test_exe, env=myenv)


class LinuxArmCrossCompileTests(BasePlatformTests):
'''
Expand Down
7 changes: 7 additions & 0 deletions test cases/unit/24 pkgconfig usage/dependee/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
project('pkgconfig user', 'c')

pkgdep = dependency('libpkgdep')

executable('pkguser', 'pkguser.c',
dependencies : pkgdep)

6 changes: 6 additions & 0 deletions test cases/unit/24 pkgconfig usage/dependee/pkguser.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#include<pkgdep.h>

int main(int argc, char **argv) {
int res = pkgdep();
return res != 99;
}
24 changes: 24 additions & 0 deletions test cases/unit/24 pkgconfig usage/dependency/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
project('pkgconfig dep', 'c',
version : '1.0.0')

# This is not used in the code, only to check that it does not
# leak out to --libs.
glib_dep = dependency('glib-2.0')

pkgconfig = import('pkgconfig')

intlib = static_library('libpkgdep-int', 'privatelib.c')
intdep = declare_dependency(link_with : intlib)

lib = shared_library('pkgdep', 'pkgdep.c',
dependencies : [glib_dep, intdep],
install : true)

install_headers('pkgdep.h')

pkgconfig.generate(
filebase : 'libpkgdep',
name : 'Libpkgdep',
description : 'Sample pkgconfig dependency library',
version : meson.project_version(),
libraries : lib)
7 changes: 7 additions & 0 deletions test cases/unit/24 pkgconfig usage/dependency/pkgdep.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include<pkgdep.h>

int internal_thingy();

int pkgdep() {
return internal_thingy();
}
3 changes: 3 additions & 0 deletions test cases/unit/24 pkgconfig usage/dependency/pkgdep.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

int pkgdep();
3 changes: 3 additions & 0 deletions test cases/unit/24 pkgconfig usage/dependency/privatelib.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
int internal_thingy() {
return 99;
}

0 comments on commit d532650

Please sign in to comment.