# Copyright 2023 The Bazel Authors. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
""" Default implementation of Bazel's exec transition ('cfg = "exec"').

See https://github.com/bazelbuild/bazel/discussions/19213.
"""

# The fragments that make up Bazel's exec transition. The fragment() calls in
# this file fill out this map.
bazel_fragments = {}

def fragment(propagate = [], inputs = [], outputs = [], func = lambda setting: {}):
    """Adds exec transition logic for a group of related flags.

    Args:
      propagate: Flags to propagate as-is from the input configuration.
      inputs: Flags to specially read for custom transit logic.
      outputs: Flags to specially write with custom transition logic.
      func: Custom transition logic for flags we don't auto-propagate.

    Returns:
      The fragment.
    """
    return struct(
        inputs = inputs + propagate,
        outputs = outputs + propagate,
        propagate = propagate,
        custom_logic = func,
    )

def exec_transition(fragments):
    """Returns the data for creating an exec transition from a set of fragments.

    Ideally this would create and return the transition itself. Instead, callers
    have to wrap their own transition() call around the data returned here.

    This is because Bazel checks if a transition is the exec transition, and if
    so applies different implementation logic vs. normal transitions. The check,
    at https://github.com/bazelbuild/bazel/blob/c8afa82026977e84d1c89f4f0ae3503ef7720a25/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java#L128-L130,
    compares the value of `--experimental_exec_config` with the .bzl file that
    declared the transition.

    If another .bzl file wraps this logic for its own transition, it must
    declare its own transition() call so that check matches (so Bazel sees the
    owner of that transition is the other bzl file, not this one).

    Args:
      fragments: Fragments that make up the transition, as a map from name to
      data. Data comes from the fragment() function.

    Returns:
      The data needd to declare an exec transition for those fragments.
    """
    inputs_and_outputs = _get_inputs_and_outputs(fragments)
    return struct(
        implementation = _exec_transition_impl(fragments),
        inputs = inputs_and_outputs.inputs,
        outputs = inputs_and_outputs.outputs,
    )

def _get_inputs_and_outputs(fragments):
    """Returns the (inputs, outputs) for a collection of fragments.
    """
    inputs = []
    outputs = ["//command_line_option:experimental_action_listener"]
    for fragment in fragments.values():
        inputs.extend(fragment.inputs)
        outputs.extend(fragment.outputs)
    return struct(inputs = inputs, outputs = outputs)

def _exec_transition_impl(fragments):
    """Returns an exec transition impl function from a set of fragments.

    Args:
      fragments: Fragments that make up the transition, as a map from name to
      data. Data comes from the fragment() function.
    """

    # buildifier: disable=unused-variable
    def _impl(settings, attr):
        ans = {}
        for fragment in fragments.values():
            for option in fragment.propagate:
                ans[option] = settings[option]
            ans.update(fragment.custom_logic(settings))

        # Building with --experimental_action_listener fails.
        # TODO(b/301654253): clarify what to do with this flag.
        ans["//command_line_option:experimental_action_listener"] = []
        return ans

    return _impl

################################ Fragment definitions: #########################
#
# Fragments encapsulate thematically related flags (like all flags that
# configure Java rules). Fragments are not a native Bazel concept - they're pure
# Starlark collections.

