def ShowBuildVariantList(log: Log, generator: GeneratorPluginBase2) -> None:
    # This is kind of a hack to list this here (its also not a real variant inside our model)
    generatorVariants = [
        variant for variant in generator.GetVariants()
        if variant.Type == BuildVariantType.Static
    ]

    if len(generatorVariants) <= 0:
        log.DoPrint("Build variants: None")
        return
    log.DoPrint("Build variants:")

    generatorVariants.sort(key=lambda s: s.Name.lower())

    for variantInfo in generatorVariants:
        log.DoPrint(
            "  {0}={1} (Introduced by native build system generator)".format(
                variantInfo.Name, variantInfo.Description))
def ShowVariantList(log: Log, topLevelPackage: Package,
                    requestedFiles: Optional[List[str]],
                    generator: GeneratorPluginBase2) -> None:

    variantDict = BuildVariantUtil.BuildCompleteVariantDict(topLevelPackage)

    # This is kind of a hack to list this here (its also not a real variant inside our model)
    generatorVariants = generator.GetVariants()
    if len(variantDict) <= 0 and len(generatorVariants) <= 0:
        log.DoPrint("Variants: None")
        return

    # Pretty print useful information
    log.DoPrint("Variants:")

    generatorVariants.sort(key=lambda s: s.Name.lower())
    for variantInfo in generatorVariants:
        if variantInfo.Type == BuildVariantType.Static:
            log.DoPrint(
                "  {0}={1} (Introduced by native build system generator)".
                format(variantInfo.Name, variantInfo.Description))
        else:
            log.DoPrint("  {0}={1} (Introduced by native build system)".format(
                variantInfo.Name, variantInfo.Description))

    variantNames = list(variantDict.keys())
    variantNames.sort()
    for variantName in variantNames:
        variant = variantDict[variantName]
        optionNames = list(variant.OptionDict.keys())
        optionNames.sort()
        if variant.Type == VariantType.Virtual:
            log.DoPrint(
                "  {0}={1} *Virtual* (Introduced by package: {2})".format(
                    variant.PurifiedName, ', '.join(optionNames),
                    variant.IntroducedByPackageName))
        else:
            log.DoPrint(("  {0}={1} (Introduced by package: {2})".format(
                variant.PurifiedName, ', '.join(optionNames),
                variant.IntroducedByPackageName)))