code: def main_target_sources (self, sources, main_target_name, no_renaming=0):
          
          assert is_iterable_typed(sources, basestring)
          assert isinstance(main_target_name, basestring)
          assert isinstance(no_renaming, (int, bool))
          result = []
  
          for t in sources:
  
              t = b2.util.jam_to_value_maybe(t)
  
              if isinstance (t, AbstractTarget):
                  name = t.name ()
  
                  if not no_renaming:
                      name = main_target_name + '__' + name
                      t.rename (name)
  
                  # Inline targets are not built by default.
                  p = t.project()
                  p.mark_targets_as_explicit([name])
                  result.append(name)
  
              else:
                  result.append (t)
  
          return result
docs: Return the list of sources to use, if main target rule is invoked
          with 'sources'. If there are any objects in 'sources', they are treated
          as main target instances, and the name of such targets are adjusted to
          be '<name_of_this_target>__<name_of_source_target>'. Such renaming
          is disabled is non-empty value is passed for 'no-renaming' parameter.