about summary refs log tree commit diff
path: root/third_party/bazel/rules_haskell/haskell/private/version_macros.bzl
blob: 35f913f26b0137bcdc6174430bdf75e0d8b345b4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
load(":private/set.bzl", "set")

def generate_version_macros(ctx, name, version):
    """Generate a version macros header file.

    Args:
        ctx: Rule context. Needs to define a _version_macros executable attribute.
        name: The package name.
        version: The package version.

    Returns:
        Version macros header File.
    """
    version_macros_file = ctx.actions.declare_file("{}_version_macros.h".format(name))
    ctx.actions.run_shell(
        inputs = [ctx.executable._version_macros],
        outputs = [version_macros_file],
        command = """
        "$1" "$2" "$3" > "$4"
        """,
        arguments = [
            ctx.executable._version_macros.path,
            name,
            version,
            version_macros_file.path,
        ],
    )
    return version_macros_file

def version_macro_includes(hs_info):
    """Generate a list of version macro header includes.

    Args:
        hs_info: HaskellInfo provider.

    Returns:
        (files, flags):
        files: Set of version macros header files.
        flags: List of C preprocessor flags to include version macros.
    """
    files = hs_info.version_macros
    flags = [
        f
        for include in set.to_list(files)
        for f in ["-include", include.path]
    ]
    return (files, flags)