diff options
author | Thibault Payet <monwarez@gmail.com> | 2020-10-01 16:40:45 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2020-11-04 18:16:03 +0200 |
commit | eec5bb11ba314dc9e8eade8eab3c081f52a151e0 (patch) | |
tree | f8a5305bdd6d4f76a9a6249ba6c5200caef2d8ca | |
parent | a7edbc6ee5e4b1ebf5c4f713060d11a62a0f7f13 (diff) | |
download | meson-eec5bb11ba314dc9e8eade8eab3c081f52a151e0.zip meson-eec5bb11ba314dc9e8eade8eab3c081f52a151e0.tar.gz meson-eec5bb11ba314dc9e8eade8eab3c081f52a151e0.tar.bz2 |
symbolextractor: Add FreeBSD support
-rw-r--r-- | mesonbuild/scripts/symbolextractor.py | 20 |
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) |