code: def generate (self, ps):
          
          assert isinstance(ps, property_set.PropertySet)
          self.manager_.targets ().start_building (self)
  
          # We want composite properties in build request act as if
          # all the properties it expands too are explicitly specified.
          ps = ps.expand ()
  
          all_property_sets = self.apply_default_build (ps)
  
          result = GenerateResult ()
  
          for p in all_property_sets:
              result.extend (self.__generate_really (p))
  
          self.manager_.targets ().end_building (self)
  
          return result
docs: Select an alternative for this main target, by finding all alternatives
              which requirements are satisfied by 'properties' and picking the one with
              longest requirements set.
              Returns the result of calling 'generate' on that alternative.