Support configuration variables in py_wheel "version" attirbute. (#640)
diff --git a/docs/packaging.md b/docs/packaging.md index 0271750..d3595c4 100755 --- a/docs/packaging.md +++ b/docs/packaging.md
@@ -103,7 +103,7 @@ | requires | List of requirements for this package | List of strings | optional | [] | | stamp | Whether to encode build information into the wheel. Possible values:<br><br>- <code>stamp = 1</code>: Always stamp the build information into the wheel, even in [--nostamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) builds. This setting should be avoided, since it potentially kills remote caching for the target and any downstream actions that depend on it.<br><br>- <code>stamp = 0</code>: Always replace build information by constant values. This gives good build result caching.<br><br>- <code>stamp = -1</code>: Embedding of build information is controlled by the [--[no]stamp](https://docs.bazel.build/versions/main/user-manual.html#flag--stamp) flag.<br><br>Stamped targets are not rebuilt unless their dependencies change. | Integer | optional | -1 | | strip_path_prefixes | path prefixes to strip from files added to the generated package | List of strings | optional | [] | -| version | Version number of the package. Note that this attribute supports stamp format strings. Eg <code>1.2.3-{BUILD_TIMESTAMP}</code> | String | required | | +| version | Version number of the package. Note that this attribute supports stamp format strings (eg. <code>1.2.3-{BUILD_TIMESTAMP}</code>) as well as 'make variables' (e.g. <code>1.2.3-$(VERSION)</code>). | String | required | | <a name="#PyWheelInfo"></a>
diff --git a/python/packaging.bzl b/python/packaging.bzl index 5e79900..9ad2daf 100644 --- a/python/packaging.bzl +++ b/python/packaging.bzl
@@ -114,10 +114,18 @@ escaped += "_" return escaped +def _replace_make_variables(flag, ctx): + """Replace $(VERSION) etc make variables in flag""" + if "$" in flag: + for varname, varsub in ctx.var.items(): + flag = flag.replace("$(%s)" % varname, varsub) + return flag + def _py_wheel_impl(ctx): + version = _replace_make_variables(ctx.attr.version, ctx) outfile = ctx.actions.declare_file("-".join([ _escape_filename_segment(ctx.attr.distribution), - _escape_filename_segment(ctx.attr.version), + _escape_filename_segment(version), _escape_filename_segment(ctx.attr.python_tag), _escape_filename_segment(ctx.attr.abi), _escape_filename_segment(ctx.attr.platform), @@ -143,7 +151,7 @@ args = ctx.actions.args() args.add("--name", ctx.attr.distribution) - args.add("--version", ctx.attr.version) + args.add("--version", version) args.add("--python_tag", ctx.attr.python_tag) args.add("--python_requires", ctx.attr.python_requires) args.add("--abi", ctx.attr.abi) @@ -298,7 +306,8 @@ mandatory = True, doc = ( "Version number of the package. Note that this attribute " + - "supports stamp format strings. Eg `1.2.3-{BUILD_TIMESTAMP}`" + "supports stamp format strings (eg. `1.2.3-{BUILD_TIMESTAMP}`) " + + "as well as 'make variables' (e.g. `1.2.3-$(VERSION)`)." ), ), "_stamp_flag": attr.label(