[glib: 5/6] meson: libelf.pc is not always available



commit a77790330b134c66157a24395fd60bac8299f17b
Author: Ting-Wei Lan <lantw src gnome org>
Date:   Sun Jun 3 02:32:22 2018 +0800

    meson: libelf.pc is not always available
    
    libelf, just like libc, is not a single project. It is an interface
    which can be implemented independently by different operating systems.
    Therefore, we cannot expect all systems to provide a .pc file, and we
    should fallback to cc.find_library and cc.has_function like what we
    already do in autotools build.

 gio/meson.build | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
---
diff --git a/gio/meson.build b/gio/meson.build
index b8baaa639..119e58059 100644
--- a/gio/meson.build
+++ b/gio/meson.build
@@ -855,9 +855,26 @@ else
 endif
 
 # Dependencies used by executables below
+have_libelf = false
 libelf = dependency('libelf', version : '>= 0.8.12', required : false)
 if libelf.found()
+  have_libelf = true
+else
+  # This fallback is necessary on *BSD. elfutils isn't the only libelf
+  # implementation, and *BSD usually includes their own libelf as a system
+  # library which doesn't have a corresponding .pc file.
+  libelf = cc.find_library('elf', required : false)
+  have_libelf = libelf.found()
+  have_libelf = have_libelf and cc.has_function('elf_begin', dependencies : libelf)
+  have_libelf = have_libelf and cc.has_function('elf_getshdrstrndx', dependencies : libelf)
+  have_libelf = have_libelf and cc.has_function('elf_getshdrnum', dependencies : libelf)
+  have_libelf = have_libelf and cc.has_header('libelf.h')
+endif
+
+if have_libelf
   glib_conf.set('HAVE_LIBELF', 1)
+else
+  libelf = []
 endif
 
 gconstructor_as_data_h = custom_target('gconstructor_as_data.h',


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]