diff --git a/js/deno.ts b/js/deno.ts index 45e16e52da..2e69a5bbd8 100644 --- a/js/deno.ts +++ b/js/deno.ts @@ -1,7 +1,7 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. // Public deno module. -export { noColor, pid, env, exit, isTTY } from "./os"; +export { noColor, pid, env, exit, isTTY, execPath } from "./os"; export { chdir, cwd } from "./dir"; export { File, diff --git a/js/os.ts b/js/os.ts index bb9ecc99a1..fbcb23a7fb 100644 --- a/js/os.ts +++ b/js/os.ts @@ -12,11 +12,19 @@ export let pid: number; /** Reflects the NO_COLOR environment variable: https://no-color.org/ */ export let noColor: boolean; +/** Path to the current deno process's executable file. */ +export let execPath: string; + /** @internal */ -export function setGlobals(pid_: number, noColor_: boolean): void { +export function setGlobals( + pid_: number, + noColor_: boolean, + execPath_: string +): void { assert(!pid); pid = pid_; noColor = noColor_; + execPath = execPath_; } interface CodeInfo { @@ -190,7 +198,7 @@ export function start(source?: string): msg.StartRes { util.setLogDebug(startResMsg.debugFlag(), source); - setGlobals(startResMsg.pid(), startResMsg.noColor()); + setGlobals(startResMsg.pid(), startResMsg.noColor(), startResMsg.execPath()!); return startResMsg; } diff --git a/src/msg.fbs b/src/msg.fbs index f3c47faf6a..81345d1562 100644 --- a/src/msg.fbs +++ b/src/msg.fbs @@ -65,7 +65,7 @@ union Any { Now, NowRes, IsTTY, - IsTTYRes + IsTTYRes, } enum ErrorKind: byte { @@ -156,6 +156,7 @@ table StartRes { cwd: string; pid: uint32; argv: [string]; + exec_path: string; debug_flag: bool; deps_flag: bool; types_flag: bool; diff --git a/src/ops.rs b/src/ops.rs index a968ae6e16..e303196caa 100644 --- a/src/ops.rs +++ b/src/ops.rs @@ -252,6 +252,9 @@ fn op_start( let cwd_off = builder.create_string(deno_fs::normalize_path(cwd_path.as_ref()).as_ref()); + let exec_path = + builder.create_string(std::env::current_exe().unwrap().to_str().unwrap()); + let v8_version = version::v8(); let v8_version_off = builder.create_string(v8_version); @@ -270,6 +273,7 @@ fn op_start( v8_version: Some(v8_version_off), deno_version: Some(deno_version_off), no_color: !ansi::use_color(), + exec_path: Some(exec_path), ..Default::default() }, ); diff --git a/tests/exec_path.ts b/tests/exec_path.ts new file mode 100644 index 0000000000..f09663d7e4 --- /dev/null +++ b/tests/exec_path.ts @@ -0,0 +1 @@ +console.log(Deno.execPath); diff --git a/tools/test.py b/tools/test.py index 9e43dca3e3..5d08e59d1c 100755 --- a/tools/test.py +++ b/tools/test.py @@ -38,6 +38,12 @@ def test_no_color(deno_exe): print green_ok() +def exec_path_test(deno_exe): + cmd = [deno_exe, "tests/exec_path.ts"] + output = run_output(cmd) + assert deno_exe in output.strip() + + def main(argv): if len(argv) == 2: build_dir = sys.argv[1] @@ -59,6 +65,8 @@ def main(argv): deno_exe = os.path.join(build_dir, "deno" + executable_suffix) check_exists(deno_exe) + exec_path_test(deno_exe) + # Internal tools testing run([ "node", "./node_modules/.bin/ts-node", "--project",