aboutsummaryrefslogtreecommitdiff
path: root/mingling_core/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'mingling_core/src/lib.rs')
-rw-r--r--mingling_core/src/lib.rs27
1 files changed, 25 insertions, 2 deletions
diff --git a/mingling_core/src/lib.rs b/mingling_core/src/lib.rs
index 14559ed..ac6449f 100644
--- a/mingling_core/src/lib.rs
+++ b/mingling_core/src/lib.rs
@@ -102,8 +102,6 @@ pub mod pathf {
pub use mingling_pathf::pattern_analyzer::*;
pub use mingling_pathf::patterns::*;
- pub use mingling_pathf::analyze_and_build_type_mapping;
-
use std::path::Path;
/// Wraps `analyze_and_build_type_mapping_for` with config derived from
@@ -117,4 +115,29 @@ pub mod pathf {
};
mingling_pathf::analyze_and_build_type_mapping_for(crate_dir, output_dir, &config)
}
+
+ /// Wraps `analyze_and_build_type_mapping` (build.rs convenience) with config.
+ pub fn analyze_and_build_type_mapping() -> Result<(), crate::error::MinglingPathfinderError> {
+ let config = mingling_pathf::config::PathfinderConfig {
+ use_dispatch_tree: cfg!(feature = "dispatch_tree"),
+ };
+ let crate_dir =
+ std::env::current_dir().map_err(crate::error::MinglingPathfinderError::IoError)?;
+ let crate_name = std::env::var("CARGO_PKG_NAME").map_err(|_| {
+ crate::error::MinglingPathfinderError::IoError(std::io::Error::new(
+ std::io::ErrorKind::NotFound,
+ "CARGO_PKG_NAME not set",
+ ))
+ })?;
+ let out_dir = std::env::var("OUT_DIR").map_err(|_| {
+ crate::error::MinglingPathfinderError::IoError(std::io::Error::new(
+ std::io::ErrorKind::NotFound,
+ "OUT_DIR not set",
+ ))
+ })?;
+ let output_dir = Path::new(&out_dir).join(&crate_name);
+ mingling_pathf::analyze_and_build_type_mapping_for(&crate_dir, &output_dir, &config)?;
+ println!("cargo:rerun-if-changed=src/");
+ Ok(())
+ }
}