build: detect execinfo library on Linux
authorThomas Monjalon <thomas@monjalon.net>
Thu, 25 Feb 2021 01:49:19 +0000 (02:49 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 23 Mar 2021 07:41:05 +0000 (08:41 +0100)
The library execinfo and its header file can be installed on Alpine Linux
where the backtrace feature is not part of musl libc:
apk add libexecinfo-dev

As a consequence, this library should not be restricted to BSD only.

At the same time, the library and header are detected once and added
globally to be linked with any application, internal or external.

Fixes: 9065b1fac65f ("build: fix dependency on execinfo for BSD meson builds")
Cc: stable@dpdk.org
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Acked-by: David Marchand <david.marchand@redhat.com>
app/meson.build
app/test/meson.build
config/meson.build
examples/meson.build

index 87fc195..50a53db 100644 (file)
@@ -21,9 +21,6 @@ apps = [
        'test-regex',
        'test-sad']
 
-# for BSD only
-lib_execinfo = cc.find_library('execinfo', required: false)
-
 default_cflags = machine_args + ['-DALLOW_EXPERIMENTAL_API']
 default_ldflags = []
 if get_option('default_library') == 'static' and not is_windows
@@ -53,7 +50,6 @@ foreach app:apps
                        dep_objs += get_variable(get_option('default_library')
                                 + '_rte_' + d)
                endforeach
-               dep_objs += lib_execinfo
 
                link_libs = []
                if get_option('default_library') == 'static'
index 561e493..099895f 100644 (file)
@@ -426,7 +426,6 @@ foreach d:test_deps
        def_lib = get_option('default_library')
        test_dep_objs += get_variable(def_lib + '_rte_' + d)
 endforeach
-test_dep_objs += cc.find_library('execinfo', required: false)
 
 link_libs = []
 if get_option('default_library') == 'static'
index 3cf560b..66a2edc 100644 (file)
@@ -125,11 +125,8 @@ if cc.find_library('m', required : false).found()
        dpdk_extra_ldflags += '-lm'
 endif
 
-# for linux link against dl, for bsd execinfo
 if is_linux
        link_lib = 'dl'
-elif is_freebsd
-       link_lib = 'execinfo'
 else
        link_lib = ''
 endif
@@ -166,6 +163,12 @@ if fdt_dep.found() and cc.has_header('fdt.h')
        dpdk_extra_ldflags += '-lfdt'
 endif
 
+libexecinfo = cc.find_library('libexecinfo', required: false)
+if libexecinfo.found() and cc.has_header('execinfo.h')
+       add_project_link_arguments('-lexecinfo', language: 'c')
+       dpdk_extra_ldflags += '-lexecinfo'
+endif
+
 # check for libbsd
 libbsd = dependency('libbsd', required: false, method: 'pkg-config')
 if libbsd.found()
index 3fe08d4..d065a6a 100644 (file)
@@ -6,8 +6,6 @@ if get_option('default_library') == 'static'
        link_whole_libs = dpdk_static_libraries + dpdk_drivers
 endif
 
-execinfo = cc.find_library('execinfo', required: false)
-
 # list of all example apps. Keep 1-3 per line, in alphabetical order.
 all_examples = [
        'bbdev_app', 'bond',
@@ -82,7 +80,7 @@ foreach example: examples
        cflags = default_cflags
        ldflags = default_ldflags
 
-       ext_deps = [execinfo]
+       ext_deps = []
        includes = [include_directories(example)]
        deps = ['eal', 'mempool', 'net', 'mbuf', 'ethdev', 'cmdline']
        subdir(example)