From a77790330b134c66157a24395fd60bac8299f17b Mon Sep 17 00:00:00 2001 From: Ting-Wei Lan Date: Sun, 3 Jun 2018 02:32:22 +0800 Subject: [PATCH] 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',