summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUILD.gn19
-rw-r--r--build_extra/rust/get_cargo_info.cmd1
-rwxr-xr-xbuild_extra/rust/get_cargo_info.py14
-rw-r--r--build_extra/rust/run.py17
-rw-r--r--build_extra/rust/rust.gni8
-rw-r--r--src/version.rs3
6 files changed, 57 insertions, 5 deletions
diff --git a/BUILD.gn b/BUILD.gn
index f9b3afc08..921754ef1 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -119,12 +119,25 @@ group("deno_deps") {
]
}
+# Reads the cargo info from Cargo.toml
+deno_cargo_info = exec_script("build_extra/rust/get_cargo_info.py",
+ [ rebase_path("Cargo.toml", root_build_dir) ],
+ "json")
+
rust_executable("deno") {
source_root = "src/main.rs"
extern = main_extern
deps = [
":deno_deps",
]
+
+ # Extract version from Cargo.toml
+ # TODO integrate this into rust.gni by allowing the rust_executable template
+ # to specify a cargo.toml from which it will extract a version.
+ crate_version = deno_cargo_info.version
+ inputs = [
+ "Cargo.toml",
+ ]
}
rust_test("test_rs") {
@@ -133,6 +146,12 @@ rust_test("test_rs") {
deps = [
":deno_deps",
]
+
+ # Extract version from Cargo.toml
+ crate_version = deno_cargo_info.version
+ inputs = [
+ "Cargo.toml",
+ ]
}
rust_executable("hyper_hello") {
diff --git a/build_extra/rust/get_cargo_info.cmd b/build_extra/rust/get_cargo_info.cmd
new file mode 100644
index 000000000..9d5ce12a1
--- /dev/null
+++ b/build_extra/rust/get_cargo_info.cmd
@@ -0,0 +1 @@
+@"%PYTHON_EXE%" "%~dpn0.py" %*
diff --git a/build_extra/rust/get_cargo_info.py b/build_extra/rust/get_cargo_info.py
new file mode 100755
index 000000000..43c964ab7
--- /dev/null
+++ b/build_extra/rust/get_cargo_info.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+# Copyright 2018 the Deno authors. All rights reserved. MIT license.
+
+import sys
+import re
+
+# Read the package version from Cargo.toml and output as json
+cargo_toml_path = sys.argv[1]
+
+for line in open(cargo_toml_path):
+ match = re.search('version = "(.*)"', line)
+ if match:
+ print('{"version": "' + match.group(1) + '"}')
+ break
diff --git a/build_extra/rust/run.py b/build_extra/rust/run.py
index 3a86c423c..dc89c09a1 100644
--- a/build_extra/rust/run.py
+++ b/build_extra/rust/run.py
@@ -1,13 +1,24 @@
#!/usr/bin/env python
-# This file just executes its arguments, except that also adds GN_OUT_DIR to the
-# environ. This is for compatibility with cargo.
+# This file just executes its arguments, except that also adds GN_OUT_DIR and
+# CARGO_PKG_VERSION to the environ. This is for compatibility with cargo.
import subprocess
import sys
import os
+import re
# This is for src/msg.rs to know where to find msg_generated.rs.
# When building with Cargo this variable is set by build.rs.
os.environ["GN_OUT_DIR"] = os.path.abspath(".")
assert os.path.isdir(os.environ["GN_OUT_DIR"])
-sys.exit(subprocess.call(sys.argv[1:]))
+# Set the CARGO_PKG_VERSION env variable if provided as an argument
+# When building with Cargo this variable is set automatically
+args = sys.argv[1:]
+for i, arg in enumerate(args):
+ match = re.search('--cargo-pkg-version="?([^"]*)"?', arg)
+ if match:
+ os.environ["CARGO_PKG_VERSION"] = match.group(1)
+ del args[i]
+ break
+
+sys.exit(subprocess.call(args))
diff --git a/build_extra/rust/rust.gni b/build_extra/rust/rust.gni
index 3263f0018..61731d21c 100644
--- a/build_extra/rust/rust.gni
+++ b/build_extra/rust/rust.gni
@@ -49,6 +49,7 @@ template("rust_crate") {
"crate_type",
"crate_version",
"deps",
+ "inputs",
"features",
"is_test",
"libs",
@@ -190,6 +191,13 @@ template("rust_crate") {
"--color=always",
]
+ if (defined(crate_version)) {
+ args += [
+ # This is used to set env variables for Cargo build compatibility
+ "--cargo-pkg-version=$crate_version",
+ ]
+ }
+
if (is_debug) {
args += [ "-g" ]
}
diff --git a/src/version.rs b/src/version.rs
index 85238749e..0d4c7b953 100644
--- a/src/version.rs
+++ b/src/version.rs
@@ -2,8 +2,7 @@
use libdeno;
use std::ffi::CStr;
-// TODO Extract this version string from Cargo.toml.
-pub const DENO: &str = "0.2.2";
+pub const DENO: &str = env!("CARGO_PKG_VERSION");
pub fn v8() -> &'static str {
let version = unsafe { libdeno::deno_v8_version() };