follow build.rs output rules better... even though spurious recompiles

still happen. :(
This commit is contained in:
Dustin Carlino 2018-12-20 10:07:27 -08:00
parent e51a8efbc3
commit 999c4e6975
5 changed files with 14 additions and 163 deletions

View File

@ -1,11 +1,16 @@
use std::env;
use std::path::Path;
use std::process::Command;
fn main() {
let output = Path::new(&env::var("OUT_DIR").unwrap()).join("init_colors.rs");
// TODO Argh, this runs even when nothing in the editor crate has changed! Constant
// recompilation. :(
assert!(Command::new("/usr/bin/python2")
.args(&["extract_colorscheme.py"])
.args(&["extract_colorscheme.py", output.to_str().unwrap()])
.status()
.unwrap()
.success());
//println!("cargo:rerun-if-changed=build.rs");
}

View File

@ -2,6 +2,7 @@
import os
import subprocess
import sys
def run():
mapping = {}
@ -14,21 +15,14 @@ def run():
raise ValueError('Color {} defined twice'.format(k))
mapping[k] = v
with open('src/init_colors.rs', 'w') as f:
f.write('// AUTOGENERATED! Do not modify.\n')
f.write('\n')
f.write('use ezgui::Color;\n')
f.write('use std::collections::HashMap;\n')
f.write('\n')
f.write('pub fn default_colors() -> HashMap<String, Color> {\n')
with open(sys.argv[1], 'w') as f:
f.write('fn default_colors() -> HashMap<String, Color> {\n')
f.write(' let mut m = HashMap::new();\n')
for k in sorted(mapping.iterkeys()):
f.write(' m.insert("{}".to_string(), {});\n'.format(k, mapping[k]))
f.write(' m\n')
f.write('}\n')
subprocess.call(['rustfmt', 'src/init_colors.rs'])
def read_file(filename):
entries = []

View File

@ -1,4 +1,3 @@
use crate::init_colors;
use abstutil;
use ezgui::Color;
use serde_derive::{Deserialize, Serialize};
@ -20,7 +19,7 @@ struct ModifiedColors {
impl ColorScheme {
pub fn load() -> Result<ColorScheme, Error> {
let modified: ModifiedColors = abstutil::read_json("color_scheme")?;
let mut map: HashMap<String, Color> = init_colors::default_colors();
let mut map: HashMap<String, Color> = default_colors();
for (name, c) in &modified.map {
map.insert(name.clone(), *c);
}
@ -33,7 +32,7 @@ impl ColorScheme {
}
// Get, but specify the default inline. The default is extracted before compilation by a script
// and used to generate init_colors.rs.
// and used to generate default_colors().
pub fn get_def(&self, name: &str, _default: Color) -> Color {
self.map[name]
}
@ -65,8 +64,9 @@ impl ColorScheme {
} else {
self.modified.map.remove(name);
// Restore the original default.
self.map
.insert(name.to_string(), init_colors::default_colors()[name]);
self.map.insert(name.to_string(), default_colors()[name]);
}
}
}
include!(concat!(env!("OUT_DIR"), "/init_colors.rs"));

View File

@ -1,147 +0,0 @@
// AUTOGENERATED! Do not modify.
use ezgui::Color;
use std::collections::HashMap;
pub fn default_colors() -> HashMap<String, Color> {
let mut m = HashMap::new();
m.insert("OSM house".to_string(), Color::GREEN);
m.insert("OSM motorway".to_string(), Color::rgb(231, 141, 159));
m.insert("OSM primary".to_string(), Color::rgb(252, 213, 160));
m.insert("OSM residential".to_string(), Color::rgb(254, 254, 254));
m.insert("OSM secondary".to_string(), Color::rgb(252, 213, 160));
m.insert("OSM trunk".to_string(), Color::rgb(249, 175, 152));
m.insert("banned turn".to_string(), Color::BLACK);
m.insert("bike lane".to_string(), Color::rgb(15, 125, 75));
m.insert(
"bike stopping buffer".to_string(),
Color::rgba(255, 0, 0, 0.7),
);
m.insert("blinker on".to_string(), Color::BLACK);
m.insert("border intersection".to_string(), Color::rgb(50, 205, 50));
m.insert("broken lane".to_string(), Color::rgb_f(1.0, 0.0, 0.565));
m.insert("building".to_string(), Color::rgba_f(0.7, 0.7, 0.7, 0.8));
m.insert("building boundary".to_string(), Color::rgb(0, 100, 0));
m.insert("building path".to_string(), Color::grey(0.6));
m.insert("bus lane".to_string(), Color::rgb(190, 74, 76));
m.insert(
"bus stop marking".to_string(),
Color::rgba(220, 160, 220, 0.8),
);
m.insert(
"car stopping buffer".to_string(),
Color::rgba(255, 0, 0, 0.7),
);
m.insert("car window".to_string(), Color::BLACK);
m.insert("chokepoint".to_string(), Color::RED);
m.insert("crosswalk".to_string(), Color::WHITE);
m.insert("crosswalk turn".to_string(), Color::WHITE);
m.insert(
"current cycle in signal editor panel".to_string(),
Color::BLUE.alpha(0.95),
);
m.insert("current selected turn".to_string(), Color::RED);
m.insert("dashed lane line".to_string(), Color::WHITE);
m.insert("debug bike".to_string(), Color::rgba(0, 0, 255, 0.8));
m.insert("debug car".to_string(), Color::rgba(0, 0, 255, 0.8));
m.insert("debug line".to_string(), Color::RED);
m.insert(
"debug line endpoint".to_string(),
Color::rgb_f(0.8, 0.1, 0.1),
);
m.insert("diff agents line".to_string(), Color::YELLOW);
m.insert("driving lane".to_string(), Color::BLACK);
m.insert("extra shape".to_string(), Color::CYAN);
m.insert("inactive turn icon".to_string(), Color::grey(0.7));
m.insert("left turn".to_string(), Color::RED);
m.insert("map background".to_string(), Color::rgb(242, 239, 233));
m.insert("moving bike".to_string(), Color::GREEN);
m.insert("moving car".to_string(), Color::CYAN);
m.insert("neighborhood last placed point".to_string(), Color::GREEN);
m.insert("neighborhood point".to_string(), Color::RED);
m.insert("neighborhood point to move".to_string(), Color::CYAN);
m.insert(
"neighborhood polygon".to_string(),
Color::rgba(0, 0, 255, 0.6),
);
m.insert("next to visit in floodfill".to_string(), Color::GREEN);
m.insert("parcel boundary".to_string(), Color::grey(0.3));
m.insert("park area".to_string(), Color::GREEN);
m.insert("parked car".to_string(), Color::rgb(180, 233, 76));
m.insert("parking lane".to_string(), Color::grey(0.2));
m.insert("parking line".to_string(), Color::WHITE);
m.insert("pedestrian".to_string(), Color::rgb_f(0.2, 0.7, 0.7));
m.insert(
"pedestrian preparing bike".to_string(),
Color::rgb(255, 0, 144),
);
m.insert("pedestrian turn arrow".to_string(), Color::CYAN);
m.insert(
"primary agent route".to_string(),
Color::rgba(255, 0, 0, 0.5),
);
m.insert("priority stop sign turn".to_string(), Color::GREEN);
m.insert("priority turn in current cycle".to_string(), Color::GREEN);
m.insert("queued in floodfill".to_string(), Color::RED);
m.insert("right turn".to_string(), Color::GREEN);
m.insert("road center line".to_string(), Color::YELLOW);
m.insert("route".to_string(), Color::rgba(255, 0, 0, 0.8));
m.insert("search result".to_string(), Color::RED);
m.insert(
"secondary agent route".to_string(),
Color::rgba(0, 0, 255, 0.5),
);
m.insert("selected".to_string(), Color::BLUE);
m.insert("selected turn icon".to_string(), Color::BLUE.alpha(0.5));
m.insert("shared sidewalk corner turn".to_string(), Color::BLACK);
m.insert("sidewalk".to_string(), Color::grey(0.8));
m.insert("sidewalk corner".to_string(), Color::grey(0.7));
m.insert("sidewalk lines".to_string(), Color::grey(0.7));
m.insert("signal editor panel".to_string(), Color::BLACK.alpha(0.95));
m.insert("signal overtime timer".to_string(), Color::PINK);
m.insert(
"something associated with something else".to_string(),
Color::PURPLE,
);
m.insert("stop line for lane".to_string(), Color::RED);
m.insert("stop sign background".to_string(), Color::RED);
m.insert("stop sign priority turns".to_string(), Color::GREEN);
m.insert("stop sign stop crosswalk".to_string(), Color::RED);
m.insert("stop sign stop turns".to_string(), Color::RED.alpha(0.8));
m.insert("stop sign yield crosswalk".to_string(), Color::YELLOW);
m.insert(
"stop sign yield turns".to_string(),
Color::YELLOW.alpha(0.8),
);
m.insert("stop turn".to_string(), Color::RED);
m.insert("straight turn".to_string(), Color::BLUE);
m.insert("stuck bike".to_string(), Color::RED);
m.insert("stuck car".to_string(), Color::RED);
m.insert("swamp area".to_string(), Color::rgb_f(0.0, 1.0, 0.6));
m.insert("timer background".to_string(), Color::BLACK);
m.insert("timer foreground".to_string(), Color::RED);
m.insert("traffic signal box".to_string(), Color::BLACK);
m.insert("traffic signal green".to_string(), Color::GREEN);
m.insert("traffic signal red".to_string(), Color::RED);
m.insert("traffic signal yellow".to_string(), Color::YELLOW);
m.insert("turn icon circle".to_string(), Color::grey(0.3));
m.insert("turn not in current cycle".to_string(), Color::BLACK);
m.insert("turn restrictions on lane".to_string(), Color::WHITE);
m.insert(
"turns allowed with yielding by traffic signal right now".to_string(),
Color::rgba(255, 105, 180, 0.8),
);
m.insert(
"turns protected by traffic signal right now".to_string(),
Color::GREEN,
);
m.insert("unchanged intersection".to_string(), Color::grey(0.6));
m.insert("visited in floodfill".to_string(), Color::BLUE);
m.insert("water area".to_string(), Color::BLUE);
m.insert("yield stop sign turn".to_string(), Color::YELLOW);
m.insert(
"yield turn in current cycle".to_string(),
Color::rgb(255, 105, 180),
);
m
}

View File

@ -4,7 +4,6 @@
mod macros;
mod colors;
mod init_colors;
mod objects;
mod plugins;
mod render;