# Copyright 2024 Google LLC
#
# 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.

module(
    name = "fuzztest",
    version = "head",
    # TODO(lszekeres): Remove and use default name.
    repo_name = "com_google_fuzztest",
)

bazel_dep(
    name = "rules_cc",
    version = "0.2.17",
)
bazel_dep(
    name = "rules_shell",
    version = "0.6.1",
)
bazel_dep(
    name = "rules_rust",
    version = "0.71.3",
)

rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
rust.toolchain(
    edition = "2024",
    versions = ["nightly/2025-01-15"],
)
use_repo(rust, "rust_toolchains")

register_toolchains("@rust_toolchains//:all")

crate = use_extension("@rules_rust//crate_universe:extensions.bzl", "crate")
crate.spec(
    package = "anyhow",
    version = "1.0.100",
)
crate.spec(
    features = [
        "derive",
        "env",
    ],
    package = "clap",
    version = "4.6.1",
)
crate.spec(
    package = "convert_case",
    version = "0.6.0",
)
crate.spec(
    package = "googletest",
    version = "0.14.3",
)
crate.spec(
    package = "humantime",
    version = "2.4.0",
)
crate.spec(
    package = "inventory",
    version = "0.3.20",
)
crate.spec(
    package = "num-traits",
    version = "0.2.19",
)
crate.spec(
    features = ["use-std"],
    package = "postcard",
    version = "1.0.0",
)
crate.spec(
    package = "proc-macro2",
    version = "1.0.106",
)
crate.spec(
    package = "proc-macro-crate",
    version = "3.4.0",
)
crate.spec(
    package = "quote",
    version = "1.0.45",
)
crate.spec(
    package = "rand",
    version = "0.10.1",
)
crate.spec(
    features = ["derive"],
    package = "serde",
    version = "1.0.219",
)
crate.spec(
    package = "serde_json",
    version = "1.0.150",
)
crate.spec(
    package = "spin",
    version = "0.10.0",
)
crate.spec(
    features = [
        "extra-traits",
        "full",
        "parsing",
        "printing",
        "visit-mut",
    ],
    package = "syn",
    version = "2.0.117",
)
crate.spec(
    package = "tempfile",
    version = "3.27.0",
)
crate.from_specs(name = "crate_index")
use_repo(crate, "crate_index")

bazel_dep(
    name = "abseil-cpp",
    version = "20260526.0",
)
bazel_dep(
    name = "re2",
    version = "2025-11-05.bcr.1",
)
bazel_dep(
    name = "bazel_skylib",
    version = "1.9.0",
)
bazel_dep(
    name = "platforms",
    version = "1.0.0",
)
bazel_dep(
    name = "flatbuffers",
    # When updating, check if we still need to override the versions of
    # rules_foreign_cc and aspect_bazel_lib below.
    version = "25.12.19",
)

# Needed to override problematic versions of the modules transitively inherited
# from flatbuffers. To check if this is still needed, comment out the overrides
# and run:
#
#   bazel mod all_paths rules_foreign_cc aspect_bazel_lib
#
# Verify that the version of rules_foreign_cc in the output is at least 0.13.0,
# and that the version of aspect_bazel_lib in the output is at least 2.19.1.
single_version_override(
    module_name = "rules_foreign_cc",
    version = "0.15.1",
)

single_version_override(
    module_name = "aspect_bazel_lib",
    version = "2.22.5",
)

# GoogleTest is not a dev dependency, because it's needed when FuzzTest is used
# with GoogleTest integration (e.g., googletest_adaptor). Note that the FuzzTest
# framework can be used without GoogleTest integration as well.
bazel_dep(
    name = "googletest",
    version = "1.17.0.bcr.2",
)

# Protobuf is not a dev dependency; it is needed for Bazel BUILD rules:
# https://github.com/protocolbuffers/protobuf/blob/main/bazel/proto_library.bzl
# https://github.com/protocolbuffers/protobuf/blob/main/bazel/cc_proto_library.bzl
bazel_dep(
    name = "protobuf",
    version = "33.5",
)
bazel_dep(
    name = "riegeli",
    version = "0.0.0-20250822-9f2744d",
    repo_name = "com_google_riegeli",
)

# Dev dependencies.
# These dependencies will be ignored if the current module is not the root
# module (https://bazel.build/rules/lib/globals/module#bazel_dep).
bazel_dep(
    name = "nlohmann_json",
    version = "3.12.0.bcr.1",
    dev_dependency = True,
)
bazel_dep(
    name = "antlr4-cpp-runtime",
    version = "4.13.2",
    dev_dependency = True,
    repo_name = "antlr_cpp",
)
