<!-- Generated with Stardoc: http://skydoc.bazel.build -->

Public API

<a id="relative_file"></a>

## relative_file

<pre>
relative_file(<a href="#relative_file-to_file">to_file</a>, <a href="#relative_file-frm_file">frm_file</a>)
</pre>

Resolves a relative path between two files, "to_file" and "frm_file".

If neither of the paths begin with ../ it is assumed that they share the same root. When finding the relative path,
the incoming files are treated as actual files (not folders) so the resulting relative path may differ when compared
to passing the same arguments to python's "os.path.relpath()" or NodeJs's "path.relative()".

For example, 'relative_file("../foo/foo.txt", "bar/bar.txt")' will return '../../foo/foo.txt'


**PARAMETERS**


| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="relative_file-to_file"></a>to_file |  the path with file name to resolve to, from frm   |  none |
| <a id="relative_file-frm_file"></a>frm_file |  the path with file name to resolve from   |  none |

**RETURNS**

The relative path from frm_file to to_file, including the file name


<a id="to_output_relative_path"></a>

## to_output_relative_path

<pre>
to_output_relative_path(<a href="#to_output_relative_path-file">file</a>)
</pre>

    The relative path from bazel-out/[arch]/bin to the given File object

**PARAMETERS**


| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="to_output_relative_path-file"></a>file |  a <code>File</code> object   |  none |

**RETURNS**

The output relative path for the `File`


<a id="to_repository_relative_path"></a>

## to_repository_relative_path

<pre>
to_repository_relative_path(<a href="#to_repository_relative_path-file">file</a>)
</pre>

The repository relative path for a `File`

This is the full runfiles path of a `File` excluding its workspace name.

This differs from  root path (a.k.a. [short_path](https://bazel.build/rules/lib/File#short_path)) and
rlocation path as it does not include the repository name if the `File` is from an external repository.


**PARAMETERS**


| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="to_repository_relative_path-file"></a>file |  a <code>File</code> object   |  none |

**RETURNS**

The repository relative path for the `File`


<a id="to_rlocation_path"></a>

## to_rlocation_path

<pre>
to_rlocation_path(<a href="#to_rlocation_path-ctx">ctx</a>, <a href="#to_rlocation_path-file">file</a>)
</pre>

The rlocation path for a `File`

This produces the same value as the `rlocationpath` predefined source/output path variable.

From https://bazel.build/reference/be/make-variables#predefined_genrule_variables:

&gt; `rlocationpath`: The path a built binary can pass to the `Rlocation` function of a runfiles
&gt; library to find a dependency at runtime, either in the runfiles directory (if available)
&gt; or using the runfiles manifest.

&gt; This is similar to root path (a.k.a. [short_path](https://bazel.build/rules/lib/File#short_path))
&gt; in that it does not contain configuration prefixes, but differs in that it always starts with the
&gt; name of the repository.

&gt; The rlocation path of a `File` in an external repository repo will start with `repo/`, followed by the
&gt; repository-relative path.

&gt; Passing this path to a binary and resolving it to a file system path using the runfiles libraries
&gt; is the preferred approach to find dependencies at runtime. Compared to root path, it has the
&gt; advantage that it works on all platforms and even if the runfiles directory is not available.


**PARAMETERS**


| Name  | Description | Default Value |
| :------------- | :------------- | :------------- |
| <a id="to_rlocation_path-ctx"></a>ctx |  starlark rule execution context   |  none |
| <a id="to_rlocation_path-file"></a>file |  a <code>File</code> object   |  none |

**RETURNS**

The rlocationpath for the `File`


