aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-03-16 23:52:45 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2018-03-16 23:52:45 +0200
commitd532650b0d7fb8bb062d852a8fdecd10be00ce21 (patch)
tree10ce5d2469112401af31003e2832e662cf6979b6
parenta20c5ccd13644f52eb2b311ff58990e67457619d (diff)
downloadmeson-d532650b0d7fb8bb062d852a8fdecd10be00ce21.zip
meson-d532650b0d7fb8bb062d852a8fdecd10be00ce21.tar.gz
meson-d532650b0d7fb8bb062d852a8fdecd10be00ce21.tar.bz2
Add test for pkgconfig generation and usage.
This builds a project with pkg-config file, installs it and then builds a second project that uses that dependency and runs the result.
-rwxr-xr-xrun_unittests.py28
-rw-r--r--test cases/unit/24 pkgconfig usage/dependee/meson.build7
-rw-r--r--test cases/unit/24 pkgconfig usage/dependee/pkguser.c6
-rw-r--r--test cases/unit/24 pkgconfig usage/dependency/meson.build24
-rw-r--r--test cases/unit/24 pkgconfig usage/dependency/pkgdep.c7
-rw-r--r--test cases/unit/24 pkgconfig usage/dependency/pkgdep.h3
-rw-r--r--test cases/unit/24 pkgconfig usage/dependency/privatelib.c3
7 files changed, 76 insertions, 2 deletions
diff --git a/run_unittests.py b/run_unittests.py
index 9c7b16b..1e8bec4 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -585,10 +585,11 @@ class BasePlatformTests(unittest.TestCase):
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):
@@ -2712,6 +2713,29 @@ endian = 'little'
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):
'''
diff --git a/test cases/unit/24 pkgconfig usage/dependee/meson.build b/test cases/unit/24 pkgconfig usage/dependee/meson.build
new file mode 100644
index 0000000..beb446c
--- /dev/null
+++ b/test cases/unit/24 pkgconfig usage/dependee/meson.build
@@ -0,0 +1,7 @@
+project('pkgconfig user', 'c')
+
+pkgdep = dependency('libpkgdep')
+
+executable('pkguser', 'pkguser.c',
+ dependencies : pkgdep)
+
diff --git a/test cases/unit/24 pkgconfig usage/dependee/pkguser.c b/test cases/unit/24 pkgconfig usage/dependee/pkguser.c
new file mode 100644
index 0000000..2bff316
--- /dev/null
+++ b/test cases/unit/24 pkgconfig usage/dependee/pkguser.c
@@ -0,0 +1,6 @@
+#include<pkgdep.h>
+
+int main(int argc, char **argv) {
+ int res = pkgdep();
+ return res != 99;
+}
diff --git a/test cases/unit/24 pkgconfig usage/dependency/meson.build b/test cases/unit/24 pkgconfig usage/dependency/meson.build
new file mode 100644
index 0000000..89fae8e
--- /dev/null
+++ b/test cases/unit/24 pkgconfig usage/dependency/meson.build
@@ -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)
diff --git a/test cases/unit/24 pkgconfig usage/dependency/pkgdep.c b/test cases/unit/24 pkgconfig usage/dependency/pkgdep.c
new file mode 100644
index 0000000..bd5c3f4
--- /dev/null
+++ b/test cases/unit/24 pkgconfig usage/dependency/pkgdep.c
@@ -0,0 +1,7 @@
+#include<pkgdep.h>
+
+int internal_thingy();
+
+int pkgdep() {
+ return internal_thingy();
+}
diff --git a/test cases/unit/24 pkgconfig usage/dependency/pkgdep.h b/test cases/unit/24 pkgconfig usage/dependency/pkgdep.h
new file mode 100644
index 0000000..16d622e
--- /dev/null
+++ b/test cases/unit/24 pkgconfig usage/dependency/pkgdep.h
@@ -0,0 +1,3 @@
+#pragma once
+
+int pkgdep();
diff --git a/test cases/unit/24 pkgconfig usage/dependency/privatelib.c b/test cases/unit/24 pkgconfig usage/dependency/privatelib.c
new file mode 100644
index 0000000..71d2179
--- /dev/null
+++ b/test cases/unit/24 pkgconfig usage/dependency/privatelib.c
@@ -0,0 +1,3 @@
+int internal_thingy() {
+ return 99;
+}