diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skylarkbuildapi')
3 files changed, 141 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD index b441d201b3..4e0da37087 100644 --- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/BUILD @@ -6,7 +6,7 @@ # those which contain pure-Skylark concepts, such as the interpretter or # annotation interfaces). -package(default_visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"]) +package(default_visibility = ["//src:__subpackages__"]) licenses(["notice"]) # Apache 2.0 diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileApi.java new file mode 100644 index 0000000000..1c6979267f --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileApi.java @@ -0,0 +1,103 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.skylarkbuildapi; + +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; + +/** + * The interface for files in Skylark. + */ +@SkylarkModule( + name = "File", + category = SkylarkModuleCategory.BUILTIN, + doc = + "This object is created during the analysis phase to represent a file or directory that " + + "will be read or written during the execution phase. It is not an open file handle, " + + "and cannot be used to directly read or write file contents. Rather, you use it to " + + "construct the action graph in a rule implementation function by passing it to " + + "action-creating functions. See the " + + "<a href='../rules.$DOC_EXT#files'>Rules page</a> for more information." + + "" + + "<p>When a <code>File</code> is passed to an <a href='Args.html'><code>Args</code></a> " + + "object without using a <code>map_each</code> function, it is converted to a string by " + + "taking the value of its <code>path</code> field." +) +public interface FileApi extends SkylarkValue { + + @SkylarkCallable(name = "dirname", structField = true, + doc = "The name of the directory containing this file. It's taken from " + + "<a href=\"#path\">path</a> and is always relative to the execution directory.") + public String getDirname(); + + @SkylarkCallable(name = "basename", structField = true, + doc = "The base name of this file. This is the name of the file inside the directory.") + public String getFilename(); + + @SkylarkCallable(name = "extension", structField = true, doc = "The file extension of this file.") + public String getExtension(); + + @SkylarkCallable(name = "owner", structField = true, allowReturnNones = true, + doc = "A label of a target that produces this File." + ) + public Label getOwnerLabel(); + + @SkylarkCallable( + name = "root", + structField = true, + doc = "The root beneath which this file resides." + ) + public FileRootApi getRoot(); + + @SkylarkCallable( + name = "is_source", + structField = true, + doc = "Returns true if this is a source file, i.e. it is not generated." + ) + public boolean isSourceArtifact(); + + // TODO(rduan): Document this Skylark method once TreeArtifact is no longer experimental. + @SkylarkCallable(name = "is_directory", structField = true, documented = false) + public boolean isTreeArtifact(); + + @SkylarkCallable( + name = "short_path", + structField = true, + doc = + "The path of this file relative to its root. This excludes the aforementioned " + + "<i>root</i>, i.e. configuration-specific fragments of the path. This is also the " + + "path under which the file is mapped if it's in the runfiles of a binary." + ) + public String getRunfilesPathString(); + + @SkylarkCallable( + name = "path", + structField = true, + doc = + "The execution path of this file, relative to the workspace's execution directory. It " + + "consists of two parts, an optional first part called the <i>root</i> (see also the " + + "<a href=\"root.html\">root</a> module), and the second part which is the " + + "<code>short_path</code>. The root may be empty, which it usually is for " + + "non-generated files. For generated files it usually contains a " + + "configuration-specific path fragment that encodes things like the target CPU " + + "architecture that was used while building said file. Use the " + + "<code>short_path</code> for the path under which the file is mapped if it's in the " + + "runfiles of a binary." + ) + public String getExecPathString(); +} diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileRootApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileRootApi.java new file mode 100644 index 0000000000..ee8a15843f --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/FileRootApi.java @@ -0,0 +1,37 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.devtools.build.lib.skylarkbuildapi; + +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; +import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; + +/** + * A root for a file. The roots are the directories containing files, and they are mapped + * together into a single directory tree to form the execution environment. + */ +@SkylarkModule( + name = "root", + category = SkylarkModuleCategory.BUILTIN, + doc = + "A root for files. The roots are the directories containing files, and they are mapped " + + "together into a single directory tree to form the execution environment." +) +public interface FileRootApi extends SkylarkValue { + @SkylarkCallable(name = "path", structField = true, + doc = "Returns the relative path from the exec root to the actual root.") + public String getExecPathString(); +} |