s4-heimdal: enable symbol versioning in heimdal
authorAndrew Tridgell <tridge@samba.org>
Wed, 8 Dec 2010 03:57:31 +0000 (14:57 +1100)
committerAndrew Tridgell <tridge@samba.org>
Wed, 8 Dec 2010 04:26:06 +0000 (05:26 +0100)
Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>
Pair-Programmed-With: Jelmer Vernooij <jelmer@samba.org>

source4/heimdal_build/wscript_build

index 3e792d3c7eaf3f8a6e14243ae528b62907a2e6f5..5607701d29f21b8315240ccddfcd478d0c20dd91 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-import os
+import os, Utils, Build
 from samba_utils import SET_TARGET_TYPE
 from samba_autoconf import CURRENT_CFLAGS
 
@@ -181,6 +181,27 @@ def HEIMDAL_AUTOPROTO_PRIVATE(header, source):
     HEIMDAL_AUTOPROTO(header, source, options='-q -P comment -p')
 
 
+def HEIMDAL_GENERATOR(name, rule, source='', target='',
+                      group='generators'):
+    '''A generic source generator target'''
+
+    if not SET_TARGET_TYPE(bld, name, 'GENERATOR'):
+        return
+
+    bld.set_group(group)
+    return bld(
+        rule=rule,
+        source=source,
+        target=target,
+        shell=isinstance(rule, str),
+        on_results=True,
+        before='cc',
+        ext_out='.c',
+        vars=[rule],
+        samba_type='GENERATOR',
+        name=name)
+
+
 def HEIMDAL_LIBRARY(libname, source, deps, vnum,
                   includes='',
                   cflags='',
@@ -206,13 +227,27 @@ def HEIMDAL_LIBRARY(libname, source, deps, vnum,
     deps = to_list(deps)
     deps.append(obj_target)
 
+    ldflags = []
+
     if not private_library:
         # Sanitize the library name
         bundled_name = libname.lower().replace('_', '-')
         while bundled_name.startswith("lib"):
             bundled_name = bundled_name[3:]
+        version = "%s_%s" % (Utils.g_module.APPNAME, Utils.g_module.VERSION.split(".")[0])
     else:
         bundled_name = libname + '-samba4'
+        vnum = Utils.g_module.VERSION[0]
+        version = "%s_%s" % (Utils.g_module.APPNAME, Utils.g_module.VERSION)
+
+    if bld.env.HAVE_LD_VERSION_SCRIPT:
+        vscript = "%s.vscript" % libname
+        HEIMDAL_GENERATOR(vscript,
+                          rule="echo %s \{ global: \*\; \}\; > ${TGT}" % version.replace("-","_").upper(),
+                          group='vscripts',
+                          target=vscript)
+        ldflags.append("-Wl,--version-script=%s/%s" % (bld.path.abspath(bld.env), vscript))
+        deps.append(vscript)
 
     features = 'cc cshlib symlink_lib install_lib'
 
@@ -226,29 +261,12 @@ def HEIMDAL_LIBRARY(libname, source, deps, vnum,
         vnum            = vnum,
         install_path    = None,
         name            = libname,
+        ldflags                = ldflags,
+        vars           = [version],
         private_library = private_library
         )
 
 
-def HEIMDAL_GENERATOR(name, rule, source='', target='',
-        group='generators'):
-    '''A generic source generator target'''
-
-    if not SET_TARGET_TYPE(bld, name, 'GENERATOR'):
-        return
-
-    bld.set_group(group)
-    return bld(
-        rule=rule,
-        source=source,
-        target=target,
-        shell=isinstance(rule, str),
-        on_results=True,
-        before='cc',
-        ext_out='.c',
-        name=name)
-
-
 def HEIMDAL_SUBSYSTEM(modname, source,
                     deps='',
                     includes='',