code: def create_subvariant (self, root_targets, all_targets,
                             build_request, sources,
                             rproperties, usage_requirements):
          
          assert is_iterable_typed(root_targets, virtual_target.VirtualTarget)
          assert is_iterable_typed(all_targets, virtual_target.VirtualTarget)
          assert isinstance(build_request, property_set.PropertySet)
          assert is_iterable_typed(sources, virtual_target.VirtualTarget)
          assert isinstance(rproperties, property_set.PropertySet)
          assert isinstance(usage_requirements, property_set.PropertySet)
  
          for e in root_targets:
              e.root (True)
  
          s = Subvariant (self, build_request, sources,
                          rproperties, usage_requirements, all_targets)
  
          for v in all_targets:
              if not v.creating_subvariant():
                  v.creating_subvariant(s)
  
          return s
docs: Creates a new subvariant-dg instances for 'targets'
           - 'root-targets' the virtual targets will be returned to dependents
           - 'all-targets' all virtual
                targets created while building this main target
           - 'build-request' is property-set instance with
           requested build properties