Index: build/generator/gen_base.py =================================================================== --- build/generator/gen_base.py (revision 17627) +++ build/generator/gen_base.py (working copy) @@ -125,7 +125,8 @@ # Compute intra-library dependencies for section in self.sections.values(): dependencies = (( DT_LINK, section.options.get('libs', "") ), - ( DT_NONLIB, section.options.get('nonlibs', "") )) + ( DT_NONLIB, section.options.get('nonlibs', "") ), + ( DT_SOURCELIB, section.options.get('sourcelibs', ""))) for dep_type, dep_names in dependencies: # Translate string names to Section objects @@ -241,6 +242,7 @@ 'DT_SWIG_C', # a swig-generated .c file, depending upon .i filename(s) 'DT_LINK', # a libtool-linked filename, depending upon object fnames 'DT_NONLIB', # filename depends on object fnames, but isn't linked to them + 'DT_SOURCELIB',# sources of dependency are directly compiled into target ] # create some variables for these Index: build/generator/gen_make.py =================================================================== --- build/generator/gen_make.py (revision 17627) +++ build/generator/gen_make.py (working copy) @@ -228,8 +228,10 @@ header_class_filenames = [ ] deps = [ ] libs = [ ] + sources = self.graph.get_sources(gen_base.DT_LINK, target_ob.name) \ + + self.graph.get_sources(gen_base.DT_SOURCELIB, target_ob.name) - for link_dep in self.graph.get_sources(gen_base.DT_LINK, target_ob.name): + for link_dep in sources: if isinstance(link_dep, gen_base.TargetJava): deps.append(link_dep.name) elif isinstance(link_dep, gen_base.TargetLinked): Index: build/generator/gen_win.py =================================================================== --- build/generator/gen_win.py (revision 17627) +++ build/generator/gen_win.py (working copy) @@ -522,6 +522,11 @@ is_static = is_lib and dep.msvc_static deps.append((dep, (is_project, is_lib, is_static))) + for dep in self.graph.get_sources(gen_base.DT_SOURCELIB, target.name): + is_project = hasattr(dep, 'proj_name') + is_lib = isinstance(dep, gen_base.TargetLib) + deps.append((dep, (is_project, is_lib, 1))) + return deps def get_static_win_depends(self, target, deps): @@ -696,29 +701,29 @@ return gen_base.unique(nondeplibs) - def get_win_sources(self, target, reldir_prefix=''): + def get_win_sources(self, target): "Return the list of source files that need to be compliled for target" sources = { } + self.get_win_sources_impl(target, sources) + return sources.values() + + def get_win_sources_impl(self, target, sources): for obj in self.graph.get_sources(gen_base.DT_LINK, target.name): if isinstance(obj, gen_base.Target): continue for src in self.graph.get_sources(gen_base.DT_OBJECT, obj): if isinstance(src, gen_base.SourceFile): - if reldir_prefix: - if src.reldir: - reldir = reldir_prefix + '\\' + src.reldir - else: - reldir = reldir_prefix - else: - reldir = src.reldir + reldir = src.reldir else: reldir = '' sources[src] = src, obj, reldir - return sources.values() + # toss in sources from "sourcelib" dependencies + for dep in self.graph.get_sources(gen_base.DT_SOURCELIB, target.name): + self.get_win_sources_impl(dep, sources) def write_file_if_changed(self, fname, new_contents): """Rewrite the file if new_contents are different than its current content.