summaryrefslogtreecommitdiff
path: root/tools/make-version-script.py
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2008-06-06 14:02:26 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2008-06-06 14:02:26 +0000
commitce2382e4824bb48dbef45808c1d7b7c6e3a8e00c (patch)
treea55f218ec3249a75cf3aaeb66761ed727d5fa1a9 /tools/make-version-script.py
parent6bd1582efa4d8f7d8f143e097b4930a6cc0a70a1 (diff)
downloadtelepathy-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.py88
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)