bazel_fragments["AndroidConfiguration.Options"] = fragment(
    propagate = [
        "//command_line_option:android_sdk",
        "//command_line_option:incompatible_android_platforms_transition_updated_affected",
        "//command_line_option:desugar_for_android",
        "//command_line_option:desugar_java8_libs",
        "//command_line_option:experimental_check_desugar_deps",
        "//command_line_option:incremental_dexing",
        "//command_line_option:experimental_incremental_dexing_after_proguard",
        "//command_line_option:experimental_use_dex_splitter_for_incremental_dexing",
        "//command_line_option:experimental_incremental_dexing_after_proguard_by_default",
        "//command_line_option:experimental_android_assume_minsdkversion",
        "//command_line_option:non_incremental_per_target_dexopts",
        "//command_line_option:dexopts_supported_in_incremental_dexing",
        "//command_line_option:dexopts_supported_in_dexmerger",
        "//command_line_option:dexopts_supported_in_dexsharder",
        "//command_line_option:android_manifest_merger",
        "//command_line_option:android_manifest_merger_order",
        "//command_line_option:experimental_allow_android_library_deps_without_srcs",
        "//command_line_option:experimental_one_version_enforcement_use_transitive_jars_for_binary_under_test",
        "//command_line_option:internal_persistent_busybox_tools",
        "//command_line_option:internal_persistent_multiplex_busybox_tools",
        "//command_line_option:incompatible_disable_native_android_rules",
    ],
    outputs = [
        "//command_line_option:android hwasan",
        "//command_line_option:fat_apk_cpu",
        "//command_line_option:Android configuration distinguisher",
    ],
    func = lambda settings: {
        "//command_line_option:android hwasan": False,
        "//command_line_option:fat_apk_cpu": [],
        "//command_line_option:Android configuration distinguisher": "main",
    },
)

# AndroidLocalTestConfiguration$Options: no exec configs

bazel_fragments["AppleCommandLineOptions"] = fragment(
    propagate = [
        "//command_line_option:xcode_version_config",
        "//command_line_option:xcode_version",
        "//command_line_option:ios_sdk_version",
        "//command_line_option:watchos_sdk_version",
        "//command_line_option:tvos_sdk_version",
        "//command_line_option:macos_sdk_version",
        "//command_line_option:host_macos_minimum_os",
        "//command_line_option:experimental_prefer_mutual_xcode",
        "//command_line_option:experimental_include_xcode_execution_requirements",
        "//command_line_option:apple_crosstool_top",
        "//command_line_option:incompatible_enable_apple_toolchain_resolution",
    ],
    outputs = [
        "//command_line_option:macos_minimum_os",
        "//command_line_option:apple_platform_type",
        "//command_line_option:apple configuration distinguisher",
    ],
    func = lambda settings: {
        "//command_line_option:macos_minimum_os": settings["//command_line_option:host_macos_minimum_os"],
        "//command_line_option:apple_platform_type": "macos",
        "//command_line_option:apple configuration distinguisher": "unknown",
    },
)

bazel_fragments["BazelConfigurarion$Options"] = fragment(
    propagate = [
        "//command_line_option:incompatible_check_visibility_for_toolchains",
    ],
)

bazel_fragments["BazelPythonConfiguration$Options"] = fragment(
    propagate = [
        "//command_line_option:python2_path",
        "//command_line_option:python3_path",
        "//command_line_option:python_top",
        "//command_line_option:python_path",
        "//command_line_option:experimental_python_import_all_repositories",
    ],
)

bazel_fragments["BazelRuleClassProvider$StrictActionEnvOptions"] = fragment(
    propagate = [
        "//command_line_option:incompatible_strict_action_env",
    ],
)

bazel_fragments["ConfigFeatureFlagOptions"] = fragment(
    propagate = [
        "//command_line_option:all feature flag values are present (internal)",
    ],
    outputs = [
        "//command_line_option:enforce_transitive_configs_for_config_feature_flag",
    ],
    func = lambda settings: {
        "//command_line_option:enforce_transitive_configs_for_config_feature_flag": False,
    },
)

def _core_options(settings):
    return {
        "//command_line_option:compilation_mode": settings["//command_line_option:host_compilation_mode"],
        "//command_line_option:is exec configuration": True,
        "//command_line_option:cpu": settings["//command_line_option:host_cpu"],
        "//command_line_option:stamp": False,
        "//command_line_option:action_env": settings["//command_line_option:host_action_env"],
        "//command_line_option:features": settings["//command_line_option:host_features"],
    }

