build: added --nonshared-binary=LIST option
authorAndrew Tridgell <tridge@samba.org>
Wed, 21 Apr 2010 07:13:16 +0000 (17:13 +1000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 21 Apr 2010 07:13:16 +0000 (17:13 +1000)
This allows you to specify some binaries that should be built without
shared libs. A non-shared smbtorture will make testing s3 in the build
farm easier

buildtools/wafsamba/samba_bundled.py
buildtools/wafsamba/samba_deps.py
buildtools/wafsamba/wscript

index f668d56cb67f159865c13ad8e27314758cc86215..f105a2d5ff44aeef2b6c0e250e8e162969af2cb8 100644 (file)
@@ -127,3 +127,11 @@ def CHECK_BUNDLED_SYSTEM(conf, libname, minversion='0.0.0',
         sys.exit(1)
     return False
 
+def NONSHARED_BINARY(bld, name):
+    '''return True if a binary should be built without non-system shared libs'''
+    if bld.env.DISABLE_SHARED:
+        return True
+    return target_in_list(name, bld.env.NONSHARED_BINARIES, False)
+Build.BuildContext.NONSHARED_BINARY = NONSHARED_BINARY
+
+
index 7beec29c1e3d1eec63480f3c0b126bd111a1458d..8911db3d7cd6aee26e6412a4f9550f8947fe43e6 100644 (file)
@@ -642,6 +642,19 @@ def calculate_final_deps(bld, tgt_list, loops):
         if t.sname in t.final_objects:
             t.final_objects.remove(t.sname)
 
+    # handle any non-shared binaries
+    for t in tgt_list:
+        if t.samba_type == 'BINARY' and bld.NONSHARED_BINARY(t.sname):
+            # replace lib deps with objlist deps
+            for l in t.final_libs:
+                objname = l + '.objlist'
+                t2 = bld.name_to_obj(objname, bld.env)
+                if t2 is None:
+                    Logs.error('ERROR: subsystem %s not found' % objname)
+                    sys.exit(1)
+                t.final_objects.add(objname)
+                t.final_objects = t.final_objects.union(extended_objects(bld, t2, set()))
+            t.final_libs = set()
 
     # find any library loops
     for t in tgt_list:
index 72e0e90fbf36890d784514a49f116e7bc7f6811a..76e9b1f357294a0f985d68ab541ddb2c53314628 100644 (file)
@@ -46,6 +46,9 @@ def set_options(opt):
     gr.add_option('--disable-rpath-install',
                    help=("Disable use of rpath for installed binaries"),
                    action="store_true", dest='disable_rpath_install', default=False)
+    gr.add_option('--nonshared-binary',
+                   help=("Disable use of shared libs for the listed binaries"),
+                   action="store", dest='NONSHARED_BINARIES', default='')
 
     opt.add_option('--with-modulesdir',
                    help=("modules directory [PREFIX/modules]"),
@@ -149,6 +152,7 @@ def configure(conf):
     conf.env.BUNDLED_LIBS = Options.options.BUNDLED_LIBS.split(',')
     conf.env.BUILTIN_LIBRARIES = Options.options.BUILTIN_LIBRARIES.split(',')
     conf.env.DISABLE_SHARED = Options.options.disable_shared
+    conf.env.NONSHARED_BINARIES = Options.options.NONSHARED_BINARIES.split(',')
 
     conf.env.BUNDLED_EXTENSION = Options.options.BUNDLED_EXTENSION
     conf.env.BUNDLED_EXTENSION_EXCEPTION = Options.options.BUNDLED_EXTENSION_EXCEPTION.split(',')