Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(capture_webrender): write webrender revision into text #20320

Merged
merged 5 commits into from Mar 23, 2018
Merged

refactor(build): generate revision via build.rs

  • Loading branch information
kwonoj committed Mar 23, 2018
commit f9230975f54c3777219ba09d784557b3841f7acc

Some generated files are not rendered by default. Learn more.

@@ -4,6 +4,7 @@ version = "0.0.1"
authors = ["The Servo Project Developers"]
license = "MPL-2.0"
publish = false
build = "build.rs"

[lib]
name = "compositing"
@@ -29,3 +30,6 @@ style_traits = {path = "../style_traits"}
time = "0.1.17"
webrender = {git = "https://github.com/servo/webrender", features = ["capture"]}
webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]}

[build-dependencies]
toml = "0.4.5"
@@ -0,0 +1,65 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

extern crate toml;

use std::env;
use std::fs::File;
use std::io::{Read, Write};

const WEBRENDER_REVISION_TEMPLATE: &'static str =
"/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/// auto-generated by cargo. do not manually modify.
pub const REVISION: &'static str = ";

fn main() {
let current_path = env::current_dir().expect("Failed to access path to lockfile");
let lockfile_path = current_path.join("..").join("..").join("Cargo.lock");
let revision_file_path = current_path.join("webrender_revision.rs");

This comment has been minimized.

@jdm

jdm Mar 19, 2018

Member

Rather than creating a file in the source directory, we should use the OUT_DIR environment variable and then include the file like this.

This comment has been minimized.

@kwonoj

kwonoj Mar 19, 2018

Author Contributor

that sounds legit.


let mut existing_revision_exported = String::new();
match File::open(&revision_file_path) {
Ok(mut f) => {
f.read_to_string(&mut existing_revision_exported).unwrap_or_default();
},
Err(_) => ()
}

let mut lockfile = String::new();
File::open(lockfile_path).expect("Cannot open lockfile")
.read_to_string(&mut lockfile)
.expect("Failed to read lockfile");

match toml::from_str::<toml::value::Table>(&lockfile) {
Ok(result) => {
let packages = result.get("package").expect("Cargo lockfile should contain package list");

match *packages {
toml::Value::Array(ref arr) => {
let source = arr
.iter()
.find(|pkg| pkg.get("name").and_then(|name| name.as_str()).unwrap_or("") == "webrender")
.and_then(|pkg| pkg.get("source").and_then(|source| source.as_str()))
.unwrap_or("unknown");

let parsed: Vec<&str> = source.split("#").collect();
let revision = if parsed.len() > 1 { parsed[1] } else { source };

if let Some(_) = existing_revision_exported.find(revision) {
return
}

let revision_contents = format!("{}\"{}\";", WEBRENDER_REVISION_TEMPLATE, revision);
let mut revision_module_file = File::create(&revision_file_path).unwrap();
write!(&mut revision_module_file, "{}", revision_contents).unwrap();
},
_ => panic!("Cannot find package definitions in lockfile")
}
},
Err(e) => panic!(e)
}
}
@@ -213,36 +213,6 @@ def set_osmesa_env(bin_path, env):
return env


def generate_webrender_revision():
"""Read current package id of web render to generate revision"""

lockfile_path = path.join(os.getcwd(), "Cargo.lock")
if not os.path.isfile(lockfile_path):
return

with open(lockfile_path) as f:
lockfile = toml.loads(f.read())

webrender_revision = ""
for package in lockfile.get("package", []):
pkgName = package.get("name")
if ("webrender" == pkgName):
webrender_revision = package.get("source")

revision = '''/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/// auto-generated by mach. do not manually modify.
pub const REVISION: &'static str = \"%s\";''' % webrender_revision

compositor_path = os.path.join(os.getcwd(), "components", "compositing", "webrender_revision.rs")

revision_file = open(compositor_path, "w")
revision_file.write(revision)
revision_file.close()


class BuildNotFound(Exception):
def __init__(self, message):
self.message = message
@@ -690,8 +660,6 @@ def ensure_bootstrapped(self, target=None):
if "msvc" in target_platform:
Registrar.dispatch("bootstrap", context=self.context)

generate_webrender_revision()

self.context.bootstrapped = True

def ensure_clobbered(self, target_dir=None):
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.