def _expand_template_impl(ctx):
    ctx.actions.expand_template(
        template = ctx.file.template,
        output = ctx.outputs.out,
        substitutions = ctx.attr.substitutions,
    )

expand_template = rule(
    attrs = {
        "out": attr.output(mandatory = True),
        "substitutions": attr.string_dict(mandatory = True),
        "template": attr.label(
            mandatory = True,
            allow_single_file = True,
        ),
    },
    output_to_genfiles = True,
    implementation = _expand_template_impl,
)

def cmake_substitutions(vars, defines = {}):
    """Returns a dict of template substitutions combining `vars` and `defines`.

    `vars` will be turned into a dict replacing `${key}` and `@key@` with `value`.
    `defines` will be turned into a dict replacing `#cmakedefine` with `#define {value}`
    if present is true, otherwise `/* #undef %s /*`.
    """
    subs = {}
    for key, value in vars.items():
        subs["${%s}" % (key,)] = str(value) if value != None else ""
        subs["@%s@" % (key,)] = str(value) if value != None else ""

    # TODO(shahms): Better handling of #cmakedefine delimiters and line endings to
    # avoid the prefix-substitution problem.
    # Potentially allow value to be: True, False, None or string.
    #   True/False => Same as current
    #   None       => assume no suffix value, include \n in sub and replacement
    #   string     => use string to lookup in vars and assume ${} or @@ tail?
    for macro, present in defines.items():
        if present:
            subs["#cmakedefine %s" % macro] = "#define %s" % macro
        else:
            subs["#cmakedefine %s" % macro] = "/* #undef %s */" % macro
    return subs