bazel_fragments["CoreOptions"] = fragment(
    propagate = [
        "//command_line_option:experimental_output_directory_naming_scheme",
        "//command_line_option:host_compilation_mode",
        "//command_line_option:experimental_exec_configuration_distinguisher",
        "//command_line_option:experimental_output_paths",
        "//command_line_option:enable_runfiles",
        "//command_line_option:enforce_constraints",
        "//command_line_option:incompatible_merge_genfiles_directory",
        "//command_line_option:experimental_platform_in_output_dir",
        "//command_line_option:host_cpu",
        "//command_line_option:include_config_fragments_provider",
        "//command_line_option:experimental_debug_selects_always_succeed",
        "//command_line_option:incompatible_check_testonly_for_output_files",
        "//command_line_option:incompatible_auto_exec_groups",
        "//command_line_option:experimental_writable_outputs",
        "//command_line_option:build_runfile_manifests",
        "//command_line_option:build_runfile_links",
        "//command_line_option:legacy_external_runfiles",
        "//command_line_option:experimental_remotable_source_manifests",
        "//command_line_option:incompatible_always_include_files_in_data",
        "//command_line_option:experimental_strict_fileset_output",
        "//command_line_option:strict_filesets",
        "//command_line_option:check_visibility",
        "//command_line_option:check_licenses",
        "//command_line_option:host_features",
        "//command_line_option:host_action_env",
        "//command_line_option:archived_tree_artifact_mnemonics_filter",
        "//command_line_option:allow_unresolved_symlinks",
        "//command_line_option:experimental_exec_config",
        "//command_line_option:experimental_exclude_defines_from_exec_config",
        "//command_line_option:experimental_exclude_starlark_flags_from_exec_config",
        "//command_line_option:experimental_propagate_custom_flag",
    ],
    inputs = ["//command_line_option:features"],
    outputs = [
        "//command_line_option:compilation_mode",
        "//command_line_option:is exec configuration",
        "//command_line_option:cpu",
        "//command_line_option:stamp",
        "//command_line_option:features",
        "//command_line_option:action_env",
    ],
    func = _core_options,
)

# CoverageConfiguration$CoverageOptions:  no getExec()

bazel_fragments["CppOptions"] = fragment(
    propagate = [
        "//command_line_option:host_copt",
        "//command_line_option:host_conlyopt",
        "//command_line_option:host_compiler",
        "//command_line_option:host_crosstool_top",
        "//command_line_option:host_cxxopt",
        "//command_line_option:host_per_file_copt",
        "//command_line_option:host_grte_top",
        "//command_line_option:host_linkopt",
        "//command_line_option:target libcTop label",
        "//command_line_option:experimental_link_static_libraries_once",
        "//command_line_option:experimental_cc_implementation_deps",
        "//command_line_option:start_end_lib",
        "//command_line_option:experimental_inmemory_dotd_files",
        "//command_line_option:incompatible_disable_legacy_cc_provider",
        "//command_line_option:incompatible_enable_cc_toolchain_resolution",
        "//command_line_option:incompatible_remove_legacy_whole_archive",
        "//command_line_option:incompatible_dont_enable_host_nonhost_crosstool_features",
        "//command_line_option:incompatible_require_ctx_in_configure_features",
        "//command_line_option:incompatible_make_thinlto_command_lines_standalone",
        "//command_line_option:incompatible_use_specific_tool_files",
        "//command_line_option:incompatible_disable_nocopts",
        "//command_line_option:incompatible_validate_top_level_header_inclusions",
        "//command_line_option:strict_system_includes",
        "//command_line_option:experimental_use_cpp_compile_action_args_params_file",
        "//command_line_option:experimental_unsupported_and_brittle_include_scanning",
        "//command_line_option:incompatible_enable_cc_test_feature",
        "//command_line_option:incompatible_use_cpp_compile_header_mnemonic",
        "//command_line_option:experimental_starlark_cc_import",
        "//command_line_option:incompatible_macos_set_install_name",
    ],
    outputs = [
        "//command_line_option:crosstool_top",
        "//command_line_option:compiler",
        "//command_line_option:grte_top",
        "//command_line_option:copt",
        "//command_line_option:cxxopt",
        "//command_line_option:conlyopt",
        "//command_line_option:per_file_copt",
        "//command_line_option:linkopt",
        "//command_line_option:strip",
    ],
    func = lambda settings: {
        "//command_line_option:crosstool_top": settings["//command_line_option:host_crosstool_top"],
        "//command_line_option:compiler": settings["//command_line_option:host_compiler"],
        "//command_line_option:grte_top": settings["//command_line_option:host_grte_top"],
        "//command_line_option:copt": settings["//command_line_option:host_copt"] + ["-g0"],  # Don't add for Windows
        "//command_line_option:cxxopt": settings["//command_line_option:host_cxxopt"] + ["-g0"],  # Don't add for Windows
        "//command_line_option:conlyopt": settings["//command_line_option:host_conlyopt"],
        "//command_line_option:per_file_copt": settings["//command_line_option:host_per_file_copt"],
        "//command_line_option:linkopt": settings["//command_line_option:host_linkopt"],
        "//command_line_option:strip": "always",
    },
)

