View | Details | Raw Unified | Return to bug 241105 | Differences between
and this patch

Collapse All | Expand All

(-)b/devel/meson/Makefile (-5 / +7 lines)
Lines 2-14 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	meson
4
PORTNAME=	meson
5
PORTVERSION=	0.51.2
5
PORTVERSION=	0.52.0
6
CATEGORIES=	devel python
6
CATEGORIES=	devel python
7
MASTER_SITES=	https://github.com/mesonbuild/${PORTNAME}/releases/download/${PORTVERSION}/
7
MASTER_SITES=	https://github.com/mesonbuild/${PORTNAME}/releases/download/${PORTVERSION}/
8
8
9
PATCH_SITES=	https://github.com/mesonbuild/${PORTNAME}/commit/
10
PATCHFILES+=	efea48788ab2.patch:-p1
11
12
MAINTAINER=	gnome@FreeBSD.org
9
MAINTAINER=	gnome@FreeBSD.org
13
COMMENT=	High performance build system
10
COMMENT=	High performance build system
14
11
Lines 16-24 LICENSE= APACHE20 Link Here
16
LICENSE_FILE=	${WRKSRC}/COPYING
13
LICENSE_FILE=	${WRKSRC}/COPYING
17
14
18
RUN_DEPENDS=	ninja:devel/ninja
15
RUN_DEPENDS=	ninja:devel/ninja
16
TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pytest-xdist>0:devel/py-pytest-xdist@${PY_FLAVOR}
19
17
20
USES=		python:3.5+
18
USES=		python:3.5+ shebangfix
21
USE_PYTHON=	autoplist distutils noflavors
19
USE_PYTHON=	autoplist distutils noflavors
20
SHEBANG_FILES=	mesonbuild/cmake/data/run_ctgt.py
22
NO_ARCH=	yes
21
NO_ARCH=	yes
23
22
23
do-test:
24
	@(cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} ${WRKSRC}/run_tests.py)
25
24
.include <bsd.port.mk>
26
.include <bsd.port.mk>
(-)b/devel/meson/distinfo (-5 / +3 lines)
Lines 1-5 Link Here
1
TIMESTAMP = 1566836953
1
TIMESTAMP = 1570381541
2
SHA256 (meson-0.51.2.tar.gz) = 23688f0fc90be623d98e80e1defeea92bbb7103bf9336a5f5b9865d36e892d76
2
SHA256 (meson-0.52.0.tar.gz) = d60f75f0dedcc4fd249dbc7519d6f3ce6df490033d276ef1cf27453ef4938d32
3
SIZE (meson-0.51.2.tar.gz) = 1453251
3
SIZE (meson-0.52.0.tar.gz) = 1507110
4
SHA256 (efea48788ab2.patch) = eee556fb0cd6cbba5756bbfb508412081743cd813dd10d1b9cbc419769281d39
5
SIZE (efea48788ab2.patch) = 953
(-)b/devel/meson/files/patch-mesonbuild_dependencies_base.py (-26 / +35 lines)
Lines 52-82 users, without depending on the unreliable part of pkg-config output. Link Here
52
52
53
Fixes https://github.com/mesonbuild/meson/issues/4271.
53
Fixes https://github.com/mesonbuild/meson/issues/4271.
54
54
55
--- mesonbuild/dependencies/base.py.orig
55
--- mesonbuild/dependencies/base.py.orig	2019-10-06 17:01:35 UTC
56
+++ mesonbuild/dependencies/base.py
56
+++ mesonbuild/dependencies/base.py
57
@@ -706,6 +706,21 @@ def _set_cargs(self):
57
@@ -784,6 +784,22 @@ class PkgConfigDependency(ExternalDependency):
58
                                       (self.name, out))
59
         self.compile_args = self._convert_mingw_paths(shlex.split(out))
60
 
61
+    def _sort_libpaths(self, libpaths, refpaths):
62
+        if len(refpaths) == 0:
63
+            return list(libpaths)
64
+
65
+        def key_func(libpath):
66
+            common_lengths = []
67
+            for refpath in refpaths:
68
+                common_path = os.path.commonpath([libpath, refpath])
69
+                common_lengths.append(len(common_path))
70
+            max_length = max(common_lengths)
71
+            max_index = common_lengths.index(max_length)
72
+            reversed_max_length = len(refpaths[max_index]) - max_length
73
+            return (max_index, reversed_max_length)
74
+        return sorted(libpaths, key=key_func)
75
+
76
     def _search_libs(self, out, out_raw):
