aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Payet <monwarez@gmail.com>2020-10-01 16:40:45 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2020-11-04 18:16:03 +0200
commiteec5bb11ba314dc9e8eade8eab3c081f52a151e0 (patch)
treef8a5305bdd6d4f76a9a6249ba6c5200caef2d8ca
parenta7edbc6ee5e4b1ebf5c4f713060d11a62a0f7f13 (diff)
downloadmeson-eec5bb11ba314dc9e8eade8eab3c081f52a151e0.zip
meson-eec5bb11ba314dc9e8eade8eab3c081f52a151e0.tar.gz
meson-eec5bb11ba314dc9e8eade8eab3c081f52a151e0.tar.bz2
symbolextractor: Add FreeBSD support
-rw-r--r--mesonbuild/scripts/symbolextractor.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/mesonbuild/scripts/symbolextractor.py b/mesonbuild/scripts/symbolextractor.py
index e607315..30065cc 100644
--- a/mesonbuild/scripts/symbolextractor.py
+++ b/mesonbuild/scripts/symbolextractor.py
@@ -171,6 +171,24 @@ def openbsd_syms(libfilename: str, outfilename: str) -> None:
result += [' '.join(x.split()[0:2]) for x in output.split('\n') if x and not x.endswith('U ')]
write_if_changed('\n'.join(result) + '\n', outfilename)
+def freebsd_syms(libfilename: str, outfilename: str) -> None:
+ # Get the name of the library
+ output = call_tool('readelf', ['-d', libfilename])
+ if not output:
+ dummy_syms(outfilename)
+ return
+ result = [x for x in output.split('\n') if 'SONAME' in x]
+ assert(len(result) <= 1)
+ # Get a list of all symbols exported
+ output = call_tool('nm', ['--dynamic', '--extern-only', '--defined-only',
+ '--format=posix', libfilename])
+ if not output:
+ dummy_syms(outfilename)
+ return
+
+ result += [' '.join(x.split()[0:2]) for x in output.split('\n')]
+ write_if_changed('\n'.join(result) + '\n', outfilename)
+
def cygwin_syms(impfilename: str, outfilename: str) -> None:
# Get the name of the library
output = call_tool('dlltool', ['-I', impfilename])
@@ -268,6 +286,8 @@ def gen_symbols(libfilename: str, impfilename: str, outfilename: str, cross_host
osx_syms(libfilename, outfilename)
elif mesonlib.is_openbsd():
openbsd_syms(libfilename, outfilename)
+ elif mesonlib.is_freebsd():
+ freebsd_syms(libfilename, outfilename)
elif mesonlib.is_windows():
if os.path.isfile(impfilename):
windows_syms(impfilename, outfilename)