waf: fixed building of non-shared binaries that contain modules
authorAndrew Tridgell <tridge@samba.org>
Sat, 30 Oct 2010 05:37:27 +0000 (16:37 +1100)
committerAndrew Tridgell <tridge@samba.org>
Sat, 30 Oct 2010 12:49:02 +0000 (23:49 +1100)
we need to incorporate the module objects too

buildtools/wafsamba/samba_deps.py

index 0c9add2e06321fb86058e4403cc665be69d8a477..7471118722405bc1fb8bead1cf205fc2b8fb8757 100644 (file)
@@ -763,6 +763,9 @@ def calculate_final_deps(bld, tgt_list, loops):
     # handle any non-shared binaries
     for t in tgt_list:
         if t.samba_type == 'BINARY' and bld.NONSHARED_BINARY(t.sname):
+            subsystem_list = LOCAL_CACHE(bld, 'INIT_FUNCTIONS')
+            targets = LOCAL_CACHE(bld, 'TARGET_TYPE')
+
             # replace lib deps with objlist deps
             for l in t.final_libs:
                 objname = l + '.objlist'
@@ -772,6 +775,22 @@ def calculate_final_deps(bld, tgt_list, loops):
                     sys.exit(1)
                 t.final_objects.add(objname)
                 t.final_objects = t.final_objects.union(extended_objects(bld, t2, set()))
+                if l in subsystem_list:
+                    # its a subsystem - we also need the contents of any modules
+                    for d in subsystem_list[l]:
+                        module_name = d['TARGET']
+                        if targets[module_name] == 'LIBRARY':
+                            objname = module_name + '.objlist'
+                        elif targets[module_name] == 'SUBSYSTEM':
+                            objname = module_name
+                        else:
+                            continue
+                        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