summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildtools/wafsamba/samba_abi.py31
1 files changed, 21 insertions, 10 deletions
diff --git a/buildtools/wafsamba/samba_abi.py b/buildtools/wafsamba/samba_abi.py
index ebd5210317..396a7fc906 100644
--- a/buildtools/wafsamba/samba_abi.py
+++ b/buildtools/wafsamba/samba_abi.py
@@ -145,8 +145,16 @@ def abi_process_file(fname, version, symmap):
symmap[symname] = version
f.close()
-def abi_write_vscript(vscript, libname, version, symmap, abi_match):
- '''write a vscript file for a library in --version-script format'''
+def abi_write_vscript(vscript, libname, current_version, versions, symmap, abi_match):
+ '''write a vscript file for a library in --version-script format
+
+ :param vscript: Path to the vscript file
+ :param libname: Name of the library, uppercased
+ :param current_version: Current version
+ :param versions: Versions to consider
+ :param symmap: Dictionary mapping symbols -> version
+ :param abi_match: List of symbols considered to be public in the current version
+ '''
invmap = {}
for s in symmap:
@@ -154,16 +162,18 @@ def abi_write_vscript(vscript, libname, version, symmap, abi_match):
f = open(vscript, mode='w')
last_key = ""
- for k in sorted(invmap):
+ for k in sorted(versions):
symver = "%s_%s" % (libname, k)
- if symver == version:
+ if symver == current_version:
break
- f.write("%s {\n\tglobal: \n" % symver)
- for s in invmap[k]:
- f.write("\t\t%s;\n" % s);
+ f.write("%s {\n" % symver)
+ if k in invmap:
+ f.write("\tglobal: \n")
+ for s in invmap.get(k, []):
+ f.write("\t\t%s;\n" % s);
f.write("}%s;\n\n" % last_key)
last_key = " %s" % symver
- f.write("%s {\n" % version)
+ f.write("%s {\n" % current_version)
f.write("\tglobal:\n")
for x in abi_match:
f.write("\t\t%s;\n" % x)
@@ -179,13 +189,14 @@ def abi_build_vscript(task):
tgt = task.outputs[0].bldpath(task.env)
symmap = {}
-
+ versions = []
for f in task.inputs:
fname = f.abspath(task.env)
basename = os.path.basename(fname)
version = basename[len(task.env.LIBNAME)+1:-len(".sigs")]
+ versions.append(version)
abi_process_file(fname, version, symmap)
- abi_write_vscript(tgt, task.env.LIBNAME, task.env.VERSION, symmap,
+ abi_write_vscript(tgt, task.env.LIBNAME, task.env.VERSION, versions, symmap,
task.env.ABI_MATCH)