diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2008-06-06 14:02:26 +0000 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2008-06-06 14:02:26 +0000 |
commit | ce2382e4824bb48dbef45808c1d7b7c6e3a8e00c (patch) | |
tree | a55f218ec3249a75cf3aaeb66761ed727d5fa1a9 /tools/make-version-script.py | |
parent | 6bd1582efa4d8f7d8f143e097b4930a6cc0a70a1 (diff) | |
download | telepathy-glib-ce2382e4824bb48dbef45808c1d7b7c6e3a8e00c.tar.gz |
Enhance make-version-script.py to produce dpkg symbols files too
20080606140226-53eee-d4fc7b63551218e38214902963e625204be0fc7e.gz
Diffstat (limited to 'tools/make-version-script.py')
-rw-r--r-- | tools/make-version-script.py | 88 |
1 files changed, 67 insertions, 21 deletions
diff --git a/tools/make-version-script.py b/tools/make-version-script.py index 9b0853f75..5f704c7dd 100644 --- a/tools/make-version-script.py +++ b/tools/make-version-script.py @@ -1,9 +1,12 @@ #!/usr/bin/python -"""Construct a GNU ld version-script from a set of RFC822-style symbol lists. +"""Construct a GNU ld or Debian dpkg version-script from a set of +RFC822-style symbol lists. Usage: make-version-script.py [--symbols SYMBOLS] [--unreleased-version VER] + [--dpkg "LIBRARY.so.0 LIBRARY0 #MINVER#"] + [--dpkg-build-depends-package LIBRARY-dev] [FILES...] Each FILE starts with RFC822-style headers "Version:" (the name of the @@ -18,6 +21,9 @@ the library (one per line). If --unreleased-version is given, any symbols in SYMBOLS but not in FILES are assigned to that version; otherwise, any such symbols cause an error. +If --dpkg is given, produce a Debian dpkg symbols file instead of a + + This script originates in telepathy-glib <http://telepathy.freedesktop.org/> - please send us any changes that are needed. """ @@ -38,8 +44,10 @@ def e(format, *args): sys.stderr.write((format + '\n') % args) -def main(abifiles, symbols=None, unreleased_version=None): +def main(abifiles, symbols=None, unreleased_version=None, + dpkg=False, dpkg_first_line=None, dpkg_build_depends_package=None): + gnuld = not dpkg symbol_set = None if symbols is not None: @@ -49,11 +57,21 @@ def main(abifiles, symbols=None, unreleased_version=None): versioned_symbols = set() + dpkg_symbols = [] + dpkg_versions = [] + + if dpkg: + assert dpkg_first_line is not None + print dpkg_first_line + if dpkg_build_depends_package is not None: + print "* Build-Depends-Package: %s" % dpkg_build_depends_package + for filename in abifiles: lines = open(filename, 'r').readlines() version = None extends = None + release = None for i, line in enumerate(lines): line = line.strip() @@ -73,7 +91,7 @@ def main(abifiles, symbols=None, unreleased_version=None): extends = line continue elif line.lower().startswith('release:'): - # skip it + release = line[8:].strip() continue else: e('Could not understand line in %s header: %s', filename, line) @@ -91,10 +109,18 @@ def main(abifiles, symbols=None, unreleased_version=None): e('No Extends: header in %s', filename) raise SystemExit(1) + if release is None and dpkg: + e('No Release: header in %s', filename) + raise SystemExit(1) + + if dpkg: + dpkg_versions.append('%s@%s %s' % (version, version, release)) + lines = lines[cut:] - print "%s {" % version - print " global:" + if gnuld: + print "%s {" % version + print " global:" for symbol in lines: symbol = symbol.strip() @@ -102,17 +128,31 @@ def main(abifiles, symbols=None, unreleased_version=None): if symbol.startswith('#'): continue - print " %s;" % symbol + if gnuld: + print " %s;" % symbol + elif dpkg: + dpkg_symbols.append('%s@%s %s' % (symbol, version, release)) + versioned_symbols.add(symbol) - if extends == '-': - print " local:" - print " *;" - print "};" - else: - print "} %s;" % extends + if gnuld: + if extends == '-': + print " local:" + print " *;" + print "};" + else: + print "} %s;" % extends + print + + if dpkg: + dpkg_symbols.sort() + dpkg_versions.sort() + + for x in dpkg_versions: + print " %s" % x - print + for x in dpkg_symbols: + print " %s" % x if symbol_set is not None: missing = versioned_symbols - symbol_set @@ -136,22 +176,28 @@ def main(abifiles, symbols=None, unreleased_version=None): raise SystemExit(1) - print "%s {" % unreleased_version - print " global:" + if gnuld: + print "%s {" % unreleased_version + print " global:" - for symbol in unreleased: - print " %s;" % symbol + for symbol in unreleased: + print " %s;" % symbol - print "} %s;" % version + print "} %s;" % version if __name__ == '__main__': options, argv = gnu_getopt (sys.argv[1:], '', - ['symbols=', 'unreleased-version=']) + ['symbols=', 'unreleased-version=', + 'dpkg=', 'dpkg-build-depends-package=']) - opts = {} + opts = {'dpkg': False} for option, value in options: - opts[option.lstrip('-').replace('-', '_')] = value + if option == '--dpkg': + opts['dpkg'] = True + opts['dpkg_first_line'] = value + else: + opts[option.lstrip('-').replace('-', '_')] = value main(argv, **opts) |