diff --git a/spine-godot/SConstruct b/spine-godot/SConstruct index 14c6b596e..1e405f98f 100644 --- a/spine-godot/SConstruct +++ b/spine-godot/SConstruct @@ -66,7 +66,7 @@ Run the following command to download godot-cpp: env = SConscript("godot-cpp/SConstruct", {"env": env, "customs": customs}) -env.Append(CPPDEFINES=["SPINE_GODOT_EXTENSION", "_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR"]) +env.Append(CPPDEFINES=["SPINE_GODOT_EXTENSION"]) env.Append(CPPPATH=["spine_godot", "spine_godot/spine-cpp/include"]) # sources = Glob("spine_godot/*.cpp") + Glob("spine_godot/spine-cpp/src/spine/*.cpp") diff --git a/spine-godot/build/setup.sh b/spine-godot/build/setup.sh index 748300d3e..0f9d3b79c 100755 --- a/spine-godot/build/setup.sh +++ b/spine-godot/build/setup.sh @@ -45,6 +45,7 @@ fi pushd .. rm -rf godot git clone --depth 1 $repo -b $branch + if [ $dev = "true" ]; then cp build/custom.py godot if [ "$mono" = "true" ]; then @@ -60,6 +61,14 @@ if [ $dev = "true" ]; then fi fi cp -r ../spine-cpp/spine-cpp spine_godot + +# Apply patch for 4.3-stable, see https://github.com/godotengine/godot/issues/95861/#issuecomment-2486021565 +if [ "$branch" = "4.3-stable" ]; then + pushd godot + cp ../build/thorvg-4.3-stable.patch thirdparty/thorvg/src/common/tvgLock.h + popd +fi + popd popd > /dev/null \ No newline at end of file diff --git a/spine-godot/build/thorvg-4.3-stable.patch b/spine-godot/build/thorvg-4.3-stable.patch new file mode 100644 index 000000000..d3a4e41c5 --- /dev/null +++ b/spine-godot/build/thorvg-4.3-stable.patch @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2024 the ThorVG project. All rights reserved. + + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _TVG_LOCK_H_ +#define _TVG_LOCK_H_ + +#ifdef THORVG_THREAD_SUPPORT + +#include +#include "tvgTaskScheduler.h" + +namespace tvg { + + struct Key + { + std::mutex mtx; + }; + + struct ScopedLock + { + Key* key = nullptr; + + ScopedLock(Key& k) + { + if (TaskScheduler::threads() > 0) { + k.mtx.lock(); + key = &k; + } + } + + ~ScopedLock() + { + if (TaskScheduler::threads() > 0) { + key->mtx.unlock(); + } + } + }; + +} + +#else //THORVG_THREAD_SUPPORT + +namespace tvg { + + struct Key {}; + + struct ScopedLock + { + ScopedLock(Key& key) {} + }; + +} + +#endif //THORVG_THREAD_SUPPORT + +#endif //_TVG_LOCK_H_ +