tests/linuxlike: Honor PKG_CONFIG envvar

For some of us, we need to use this to get the right pkg-config. If the
variable is unset, `'pkg-config'` is used.
pull/10160/head
Dylan Baker 3 years ago committed by Jussi Pakkanen
parent 655746e8b4
commit b43cf097c2
  1. 30
      unittests/linuxliketests.py

@ -46,6 +46,8 @@ from mesonbuild.compilers import (
from mesonbuild.dependencies import PkgConfigDependency from mesonbuild.dependencies import PkgConfigDependency
import mesonbuild.modules.pkgconfig import mesonbuild.modules.pkgconfig
PKG_CONFIG = os.environ.get('PKG_CONFIG', 'pkg-config')
from run_tests import ( from run_tests import (
get_fake_env get_fake_env
@ -185,7 +187,7 @@ class LinuxlikeTests(BasePlatformTests):
'PKG_CONFIG_LIBDIR': os.pathsep.join([privatedir1, privatedir2]), 'PKG_CONFIG_LIBDIR': os.pathsep.join([privatedir1, privatedir2]),
'PKG_CONFIG_SYSTEM_LIBRARY_PATH': '/usr/lib', 'PKG_CONFIG_SYSTEM_LIBRARY_PATH': '/usr/lib',
} }
self._run(['pkg-config', 'dependency-test', '--validate'], override_envvars=env) self._run([PKG_CONFIG, 'dependency-test', '--validate'], override_envvars=env)
# pkg-config strips some duplicated flags so we have to parse the # pkg-config strips some duplicated flags so we have to parse the
# generated file ourself. # generated file ourself.
@ -210,21 +212,21 @@ class LinuxlikeTests(BasePlatformTests):
matched_lines += 1 matched_lines += 1
self.assertEqual(len(expected), matched_lines) self.assertEqual(len(expected), matched_lines)
cmd = ['pkg-config', 'requires-test'] cmd = [PKG_CONFIG, 'requires-test']
out = self._run(cmd + ['--print-requires'], override_envvars=env).strip().split('\n') out = self._run(cmd + ['--print-requires'], override_envvars=env).strip().split('\n')
if not is_openbsd(): if not is_openbsd():
self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo >= 1.0', 'libhello'])) self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo >= 1.0', 'libhello']))
else: else:
self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo>=1.0', 'libhello'])) self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo>=1.0', 'libhello']))
cmd = ['pkg-config', 'requires-private-test'] cmd = [PKG_CONFIG, 'requires-private-test']
out = self._run(cmd + ['--print-requires-private'], override_envvars=env).strip().split('\n') out = self._run(cmd + ['--print-requires-private'], override_envvars=env).strip().split('\n')
if not is_openbsd(): if not is_openbsd():
self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo >= 1.0', 'libhello'])) self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo >= 1.0', 'libhello']))
else: else:
self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo>=1.0', 'libhello'])) self.assertEqual(sorted(out), sorted(['libexposed', 'libfoo>=1.0', 'libhello']))
cmd = ['pkg-config', 'pub-lib-order'] cmd = [PKG_CONFIG, 'pub-lib-order']
out = self._run(cmd + ['--libs'], override_envvars=env).strip().split() out = self._run(cmd + ['--libs'], override_envvars=env).strip().split()
self.assertEqual(out, ['-llibmain2', '-llibinternal']) self.assertEqual(out, ['-llibmain2', '-llibinternal'])
@ -324,8 +326,8 @@ class LinuxlikeTests(BasePlatformTests):
Test that qt4 and qt5 detection with pkgconfig works. Test that qt4 and qt5 detection with pkgconfig works.
''' '''
# Verify Qt4 or Qt5 can be found with pkg-config # Verify Qt4 or Qt5 can be found with pkg-config
qt4 = subprocess.call(['pkg-config', '--exists', 'QtCore']) qt4 = subprocess.call([PKG_CONFIG, '--exists', 'QtCore'])
qt5 = subprocess.call(['pkg-config', '--exists', 'Qt5Core']) qt5 = subprocess.call([PKG_CONFIG, '--exists', 'Qt5Core'])
testdir = os.path.join(self.framework_test_dir, '4 qt') testdir = os.path.join(self.framework_test_dir, '4 qt')
self.init(testdir, extra_args=['-Dmethod=pkg-config']) self.init(testdir, extra_args=['-Dmethod=pkg-config'])
# Confirm that the dependency was found with pkg-config # Confirm that the dependency was found with pkg-config
@ -850,7 +852,7 @@ class LinuxlikeTests(BasePlatformTests):
gobject_found = True gobject_found = True
self.assertTrue(glib_found) self.assertTrue(glib_found)
self.assertTrue(gobject_found) self.assertTrue(gobject_found)
if subprocess.call(['pkg-config', '--exists', 'glib-2.0 >= 2.56.2']) != 0: if subprocess.call([PKG_CONFIG, '--exists', 'glib-2.0 >= 2.56.2']) != 0:
raise SkipTest('glib >= 2.56.2 needed for the rest') raise SkipTest('glib >= 2.56.2 needed for the rest')
targets = self.introspect('--targets') targets = self.introspect('--targets')
docbook_target = None docbook_target = None
@ -1080,7 +1082,7 @@ class LinuxlikeTests(BasePlatformTests):
def test_pkgconfig_usage(self): def test_pkgconfig_usage(self):
testdir1 = os.path.join(self.unit_test_dir, '27 pkgconfig usage/dependency') testdir1 = os.path.join(self.unit_test_dir, '27 pkgconfig usage/dependency')
testdir2 = os.path.join(self.unit_test_dir, '27 pkgconfig usage/dependee') testdir2 = os.path.join(self.unit_test_dir, '27 pkgconfig usage/dependee')
if subprocess.call(['pkg-config', '--cflags', 'glib-2.0'], if subprocess.call([PKG_CONFIG, '--cflags', 'glib-2.0'],
stdout=subprocess.DEVNULL, stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL) != 0: stderr=subprocess.DEVNULL) != 0:
raise SkipTest('Glib 2.0 dependency not available.') raise SkipTest('Glib 2.0 dependency not available.')
@ -1095,10 +1097,10 @@ class LinuxlikeTests(BasePlatformTests):
myenv = os.environ.copy() myenv = os.environ.copy()
myenv['PKG_CONFIG_PATH'] = pkg_dir myenv['PKG_CONFIG_PATH'] = pkg_dir
# Private internal libraries must not leak out. # Private internal libraries must not leak out.
pkg_out = subprocess.check_output(['pkg-config', '--static', '--libs', 'libpkgdep'], env=myenv) pkg_out = subprocess.check_output([PKG_CONFIG, '--static', '--libs', 'libpkgdep'], env=myenv)
self.assertNotIn(b'libpkgdep-int', pkg_out, 'Internal library leaked out.') self.assertNotIn(b'libpkgdep-int', pkg_out, 'Internal library leaked out.')
# Dependencies must not leak to cflags when building only a shared library. # Dependencies must not leak to cflags when building only a shared library.
pkg_out = subprocess.check_output(['pkg-config', '--cflags', 'libpkgdep'], env=myenv) pkg_out = subprocess.check_output([PKG_CONFIG, '--cflags', 'libpkgdep'], env=myenv)
self.assertNotIn(b'glib', pkg_out, 'Internal dependency leaked to headers.') self.assertNotIn(b'glib', pkg_out, 'Internal dependency leaked to headers.')
# Test that the result is usable. # Test that the result is usable.
self.init(testdir2, override_envvars=myenv) self.init(testdir2, override_envvars=myenv)
@ -1196,7 +1198,7 @@ class LinuxlikeTests(BasePlatformTests):
self.init(testdir) self.init(testdir)
myenv = os.environ.copy() myenv = os.environ.copy()
myenv['PKG_CONFIG_PATH'] = self.privatedir myenv['PKG_CONFIG_PATH'] = self.privatedir
stdo = subprocess.check_output(['pkg-config', '--libs-only-l', 'libsomething'], env=myenv) stdo = subprocess.check_output([PKG_CONFIG, '--libs-only-l', 'libsomething'], env=myenv)
deps = [b'-lgobject-2.0', b'-lgio-2.0', b'-lglib-2.0', b'-lsomething'] deps = [b'-lgobject-2.0', b'-lgio-2.0', b'-lglib-2.0', b'-lsomething']
if is_windows() or is_cygwin() or is_osx() or is_openbsd(): if is_windows() or is_cygwin() or is_osx() or is_openbsd():
# On Windows, libintl is a separate library # On Windows, libintl is a separate library
@ -1210,7 +1212,7 @@ class LinuxlikeTests(BasePlatformTests):
self.init(testdir) self.init(testdir)
myenv = os.environ.copy() myenv = os.environ.copy()
myenv['PKG_CONFIG_PATH'] = self.privatedir myenv['PKG_CONFIG_PATH'] = self.privatedir
stdo = subprocess.check_output(['pkg-config', '--libs', 'libsomething'], env=myenv) stdo = subprocess.check_output([PKG_CONFIG, '--libs', 'libsomething'], env=myenv)
self.assertEqual("-r/usr/lib/libsomething.dll", str(stdo.decode('ascii')).strip()) self.assertEqual("-r/usr/lib/libsomething.dll", str(stdo.decode('ascii')).strip())
@ -1223,7 +1225,7 @@ class LinuxlikeTests(BasePlatformTests):
self.init(testdir) self.init(testdir)
myenv = os.environ.copy() myenv = os.environ.copy()
myenv['PKG_CONFIG_PATH'] = self.privatedir myenv['PKG_CONFIG_PATH'] = self.privatedir
stdo = subprocess.check_output(['pkg-config', '--libs', 'libsomething'], env=myenv) stdo = subprocess.check_output([PKG_CONFIG, '--libs', 'libsomething'], env=myenv)
deps = stdo.split() deps = stdo.split()
self.assertLess(deps.index(b'-lsomething'), deps.index(b'-ldependency')) self.assertLess(deps.index(b'-lsomething'), deps.index(b'-ldependency'))
@ -1365,7 +1367,7 @@ class LinuxlikeTests(BasePlatformTests):
# skip test if pkg-config is too old. # skip test if pkg-config is too old.
# before v0.28, Libs flags like -Wl will not kept in context order with -l flags. # before v0.28, Libs flags like -Wl will not kept in context order with -l flags.
# see https://gitlab.freedesktop.org/pkg-config/pkg-config/-/blob/master/NEWS # see https://gitlab.freedesktop.org/pkg-config/pkg-config/-/blob/master/NEWS
pkgconfigver = subprocess.check_output(['pkg-config', '--version']) pkgconfigver = subprocess.check_output([PKG_CONFIG, '--version'])
if b'0.28' > pkgconfigver: if b'0.28' > pkgconfigver:
raise SkipTest('pkg-config is too old to be correctly done this.') raise SkipTest('pkg-config is too old to be correctly done this.')
self.run_tests() self.run_tests()

Loading…
Cancel
Save