Merge pull request #1294 from bytecodealliance/pch/wiggle_relative_paths
wiggle: make paths relative to use site of macro
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use proc_macro2::Span;
|
use proc_macro2::Span;
|
||||||
use syn::{
|
use syn::{
|
||||||
@@ -78,24 +78,24 @@ pub struct WitxConf {
|
|||||||
pub paths: Vec<PathBuf>,
|
pub paths: Vec<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl WitxConf {
|
||||||
|
pub fn make_paths_relative_to<P: AsRef<Path>>(&mut self, root: P) {
|
||||||
|
self.paths.iter_mut().for_each(|p| {
|
||||||
|
if !p.is_absolute() {
|
||||||
|
*p = PathBuf::from(root.as_ref()).join(p.clone());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Parse for WitxConf {
|
impl Parse for WitxConf {
|
||||||
fn parse(input: ParseStream) -> Result<Self> {
|
fn parse(input: ParseStream) -> Result<Self> {
|
||||||
let content;
|
let content;
|
||||||
let _ = bracketed!(content in input);
|
let _ = bracketed!(content in input);
|
||||||
let path_lits: Punctuated<LitStr, Token![,]> = content.parse_terminated(Parse::parse)?;
|
let path_lits: Punctuated<LitStr, Token![,]> = content.parse_terminated(Parse::parse)?;
|
||||||
let paths: Vec<PathBuf> = path_lits
|
let paths = path_lits
|
||||||
.iter()
|
.iter()
|
||||||
.map(|lit| {
|
.map(|lit| PathBuf::from(lit.value()))
|
||||||
let p = PathBuf::from(lit.value());
|
|
||||||
if p.is_absolute() {
|
|
||||||
p
|
|
||||||
} else {
|
|
||||||
let mut root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
|
|
||||||
root.pop();
|
|
||||||
root.pop();
|
|
||||||
root.join(p)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect();
|
.collect();
|
||||||
Ok(WitxConf { paths })
|
Ok(WitxConf { paths })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ use syn::parse_macro_input;
|
|||||||
|
|
||||||
#[proc_macro]
|
#[proc_macro]
|
||||||
pub fn from_witx(args: TokenStream) -> TokenStream {
|
pub fn from_witx(args: TokenStream) -> TokenStream {
|
||||||
let config = parse_macro_input!(args as wiggle_generate::Config);
|
let mut config = parse_macro_input!(args as wiggle_generate::Config);
|
||||||
|
config.witx.make_paths_relative_to(
|
||||||
|
std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR env var"),
|
||||||
|
);
|
||||||
let doc = witx::load(&config.witx.paths).expect("loading witx");
|
let doc = witx::load(&config.witx.paths).expect("loading witx");
|
||||||
TokenStream::from(wiggle_generate::generate(&doc, &config))
|
TokenStream::from(wiggle_generate::generate(&doc, &config))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user