[v2,3/4] build: allow hiding dependencies from pkg-config

Message ID 20200127154402.4008069-4-thomas@monjalon.net (mailing list archive)
State Superseded, archived
Delegated to: Thomas Monjalon
Headers
Series add static ibverbs in meson |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply issues

Commit Message

Thomas Monjalon Jan. 27, 2020, 3:44 p.m. UTC
  If a dependency is required for a driver build,
but should not be exposed to the application (via pkg-config),
it can be declared in the array hidden_deps.

The hidden_deps are used as internal dependencies,
when building the shared library and the first stage of static library.
The final static library does not include the hidden_deps
because this library object is used to generate the .pc file.

Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
 doc/guides/contributing/coding_style.rst | 6 ++++++
 drivers/meson.build                      | 9 ++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)
  

Patch

diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst
index 841ef6d5c8..c96457273f 100644
--- a/doc/guides/contributing/coding_style.rst
+++ b/doc/guides/contributing/coding_style.rst
@@ -975,6 +975,12 @@  deps
 ext_deps
 	As above.
 
+hidden_deps
+	**Default Value = []**.
+	Used to specify external dependencies, same as ``ext_deps``, except
+	the libraries won't be exposed as requirements of the static driver,
+	in the section ``Requires.private`` of the generated ``.pc`` file.
+
 includes
 	**Default Value = <driver directory>** Some drivers include a base
 	directory for additional source files and headers, so we have this
diff --git a/drivers/meson.build b/drivers/meson.build
index 29708cc2bb..759263c309 100644
--- a/drivers/meson.build
+++ b/drivers/meson.build
@@ -56,6 +56,7 @@  foreach class:dpdk_driver_classes
 		# too, so that it can be reflected in the pkgconfig output for
 		# static builds.
 		ext_deps = []
+		hidden_deps = []
 		pkgconfig_extra_libs = []
 
 		# pull in driver directory which should assign to each of the above
@@ -71,8 +72,9 @@  foreach class:dpdk_driver_classes
 		endforeach
 		if build
 			# get dependency objs from strings
-			shared_deps = ext_deps
-			static_deps = ext_deps
+			shared_deps = ext_deps + hidden_deps
+			static_deps = ext_deps + hidden_deps
+			static_pub_deps = ext_deps
 			foreach d:deps
 				if not is_variable('shared_rte_' + d)
 					build = false
@@ -82,6 +84,7 @@  foreach class:dpdk_driver_classes
 				else
 					shared_deps += [get_variable('shared_rte_' + d)]
 					static_deps += [get_variable('static_rte_' + d)]
+					static_pub_deps += [get_variable('static_rte_' + d)]
 				endif
 			endforeach
 		endif
@@ -144,7 +147,7 @@  foreach class:dpdk_driver_classes
 				sources,
 				objects: objs,
 				include_directories: includes,
-				dependencies: static_deps,
+				dependencies: static_pub_deps, # skip hidden_deps
 				c_args: cflags,
 				install: true)