From dc4c31eb50a0abec7be55daf08491f979a72fc85 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Fri, 9 Apr 2021 14:15:58 -0700 Subject: [PATCH] Build using relative path in repo if Windows lost symlink --- serde_derive_internals/build.rs | 12 ++++++++++++ serde_derive_internals/lib.rs | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 serde_derive_internals/build.rs diff --git a/serde_derive_internals/build.rs b/serde_derive_internals/build.rs new file mode 100644 index 00000000..b2a2d04a --- /dev/null +++ b/serde_derive_internals/build.rs @@ -0,0 +1,12 @@ +use std::path::Path; + +fn main() { + // Sometimes on Windows the git checkout does not correctly wire up the + // symlink from serde_derive_internals/src to serde_derive/src/internals. + // When this happens we'll just build based on relative paths within the git + // repo. + let mod_behind_symlink = Path::new("src/mod.rs"); + if !mod_behind_symlink.exists() { + println!("cargo:rustc-cfg=serde_build_from_git"); + } +} diff --git a/serde_derive_internals/lib.rs b/serde_derive_internals/lib.rs index 2e36229b..5c5abdff 100644 --- a/serde_derive_internals/lib.rs +++ b/serde_derive_internals/lib.rs @@ -40,7 +40,8 @@ extern crate syn; extern crate proc_macro2; extern crate quote; -#[path = "src/mod.rs"] +#[cfg_attr(serde_build_from_git, path = "../serde_derive/src/internals/mod.rs")] +#[cfg_attr(not(serde_build_from_git), path = "src/mod.rs")] mod internals; pub use internals::*;