@ -270,18 +270,25 @@ int dummy;
unity_src = [ ]
unity_deps = [ ] # Generated sources that must be built before compiling a Unity target.
header_deps + = self . get_generated_headers ( target )
generator_output_sources = [ ] # Needed to determine the linker
# Get a list of all generated *sources* (sources files, headers,
# objects, etc). Needed to determine the linker.
generated_output_sources = [ ]
# Get a list of all generated headers that will be needed while building
# this target's sources (generated sources and pre-existing sources).
# This will be set as dependencies of all the target's sources. At the
# same time, also deal with generated sources that need to be compiled.
generated_source_files = [ ]
for gensource in target . get_generated_sources ( ) :
if isinstance ( gensource , build . CustomTarget ) :
for src in gensource . output :
src = os . path . join ( self . get_target_dir ( gensource ) , src )
generator_output_sources . append ( src )
generated _output_sources . append ( src )
if self . environment . is_source ( src ) and not self . environment . is_header ( src ) :
if is_unity :
unity_deps . append ( os . path . join ( self . environment . get_build_dir ( ) , RawFilename ( src ) ) )
else :
obj_list . append ( self . generate_single_compile ( target , outfile , RawFilename ( src ) , True ,
header_deps ) )
generated_source_files . append ( RawFilename ( src ) )
elif self . environment . is_object ( src ) :
obj_list . append ( src )
elif self . environment . is_library ( src ) :
@ -293,7 +300,7 @@ int dummy;
header_deps . append ( RawFilename ( src ) )
else :
for src in gensource . get_outfilelist ( ) :
generator _output_sources . append ( src )
generated _output_sources . append ( src )
if self . environment . is_object ( src ) :
obj_list . append ( os . path . join ( self . get_target_private_dir ( target ) , src ) )
elif not self . environment . is_header ( src ) :
@ -306,8 +313,15 @@ int dummy;
abs_src = os . path . join ( self . environment . get_build_dir ( ) , rel_src )
unity_src . append ( abs_src )
else :
obj_list . append ( self . generate_single_compile ( target , outfile , src , True ,
header_deps = header_deps ) )
generated_source_files . append ( src )
# These are the generated source files that need to be built for use by
# this target. We create the Ninja build file elements for this here
# because we need `header_deps` to be fully generated in the above loop.
for src in generated_source_files :
obj_list . append ( self . generate_single_compile ( target , outfile , src , True ,
header_deps = header_deps ) )
# Generate compilation targets for sources belonging to this target that
# are generated by other rules (this is only used for Vala right now)
src_list = [ ]
for src in gen_src_deps :
src_list . append ( src )
@ -324,6 +338,7 @@ int dummy;
header_deps . append ( src )
else :
obj_list . append ( self . generate_single_compile ( target , outfile , src , True , [ ] , header_deps ) )
# Generate compile targets for all the pre-existing sources for this target
for src in target . get_sources ( ) :
if src . endswith ( ' .vala ' ) :
continue
@ -339,7 +354,7 @@ int dummy;
if is_unity :
for src in self . generate_unity_files ( target , unity_src ) :
obj_list . append ( self . generate_single_compile ( target , outfile , src , True , unity_deps + header_deps ) )
linker = self . determine_linker ( target , src_list + generator _output_sources )
linker = self . determine_linker ( target , src_list + generated _output_sources )
elem = self . generate_link ( target , outfile , outname , obj_list , linker , pch_objects )
self . generate_shlib_aliases ( target , self . get_target_dir ( target ) )
elem . write ( outfile )