From f7c928c39f886648136133c926b2338c83e0c15a Mon Sep 17 00:00:00 2001 From: Alex Vergara Date: Mon, 24 Jun 2024 19:49:39 +0200 Subject: [PATCH] feat(system_headers): Avoiding check the fs for system headers to see if they are already built if there's no header declared by the user. This closes #116 --- zork++/src/lib/cache/mod.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/zork++/src/lib/cache/mod.rs b/zork++/src/lib/cache/mod.rs index 3b235d84..f0e99812 100644 --- a/zork++/src/lib/cache/mod.rs +++ b/zork++/src/lib/cache/mod.rs @@ -12,6 +12,7 @@ use std::{ fs::File, path::{Path, PathBuf}, }; +use std::borrow::Cow; use crate::bounds::TranslationUnit; use crate::cache::compile_commands::CompileCommands; @@ -148,7 +149,8 @@ impl<'a> ZorkCache<'a> { msvc::load_metadata(self, program_data)? } - if compiler != CppCompiler::MSVC { + if compiler != CppCompiler::MSVC && helpers::user_declared_system_headers_to_build(program_data) + { let i = Self::track_system_modules(program_data); self.compilers_metadata.system_modules.clear(); self.compilers_metadata.system_modules.extend(i); @@ -543,3 +545,16 @@ mod msvc { Ok(env_vars) } } + +mod helpers { + use std::borrow::Cow; + use crate::project_model::ZorkModel; + + pub(crate) fn user_declared_system_headers_to_build(program_data: &ZorkModel<'_>) -> bool { + program_data + .modules + .as_ref() + .map(|mods| mods.sys_modules.as_ref()) + .is_some_and(|sys_modules: &Vec>| !sys_modules.is_empty()) + } +}