Lines 1-67
Link Here
|
1 |
From a3b2ae8ebcdcebd68b8a217d03102c6d03fcb766 Mon Sep 17 00:00:00 2001 |
|
|
2 |
From: Nirbheek Chauhan <nirbheek@centricular.com> |
3 |
Date: Tue, 1 May 2018 17:54:54 +0530 |
4 |
Subject: [PATCH] pkgconfig: Don't expose internal libraries in .pc files |
5 |
|
6 |
Libraries that have been linked with link_whole: are internal |
7 |
implementation details and should never be exposed to the outside |
8 |
world in either Libs: or Libs.private: |
9 |
|
10 |
Closes https://github.com/mesonbuild/meson/issues/3509 |
11 |
--- |
12 |
mesonbuild/build.py | 12 +++++++++--- |
13 |
mesonbuild/modules/pkgconfig.py | 4 ++-- |
14 |
run_unittests.py | 11 ++++++----- |
15 |
test cases/unit/31 pkgconfig format/meson.build | 5 +++-- |
16 |
test cases/unit/31 pkgconfig format/somelib.c | 4 +++- |
17 |
test cases/unit/31 pkgconfig format/someret.c | 3 +++ |
18 |
6 files changed, 26 insertions(+), 13 deletions(-) |
19 |
create mode 100644 test cases/unit/31 pkgconfig format/someret.c |
20 |
|
21 |
diff --git a/mesonbuild/build.py b/mesonbuild/build.py |
22 |
index 3d531d181..a2d024aec 100644 |
23 |
--- mesonbuild/build.py |
24 |
+++ mesonbuild/build.py |
25 |
@@ -817,16 +817,22 @@ def get_outputs(self): |
26 |
def get_extra_args(self, language): |
27 |
return self.extra_args.get(language, []) |
28 |
|
29 |
- def get_dependencies(self, exclude=None): |
30 |
+ def get_dependencies(self, exclude=None, internal=True): |
31 |
transitive_deps = [] |
32 |
if exclude is None: |
33 |
exclude = [] |
34 |
- for t in itertools.chain(self.link_targets, self.link_whole_targets): |
35 |
+ if internal: |
36 |
+ link_targets = itertools.chain(self.link_targets, self.link_whole_targets) |
37 |
+ else: |
38 |
+ # We don't want the 'internal' libraries when generating the |
39 |
+ # `Libs:` and `Libs.private:` lists in pkg-config files. |
40 |
+ link_targets = self.link_targets |
41 |
+ for t in link_targets: |
42 |
if t in transitive_deps or t in exclude: |
43 |
continue |
44 |
transitive_deps.append(t) |
45 |
if isinstance(t, StaticLibrary): |
46 |
- transitive_deps += t.get_dependencies(transitive_deps + exclude) |
47 |
+ transitive_deps += t.get_dependencies(transitive_deps + exclude, internal) |
48 |
return transitive_deps |
49 |
|
50 |
def get_source_subdir(self): |
51 |
diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py |
52 |
index 419a14c77..365d3cd37 100644 |
53 |
--- mesonbuild/modules/pkgconfig.py |
54 |
+++ mesonbuild/modules/pkgconfig.py |
55 |
@@ -123,10 +123,10 @@ def _process_libs(self, libs, public): |
56 |
if not hasattr(obj, 'generated_pc'): |
57 |
obj.generated_pc = self.name |
58 |
if isinstance(obj, build.StaticLibrary) and public: |
59 |
- self.add_pub_libs(obj.get_dependencies()) |
60 |
+ self.add_pub_libs(obj.get_dependencies(internal=False)) |
61 |
self.add_pub_libs(obj.get_external_deps()) |
62 |
else: |
63 |
- self.add_priv_libs(obj.get_dependencies()) |
64 |
+ self.add_priv_libs(obj.get_dependencies(internal=False)) |
65 |
self.add_priv_libs(obj.get_external_deps()) |
66 |
elif isinstance(obj, str): |
67 |
processed_libs.append(obj) |