code: def determine_output_name(self, sources):
          
          assert is_iterable_typed(sources, virtual_target.VirtualTarget)
  
          # The simple case if when a name
          # of source has single dot. Then, we take the part before
          # dot. Several dots can be caused by:
          # - Using source file like a.host.cpp
          # - A type which suffix has a dot. Say, we can
          #   type 'host_cpp' with extension 'host.cpp'.
          # In the first case, we want to take the part till the last
          # dot. In the second case -- no sure, but for now take
          # the part till the last dot too.
          name = os.path.splitext(sources[0].name())[0]
  
          for s in sources[1:]:
              n2 = os.path.splitext(s.name())
              if n2 != name:
                  get_manager().errors()(
                      "%s: source targets have different names: cannot determine target name"
                      % (self.id_))
  
          # Names of sources might include directory. We should strip it.
          return self.determine_target_name(sources[0].name())
docs: Determine the name of the produced target from the
          names of the sources.