waf: allows libraries to be marked as private_library=True
authorAndrew Tridgell <tridge@samba.org>
Wed, 20 Oct 2010 07:17:13 +0000 (18:17 +1100)
committerAndrew Tridgell <tridge@samba.org>
Thu, 21 Oct 2010 08:03:23 +0000 (19:03 +1100)
this is for libraries where we make no promises about the API, but
where we wish it to be a library to allow our binaries to use common
code.

These libraries always get the project suffix added to the library
name, to ensure we are in a separate namespace

Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>

buildtools/wafsamba/samba_bundled.py
buildtools/wafsamba/wafsamba.py

index 822e49ce49aa4a31db7da5a1e5d539aad5c87b5f..e5310dae3d68e658a7b1b85ffc33e8d903ee9fb4 100644 (file)
@@ -4,11 +4,11 @@ from Configure import conf
 import Logs
 from samba_utils import *
 
-def BUNDLED_NAME(bld, name, bundled_extension):
+def BUNDLED_NAME(bld, name, bundled_extension, private_library):
     '''possibly rename a library to include a bundled extension'''
     if bld.env.DISABLE_SHARED or not bundled_extension:
         return name
-    if name in bld.env.BUNDLED_EXTENSION_EXCEPTION:
+    if name in bld.env.BUNDLED_EXTENSION_EXCEPTION and not private_library:
         return name
     extension = getattr(bld.env, 'BUNDLED_EXTENSION', '')
     if extension:
index e848d39333b00404c32f2cfabbf29304611ea6f2..42f006eaf0e93154b40fac35df1ccd6db8e9bd69 100644 (file)
@@ -116,6 +116,7 @@ def SAMBA_LIBRARY(bld, libname, source,
                   hide_symbols=False,
                   is_bundled=False,
                   manpages=None,
+                  private_library=False,
                   enabled=True):
     '''define a Samba library'''
 
@@ -167,13 +168,22 @@ def SAMBA_LIBRARY(bld, libname, source,
     realname = bld.map_shlib_extension(realname, python=(target_type=='PYTHON'))
     link_name = bld.map_shlib_extension(link_name, python=(target_type=='PYTHON'))
 
+    if private_library:
+        # private libraries always get the 'bundling' treatment with respect
+        # to the library name suffix
+        is_bundled = True
+
+    # we don't want any public libraries without version numbers
+    if not private_library and vnum is None and target_type != 'PYTHON' and not realname:
+        raise Utils.WafError("public library '%s' must have a vnum" % libname)
+
     if target_type == 'PYTHON' or realname or not is_bundled:
         # Sanitize the library name
         bundled_name = libname.lower().replace('_', '-')
         while bundled_name.startswith("lib"):
             bundled_name = bundled_name[3:]
     else:
-        bundled_name = BUNDLED_NAME(bld, libname, bundled_extension)
+        bundled_name = BUNDLED_NAME(bld, libname, bundled_extension, private_library)
 
     features = 'cc cshlib symlink_lib install_lib'
     if target_type == 'PYTHON':