def _print_summary(self) -> None:
    all_subprojects = collections.OrderedDict()
    for (name, subp) in sorted(self.subprojects.items()):
        value = subp.found()
        if subp.disabled_feature:
            value = [value, f'Feature {subp.disabled_feature!r} disabled']
        elif subp.exception:
            value = [value, str(subp.exception)]
        elif (subp.warnings > 0):
            value = [value, f'{subp.warnings} warnings']
        all_subprojects[name] = value
    if all_subprojects:
        self.summary_impl('Subprojects', all_subprojects, {'bool_yn': True, 'list_sep': ' '})
    if self.user_defined_options:
        values = collections.OrderedDict()
        if self.user_defined_options.cross_file:
            values['Cross files'] = self.user_defined_options.cross_file
        if self.user_defined_options.native_file:
            values['Native files'] = self.user_defined_options.native_file
        sorted_options = sorted(self.user_defined_options.cmd_line_options.items())
        values.update({str(k): v for (k, v) in sorted_options})
        if values:
            self.summary_impl('User defined options', values, {'bool_yn': False, 'list_sep': None})
    mlog.log('')
    main_summary = self.summary.pop('', None)
    for (subp_name, summary) in sorted(self.summary.items()):
        if self.subprojects[subp_name].found():
            summary.dump()
    if main_summary:
        main_summary.dump()
def _print_summary(self) -> None:
    all_subprojects = collections.OrderedDict()
    for (name, subp) in sorted(self.subprojects.items()):
        value = subp.found()
        if subp.disabled_feature:
            value = [value, f'Feature {subp.disabled_feature!r} disabled']
        elif subp.exception:
            value = [value, str(subp.exception)]
        elif (subp.warnings > 0):
            value = [value, f'{subp.warnings} warnings']
        all_subprojects[name] = value
    if all_subprojects:
        self.summary_impl('Subprojects', all_subprojects, {'bool_yn': True, 'list_sep': ' '})
    if self.user_defined_options:
        values = collections.OrderedDict()
        if self.user_defined_options.cross_file:
            values['Cross files'] = self.user_defined_options.cross_file
        if self.user_defined_options.native_file:
            values['Native files'] = self.user_defined_options.native_file
        sorted_options = sorted(self.user_defined_options.cmd_line_options.items())
        values.update({str(k): v for (k, v) in sorted_options})
        if values:
            self.summary_impl('User defined options', values, {'bool_yn': False, 'list_sep': None})
    mlog.log()
    main_summary = self.summary.pop(, None)
    for (subp_name, summary) in sorted(self.summary.items()):
        if self.subprojects[subp_name].found():
            summary.dump()
    if main_summary:
        main_summary.dump()