# GenQueryConfiguration$GenQueryOptions: no getExec()

bazel_fragments["J2ObjcCommandLineOptions"] = fragment(
    propagate = [
        "//command_line_option:j2objc_translation_flags",
        "//command_line_option:incompatible_j2objc_library_migration",
    ],
)

def _java_options(settings):
    ans = {}
    if settings["//command_line_option:host_jvmopt"] == []:
        ans["//command_line_option:jvmopt"] = ["-XX:ErrorFile=/dev/stderr"]
    else:
        ans["//command_line_option:jvmopt"] = settings["//command_line_option:host_jvmopt"]
    ans["//command_line_option:javacopt"] = settings["//command_line_option:host_javacopt"]
    ans["//command_line_option:java_launcher"] = settings["//command_line_option:host_java_launcher"]
    ans["//command_line_option:java_language_version"] = settings["//command_line_option:tool_java_language_version"]
    ans["//command_line_option:java_runtime_version"] = settings["//command_line_option:tool_java_runtime_version"]
    return ans

bazel_fragments["JavaOptions"] = fragment(
    propagate = [
        "//command_line_option:use_ijars",
        "//command_line_option:java_header_compilation",
        "//command_line_option:java_deps",
        "//command_line_option:experimental_java_classpath",
        "//command_line_option:experimental_inmemory_jdeps_files",
        "//command_line_option:experimental_strict_java_deps",
        "//command_line_option:experimental_fix_deps_tool",
        "//command_line_option:experimental_one_version_enforcement",
        "//command_line_option:experimental_import_deps_checking",
        "//command_line_option:one_version_enforcement_on_java_tests",
        "//command_line_option:experimental_allow_runtime_deps_on_neverlink",
        "//command_line_option:experimental_add_test_support_to_compile_time_deps",
        "//command_line_option:jplPropagateCcLinkParamsStore",
        "//command_line_option:incompatible_disallow_resource_jars",
        "//command_line_option:java_runtime_version",
        "//command_line_option:java_language_version",
        "//command_line_option:experimental_bytecode_optimizers",
        "//command_line_option:split_bytecode_optimization_pass",
        "//command_line_option:bytecode_optimization_pass_actions",
        "//command_line_option:enforce_proguard_file_extension",
        "//command_line_option:proguard_top",
        "//command_line_option:host_javacopt",
        "//command_line_option:host_java_launcher",
        "//command_line_option:tool_java_runtime_version",
        "//command_line_option:tool_java_language_version",
        "//command_line_option:experimental_turbine_annotation_processing",
        "//command_line_option:incompatible_multi_release_deploy_jars",
        "//command_line_option:incompatible_disallow_java_import_exports",
        "//command_line_option:incompatible_disallow_java_import_empty_jars",
    ],
    inputs = [
        "//command_line_option:host_jvmopt",
    ],
    outputs = [
        "//command_line_option:jvmopt",
        "//command_line_option:javacopt",
        "//command_line_option:java_launcher",
    ],
    func = _java_options,
)

