diff '--color=auto' -ur kicad-8.0.5.orig/3d-viewer/3d_cache/3d_cache.cpp kicad-8.0.5/3d-viewer/3d_cache/3d_cache.cpp --- kicad-8.0.5.orig/3d-viewer/3d_cache/3d_cache.cpp 2024-09-06 18:28:40.000000000 +0200 +++ kicad-8.0.5/3d-viewer/3d_cache/3d_cache.cpp 2024-11-05 11:40:58.773367999 +0100 @@ -381,7 +381,13 @@ fclose( fp ); unsigned int digest[5]; - dblock.get_digest( digest ); + // V8 only + // Boost 1.86 and later changed digest_type from uchar[20] from int[5] + // But KiCad 8.99 and later use MurmurHash3 here, so just do a fairly ugly cast to keep + // this going for another few months. + static_assert( sizeof( digest ) == sizeof( boost::uuids::detail::sha1::digest_type& ), + "SHA1 digest size mismatch" ); + dblock.get_digest( reinterpret_cast( digest ) ); // ensure MSB order for( int i = 0; i < 5; ++i ) diff '--color=auto' -ur kicad-8.0.5.orig/common/kiid.cpp kicad-8.0.5/common/kiid.cpp --- kicad-8.0.5.orig/common/kiid.cpp 2024-09-06 18:28:40.000000000 +0200 +++ kicad-8.0.5/common/kiid.cpp 2024-11-05 11:40:49.030394379 +0100 @@ -25,9 +25,9 @@ #include +#include #include #include -#include #if BOOST_VERSION >= 106700 #include @@ -235,15 +235,7 @@ size_t KIID::Hash() const { - size_t hash = 0; - - // Note: this is NOT little-endian/big-endian safe, but as long as it's just used - // at runtime it won't matter. - - for( int i = 0; i < 4; ++i ) - boost::hash_combine( hash, reinterpret_cast( m_uuid.data )[i] ); - - return hash; + return boost::uuids::hash_value( m_uuid ); }