aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/BUILD1
-rw-r--r--examples/shell/BUILD28
-rw-r--r--examples/shell/README.md10
-rwxr-xr-xexamples/shell/bin.sh26
-rw-r--r--examples/shell/data/file.txt1
-rw-r--r--examples/shell/data/test_file.txt1
-rwxr-xr-xexamples/shell/lib.sh26
-rwxr-xr-xexamples/shell/test.sh35
-rwxr-xr-xsrc/test/shell/bazel/bazel_example_test.sh6
9 files changed, 134 insertions, 0 deletions
diff --git a/examples/BUILD b/examples/BUILD
index 3ce954ea6a..9d25b8fc73 100644
--- a/examples/BUILD
+++ b/examples/BUILD
@@ -11,5 +11,6 @@ filegroup(
"//examples/proto:srcs",
"//examples/py:srcs",
"//examples/py_native:srcs",
+ "//examples/shell:srcs",
],
)
diff --git a/examples/shell/BUILD b/examples/shell/BUILD
new file mode 100644
index 0000000000..9aba320bc2
--- /dev/null
+++ b/examples/shell/BUILD
@@ -0,0 +1,28 @@
+package(default_visibility = ["//visibility:public"])
+
+sh_binary(
+ name = "bin",
+ srcs = ["bin.sh"],
+ deps = [":lib"],
+)
+
+sh_library(
+ name = "lib",
+ data = [
+ "data/file.txt",
+ "lib.sh",
+ ],
+)
+
+sh_test(
+ name = "test",
+ size = "small",
+ srcs = ["test.sh"],
+ data = ["data/test_file.txt"],
+ deps = [":lib"],
+)
+
+filegroup(
+ name = "srcs",
+ srcs = ["BUILD"] + glob(["**/*.sh"]) + glob(["**/*.txt"]),
+)
diff --git a/examples/shell/README.md b/examples/shell/README.md
new file mode 100644
index 0000000000..da0c726621
--- /dev/null
+++ b/examples/shell/README.md
@@ -0,0 +1,10 @@
+# Shell Examples
+
+These examples demonstrate building shell binaries, libraries, and tests.
+They also show methods to access runfiles from different shell targets.
+
+```
+bazel build examples/shell:bin
+bazel build examples/shell:lib
+bazel test examples/shell:test
+```
diff --git a/examples/shell/bin.sh b/examples/shell/bin.sh
new file mode 100755
index 0000000000..02345b0157
--- /dev/null
+++ b/examples/shell/bin.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Copyright 2016 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.
+
+set -eu
+
+# This allows the script to be both a binary and a library script. If our binary has defined
+# RUNFILES then we use it, otherwise we look for our own runfiles.
+RUNFILES=${RUNFILES:-$0.runfiles}
+
+source "${RUNFILES}/examples/shell/lib.sh"
+
+showfile
+
diff --git a/examples/shell/data/file.txt b/examples/shell/data/file.txt
new file mode 100644
index 0000000000..2741ec4dd0
--- /dev/null
+++ b/examples/shell/data/file.txt
@@ -0,0 +1 @@
+Hello Bazel!
diff --git a/examples/shell/data/test_file.txt b/examples/shell/data/test_file.txt
new file mode 100644
index 0000000000..2741ec4dd0
--- /dev/null
+++ b/examples/shell/data/test_file.txt
@@ -0,0 +1 @@
+Hello Bazel!
diff --git a/examples/shell/lib.sh b/examples/shell/lib.sh
new file mode 100755
index 0000000000..979a2c6b67
--- /dev/null
+++ b/examples/shell/lib.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Copyright 2016 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.
+
+set -eu
+
+# This allows the script to be both a binary and a library script. If our binary has defined
+# RUNFILES then we use it, otherwise we look for our own runfiles.
+RUNFILES=${RUNFILES:-$0.runfiles}
+
+function showfile {
+ cat "${RUNFILES}/examples/shell/data/file.txt"
+}
+
diff --git a/examples/shell/test.sh b/examples/shell/test.sh
new file mode 100755
index 0000000000..6b7ba90e37
--- /dev/null
+++ b/examples/shell/test.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Copyright 2016 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.
+
+set -eu
+
+# This allows RUNFILES to be declared outside the script it you want.
+# RUNFILES for test is the directory of the script.
+RUNFILES=${RUNFILES:-$($(cd $(dirname ${BASH_SOURCE[0]})); pwd)}
+
+source "${RUNFILES}/examples/shell/lib.sh"
+
+function test_output {
+ OUTPUT=$(showfile)
+ EXPECTED_OUTPUT=$(cat "${RUNFILES}/examples/shell/data/test_file.txt")
+
+ if [ "${OUTPUT}" != "${EXPECTED_OUTPUT}" ]; then
+ # This would be a failure case.
+ exit 1
+ fi
+}
+
+test_output
diff --git a/src/test/shell/bazel/bazel_example_test.sh b/src/test/shell/bazel/bazel_example_test.sh
index d20139b408..9908ebc6c9 100755
--- a/src/test/shell/bazel/bazel_example_test.sh
+++ b/src/test/shell/bazel/bazel_example_test.sh
@@ -124,6 +124,12 @@ function test_native_python() {
assert_test_fails //examples/py_native:fail --python2_path=python
}
+function test_shell() {
+ assert_build "//examples/shell:bin"
+ assert_bazel_run "//examples/shell:bin" "Hello Bazel!"
+ assert_test_ok "//examples/shell:test"
+}
+
#
# Skylark rules
#