aboutsummaryrefslogtreecommitdiff
path: root/tests/system_library/system_library_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/system_library/system_library_test.sh')
-rwxr-xr-xtests/system_library/system_library_test.sh213
1 files changed, 213 insertions, 0 deletions
diff --git a/tests/system_library/system_library_test.sh b/tests/system_library/system_library_test.sh
new file mode 100755
index 0000000..b8d52b3
--- /dev/null
+++ b/tests/system_library/system_library_test.sh
@@ -0,0 +1,213 @@
+# --- begin runfiles.bash initialization ---
+set -euo pipefail
+if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ if [[ -f "$0.runfiles_manifest" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest"
+ elif [[ -f "$0.runfiles/MANIFEST" ]]; then
+ export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST"
+ elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ export RUNFILES_DIR="$0.runfiles"
+ fi
+fi
+if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then
+ source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash"
+elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then
+ source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \
+ "$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)"
+else
+ echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash"
+ exit 1
+fi
+# --- end runfiles.bash initialization ---
+
+source "$(rlocation rules_cc/tests/system_library/unittest.bash)" \
+ || { echo "Could not rules_cc/source tests/system_library/unittest.bash" >&2; exit 1; }
+
+
+function setup_system_library() {
+ mkdir -p systemlib
+
+ cat << EOF > systemlib/foo.cc
+int bar() {
+ return 42;
+}
+EOF
+
+ cat << EOF > systemlib/foo.h
+int bar();
+EOF
+
+ cd systemlib
+
+ g++ -c -fpic foo.cc || fail "Expected foo.o to build successfully"
+ g++ -shared -o libfoo.so foo.o || fail "Expected foo.so to build successfully"
+ g++ -c foo.cc || fail "Expected foo.o to build successfully"
+ ar rvs foo.a foo.o || fail "Expected foo.a to build successfully"
+
+ cd ..
+
+ cat << EOF > WORKSPACE
+load("//:cc/system_library.bzl", "system_library")
+system_library(
+ name = "foo",
+ hdrs = [
+ "foo.h",
+ ],
+ static_lib_names = ["libfoo.a"],
+ shared_lib_names = ["libfoo.so"]
+)
+
+system_library(
+ name = "foo_hardcoded_path",
+ hdrs = [
+ "foo.h",
+ ],
+ static_lib_names = ["libfoo.a"],
+ shared_lib_names = ["libfoo.so"],
+ lib_path_hints = ["${PWD}/systemlib"],
+ includes = ["${PWD}/systemlib"]
+)
+EOF
+
+ cat << EOF > BUILD
+cc_binary(
+ name = "test",
+ srcs = ["test.cc"],
+ deps = ["@foo"]
+)
+
+cc_binary(
+ name = "test_static",
+ srcs = ["test.cc"],
+ deps = ["@foo"],
+ linkstatic = True
+)
+
+cc_binary(
+ name = "test_hardcoded_path",
+ srcs = ["test.cc"],
+ deps = ["@foo_hardcoded_path"]
+)
+
+cc_binary(
+ name = "test_static_hardcoded_path",
+ srcs = ["test.cc"],
+ deps = ["@foo_hardcoded_path"],
+ linkstatic = True
+)
+
+cc_binary(
+ name = "fake_rbe",
+ srcs = ["test.cc"],
+ deps = ["@foo_hardcoded_path"]
+)
+EOF
+
+ cat << EOF > test.cc
+#include "foo.h"
+
+int main() {
+ return 42 - bar();
+}
+EOF
+}
+#### TESTS #############################################################
+
+# Make sure it fails with a correct message when no library is found
+function test_system_library_not_found() {
+ setup_system_library
+
+ bazel run //:test \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ &> $TEST_log \
+ || true
+ expect_log "Library foo could not be found"
+
+ bazel run //:test_static \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ &> $TEST_log \
+ || true
+ expect_log "Library foo could not be found"
+ }
+
+function test_override_paths() {
+ setup_system_library
+
+ bazel run //:test \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ --action_env=BAZEL_LIB_OVERRIDE_PATHS=foo="${PWD}"/systemlib \
+ --action_env=BAZEL_INCLUDE_OVERRIDE_PATHS=foo="${PWD}"/systemlib \
+ || fail "Expected test to run successfully"
+
+ bazel run //:test_static \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ --action_env=BAZEL_LIB_OVERRIDE_PATHS=foo="${PWD}"/systemlib \
+ --action_env=BAZEL_INCLUDE_OVERRIDE_PATHS=foo="${PWD}"/systemlib \
+ || fail "Expected test_static to run successfully"
+}
+
+function test_additional_paths() {
+ setup_system_library
+
+ bazel run //:test \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ --action_env=BAZEL_LIB_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \
+ --action_env=BAZEL_INCLUDE_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \
+ || fail "Expected test to run successfully"
+
+ bazel run //:test_static \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ --action_env=BAZEL_LIB_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \
+ --action_env=BAZEL_INCLUDE_ADDITIONAL_PATHS=foo="${PWD}"/systemlib \
+ || fail "Expected test_static to run successfully"
+}
+
+function test_hardcoded_paths() {
+ setup_system_library
+
+ bazel run //:test_hardcoded_path \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ || fail "Expected test_hardcoded_path to run successfully"
+
+ bazel run //:test_static_hardcoded_path \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ || fail "Expected test_static_hardcoded_path to run successfully"
+}
+
+function test_system_library_no_lib_names() {
+ cat << EOF > WORKSPACE
+load("//:cc/system_library.bzl", "system_library")
+system_library(
+ name = "foo",
+ hdrs = [
+ "foo.h",
+ ]
+)
+EOF
+
+ cat << EOF > BUILD
+cc_binary(
+ name = "test",
+ srcs = ["test.cc"],
+ deps = ["@foo"]
+)
+EOF
+
+ # It should fail when no static_lib_names and static_lib_names are given
+ bazel run //:test \
+ --experimental_starlark_cc_import \
+ --experimental_repo_remote_exec \
+ &> $TEST_log \
+ || true
+ expect_log "Library foo could not be found"
+}
+
+run_suite "Integration tests for system_library." \ No newline at end of file