text: # Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
  # SPDX-License-Identifier: Apache-2.0
  
  #
  # The dependencies of the daml workspace.
  # This allows using the daml workspace externally
  # from another bazel workspace.
  #
  # For example, another Bazel project can depend on
  # targets in the daml repository by doing:
  # ---
  # local_repository(
  #   name = "com_github_digital_asset_daml",
  #   path = "/path/to/daml"
  # )
  # load("@com_github_digital_asset_daml//:deps.bzl", "daml_deps")
  # daml_deps()
  # ---
  #
  # A 3rd-party consumer would also need to register relevant
  # toolchains and repositories in order to build targets.
  # That is, copy some setup calls from WORKSPACE into the
  # other WORKSPACE.
  #
  # Make sure to reference repository local files with the full
  # prefix: @com_github_digital_asset_daml//..., as these won't
  # be resolvable from external workspaces otherwise.
  
  load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file")
  load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
  load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
  
  rules_scala_version = "152715b05547f160a512bae9b3d9e77a4888e243"
  rules_scala_sha256 = "9b117bf591780b5665a8271d83c2530943330f06e2dd99574ca9cf538009d09d"
  
  rules_haskell_version = "130121dac45dc726175fbb15230c02325b6fe73a"
  rules_haskell_sha256 = "423112ebcd17ae609caf6b76c75d5785f58a41a197fb62545d46f89bd66b508c"
  rules_nixpkgs_version = "659cf9db456f5a3c1a5a27747116fc50b709cdab"
  rules_nixpkgs_sha256 = "6a76b8004ad94daa9ce7e95d902c790646f8abd598ae9f1b1978fb74a95e9ebd"
  buildifier_version = "3.3.0"
  buildifier_sha256 = "f11fc80da0681a6d64632a850346ed2d4e5cbb0908306d9a2a2915f707048a10"
  zlib_version = "1.2.11"
  zlib_sha256 = "629380c90a77b964d896ed37163f5c3a34f6e6d897311f1df2a7016355c45eff"
  rules_nodejs_version = "2.0.1"
  rules_nodejs_sha256 = "0f2de53628e848c1691e5729b515022f5a77369c76a09fbe55611e12731c90e3"
  rules_jvm_external_version = "3.3"
  rules_jvm_external_sha256 = "d85951a92c0908c80bd8551002d66cb23c3434409c814179c0ff026b53544dab"
  rules_go_version = "0.23.6"
  rules_go_sha256 = "8663604808d2738dc615a2c3eb70eba54a9a982089dd09f6ffe5d0e75771bc4f"
  
  # Recent davl.
  davl_version = "f2d7480d118f32626533d6a150a8ee7552cc0222"  # 2020-03-23, "Deploy upgrade to DAML SDK 0.13.56-snapshot.20200318",https://github.com/digital-asset/davl/pull/233/commits.
  davl_sha256 = "3e8ae2a05724093e33b7f0363381e81a7e8e9655ccb3aa47ad540ea87e814321"
  
  # Pinned davl relied on by damlc packaging tests.
  davl_v3_version = "51d3977be2ab22f7f4434fd4692ca2e17a7cce23"
  davl_v3_sha256 = "e8e76e21b50fb3adab36df26045b1e8c3ee12814abc60f137d39b864d2eae166"
  
  # daml cheat sheet
  daml_cheat_sheet_version = "9d44b550de6c5d23096116da37ccb2fb4a90f7af"  # 2020-06-30
  daml_cheat_sheet_sha256 = "6429b73e33a7a937048c3d1316182bff0cb34b6aed30e2915875da698ee4d5c9"
  
  def daml_deps():
      if "rules_haskell" not in native.existing_rules():
          http_archive(
              name = "rules_haskell",
              strip_prefix = "rules_haskell-%s" % rules_haskell_version,
              urls = ["https://github.com/tweag/rules_haskell/archive/%s.tar.gz" % rules_haskell_version],
              patches = [
                  # Update and remove this patch once this is upstreamed.
                  # See https://github.com/tweag/rules_haskell/pull/1281
                  "@com_github_digital_asset_daml//bazel_tools:haskell-strict-source-names.patch",
                  # The fake libs issue should be fixed in upstream rules_haskell
                  # or GHC. Remove this patch once that's available.
                  "@com_github_digital_asset_daml//bazel_tools:haskell-windows-remove-fake-libs.patch",
                  # This is a daml specific patch and not upstreamable.
                  "@com_github_digital_asset_daml//bazel_tools:haskell-windows-extra-libraries.patch",
                  # This should be made configurable in rules_haskell.
                  # Remove this patch once that's available.
                  "@com_github_digital_asset_daml//bazel_tools:haskell-opt.patch",
              ],
              patch_args = ["-p1"],
              sha256 = rules_haskell_sha256,
          )
  
      if "io_tweag_rules_nixpkgs" not in native.existing_rules():
          http_archive(
              name = "io_tweag_rules_nixpkgs",
              strip_prefix = "rules_nixpkgs-%s" % rules_nixpkgs_version,
              urls = ["https://github.com/tweag/rules_nixpkgs/archive/%s.tar.gz" % rules_nixpkgs_version],
              sha256 = rules_nixpkgs_sha256,
              patches = [
                  # Remove once https://github.com/tweag/rules_nixpkgs/pull/128
                  # has been merged
                  "@com_github_digital_asset_daml//bazel_tools:nixpkgs-hermetic-cc-toolchain.patch",
                  # On CI and locally we observe occasional segmantation faults
                  # of nix. A known issue since Nix 2.2.2 is that HTTP2 support
                  # can cause such segmentation faults. Since Nix 2.3.2 it is
                  # possible to disable HTTP2 via a command-line flag, which
                  # reportedly solves the issue. See
                  # https://github.com/NixOS/nix/issues/2733#issuecomment-518324335
                  "@com_github_digital_asset_daml//bazel_tools:nixpkgs-disable-http2.patch",
              ],
              patch_args = ["-p1"],
          )
  
      if "com_github_madler_zlib" not in native.existing_rules():
          http_archive(
              name = "com_github_madler_zlib",
              build_file = "@com_github_digital_asset_daml//3rdparty/c:zlib.BUILD",
              strip_prefix = "zlib-{}".format(zlib_version),
              urls = ["https://github.com/madler/zlib/archive/v{}.tar.gz".format(zlib_version)],
              sha256 = zlib_sha256,
          )
  
      if "io_bazel_rules_go" not in native.existing_rules():
          http_archive(
              name = "io_bazel_rules_go",
              urls = [
                  "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v{version}/rules_go-v{version}.tar.gz".format(version = rules_go_version),
                  "https://github.com/bazelbuild/rules_go/releases/download/v{version}/rules_go-v{version}.tar.gz".format(version = rules_go_version),
              ],
              sha256 = rules_go_sha256,
          )
  
      if "rules_jvm_external" not in native.existing_rules():
          http_archive(
              name = "rules_jvm_external",
              strip_prefix = "rules_jvm_external-{}".format(rules_jvm_external_version),
              sha256 = rules_jvm_external_sha256,
              url = "https://github.com/bazelbuild/rules_jvm_external/archive/{}.zip".format(rules_jvm_external_version),
          )
  
      if "io_bazel_rules_scala" not in native.existing_rules():
          http_archive(
              name = "io_bazel_rules_scala",
              url = "https://github.com/bazelbuild/rules_scala/archive/%s.zip" % rules_scala_version,
              type = "zip",
              strip_prefix = "rules_scala-%s" % rules_scala_version,
              sha256 = rules_scala_sha256,
              patches = [
                  "@com_github_digital_asset_daml//bazel_tools:scala-escape-jvmflags.patch",
                  # Upstream PR at https://github.com/bazelbuild/rules_scala/pull/1082
                  # Without this patch, rootpath resolves to the JAR
                  # and not the binary wrapper.
                  "@com_github_digital_asset_daml//bazel_tools:scala-binary-rootpath.patch",
              ],
              patch_args = ["-p1"],
          )
  
      if "io_bazel_rules_docker" not in native.existing_rules():
          http_archive(
              name = "io_bazel_rules_docker",
              url = "https://github.com/bazelbuild/rules_docker/releases/download/v0.14.3/rules_docker-v0.14.3.tar.gz",
              strip_prefix = "rules_docker-0.14.3",
              sha256 = "6287241e033d247e9da5ff705dd6ef526bac39ae82f3d17de1b69f8cb313f9cd",
          )
  
      if "com_google_protobuf" not in native.existing_rules():
          http_archive(
              name = "com_google_protobuf",
              sha256 = "60d2012e3922e429294d3a4ac31f336016514a91e5a63fd33f35743ccfe1bd7d",
              # changing this version needs to be in sync with protobuf-java and grpc dependencies in bazel-java-deps.bzl
              strip_prefix = "protobuf-3.11.0",
              urls = ["https://github.com/google/protobuf/archive/v3.11.0.zip"],
              patches = [
              ],
              patch_args = ["-p1"],
          )
  
      if "bazel_gazelle" not in native.existing_rules():
          http_archive(
              name = "bazel_gazelle",
              urls = [
                  "https://storage.googleapis.com/bazel-mirror/github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz",
                  "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.19.1/bazel-gazelle-v0.19.1.tar.gz",
              ],
              sha256 = "86c6d481b3f7aedc1d60c1c211c6f76da282ae197c3b3160f54bd3a8f847896f",
          )
  
      if "io_bazel_rules_sass" not in native.existing_rules():
          http_archive(
              name = "io_bazel_rules_sass",
              sha256 = "7b9c9a88099d00dbb16be359c3b1946309d99673220c6b39c7e8bda8ecc692f8",
              strip_prefix = "rules_sass-1.24.4",
              urls = [
                  "https://github.com/bazelbuild/rules_sass/archive/1.24.4.zip",
                  "https://mirror.bazel.build/github.com/bazelbuild/rules_sass/archive/1.24.4.zip",
              ],
          )
  
      # Fetch rules_nodejs so we can install our npm dependencies
      if "build_bazel_rules_nodejs" not in native.existing_rules():
          http_archive(
              name = "build_bazel_rules_nodejs",
              urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/{}/rules_nodejs-{}.tar.gz".format(rules_nodejs_version, rules_nodejs_version)],
              sha256 = rules_nodejs_sha256,
              patches = [
                  # Work around for https://github.com/bazelbuild/rules_nodejs/issues/1565
                  "@com_github_digital_asset_daml//bazel_tools:rules_nodejs_npm_cli_path.patch",
                  "@com_github_digital_asset_daml//bazel_tools:rules_nodejs_node_dependency.patch",
              ],
              patch_args = ["-p1"],
          )
  
      if "com_github_grpc_grpc" not in native.existing_rules():
          # This should be kept in sync with the grpc version we get from Nix.
          http_archive(
              name = "com_github_grpc_grpc",
              strip_prefix = "grpc-1.23.1",
              urls = ["https://github.com/grpc/grpc/archive/v1.23.1.tar.gz"],
              sha256 = "dd7da002b15641e4841f20a1f3eb1e359edb69d5ccf8ac64c362823b05f523d9",
              patches = [
                  "@com_github_digital_asset_daml//bazel_tools:grpc-bazel-apple.patch",
                  "@com_github_digital_asset_daml//bazel_tools:grpc-bazel-mingw.patch",
              ],
              patch_args = ["-p1"],
          )
  
      if "io_grpc_grpc_java" not in native.existing_rules():
          http_archive(
              name = "io_grpc_grpc_java",
              strip_prefix = "grpc-java-1.21.0",
              urls = ["https://github.com/grpc/grpc-java/archive/v1.21.0.tar.gz"],
              sha256 = "9bc289e861c6118623fcb931044d843183c31d0e4d53fc43c4a32b56d6bb87fa",
              patches = [
                  "@com_github_digital_asset_daml//bazel_tools:grpc-java-plugin-visibility.patch",
              ],
              patch_args = ["-p1"],
          )
  
      if "com_github_johnynek_bazel_jar_jar" not in native.existing_rules():
          http_archive(
              name = "com_github_johnynek_bazel_jar_jar",
              sha256 = "841ae424eec3f322d411eb49d949622cc84787cb4189a30698fa9adadb98deac",
              strip_prefix = "bazel_jar_jar-20dbf71f09b1c1c2a8575a42005a968b38805519",
              urls = ["https://github.com/johnynek/bazel_jar_jar/archive/20dbf71f09b1c1c2a8575a42005a968b38805519.zip"],  # Latest commit SHA as at 2019/02/13
          )
  
          if "com_github_googleapis_googleapis" not in native.existing_rules():
              http_archive(
                  name = "com_github_googleapis_googleapis",
                  strip_prefix = "googleapis-6c48ab5aef47dc14e02e2dc718d232a28067129d",
                  urls = ["https://github.com/googleapis/googleapis/archive/6c48ab5aef47dc14e02e2dc718d232a28067129d.tar.gz"],
                  sha256 = "70d7be6ad49b4424313aad118c8622aab1c5fdd5a529d4215d3884ff89264a71",
              )
  
      # Buildifier.
      # It is written in Go and hence needs rules_go to be available.
      if "com_github_bazelbuild_buildtools" not in native.existing_rules():
          http_archive(
              name = "com_github_bazelbuild_buildtools",
              sha256 = buildifier_sha256,
              strip_prefix = "buildtools-{}".format(buildifier_version),
              url = "https://github.com/bazelbuild/buildtools/archive/{}.tar.gz".format(buildifier_version),
          )
  
      native.bind(
          name = "guava",
          actual = "@com_google_guava_guava//jar",
      )
      native.bind(
          name = "gson",
          actual = "@com_google_code_gson_gson//jar",
      )
  
      if "com_github_google_bazel_common" not in native.existing_rules():
          http_archive(
              name = "com_github_google_bazel_common",
              sha256 = "48a209fed9575c9d108eaf11fb77f7fe6178a90135e4d60cac6f70c2603aa53a",
              strip_prefix = "bazel-common-9e3880428c1837db9fb13335ed390b7e33e346a7",
              urls = ["https://github.com/google/bazel-common/archive/9e3880428c1837db9fb13335ed390b7e33e346a7.zip"],
          )
  
      maybe(
          http_archive,
          name = "rules_pkg",
          urls = [
              "https://github.com/bazelbuild/rules_pkg/releases/download/0.2.6/rules_pkg-0.2.6.tar.gz",
              "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.2.6/rules_pkg-0.2.6.tar.gz",
          ],
          sha256 = "aeca78988341a2ee1ba097641056d168320ecc51372ef7ff8e64b139516a4937",
      )
  
      if "com_github_grpc_ecosystem_grpc_health_probe_binary" not in native.existing_rules():
          http_file(
              name = "com_github_grpc_ecosystem_grpc_health_probe_binary",
              sha256 = "bfbe82e34645e91cdf3bacbb0d2dc7786f3c3cc4da6b64a446e5fdfb7bb0429f",
              downloaded_file_path = "grpc-health-probe",
              urls = [
                  "https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.3.1/grpc_health_probe-linux-amd64",
              ],
              executable = True,
          )
  
      if "davl-v3" not in native.existing_rules():
          http_archive(
              name = "davl-v3",
              strip_prefix = "davl-{}".format(davl_v3_version),
              urls = ["https://github.com/digital-asset/davl/archive/{}.tar.gz".format(davl_v3_version)],
              sha256 = davl_v3_sha256,
              build_file_content = """
  package(default_visibility = ["//visibility:public"])
  exports_files(["released/davl-v3.dar"])
              """,
          )
  
      if "davl" not in native.existing_rules():
          http_archive(
              name = "davl",
              strip_prefix = "davl-{}".format(davl_version),
              urls = ["https://github.com/digital-asset/davl/archive/{}.tar.gz".format(davl_version)],
              sha256 = davl_sha256,
              build_file_content = """
  package(default_visibility = ["//visibility:public"])
  exports_files(["released/davl-v4.dar", "released/davl-v5.dar", "released/davl-upgrade-v3-v4.dar", "released/davl-upgrade-v4-v5.dar"])
              """,
          )
  
      if "daml-cheat-sheet" not in native.existing_rules():
          http_archive(
              name = "daml-cheat-sheet",
              strip_prefix = "daml-cheat-sheet-{}".format(daml_cheat_sheet_version),
              urls = ["https://github.com/digital-asset/daml-cheat-sheet/archive/{}.tar.gz".format(daml_cheat_sheet_version)],
              sha256 = daml_cheat_sheet_sha256,
              build_file_content = """
  package(default_visibility = ["//visibility:public"])
  genrule(
    name = "site",
    srcs = ["_config.yml"] + glob(["**/*"],
            exclude = ["_config.yml", "LICENSE", "WORKSPACE", "BUILD.bazel", "README.md"]),
    outs = ["cheat-sheet.tar.gz"],
    tools = ["@jekyll_nix//:bin/jekyll"],
    cmd = '''
      DIR=$$(dirname $(execpath _config.yml))
      $(execpath @jekyll_nix//:bin/jekyll) build -s $$DIR
      tar hc _site \\
          --owner=1000 \\
          --group=1000 \\
          --mtime=2000-01-01\\ 00:00Z \\
          --no-acls \\
          --no-xattrs \\
          --no-selinux \\
          --sort=name \\
          | gzip -n > $(OUTS)
    ''',
  )
              """,
          )
  