From 40d6daf8240f9dc090c23f975488c424b88f120f Mon Sep 17 00:00:00 2001 From: Goffert van Gool Date: Thu, 13 Dec 2018 22:16:58 +0100 Subject: [PATCH] Read version from Cargo.toml (#1267) --- BUILD.gn | 19 +++++++++++++++++++ build_extra/rust/get_cargo_info.cmd | 1 + build_extra/rust/get_cargo_info.py | 14 ++++++++++++++ build_extra/rust/run.py | 17 ++++++++++++++--- build_extra/rust/rust.gni | 8 ++++++++ src/version.rs | 3 +-- 6 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 build_extra/rust/get_cargo_info.cmd create mode 100755 build_extra/rust/get_cargo_info.py diff --git a/BUILD.gn b/BUILD.gn index f9b3afc081..921754ef18 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 0000000000..9d5ce12a16 --- /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 0000000000..43c964ab76 --- /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 3a86c423c0..dc89c09a1f 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 3263f0018f..61731d21c7 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 85238749e1..0d4c7b9535 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() };