Use C++ environment variables when constructing link command line (#252)

* Use C++ environment variables when constructing link command line

This PR makes sure that rustc action also takes declared environment
variables from the C++ toolchain when constructing the action. This way
the C++ toolchain can start using more environment variables without
breaking rust.

* Fix iterating depset
diff --git a/rust/private/legacy_cc_starlark_api_shim.bzl b/rust/private/legacy_cc_starlark_api_shim.bzl
index 3625d44..a33596e 100644
--- a/rust/private/legacy_cc_starlark_api_shim.bzl
+++ b/rust/private/legacy_cc_starlark_api_shim.bzl
@@ -13,13 +13,7 @@
       A depset[File]
     """
     libraries_to_link = dep[CcInfo].linking_context.libraries_to_link
-
-    # Remove `if` line once Bazel 0.27 is used
-    # (https://github.com/bazelbuild/bazel/issues/8118)
-    if type(libraries_to_link) == type(depset()):
-        libraries_to_link = libraries_to_link.to_list()
-
-    return depset([_get_preferred_artifact(lib) for lib in libraries_to_link])
+    return depset([_get_preferred_artifact(lib) for lib in libraries_to_link.to_list()])
 
 def _get_preferred_artifact(library_to_link):
     return (
diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl
index 7856ab8..67f2071 100644
--- a/rust/private/rustc.bzl
+++ b/rust/private/rustc.bzl
@@ -165,12 +165,17 @@
         action_name = CPP_LINK_EXECUTABLE_ACTION_NAME,
         variables = link_variables,
     )
+    link_env = cc_common.get_environment_variables(
+        feature_configuration = feature_configuration,
+        action_name = CPP_LINK_EXECUTABLE_ACTION_NAME,
+        variables = link_variables,
+    )
     ld = cc_common.get_tool_for_action(
         feature_configuration = feature_configuration,
         action_name = CPP_LINK_EXECUTABLE_ACTION_NAME,
     )
 
-    return ld, link_args
+    return ld, link_args, link_env
 
 def rustc_compile_action(
         ctx,
@@ -246,7 +251,7 @@
 
     # Link!
     rpaths = _compute_rpaths(toolchain, output_dir, dep_info)
-    ld, link_args = _get_linker_and_args(ctx, rpaths)
+    ld, link_args, link_env = _get_linker_and_args(ctx, rpaths)
     args.add("--codegen=linker=" + ld)
     args.add_joined("--codegen", link_args, join_with = " ", format_joined = "link-args=%s")
 
@@ -289,11 +294,14 @@
         toolchain.rustc.path,
     )
 
+    env = _get_rustc_env(ctx, toolchain)
+    env.update(link_env)
+
     ctx.actions.run_shell(
         command = command,
         inputs = compile_inputs,
         outputs = [crate_info.output],
-        env = _get_rustc_env(ctx, toolchain),
+        env = env,
         arguments = [args],
         mnemonic = "Rustc",
         progress_message = "Compiling Rust {} {} ({} files)".format(crate_info.type, ctx.label.name, len(crate_info.srcs)),