Add build.rs with basic idea

This commit is contained in:
mario 2016-11-01 20:06:38 +01:00
parent 1db063f334
commit bf88a43a59
2 changed files with 56 additions and 0 deletions

View file

@ -13,6 +13,13 @@ documentation = "https://matthiasbeyer.github.io/imag/imag_documentation/index.h
repository = "https://github.com/matthiasbeyer/imag"
homepage = "http://imag-pim.org"
build = "build.rs"
[build-dependencies]
clap = ">=2.16.1"
libimagrt = { path = "../libimagrt" }
version = "2.0"
[profile.dev]
codegen-units = 2

49
bin/build.rs Normal file
View file

@ -0,0 +1,49 @@
extern crate clap;
extern crate libimagrt;
#[macro_use] extern crate version;
use clap::Shell;
use libimagrt::runtime::Runtime;
include!("../imag-store/src/ui.rs");
macro_rules! gen_types_buildui {
($(($p:expr, $n:ident)$(,)*)*) => (
trait _buildui_fn_type_trait {
fn build_ui<'a>(app : App<'a, 'a>) -> App<'a, 'a>;
}
$(
struct $n;
impl $n {
pub fn new() -> Self {
{}
}
}
impl _buildui_fn_type_trait for $n {
include!($p);
}
)*
)
}
gen_types_buildui!(("../imag-store/src/ui.rs", imagstore), ("../imag-todo/src/ui.rs", imagtodo));
fn main() {
let mut app = Runtime::get_default_cli_builder(
"imag",
&version!()[..],
"imag foo bar");
let v = vec![("store", imagstore::new()), ("todo", imagtodo::new())];
for (name, obj) in v {
app
.subcommand(
obj::build_ui(Runtime::get_default_cli_builder(
name,
&version!()[..],
name)));
}
app.gen_completions("imag", Shell::Bash, env!("OUT_DIR"));
app.gen_completions("imag", Shell::Fish, env!("OUT_DIR"));
app.gen_completions("imag", Shell::Zsh, env!("OUT_DIR"));
}