77
         '''
78
         @out: PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 pkg-config --libs
79
@@ -741,6 +756,22 @@ def _search_libs(self, out, out_raw):
80
                     # Resolve the path as a compiler in the build directory would
58
                     # Resolve the path as a compiler in the build directory would
81
                     path = os.path.join(self.env.get_build_dir(), path)
59
                     path = os.path.join(self.env.get_build_dir(), path)
82
                 prefix_libpaths.add(path)
60
                 prefix_libpaths.add(path)
Lines 95-101 Fixes https://github.com/mesonbuild/meson/issues/4271. Link Here
95
+        else:
73
+        else:
96
+            pkg_config_path = []
74
+            pkg_config_path = []
97
+        pkg_config_path = self._convert_mingw_paths(pkg_config_path)
75
+        pkg_config_path = self._convert_mingw_paths(pkg_config_path)
98
+        prefix_libpaths = self._sort_libpaths(prefix_libpaths, pkg_config_path)
76
+        prefix_libpaths = sort_libpaths(prefix_libpaths, pkg_config_path)
99
         system_libpaths = OrderedSet()
77
         system_libpaths = OrderedSet()
100
         full_args = self._convert_mingw_paths(shlex.split(out))
78
         full_args = self._convert_mingw_paths(self._split_args(out))
101
         for arg in full_args:
79
         for arg in full_args:
80
@@ -2284,6 +2300,30 @@ def _build_external_dependency_list(name, env: Environ
81
                                                 False, None, env, None, kwargs))
82
 
83
     return candidates
84
+
85
+
86
+def sort_libpaths(libpaths: List[str], refpaths: List[str]) -> List[str]:
87
+    """Sort <libpaths> according to <refpaths>
88
+
89
+    It is intended to be used to sort -L flags returned by pkg-config.
90
+    Pkg-config returns flags in random order which cannot be relied on.
91
+    """
92
+    if len(refpaths) == 0:
93
+        return list(libpaths)
94
+
95
+    def key_func(libpath):
96
+        common_lengths = []
97
+        for refpath in refpaths:
98
+            try:
99
+                common_path = os.path.commonpath([libpath, refpath])
100
+            except ValueError:
101
+                common_path = ''
102
+            common_lengths.append(len(common_path))
103
+        max_length = max(common_lengths)
104
+        max_index = common_lengths.index(max_length)
105
+        reversed_max_length = len(refpaths[max_index]) - max_length
106
+        return (max_index, reversed_max_length)
107
+    return sorted(libpaths, key=key_func)
108
 
109
 
110
 def strip_system_libdirs(environment, for_machine: MachineChoice, link_args):
(-)b/devel/meson/files/patch-run__unittests.py (+49 lines)
Added Link Here
1
https://github.com/mesonbuild/meson/pull/4324
2
https://github.com/mesonbuild/meson/pull/4325
3
4
--- run_unittests.py.orig	2019-10-06 17:01:35 UTC
5
+++ run_unittests.py
6
@@ -57,6 +57,7 @@ from mesonbuild.mesonlib import (
7
 from mesonbuild.environment import detect_ninja
8
 from mesonbuild.mesonlib import MesonException, EnvironmentException
9
 from mesonbuild.dependencies import PkgConfigDependency, ExternalProgram
10
+import mesonbuild.dependencies.base
11
 from mesonbuild.build import Target
12
 import mesonbuild.modules.pkgconfig
13
 
14
@@ -1164,7 +1165,26 @@ class InternalTests(unittest.TestCase):
15
             deps = d.get_all_dependencies(target)
16
             self.assertEqual(deps, expdeps)
17
 
18
+    def test_sort_libpaths(self):
19
+        sort_libpaths = mesonbuild.dependencies.base.sort_libpaths
20
+        self.assertEqual(sort_libpaths(
21
+            ['/home/mesonuser/.local/lib', '/usr/local/lib', '/usr/lib'],
22
+            ['/home/mesonuser/.local/lib/pkgconfig', '/usr/local/lib/pkgconfig']),
23
+            ['/home/mesonuser/.local/lib', '/usr/local/lib', '/usr/lib'])
24
+        self.assertEqual(sort_libpaths(
25
+            ['/usr/local/lib', '/home/mesonuser/.local/lib', '/usr/lib'],
26
+            ['/home/mesonuser/.local/lib/pkgconfig', '/usr/local/lib/pkgconfig']),
27
+            ['/home/mesonuser/.local/lib', '/usr/local/lib', '/usr/lib'])
28
+        self.assertEqual(sort_libpaths(
29
+            ['/usr/lib', '/usr/local/lib', '/home/mesonuser/.local/lib'],
30
+            ['/home/mesonuser/.local/lib/pkgconfig', '/usr/local/lib/pkgconfig']),
31
+            ['/home/mesonuser/.local/lib', '/usr/local/lib', '/usr/lib'])
32
+        self.assertEqual(sort_libpaths(
33
+            ['/usr/lib', '/usr/local/lib', '/home/mesonuser/.local/lib'],
34
+            ['/home/mesonuser/.local/lib/pkgconfig', '/usr/local/libdata/pkgconfig']),
35
+            ['/home/mesonuser/.local/lib', '/usr/local/lib', '/usr/lib'])
36
 
37
+
38
 @unittest.skipIf(is_tarball(), 'Skipping because this is a tarball release')
39
 class DataTests(unittest.TestCase):
40
 
41
@@ -5680,7 +5700,7 @@ c = ['{0}']
42
         # Test that installed libraries works
43
         self.new_builddir()
44
         self.prefix = oldprefix
45
-        meson_args = ['-Dc_link_args=-L{}'.format(libdir),
46
+        meson_args = ['-Dc_link_args=-L{} -Wl,-rpath,{}'.format(libdir, libdir),
47
                       '--fatal-meson-warnings']
48
         testdir = os.path.join(self.unit_test_dir, '69 static link')
49
         env = {'PKG_CONFIG_LIBDIR': os.path.join(libdir, 'pkgconfig')}

Return to bug 241105