From ccb5e15ac27346f8f4de1b3aeda834f0bc417da8 Mon Sep 17 00:00:00 2001 From: Thaddeus Crews Date: Fri, 5 Apr 2024 10:49:44 -0500 Subject: [PATCH] SCons: Ensure *all* generated files can be cleaned --- methods.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/methods.py b/methods.py index 7af621befc6..e65d2757bd3 100644 --- a/methods.py +++ b/methods.py @@ -228,7 +228,32 @@ def get_version_info(module_version_string="", silent=False): return version_info +_cleanup_env = None +_cleanup_bool = False + + def write_file_if_needed(path, string): + """Generates a file only if it doesn't already exist or the content has changed. + + Utilizes a dedicated SCons environment to ensure the files are properly removed + during cleanup; will not attempt to create files during cleanup. + + - `path` - Path to the file in question; used to create cleanup logic. + - `string` - Content to compare against an existing file. + """ + global _cleanup_env + global _cleanup_bool + + if _cleanup_env is None: + from SCons.Environment import Environment + + _cleanup_env = Environment() + _cleanup_bool = _cleanup_env.GetOption("clean") + + _cleanup_env.Clean("#", path) + if _cleanup_bool: + return + try: with open(path, "r", encoding="utf-8", newline="\n") as f: if f.read() == string: