| def _symlink_if_available(repository_ctx, driver_name): |
| driver = repository_ctx.which(driver_name) |
| |
| if driver: |
| repository_ctx.symlink(driver, driver_name) |
| else: |
| repository_ctx.file(driver_name, "") |
| |
| return "\n".join([ |
| "bool_setting(name = \"use_%s\", build_setting_default = %s)" % (driver_name, driver != None), |
| "", |
| "exports_files([\"%s\"])" % driver_name, |
| "", |
| """js_library(name = "%s-js", data = [":%s"])""" % (driver_name, driver_name), |
| "", |
| ]) |
| |
| def _local_drivers_impl(repository_ctx): |
| contents = [ |
| "load(\"@bazel_skylib//rules:common_settings.bzl\", \"bool_setting\")", |
| "load(\"@aspect_rules_js//js:defs.bzl\", \"js_library\")", |
| "", |
| "package(default_visibility = [\"//visibility:public\"])", |
| _symlink_if_available(repository_ctx, "chromedriver"), |
| _symlink_if_available(repository_ctx, "msedgedriver"), |
| _symlink_if_available(repository_ctx, "geckodriver"), |
| ] |
| |
| repository_ctx.file("BUILD.bazel", "\n".join(contents)) |
| |
| local_drivers = repository_rule( |
| _local_drivers_impl, |
| ) |