From 6f457a4e7ef8f46a824c6ec17decca16b2a9d3f4 Mon Sep 17 00:00:00 2001 From: Tahir Date: Sat, 4 Feb 2023 19:24:43 +0000 Subject: [PATCH] scripts: write a temp file when building modules so watchdog waits --- src/scripts/CMakeLists.txt | 4 ++++ src/world/Script/ScriptLoader.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/scripts/CMakeLists.txt b/src/scripts/CMakeLists.txt index f32c5082..39f05dff 100644 --- a/src/scripts/CMakeLists.txt +++ b/src/scripts/CMakeLists.txt @@ -64,11 +64,15 @@ foreach(_scriptDir ${children}) COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.exp" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.lib" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.ilk" + COMMAND ${CMAKE_COMMAND} -E touch ${SCRIPT_POSTBUILD_DIR}/${ScriptTargetName}.dll_LOCK COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SCRIPT_LIB_DIR}/script_${_name}.dll" ${SCRIPT_POSTBUILD_DIR}/${ScriptTargetName}.dll + COMMAND ${CMAKE_COMMAND} -E remove ${SCRIPT_POSTBUILD_DIR}/${ScriptTargetName}.dll_LOCK ) else() add_custom_command(TARGET "script_${_name}" POST_BUILD + COMMAND ${CMAKE_COMMAND} -E touch ${SCRIPT_POSTBUILD_DIR}/$_LOCK COMMAND ${CMAKE_COMMAND} -E copy_if_different $ ${SCRIPT_POSTBUILD_DIR} + COMMAND ${CMAKE_COMMAND} -E remove ${SCRIPT_POSTBUILD_DIR}/$_LOCK ) endif() diff --git a/src/world/Script/ScriptLoader.cpp b/src/world/Script/ScriptLoader.cpp index 9e42af29..59d36ea6 100644 --- a/src/world/Script/ScriptLoader.cpp +++ b/src/world/Script/ScriptLoader.cpp @@ -74,6 +74,10 @@ Sapphire::Scripting::ScriptInfo* Sapphire::Scripting::ScriptLoader::loadModule( fs::create_directories( cacheDir ); fs::path dest( cacheDir /= f.filename().string() ); + // make sure the module has finished building before trying to copy it + if( fs::exists( f.string() + "_LOCK" ) ) + return nullptr; + try { fs::copy_file( f, dest, fs::copy_options::overwrite_existing );