65 lines
1.6 KiB
Python
65 lines
1.6 KiB
Python
|
"""Derived context with Haskell-specific fields and methods"""
|
||
|
|
||
|
load("@bazel_skylib//lib:paths.bzl", "paths")
|
||
|
|
||
|
HaskellContext = provider()
|
||
|
|
||
|
def haskell_context(ctx, attr = None):
|
||
|
toolchain = ctx.toolchains["@io_tweag_rules_haskell//haskell:toolchain"]
|
||
|
|
||
|
if not attr:
|
||
|
attr = ctx.attr
|
||
|
|
||
|
if hasattr(attr, "src_strip_prefix"):
|
||
|
src_strip_prefix = attr.src_strip_prefix
|
||
|
else:
|
||
|
src_strip_prefix = ""
|
||
|
|
||
|
src_root = paths.join(
|
||
|
ctx.label.workspace_root,
|
||
|
ctx.label.package,
|
||
|
src_strip_prefix,
|
||
|
)
|
||
|
|
||
|
env = {
|
||
|
"LANG": toolchain.locale,
|
||
|
}
|
||
|
|
||
|
if toolchain.locale_archive != None:
|
||
|
env["LOCALE_ARCHIVE"] = toolchain.locale_archive.path
|
||
|
|
||
|
coverage_enabled = False
|
||
|
if hasattr(ctx, "configuration"):
|
||
|
coverage_enabled = ctx.configuration.coverage_enabled
|
||
|
|
||
|
return HaskellContext(
|
||
|
# Fields
|
||
|
name = attr.name,
|
||
|
label = ctx.label,
|
||
|
toolchain = toolchain,
|
||
|
tools = toolchain.tools,
|
||
|
src_root = src_root,
|
||
|
package_root = ctx.label.workspace_root + ctx.label.package,
|
||
|
env = env,
|
||
|
mode = ctx.var["COMPILATION_MODE"],
|
||
|
actions = ctx.actions,
|
||
|
bin_dir = ctx.bin_dir,
|
||
|
genfiles_dir = ctx.genfiles_dir,
|
||
|
coverage_enabled = coverage_enabled,
|
||
|
)
|
||
|
|
||
|
def render_env(env):
|
||
|
"""Render environment dict to shell exports.
|
||
|
|
||
|
Example:
|
||
|
|
||
|
>>> render_env({"PATH": "foo:bar", "LANG": "lang"})
|
||
|
export PATH=foo:bar
|
||
|
export LANG=lang
|
||
|
|
||
|
"""
|
||
|
return "\n".join([
|
||
|
"export {}={}".format(k, v)
|
||
|
for k, v in env.items()
|
||
|
])
|