bazel_fragments["ObjcCommandLineOptions"] = fragment(
    propagate = [
        "//command_line_option:incompatible_avoid_hardcoded_objc_compilation_flags",
        "//command_line_option:incompatible_disallow_sdk_frameworks_attributes",
        "//command_line_option:incompatible_objc_alwayslink_by_default",
        "//command_line_option:incompatible_strip_executable_safely",
    ],
)

bazel_fragments["PlatformOptions"] = fragment(
    propagate = [
        "//command_line_option:host_platform",
        "//command_line_option:platform_mappings",
        "//command_line_option:extra_execution_platforms",
        "//command_line_option:extra_toolchains",
        "//command_line_option:toolchain_resolution_debug",
        "//command_line_option:incompatible_use_toolchain_resolution_for_java_rules",
    ],
)

bazel_fragments["ProtoConfiguration$Options"] = fragment(
    propagate = [
        "//command_line_option:proto_compiler",
        "//command_line_option:protocopt",
        "//command_line_option:experimental_proto_descriptor_sets_include_source_info",
        "//command_line_option:experimental_proto_extra_actions",
        "//command_line_option:proto_toolchain_for_java",
        "//command_line_option:proto_toolchain_for_j2objc",
        "//command_line_option:proto_toolchain_for_javalite",
        "//command_line_option:proto_toolchain_for_cc",
        "//command_line_option:strict_proto_deps",
        "//command_line_option:strict_public_imports",
        "//command_line_option:cc_proto_library_header_suffixes",
        "//command_line_option:cc_proto_library_source_suffixes",
    ],
)

def _python_options(settings):
    if settings["//command_line_option:host_force_python"] != None:
        host_py_version = settings["//command_line_option:host_force_python"]
    elif settings["//command_line_option:incompatible_py3_is_default"]:
        host_py_version = "py3"
    else:
        host_py_version = "py2"
    return {
        "//command_line_option:python_version": host_py_version,
    }

bazel_fragments["PythonOptions"] = fragment(
    # Could move these toolchain configuring flags to toolchain definitions?
    # And not make them flags. Must each one toggle independently of the others?
    propagate = [
        "//command_line_option:incompatible_py3_is_default",
        "//command_line_option:incompatible_py2_outputs_are_suffixed",
        "//command_line_option:build_python_zip",
        "//command_line_option:incompatible_use_python_toolchains",
        "//command_line_option:incompatible_allow_python_version_transitions",
        "//command_line_option:incompatible_default_to_explicit_init_py",
        "//command_line_option:incompatible_disallow_legacy_py_provider",
        "//command_line_option:incompatible_remove_old_python_version_api",
        "//command_line_option:incompatible_python_disable_py2",
        "//command_line_option:python_native_rules_allowlist",
        "//command_line_option:incompatible_python_disallow_native_rules",
        "//command_line_option:host_force_python",
    ],
    outputs = [
        "//command_line_option:python_version",
    ],
    func = _python_options,
)

bazel_fragments["ShellConfiguration$Options"] = fragment(
    propagate = [
        "//command_line_option:shell_executable",
    ],
)

# TestConfiguration$TestOptions: handled in native code. See b/295936652.

# Bazel's exec transition.
_transition_data = exec_transition(bazel_fragments)
bazel_exec_transition = _builtins.toplevel.transition(
    implementation = _transition_data.implementation,
    inputs = _transition_data.inputs,
    outputs = _transition_data.outputs,
)
