Fixes after code review
diff --git a/cc/system_library.bzl b/cc/system_library.bzl
index 7a55eb7..41f286e 100644
--- a/cc/system_library.bzl
+++ b/cc/system_library.bzl
@@ -7,11 +7,11 @@
ENV_VAR_SEPARATOR = ","
ENV_VAR_ASSIGNMENT = "="
-def _make_flags(array_of_strings, prefix):
+def _make_flags(flag_values, flag):
flags = []
- if array_of_strings:
- for s in array_of_strings:
- flags.append(prefix + s)
+ if flag_values:
+ for s in flag_values:
+ flags.append(flag + s)
return " ".join(flags)
def _split_env_var(repo_ctx, var_name):
@@ -39,7 +39,7 @@
return _split_env_var(repo_ctx, var_name).get(key, default = [])
def _execute_bash(repo_ctx, cmd):
- return repo_ctx.execute(["/bin/bash", "-c", cmd]).stdout.replace("\n", "")
+ return repo_ctx.execute(["/bin/bash", "-c", cmd]).stdout.strip("\n")
def _find_linker(repo_ctx):
ld = _execute_bash(repo_ctx, "which ld")
@@ -93,7 +93,7 @@
path = _execute_bash(repo_ctx, cmd)
if path:
return (archive_name, path)
- return ("", "")
+ return (None, None)
def _find_header_path(repo_ctx, lib_name, header_name, includes):
override_paths = _get_list_from_env_var(
@@ -107,33 +107,25 @@
lib_name,
)
- # See https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html
- override_include_flags = _make_flags(override_paths, "-I")
- standard_include_flags = _make_flags(includes, "-isystem")
- additional_include_flags = _make_flags(additional_paths, "-idirafter")
-
compiler = _find_compiler(repo_ctx)
-
- # Taken from https://stackoverflow.com/a/63052918/922404
cmd = """
- f=\"{}\"; \\
- echo | \\
- {} -E {} {} {} -Wp,-v - 2>&1 | \\
- sed '\\~^ /~!d; s/ //' | \\
- while IFS= read -r path; \\
- do if [[ -e \"$path/$f\" ]]; \\
- then echo \"$path/$f\"; \\
- break; \\
- fi; \\
- done
- """.format(
- header_name,
- compiler,
- override_include_flags,
- standard_include_flags,
- additional_include_flags,
- )
- return _execute_bash(repo_ctx, cmd)
+ print | \\
+ {} -Wp,-v -x c++ - -fsyntax-only 2>&1 | \\
+ sed -n -e '/^\s\+/p' | \\
+ sed -e 's/^[ \t]*//'
+ """.format(compiler)
+ system_includes = _execute_bash(repo_ctx, cmd).split("\n")
+ all_includes = (override_paths + includes +
+ system_includes + additional_paths)
+
+ for directory in all_includes:
+ cmd = """
+ test -f "{dir}/{hdr}" && echo "{dir}/{hdr}"
+ """.format(dir = directory, hdr = header_name)
+ result = _execute_bash(repo_ctx, cmd)
+ if result:
+ return result
+ return None
def _system_library_impl(repo_ctx):
repo_name = repo_ctx.attr.name
diff --git a/tests/system_library/system_library_test.sh b/tests/system_library/system_library_test.sh
index 018bae7..b8d52b3 100755
--- a/tests/system_library/system_library_test.sh
+++ b/tests/system_library/system_library_test.sh
@@ -23,8 +23,8 @@
source "$(rlocation rules_cc/tests/system_library/unittest.bash)" \
|| { echo "Could not rules_cc/source tests/system_library/unittest.bash" >&2; exit 1; }
-#### TESTS #############################################################
-function test_system_library() {
+
+function setup_system_library() {
mkdir -p systemlib
cat << EOF > systemlib/foo.cc
@@ -95,6 +95,12 @@
deps = ["@foo_hardcoded_path"],
linkstatic = True
)
+
+cc_binary(
+ name = "fake_rbe",
+ srcs = ["test.cc"],
+ deps = ["@foo_hardcoded_path"]
+)
EOF
cat << EOF > test.cc
@@ -104,8 +110,13 @@
return 42 - bar();
}
EOF
+}
+#### TESTS #############################################################
- # Make sure it fails with a correct message when no library is found
+# 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 \
@@ -119,8 +130,11 @@
&> $TEST_log \
|| true
expect_log "Library foo could not be found"
+ }
- # Test override paths
+function test_override_paths() {
+ setup_system_library
+
bazel run //:test \
--experimental_starlark_cc_import \
--experimental_repo_remote_exec \
@@ -134,8 +148,11 @@
--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"
+}
- # Test additional paths
+function test_additional_paths() {
+ setup_system_library
+
bazel run //:test \
--experimental_starlark_cc_import \
--experimental_repo_remote_exec \
@@ -149,8 +166,11 @@
--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"
+}
- # Test hardcoded paths
+function test_hardcoded_paths() {
+ setup_system_library
+
bazel run //:test_hardcoded_path \
--experimental_starlark_cc_import \
--experimental_repo_remote_exec \