diff --git a/elisp/process.cc b/elisp/process.cc index b08cafdc..8b62b42a 100644 --- a/elisp/process.cc +++ b/elisp/process.cc @@ -450,26 +450,9 @@ absl::StatusOr Run(const std::string_view binary, absl::StatusOr resolved_binary = runfiles.Resolve(binary); if (!resolved_binary.ok()) return resolved_binary.status(); std::vector final_args{*resolved_binary}; + final_args.insert(final_args.end(), args.begin(), args.end()); absl::StatusOr map = runfiles.Environment(); if (!map.ok()) return map.status(); - std::vector runfiles_args; - // Pass the runfiles environment variables as separate arguments. This is - // necessary because the binary launcher unconditionally sets the runfiles - // environment variables based on its own argv[0]; see - // https://github.com/bazelbuild/bazel/blob/5.4.1/src/tools/launcher/launcher.cc - // and https://github.com/bazelbuild/bazel/pull/16916. We also can’t set - // argv[0] to this binary because the launcher uses it to find its own binary; - // see - // https://github.com/bazelbuild/bazel/blob/5.4.1/src/tools/launcher/launcher_main.cc. - // Once we drop support for Bazel 6.0 and below, we should be able to modify - // argv[0] to make this launcher more transparent. - for (const auto& [key, value] : *map) { - runfiles_args.push_back(RULES_ELISP_NATIVE_LITERAL("--runfiles-env=") + - key + RULES_ELISP_NATIVE_LITERAL('=') + value); - } - final_args.insert(final_args.end(), runfiles_args.begin(), - runfiles_args.end()); - final_args.insert(final_args.end(), args.begin(), args.end()); absl::StatusOr orig_env = CopyEnv(); if (!orig_env.ok()) return orig_env.status(); // We don’t want the Python launcher to change the current working directory, diff --git a/elisp/run_binary.py b/elisp/run_binary.py index 917bfb11..a7ddf9d6 100644 --- a/elisp/run_binary.py +++ b/elisp/run_binary.py @@ -33,9 +33,6 @@ def main() -> None: """Main function.""" parser = argparse.ArgumentParser(allow_abbrev=False) - parser.add_argument('--env', action='append', type=_env_var, default=[]) - parser.add_argument('--runfiles-env', action='append', type=_env_var, - default=[]) parser.add_argument('--wrapper', type=pathlib.PurePosixPath, required=True) parser.add_argument('--mode', choices=('direct', 'wrap'), required=True) parser.add_argument('--runfiles-elc', type=pathlib.PurePosixPath, @@ -53,7 +50,7 @@ def main() -> None: parser.add_argument('argv', nargs='+') opts = parser.parse_args() env: dict[str, str] = dict(os.environ) - run_files = runfiles.Runfiles(dict(opts.runfiles_env)) + run_files = runfiles.Runfiles() emacs = run_files.resolve(opts.wrapper) args: list[str] = [str(emacs)] with manifest.add(opts.mode, args) as manifest_file: @@ -70,7 +67,6 @@ def main() -> None: output_files = _arg_files(opts.argv, runfiles_dir, opts.output_arg) manifest.write(opts, input_files, output_files, manifest_file) args.extend(opts.argv[1:]) - env.update(opts.env) env.update(run_files.environment()) try: subprocess.run(args, env=env, check=True) @@ -114,10 +110,5 @@ def _arg_files(argv: Sequence[str], root: pathlib.Path, return tuple(result) -def _env_var(arg: str) -> tuple[str, str]: - key, _, value = arg.partition('=') - return key, value - - if __name__ == '__main__': main() diff --git a/elisp/run_emacs.py b/elisp/run_emacs.py index 27cf4cd3..1b861e5d 100644 --- a/elisp/run_emacs.py +++ b/elisp/run_emacs.py @@ -34,13 +34,10 @@ def main() -> None: """Main function.""" parser = argparse.ArgumentParser(allow_abbrev=False) - parser.add_argument('--env', action='append', type=_env_var, default=[]) - parser.add_argument('--runfiles-env', action='append', type=_env_var, - default=[]) parser.add_argument('--install', type=pathlib.PurePosixPath, required=True) parser.add_argument('argv', nargs='+') opts = parser.parse_args() - run_files = runfiles.Runfiles(dict(opts.runfiles_env)) + run_files = runfiles.Runfiles() install = run_files.resolve(opts.install) exe_suffix = '.exe' if os.name == 'nt' else '' emacs = install / 'bin' / ('emacs' + exe_suffix) @@ -55,7 +52,6 @@ def main() -> None: EMACSDOC=str(etc), EMACSLOADPATH=str(shared / 'lisp'), EMACSPATH=str(libexec)) - env.update(opts.env) env.update(run_files.environment()) if os.name == 'nt': # On Windows, Emacs doesn’t support Unicode arguments or environment @@ -107,10 +103,5 @@ def _check_codepage(description: str, values: Iterable[str]) -> None: f'can’t encode {description} “{value}” for Windows') from ex -def _env_var(arg: str) -> tuple[str, str]: - key, _, value = arg.partition('=') - return key, value - - if __name__ == '__main__': main() diff --git a/elisp/run_test.py b/elisp/run_test.py index d17d767e..a4c07dc6 100644 --- a/elisp/run_test.py +++ b/elisp/run_test.py @@ -35,9 +35,6 @@ def main() -> None: """Main function.""" parser = argparse.ArgumentParser(allow_abbrev=False) - parser.add_argument('--env', action='append', type=_env_var, default=[]) - parser.add_argument('--runfiles-env', action='append', type=_env_var, - default=[]) parser.add_argument('--wrapper', type=pathlib.PurePosixPath, required=True) parser.add_argument('--mode', choices=('direct', 'wrap'), required=True) parser.add_argument('--runfiles-elc', type=pathlib.PurePosixPath, @@ -62,7 +59,7 @@ def main() -> None: logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(name)s %(message)s') env: dict[str, str] = dict(os.environ) - run_files = runfiles.Runfiles(dict(opts.runfiles_env)) + run_files = runfiles.Runfiles() emacs = run_files.resolve(opts.wrapper) args: list[str] = [str(emacs)] with manifest.add(opts.mode, args) as manifest_file: @@ -83,7 +80,6 @@ def main() -> None: args += ['--skip-tag', _quote(tag)] args.append('--funcall=elisp/ert/run-batch-and-exit') args.extend(opts.argv[1:]) - env.update(opts.env) env.update(run_files.environment()) if manifest_file: inputs: list[pathlib.Path] = [] @@ -174,11 +170,6 @@ def _fix_coverage_manifest(manifest_file: pathlib.Path, stream.write(file + '\n') -def _env_var(arg: str) -> tuple[str, str]: - key, _, value = arg.partition('=') - return key, value - - _WINDOWS = os.name == 'nt' _logger = logging.getLogger('elisp.run_test')