do not add proc-macro deps to transitive_link_search_paths (#1424)

diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index 7d2c1dc..44b799c 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -206,8 +206,9 @@
 
             if "proc-macro" not in [crate_info.type, crate_info.wrapped_crate_type]:
                 transitive_noncrates.append(dep_info.transitive_noncrates)
+                transitive_link_search_paths.append(dep_info.link_search_path_files)
+
             transitive_build_infos.append(dep_info.transitive_build_infos)
-            transitive_link_search_paths.append(dep_info.link_search_path_files)
 
         elif cc_info:
             # This dependency is a cc_library
diff --git a/test/unit/transitive_link_search_paths/BUILD.bazel b/test/unit/transitive_link_search_paths/BUILD.bazel
new file mode 100644
index 0000000..df20a92
--- /dev/null
+++ b/test/unit/transitive_link_search_paths/BUILD.bazel
@@ -0,0 +1,4 @@
+load(":transitive_link_search_paths_test.bzl", "transitive_link_search_paths_test_suite")
+
+############################ UNIT TESTS #############################
+transitive_link_search_paths_test_suite(name = "transitive_link_search_paths_test_suite")
diff --git a/test/unit/transitive_link_search_paths/dep.rs b/test/unit/transitive_link_search_paths/dep.rs
new file mode 100644
index 0000000..cf74a9a
--- /dev/null
+++ b/test/unit/transitive_link_search_paths/dep.rs
@@ -0,0 +1,3 @@
+pub fn f() -> i64 {
+    42
+}
diff --git a/test/unit/transitive_link_search_paths/dep_build.rs b/test/unit/transitive_link_search_paths/dep_build.rs
new file mode 100644
index 0000000..29fec91
--- /dev/null
+++ b/test/unit/transitive_link_search_paths/dep_build.rs
@@ -0,0 +1,3 @@
+fn main() {
+    println!("yolo");
+}
diff --git a/test/unit/transitive_link_search_paths/proc_macro.rs b/test/unit/transitive_link_search_paths/proc_macro.rs
new file mode 100644
index 0000000..2803ddb
--- /dev/null
+++ b/test/unit/transitive_link_search_paths/proc_macro.rs
@@ -0,0 +1,8 @@
+extern crate proc_macro;
+
+use proc_macro::TokenStream;
+
+#[proc_macro_attribute]
+pub fn yolo(args: TokenStream, _input: TokenStream) -> TokenStream {
+    args
+}
diff --git a/test/unit/transitive_link_search_paths/proc_macro_build.rs b/test/unit/transitive_link_search_paths/proc_macro_build.rs
new file mode 100644
index 0000000..29fec91
--- /dev/null
+++ b/test/unit/transitive_link_search_paths/proc_macro_build.rs
@@ -0,0 +1,3 @@
+fn main() {
+    println!("yolo");
+}
diff --git a/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl b/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl
new file mode 100644
index 0000000..ac76547
--- /dev/null
+++ b/test/unit/transitive_link_search_paths/transitive_link_search_paths_test.bzl
@@ -0,0 +1,67 @@
+"""Unittests for rust rules."""
+
+load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
+load("//cargo:defs.bzl", "cargo_build_script")
+load("//rust:defs.bzl", "rust_common", "rust_library", "rust_proc_macro")
+
+def _transitive_link_search_paths_test_impl(ctx):
+    env = analysistest.begin(ctx)
+    tut = analysistest.target_under_test(env)
+    link_search_path_files = tut[rust_common.dep_info].link_search_path_files.to_list()
+    link_search_path_basenames = [f.basename for f in link_search_path_files]
+
+    # Checks that this contains the dep build script, but not the build script
+    # of the dep of the proc_macro.
+    asserts.equals(env, link_search_path_basenames, ["dep_build_script.linksearchpaths"])
+
+    return analysistest.end(env)
+
+transitive_link_search_paths_test = analysistest.make(_transitive_link_search_paths_test_impl)
+
+def _transitive_link_search_paths_test():
+    cargo_build_script(
+        name = "proc_macro_build_script",
+        srcs = ["proc_macro_build.rs"],
+        edition = "2018",
+    )
+
+    rust_proc_macro(
+        name = "proc_macro",
+        srcs = ["proc_macro.rs"],
+        edition = "2018",
+        deps = [":proc_macro_build_script"],
+    )
+
+    cargo_build_script(
+        name = "dep_build_script",
+        srcs = ["dep_build.rs"],
+        edition = "2018",
+    )
+
+    rust_library(
+        name = "dep",
+        srcs = ["dep.rs"],
+        edition = "2018",
+        proc_macro_deps = [":proc_macro"],
+        deps = [":dep_build_script"],
+    )
+
+    transitive_link_search_paths_test(
+        name = "transitive_link_search_paths_test",
+        target_under_test = ":dep",
+    )
+
+def transitive_link_search_paths_test_suite(name):
+    """Entry-point macro called from the BUILD file.
+
+    Args:
+        name: Name of the macro.
+    """
+    _transitive_link_search_paths_test()
+
+    native.test_suite(
+        name = name,
+        tests = [
+            ":transitive_link_search_paths_test",
+        ],
+    )
diff --git a/util/process_wrapper/options.rs b/util/process_wrapper/options.rs
index 5a074a7..f44c70e 100644
--- a/util/process_wrapper/options.rs
+++ b/util/process_wrapper/options.rs
@@ -201,8 +201,13 @@
 
 fn args_from_file(paths: Vec<String>) -> Result<Vec<String>, OptionError> {
     let mut args = vec![];
-    for path in paths.into_iter() {
-        let mut lines = read_file_to_array(path).map_err(OptionError::Generic)?;
+    for path in paths.iter() {
+        let mut lines = read_file_to_array(path).map_err(|err| {
+            OptionError::Generic(format!(
+                "{} while processing args from file paths: {:?}",
+                err, &paths
+            ))
+        })?;
         args.append(&mut lines);
     }
     Ok(args)
@@ -211,7 +216,7 @@
 fn env_from_files(paths: Vec<String>) -> Result<HashMap<String, String>, OptionError> {
     let mut env_vars = HashMap::new();
     for path in paths.into_iter() {
-        let lines = read_file_to_array(path).map_err(OptionError::Generic)?;
+        let lines = read_file_to_array(&path).map_err(OptionError::Generic)?;
         for line in lines.into_iter() {
             let (k, v) = line
                 .split_once('=')
diff --git a/util/process_wrapper/util.rs b/util/process_wrapper/util.rs
index 4b3d6bb..89f2ded 100644
--- a/util/process_wrapper/util.rs
+++ b/util/process_wrapper/util.rs
@@ -15,8 +15,16 @@
 use std::fs::File;
 use std::io::{BufRead, BufReader, Read};
 
-pub(crate) fn read_file_to_array(path: String) -> Result<Vec<String>, String> {
-    let file = File::open(path).map_err(|e| e.to_string())?;
+pub(crate) fn read_file_to_array(path: &str) -> Result<Vec<String>, String> {
+    let file = File::open(path).map_err(|e| e.to_string()).map_err(|err| {
+        format!(
+            "{} reading path: {:?}, current directory: {:?}",
+            err,
+            path,
+            std::env::current_dir()
+        )
+    })?;
+
     read_to_array(file)
 }