avoid libfdt checks adding full paths to pkg-config
authorChristian Ehrhardt <christian.ehrhardt@canonical.com>
Wed, 2 Sep 2020 11:10:30 +0000 (13:10 +0200)
committerDavid Marchand <david.marchand@redhat.com>
Tue, 15 Sep 2020 13:19:34 +0000 (15:19 +0200)
The checks for libfdt try dependency() first which would only work if
a pkg-config would be present but libfdt has none.
Then it probes for the lib path itself via cc.find_library.

But later it adds the result of either probe to ext_deps which ends up
in build and also the resulting pkg-config to contain toolchain versioned
paths in Libs.private like:
  /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libfdt.so
which obviously breaks on toolchain updates.

In general libs used multiple times - ipn3ke + ifpga in this case - are
checked centrally in config/meson.build so move it there and fix the
adding of dependencies to not use the full file path.

The result is libfdt in pkg-config now showing up as:
  Libs.private: -pthread -lm -ldl -lnuma -lfdt -lpcap

Fixes: e1defba4cf66 ("raw/ifpga/base: support device tree")
Cc: stable@dpdk.org
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Reviewed-by: Luca Boccassi <bluca@debian.org>
Reviewed-by: Bruce Richardson <bruce.richardson@intel.com>
config/meson.build
drivers/net/ipn3ke/meson.build
drivers/raw/ifpga/meson.build

index 6996e5c..69f2aeb 100644 (file)
@@ -147,6 +147,15 @@ if numa_dep.found() and cc.has_header('numaif.h')
        dpdk_extra_ldflags += '-lnuma'
 endif
 
+has_libfdt = 0
+fdt_dep = cc.find_library('libfdt', required: false)
+if fdt_dep.found() and cc.has_header('fdt.h')
+       dpdk_conf.set10('RTE_HAS_LIBFDT', true)
+       has_libfdt = 1
+       add_project_link_arguments('-lfdt', language: 'c')
+       dpdk_extra_ldflags += '-lfdt'
+endif
+
 # check for libbsd
 libbsd = dependency('libbsd', required: false)
 if libbsd.found()
index ec9cb7d..d5000d8 100644 (file)
@@ -9,11 +9,7 @@
 #  rte_eth_switch_domain_free()
 #
 
-dep = dependency('libfdt', required: false)
-if not dep.found()
-       dep = cc.find_library('libfdt', required: false)
-endif
-if not dep.found()
+if has_libfdt == 0
        build = false
        reason = 'missing dependency, "libfdt"'
        subdir_done()
index 05a1711..da454b1 100644 (file)
@@ -1,11 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
-dep = dependency('libfdt', required: false)
-if not dep.found()
-       dep = cc.find_library('libfdt', required: false)
-endif
-if not dep.found()
+if has_libfdt == 0
        build = false
        reason = 'missing dependency, "libfdt"'
        subdir_done()
@@ -16,7 +12,6 @@ objs = [base_objs]
 
 deps += ['ethdev', 'rawdev', 'pci', 'bus_pci', 'kvargs',
        'bus_vdev', 'bus_ifpga', 'net', 'pmd_i40e', 'pmd_ipn3ke']
-ext_deps += dep
 
 sources = files('ifpga_rawdev.c')