# Label

{% dynamic setvar source_file "src/main/java/com/google/devtools/build/lib/cmdline/Label.java" %} {% dynamic setvar version "7.1.0" %} {% dynamic setvar original_path "/rules/lib/builtins/Label" %} {% include "_buttons.html" %} A BUILD target identifier.

For every `Label` instance `l`, the string representation `str(l)` has the property that `Label(str(l)) == l`, regardless of where the `Label()` call occurs.

## Members

- Label
- name
- package
- relative
- repo_name
- same_package_label
- workspace_name
- workspace_root

## Label

    Label Label(input)

Converts a label string into a `Label` object, in the context of the package where the calling `.bzl` source file lives. If the given value is already a `Label`, it is returned unchanged.

For macros, a related function, `native.package_relative_label()`, converts the input into a `Label` in the context of the package currently being constructed. Use that function to mimic the string-to-label conversion that is automatically done by label-valued rule attributes.

### Parameters

Parameter | Description
--- | ---
`input` | string; or Label; required The input label string or Label object. If a Label object is passed, it's returned as is.

## name

    string Label.name

The name of the target referred to by this label. For instance:

    Label("@@foo//pkg/foo:abc").name == "abc"

## package

    string Label.package

The name of the package containing the target referred to by this label, without the repository name. For instance:

    Label("@@repo//pkg/foo:abc").package == "pkg/foo"

## relative

    Label Label.relative(relName)

Experimental. This API is experimental and may change at any time. Please do not depend on it. It may be enabled on an experimental basis by setting `--+incompatible_enable_deprecated_label_apis`
Deprecated. This method behaves surprisingly when used with an argument containing an apparent repo name. Prefer `Label.same_package_label()`, `native.package_relative_label()`, or `Label()` instead.

Resolves a label that is either absolute (starts with `//`) or relative to the current package. If this label is in a remote repository, the argument will be resolved relative to that repository. If the argument contains a repository name, the current label is ignored and the argument is returned as-is, except that the repository name is rewritten if it is in the current repository mapping. Reserved labels will also be returned as-is.
For example:

    Label("//foo/bar:baz").relative(":quux") == Label("//foo/bar:quux")
    Label("//foo/bar:baz").relative("//wiz:quux") == Label("//wiz:quux")
    Label("@repo//foo/bar:baz").relative("//wiz:quux") == Label("@repo//wiz:quux")
    Label("@repo//foo/bar:baz").relative("//visibility:public") == Label("//visibility:public")
    Label("@repo//foo/bar:baz").relative("@other//wiz:quux") == Label("@other//wiz:quux")

If the repository mapping passed in is `{'@other' : '@remapped'}`, then the following remapping will take place:

    Label("@repo//foo/bar:baz").relative("@other//wiz:quux") == Label("@remapped//wiz:quux")

### Parameters

Parameter | Description
--- | ---
`relName` | required The label that will be resolved relative to this one.

## repo_name

    string Label.repo_name

The canonical name of the repository containing the target referred to by this label, without any leading at-signs (`@`). For instance,

    Label("@@foo//bar:baz").repo_name == "foo"

## same_package_label

    Label Label.same_package_label(target_name)

Creates a label in the same package as this label with the given target name.

### Parameters

Parameter | Description
--- | ---
`target_name` | required The target name of the new label.

## workspace_name

    string Label.workspace_name

Experimental. This API is experimental and may change at any time. Please do not depend on it. It may be enabled on an experimental basis by setting `--+incompatible_enable_deprecated_label_apis`
Deprecated. The field name "workspace name" is a misnomer here; use the identically-behaving `Label.repo_name` instead.

The canonical name of the repository containing the target referred to by this label, without any leading at-signs (`@`). For instance,

    Label("@@foo//bar:baz").workspace_name == "foo"

## workspace_root

    string Label.workspace_root

Returns the execution root for the repository containing the target referred to by this label, relative to the execroot. For instance:

    Label("@repo//pkg/foo:abc").workspace_root == "external/repo"