diff --git a/boost.patch b/boost.patch new file mode 100644 index 0000000..4d3de11 --- /dev/null +++ b/boost.patch @@ -0,0 +1,233 @@ + +# HG changeset patch +# User Alain Mazy +# Date 1727274427 -7200 +# Node ID 2b429588de28773d4aa062b3eb78c64663d7cbd2 +# Parent 16df205057106f4246107cfe45710e56324007e8 +fix support for Boost 1.86 + +diff -r 16df20505710 -r 2b429588de28 OrthancFramework/Resources/CMake/BoostConfiguration.cmake +--- a/OrthancFramework/Resources/CMake/BoostConfiguration.cmake Tue Sep 24 09:26:42 2024 +0200 ++++ b/OrthancFramework/Resources/CMake/BoostConfiguration.cmake Wed Sep 25 16:27:07 2024 +0200 +@@ -91,10 +91,10 @@ + ## Parameters for static compilation of Boost + ## + +- set(BOOST_NAME boost_1_85_0) +- set(BOOST_VERSION 1.85.0) +- set(BOOST_BCP_SUFFIX bcpdigest-1.12.4) +- set(BOOST_MD5 "1017e9c8383efdea01c059a8d3cc4dda") ++ set(BOOST_NAME boost_1_86_0) ++ set(BOOST_VERSION 1.86.0) ++ set(BOOST_BCP_SUFFIX bcpdigest-1.12.5) ++ set(BOOST_MD5 "20b9c325c0dde830889ee75a9e64ded8") + set(BOOST_URL "https://orthanc.uclouvain.be/downloads/third-party-downloads/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz") + set(BOOST_SOURCES_DIR ${CMAKE_BINARY_DIR}/${BOOST_NAME}) + +@@ -115,7 +115,7 @@ + if (FirstRun) + execute_process( + COMMAND ${PATCH_EXECUTABLE} -p0 -N -i +- ${CMAKE_CURRENT_LIST_DIR}/../Patches/boost-1.85.0-emscripten.patch ++ ${CMAKE_CURRENT_LIST_DIR}/../Patches/boost-1.86.0-emscripten.patch + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE Failure + ) +diff -r 16df20505710 -r 2b429588de28 OrthancFramework/Resources/CMake/BoostConfiguration.sh +--- a/OrthancFramework/Resources/CMake/BoostConfiguration.sh Tue Sep 24 09:26:42 2024 +0200 ++++ b/OrthancFramework/Resources/CMake/BoostConfiguration.sh Wed Sep 25 16:27:07 2024 +0200 +@@ -27,9 +27,10 @@ + ## - Orthanc 1.12.2: Boost 1.83.0 + ## - Orthanc 1.12.3: Boost 1.84.0 + ## - Orthanc > 1.12.3: Boost 1.85.0 ++## - Orthanc 1.12.5: Boost 1.86.0 + +-BOOST_VERSION=1_85_0 +-ORTHANC_VERSION=1.12.4 ++BOOST_VERSION=1_86_0 ++ORTHANC_VERSION=1.12.5 + + rm -rf /tmp/boost_${BOOST_VERSION} + rm -rf /tmp/bcp/boost_${BOOST_VERSION} +diff -r 16df20505710 -r 2b429588de28 OrthancFramework/Resources/Patches/boost-1.86.0-emscripten.patch +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/OrthancFramework/Resources/Patches/boost-1.86.0-emscripten.patch Wed Sep 25 16:27:07 2024 +0200 +@@ -0,0 +1,127 @@ ++diff -urEb boost_1_86_0.orig/libs/locale/src/boost/locale/shared/date_time.cpp boost_1_86_0/libs/locale/src/boost/locale/shared/date_time.cpp ++--- boost_1_86_0.orig/libs/locale/src/boost/locale/shared/date_time.cpp 2024-09-25 15:46:01.000000000 +0200 +++++ boost_1_86_0/libs/locale/src/boost/locale/shared/date_time.cpp 2024-09-25 15:58:51.306131987 +0200 ++@@ -12,8 +12,10 @@ ++ #include ++ #include ++ #include ++-#include ++-#include +++#if !defined(__EMSCRIPTEN__) +++# include +++# include +++#endif ++ #include ++ ++ namespace boost { namespace locale { ++@@ -400,6 +402,7 @@ ++ return impl_->get_option(abstract_calendar::is_dst) != 0; ++ } ++ +++#if !defined(__EMSCRIPTEN__) ++ namespace time_zone { ++ boost::mutex& tz_mutex() ++ { ++@@ -422,7 +425,7 @@ ++ return boost::exchange(tz_id(), new_id); ++ } ++ } // namespace time_zone ++- +++#endif ++ }} // namespace boost::locale ++ ++ // boostinspect:nominmax ++diff -urEb boost_1_86_0.orig/libs/locale/src/boost/locale/shared/generator.cpp boost_1_86_0/libs/locale/src/boost/locale/shared/generator.cpp ++--- boost_1_86_0.orig/libs/locale/src/boost/locale/shared/generator.cpp 2024-09-25 15:46:01.000000000 +0200 +++++ boost_1_86_0/libs/locale/src/boost/locale/shared/generator.cpp 2024-09-25 16:00:07.756233916 +0200 ++@@ -7,8 +7,10 @@ ++ #include ++ #include ++ #include ++-#include ++-#include +++#if !defined(__EMSCRIPTEN__) +++# include +++# include +++#endif ++ #include ++ #include ++ #include ++@@ -21,8 +23,9 @@ ++ {} ++ ++ mutable std::map cached; +++#if !defined(__EMSCRIPTEN__) ++ mutable boost::mutex cached_lock; ++- +++#endif ++ category_t cats; ++ char_facet_t chars; ++ ++@@ -101,7 +104,9 @@ ++ std::locale generator::generate(const std::locale& base, const std::string& id) const ++ { ++ if(d->caching_enabled) { +++#if !defined(__EMSCRIPTEN__) ++ boost::unique_lock guard(d->cached_lock); +++#endif ++ const auto p = d->cached.find(id); ++ if(p != d->cached.end()) ++ return p->second; ++@@ -126,7 +131,9 @@ ++ result = backend->install(result, facet, char_facet_t::nochar); ++ } ++ if(d->caching_enabled) { +++#if !defined(__EMSCRIPTEN__) ++ boost::unique_lock guard(d->cached_lock); +++#endif ++ const auto p = d->cached.find(id); ++ if(p == d->cached.end()) ++ d->cached[id] = result; ++diff -urEb boost_1_86_0.orig/libs/locale/src/boost/locale/shared/localization_backend.cpp boost_1_86_0/libs/locale/src/boost/locale/shared/localization_backend.cpp ++--- boost_1_86_0.orig/libs/locale/src/boost/locale/shared/localization_backend.cpp 2024-09-25 15:46:01.000000000 +0200 +++++ boost_1_86_0/libs/locale/src/boost/locale/shared/localization_backend.cpp 2024-09-25 16:01:09.196820495 +0200 ++@@ -5,8 +5,10 @@ ++ // https://www.boost.org/LICENSE_1_0.txt ++ ++ #include ++-#include ++-#include +++#if !defined(__EMSCRIPTEN__) +++# include +++# include +++#endif ++ #include ++ #include ++ #include ++@@ -211,11 +213,13 @@ ++ return mgr; ++ } ++ +++#if !defined(__EMSCRIPTEN__) ++ boost::mutex& localization_backend_manager_mutex() ++ { ++ static boost::mutex the_mutex; ++ return the_mutex; ++ } +++#endif ++ localization_backend_manager& localization_backend_manager_global() ++ { ++ static localization_backend_manager the_manager = make_default_backend_mgr(); ++@@ -225,12 +229,16 @@ ++ ++ localization_backend_manager localization_backend_manager::global() ++ { +++#if !defined(__EMSCRIPTEN__) ++ boost::unique_lock lock(localization_backend_manager_mutex()); +++#endif ++ return localization_backend_manager_global(); ++ } ++ localization_backend_manager localization_backend_manager::global(const localization_backend_manager& in) ++ { +++#if !defined(__EMSCRIPTEN__) ++ boost::unique_lock lock(localization_backend_manager_mutex()); +++#endif ++ return exchange(localization_backend_manager_global(), in); ++ } ++ +diff -r 16df20505710 -r 2b429588de28 OrthancFramework/Sources/Toolbox.cpp +--- a/OrthancFramework/Sources/Toolbox.cpp Tue Sep 24 09:26:42 2024 +0200 ++++ b/OrthancFramework/Sources/Toolbox.cpp Wed Sep 25 16:27:07 2024 +0200 +@@ -812,14 +812,32 @@ + sha1.process_bytes(data, size); + } + ++#if BOOST_VERSION >= 108600 ++ unsigned char digest[20]; ++ ++ // Sanity check for the memory layout: A SHA-1 digest is 160 bits wide ++ assert(sizeof(digest) == (160 / 8)); ++ assert(sizeof(boost::uuids::detail::sha1::digest_type) == 20); ++ ++ // From Boost 1.86, digest_type is "unsigned char[20]" while it was "unsigned int[5]"" in previous versions. ++ // Always perform the cast even if it is useless for Boost < 1.86 ++ sha1.get_digest(digest); ++ ++ result.resize(8 * 5 + 4); ++ sprintf(&result[0], "%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x", ++ digest[0], digest[1], digest[2], digest[3], ++ digest[4], digest[5], digest[6], digest[7], ++ digest[8], digest[9], digest[10], digest[11], ++ digest[12], digest[13], digest[14], digest[15], ++ digest[16], digest[17], digest[18], digest[19]); ++ ++#else + unsigned int digest[5]; + // Sanity check for the memory layout: A SHA-1 digest is 160 bits wide + assert(sizeof(unsigned int) == 4 && sizeof(digest) == (160 / 8)); + assert(sizeof(boost::uuids::detail::sha1::digest_type) == 20); +- +- // From Boost 1.86, digest_type is "unsigned char[20]" while it was "unsigned int[5]"" in previous versions. +- // Always perform the cast even if it is useless for Boost < 1.86 +- sha1.get_digest(*(reinterpret_cast(digest))); ++ ++ sha1.get_digest(digest)); + + result.resize(8 * 5 + 4); + sprintf(&result[0], "%08x-%08x-%08x-%08x-%08x", +@@ -828,6 +846,9 @@ + digest[2], + digest[3], + digest[4]); ++ ++#endif ++ + } + + void Toolbox::ComputeSHA1(std::string& result, + diff --git a/orthanc.changes b/orthanc.changes index 68e7804..39d5879 100644 --- a/orthanc.changes +++ b/orthanc.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Sep 25 08:35:12 UTC 2024 - Axel Braun + +- toolbox.patch and boost.patch added to fix TW build + ------------------------------------------------------------------- Fri Jun 7 06:00:51 UTC 2024 - Axel Braun diff --git a/orthanc.spec b/orthanc.spec index 9dad390..d0fa7ec 100644 --- a/orthanc.spec +++ b/orthanc.spec @@ -39,7 +39,9 @@ Source12: https://orthanc.uclouvain.be/downloads/third-party-downloads/jqu Source13: https://orthanc.uclouvain.be/downloads/third-party-downloads/dicom-web/vuejs-2.6.10.tar.gz Patch0: dcmtk.diff -## Patch1: boost185.diff +Patch1: toolbox.patch +Patch2: boost.patch + BuildRequires: civetweb-devel BuildRequires: cmake >= 2.8.0 BuildRequires: curl-devel diff --git a/toolbox.patch b/toolbox.patch new file mode 100644 index 0000000..bb792ac --- /dev/null +++ b/toolbox.patch @@ -0,0 +1,27 @@ +--- a/OrthancFramework/Sources/Toolbox.cpp Fri Sep 20 16:05:04 2024 +0200 ++++ b/OrthancFramework/Sources/Toolbox.cpp Tue Sep 24 09:26:42 2024 +0200 +@@ -801,7 +801,6 @@ + return result; + } + +- + void Toolbox::ComputeSHA1(std::string& result, + const void* data, + size_t size) +@@ -814,11 +813,13 @@ + } + + unsigned int digest[5]; +- + // Sanity check for the memory layout: A SHA-1 digest is 160 bits wide +- assert(sizeof(unsigned int) == 4 && sizeof(digest) == (160 / 8)); ++ assert(sizeof(unsigned int) == 4 && sizeof(digest) == (160 / 8)); ++ assert(sizeof(boost::uuids::detail::sha1::digest_type) == 20); + +- sha1.get_digest(digest); ++ // From Boost 1.86, digest_type is "unsigned char[20]" while it was "unsigned int[5]"" in previous versions. ++ // Always perform the cast even if it is useless for Boost < 1.86 ++ sha1.get_digest(*(reinterpret_cast(digest))); + + result.resize(8 * 5 + 4); + sprintf(&result[0], "%08x-%08x-%08x-%08x-%08x",