changeset 208:db70f6c5fa4f

sync
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 11 Apr 2018 16:27:09 +0200
parents 886230938339
children aa6162ad4ba7
files Resources/Orthanc/Core/Cache/SharedArchive.cpp Resources/Orthanc/Core/DicomFormat/DicomTag.h Resources/Orthanc/Core/FileStorage/StorageAccessor.cpp Resources/Orthanc/Core/SystemToolbox.cpp Resources/Orthanc/Core/SystemToolbox.h Resources/Orthanc/Core/TemporaryFile.cpp Resources/Orthanc/Core/Toolbox.cpp Resources/Orthanc/Core/Toolbox.h Resources/Orthanc/NEWS Resources/Orthanc/Resources/CMake/BoostConfiguration.cmake Resources/Orthanc/Resources/CMake/Compiler.cmake Resources/Orthanc/Resources/CMake/OrthancFrameworkConfiguration.cmake Resources/Orthanc/Resources/CMake/UuidConfiguration.cmake Resources/Orthanc/Resources/CMake/ZlibConfiguration.cmake Resources/Orthanc/Resources/LinuxStandardBaseToolchain.cmake Resources/Orthanc/Resources/Patches/boost-1.65.1-linux-standard-base.patch Resources/Orthanc/Resources/Patches/boost-1.66.0-linux-standard-base.patch Resources/SyncOrthancFolder.py
diffstat 18 files changed, 270 insertions(+), 90 deletions(-) [+]
line wrap: on
line diff
--- a/Resources/Orthanc/Core/Cache/SharedArchive.cpp	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/Cache/SharedArchive.cpp	Wed Apr 11 16:27:09 2018 +0200
@@ -34,7 +34,7 @@
 #include "../PrecompiledHeaders.h"
 #include "SharedArchive.h"
 
-#include "../SystemToolbox.h"
+#include "../Toolbox.h"
 
 
 namespace Orthanc
@@ -100,7 +100,7 @@
       RemoveInternal(oldest);
     }
 
-    std::string id = SystemToolbox::GenerateUuid();
+    std::string id = Toolbox::GenerateUuid();
     RemoveInternal(id);  // Should never be useful because of UUID
     archive_[id] = obj;
     lru_.Add(id);
--- a/Resources/Orthanc/Core/DicomFormat/DicomTag.h	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/DicomFormat/DicomTag.h	Wed Apr 11 16:27:09 2018 +0200
@@ -201,4 +201,6 @@
   static const DicomTag DICOM_TAG_FRAME_OF_REFERENCE_UID(0x0020, 0x0052);
   static const DicomTag DICOM_TAG_REFERENCED_FRAME_OF_REFERENCE_UID(0x3006, 0x0024);
   static const DicomTag DICOM_TAG_RELATED_FRAME_OF_REFERENCE_UID(0x3006, 0x00c2);
+  static const DicomTag DICOM_TAG_CURRENT_REQUESTED_PROCEDURE_EVIDENCE_SEQUENCE(0x0040, 0xa375);
+  static const DicomTag DICOM_TAG_REFERENCED_SERIES_SEQUENCE(0x0008, 0x1115);
 }
--- a/Resources/Orthanc/Core/FileStorage/StorageAccessor.cpp	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/FileStorage/StorageAccessor.cpp	Wed Apr 11 16:27:09 2018 +0200
@@ -37,7 +37,7 @@
 #include "../Compression/ZlibCompressor.h"
 #include "../OrthancException.h"
 #include "../Toolbox.h"
-#include "../SystemToolbox.h"
+#include "../Toolbox.h"
 
 #if ORTHANC_ENABLE_CIVETWEB == 1 || ORTHANC_ENABLE_MONGOOSE == 1
 #  include "../HttpServer/HttpStreamTranscoder.h"
@@ -51,7 +51,7 @@
                                   CompressionType compression,
                                   bool storeMd5)
   {
-    std::string uuid = SystemToolbox::GenerateUuid();
+    std::string uuid = Toolbox::GenerateUuid();
 
     std::string md5;
 
--- a/Resources/Orthanc/Core/SystemToolbox.cpp	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/SystemToolbox.cpp	Wed Apr 11 16:27:09 2018 +0200
@@ -62,19 +62,6 @@
 #endif
 
 
-// Inclusions for UUID
-// http://stackoverflow.com/a/1626302
-
-extern "C"
-{
-#if defined(_WIN32)
-#  include <rpc.h>
-#else
-#  include <uuid/uuid.h>
-#endif
-}
-
-
 #include "Logging.h"
 #include "OrthancException.h"
 #include "Toolbox.h"
@@ -539,28 +526,6 @@
   }
 
 
-  std::string SystemToolbox::GenerateUuid()
-  {
-#ifdef WIN32
-    UUID uuid;
-    UuidCreate ( &uuid );
-
-    unsigned char * str;
-    UuidToStringA ( &uuid, &str );
-
-    std::string s( ( char* ) str );
-
-    RpcStringFreeA ( &str );
-#else
-    uuid_t uuid;
-    uuid_generate_random ( uuid );
-    char s[37];
-    uuid_unparse ( uuid, s );
-#endif
-    return s;
-  }
-
-
   static boost::posix_time::ptime GetNow(bool utc)
   {
     if (utc)
--- a/Resources/Orthanc/Core/SystemToolbox.h	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/SystemToolbox.h	Wed Apr 11 16:27:09 2018 +0200
@@ -93,8 +93,6 @@
     FILE* OpenFile(const std::string& path,
                    FileMode mode);
 
-    std::string GenerateUuid();
-
     std::string GetNowIsoString(bool utc);
 
     void GetNowDicom(std::string& date,
--- a/Resources/Orthanc/Core/TemporaryFile.cpp	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/TemporaryFile.cpp	Wed Apr 11 16:27:09 2018 +0200
@@ -52,7 +52,7 @@
 #endif
 
     // We use UUID to create unique path to temporary files
-    std::string filename = "Orthanc-" + Orthanc::SystemToolbox::GenerateUuid();
+    std::string filename = "Orthanc-" + Orthanc::Toolbox::GenerateUuid();
 
     if (extension != NULL)
     {
--- a/Resources/Orthanc/Core/Toolbox.cpp	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/Toolbox.cpp	Wed Apr 11 16:27:09 2018 +0200
@@ -87,8 +87,94 @@
 #endif
 
 
+// Inclusions for UUID
+// http://stackoverflow.com/a/1626302
+
+extern "C"
+{
+#if defined(_WIN32)
+#  include <rpc.h>
+#else
+#  include <uuid/uuid.h>
+#endif
+}
+
+
+
 namespace Orthanc
 {
+  void Toolbox::LinesIterator::FindEndOfLine()
+  {
+    lineEnd_ = lineStart_;
+
+    while (lineEnd_ < content_.size() &&
+           content_[lineEnd_] != '\n' &&
+           content_[lineEnd_] != '\r')
+    {
+      lineEnd_ += 1;
+    }
+  }
+  
+
+  Toolbox::LinesIterator::LinesIterator(const std::string& content) :
+    content_(content),
+    lineStart_(0)
+  {
+    FindEndOfLine();
+  }
+
+    
+  bool Toolbox::LinesIterator::GetLine(std::string& target) const
+  {
+    assert(lineStart_ <= content_.size() &&
+           lineEnd_ <= content_.size() &&
+           lineStart_ <= lineEnd_);
+
+    if (lineStart_ == content_.size())
+    {
+      return false;
+    }
+    else
+    {
+      target = content_.substr(lineStart_, lineEnd_ - lineStart_);
+      return true;
+    }
+  }
+
+    
+  void Toolbox::LinesIterator::Next()
+  {
+    lineStart_ = lineEnd_;
+
+    if (lineStart_ != content_.size())
+    {
+      assert(content_[lineStart_] == '\r' ||
+             content_[lineStart_] == '\n');
+
+      char second;
+      
+      if (content_[lineStart_] == '\r')
+      {
+        second = '\n';
+      }
+      else
+      {
+        second = '\r';
+      }
+        
+      lineStart_ += 1;
+
+      if (lineStart_ < content_.size() &&
+          content_[lineStart_] == second)
+      {
+        lineStart_ += 1;
+      }
+
+      FindEndOfLine();
+    }
+  }
+
+  
   void Toolbox::ToUpperCase(std::string& s)
   {
     std::transform(s.begin(), s.end(), s.begin(), toupper);
@@ -1376,4 +1462,65 @@
     return boost::locale::conv::utf_to_utf<char>(w);
   }
 #endif
+
+
+  std::string Toolbox::GenerateUuid()
+  {
+#ifdef WIN32
+    UUID uuid;
+    UuidCreate ( &uuid );
+
+    unsigned char * str;
+    UuidToStringA ( &uuid, &str );
+
+    std::string s( ( char* ) str );
+
+    RpcStringFreeA ( &str );
+#else
+    uuid_t uuid;
+    uuid_generate_random ( uuid );
+    char s[37];
+    uuid_unparse ( uuid, s );
+#endif
+    return s;
+  }
 }
+
+
+
+OrthancLinesIterator* OrthancLinesIterator_Create(const std::string& content)
+{
+  return reinterpret_cast<OrthancLinesIterator*>(new Orthanc::Toolbox::LinesIterator(content));
+}
+
+
+bool OrthancLinesIterator_GetLine(std::string& target,
+                                         const OrthancLinesIterator* iterator)
+{
+  if (iterator != NULL)
+  {
+    return reinterpret_cast<const Orthanc::Toolbox::LinesIterator*>(iterator)->GetLine(target);
+  }
+  else
+  {
+    return false;
+  }
+}
+
+
+void OrthancLinesIterator_Next(OrthancLinesIterator* iterator)
+{
+  if (iterator != NULL)
+  {
+    reinterpret_cast<Orthanc::Toolbox::LinesIterator*>(iterator)->Next();
+  }
+}
+
+
+void OrthancLinesIterator_Free(OrthancLinesIterator* iterator)
+{
+  if (iterator != NULL)
+  {
+    delete reinterpret_cast<const Orthanc::Toolbox::LinesIterator*>(iterator);
+  }
+}
--- a/Resources/Orthanc/Core/Toolbox.h	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Core/Toolbox.h	Wed Apr 11 16:27:09 2018 +0200
@@ -79,6 +79,24 @@
 
   namespace Toolbox
   {
+    class LinesIterator
+    {
+    private:
+      const std::string& content_;
+      size_t             lineStart_;
+      size_t             lineEnd_;
+
+      void FindEndOfLine();
+  
+    public:
+      LinesIterator(const std::string& content);
+  
+      bool GetLine(std::string& target) const;
+
+      void Next();
+    };
+    
+    
     void ToUpperCase(std::string& s);  // Inplace version
 
     void ToLowerCase(std::string& s);  // Inplace version
@@ -214,5 +232,28 @@
 
     std::string ToUpperCaseWithAccents(const std::string& source);
 #endif
+
+    std::string GenerateUuid();
   }
 }
+
+
+
+
+/**
+ * The plain C, opaque data structure "OrthancLinesIterator" is a thin
+ * wrapper around Orthanc::Toolbox::LinesIterator, and is only used by
+ * "../Resources/WebAssembly/dcdict.cc", in order to avoid code
+ * duplication
+ **/
+
+struct OrthancLinesIterator;
+
+OrthancLinesIterator* OrthancLinesIterator_Create(const std::string& content);
+
+bool OrthancLinesIterator_GetLine(std::string& target,
+                                  const OrthancLinesIterator* iterator);
+
+void OrthancLinesIterator_Next(OrthancLinesIterator* iterator);
+
+void OrthancLinesIterator_Free(OrthancLinesIterator* iterator);
--- a/Resources/Orthanc/NEWS	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/NEWS	Wed Apr 11 16:27:09 2018 +0200
@@ -29,13 +29,16 @@
 
 * Orthanc now uses UTC (universal time) instead of local time in its database
 * Fix to allow creating DICOM instances with empty Specific Character Set (0008,0005)
-* Upgrade to curl 7.57.0 for static and Windows builds
 * Support of Linux Standard Base
 * Static linking against libuuid (from e2fsprogs)
 * Fix static build on CentOS 6
-* Upgrade to JsonCpp 1.8.4 for static builds
 * Possibility of using JsonCpp 0.10.6 if the compiler does not support C++11
   with the "-DUSE_LEGACY_JSONCPP=ON" CMake option
+* Upgraded dependencies for static and Windows builds:
+  - boost 1.66.0
+  - curl 7.57.0
+  - jsoncpp 1.8.4
+  - zlib 1.2.11
 
 
 Version 1.3.1 (2017-11-29)
--- a/Resources/Orthanc/Resources/CMake/BoostConfiguration.cmake	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Resources/CMake/BoostConfiguration.cmake	Wed Apr 11 16:27:09 2018 +0200
@@ -53,9 +53,9 @@
   ## Parameters for static compilation of Boost 
   ##
   
-  set(BOOST_NAME boost_1_65_1)
-  set(BOOST_BCP_SUFFIX bcpdigest-1.3.1)
-  set(BOOST_MD5 "92c9c603e56bbd7a450a305f08747d90")
+  set(BOOST_NAME boost_1_66_0)
+  set(BOOST_BCP_SUFFIX bcpdigest-1.3.2)
+  set(BOOST_MD5 "e509e66140e8f2fd4d326b0052825f52")
   set(BOOST_URL "http://www.orthanc-server.com/downloads/third-party/${BOOST_NAME}_${BOOST_BCP_SUFFIX}.tar.gz")
   set(BOOST_SOURCES_DIR ${CMAKE_BINARY_DIR}/${BOOST_NAME})
 
@@ -97,11 +97,13 @@
     )
 
   if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
-    add_definitions(-DBOOST_SYSTEM_USE_STRERROR=1)
+    add_definitions(
+      -DBOOST_SYSTEM_USE_STRERROR=1
+      )
     
     execute_process(
       COMMAND ${PATCH_EXECUTABLE} -p0 -N -i
-      ${ORTHANC_ROOT}/Resources/Patches/boost-1.65.1-linux-standard-base.patch
+      ${ORTHANC_ROOT}/Resources/Patches/boost-1.66.0-linux-standard-base.patch
       WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
       RESULT_VARIABLE Failure
       )
@@ -145,6 +147,7 @@
       )
 
   elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
+    # No support for threads in WebAssembly
 
   else()
     message(FATAL_ERROR "Support your platform here")
@@ -254,7 +257,8 @@
             CMAKE_SYSTEM_NAME STREQUAL "kFreeBSD" OR
             CMAKE_SYSTEM_NAME STREQUAL "PNaCl" OR
             CMAKE_SYSTEM_NAME STREQUAL "NaCl32" OR
-            CMAKE_SYSTEM_NAME STREQUAL "NaCl64")
+            CMAKE_SYSTEM_NAME STREQUAL "NaCl64" OR
+            CMAKE_SYSTEM_NAME STREQUAL "Emscripten") # For WebAssembly or asm.js
       list(APPEND BOOST_SOURCES
         ${BOOST_SOURCES_DIR}/libs/locale/src/posix/codecvt.cpp
         ${BOOST_SOURCES_DIR}/libs/locale/src/posix/collate.cpp
--- a/Resources/Orthanc/Resources/CMake/Compiler.cmake	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Resources/CMake/Compiler.cmake	Wed Apr 11 16:27:09 2018 +0200
@@ -174,6 +174,12 @@
 elseif (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
   message("Building using Emscripten (for WebAssembly or asm.js targets)")
 
+  # The BINARYEN_TRAP_MODE specifies what to do when divisions per
+  # zero (and similar conditions like integer overflows) are
+  # encountered: The "clamp" mode avoids throwing errors, as they
+  # cannot be properly catched by "try {} catch (...)" constructions.
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -s BINARYEN_TRAP_MODE='\"clamp\"'")
+
 else()
   message(FATAL_ERROR "Support your platform here")
 endif()
--- a/Resources/Orthanc/Resources/CMake/OrthancFrameworkConfiguration.cmake	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Resources/CMake/OrthancFrameworkConfiguration.cmake	Wed Apr 11 16:27:09 2018 +0200
@@ -282,10 +282,6 @@
     ${ORTHANC_ROOT}/Core/Compression/GzipCompressor.cpp
     ${ORTHANC_ROOT}/Core/Compression/ZipWriter.cpp
     ${ORTHANC_ROOT}/Core/Compression/ZlibCompressor.cpp
-
-    # This is the minizip distribution to create ZIP files using zlib
-    ${ORTHANC_ROOT}/Resources/ThirdParty/minizip/ioapi.c
-    ${ORTHANC_ROOT}/Resources/ThirdParty/minizip/zip.c
     )
 endif()
 
@@ -339,7 +335,14 @@
 ##
 
 if (ENABLE_LOCALE)
-  include(${CMAKE_CURRENT_LIST_DIR}/LibIconvConfiguration.cmake)
+  if (CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
+    # In WebAssembly or asm.js, we rely on the version of iconv that
+    # is shipped with the stdlib
+    unset(USE_BOOST_ICONV CACHE)
+  else()
+    include(${CMAKE_CURRENT_LIST_DIR}/LibIconvConfiguration.cmake)
+  endif()
+  
   add_definitions(-DORTHANC_ENABLE_LOCALE=1)
 endif()
 
@@ -359,10 +362,7 @@
 #####################################################################
 
 include(${CMAKE_CURRENT_LIST_DIR}/JsonCppConfiguration.cmake)
-
-if (NOT ORTHANC_SANDBOXED)
-  include(${CMAKE_CURRENT_LIST_DIR}/UuidConfiguration.cmake)
-endif()
+include(${CMAKE_CURRENT_LIST_DIR}/UuidConfiguration.cmake)
 
 # We put Boost as the last dependency, as it is the heaviest to
 # configure, which allows to quickly spot problems when configuring
@@ -396,7 +396,6 @@
   endif()
 
   set(ORTHANC_DICOM_SOURCES_INTERNAL
-    ${ORTHANC_ROOT}/Core/DicomParsing/DicomDirWriter.cpp
     ${ORTHANC_ROOT}/Core/DicomParsing/DicomModification.cpp
     ${ORTHANC_ROOT}/Core/DicomParsing/FromDcmtkBridge.cpp
     ${ORTHANC_ROOT}/Core/DicomParsing/ParsedDicomFile.cpp
@@ -406,6 +405,12 @@
     ${ORTHANC_ROOT}/Core/DicomParsing/Internals/DicomImageDecoder.cpp
     )
 
+  if (NOT ORTHANC_SANDBOXED)
+    list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
+      ${ORTHANC_ROOT}/Core/DicomParsing/DicomDirWriter.cpp
+      )
+  endif()
+
   if (ENABLE_DCMTK_NETWORKING)
     add_definitions(-DORTHANC_ENABLE_DCMTK_NETWORKING=1)
     list(APPEND ORTHANC_DICOM_SOURCES_INTERNAL
@@ -536,6 +541,16 @@
   ${ORTHANC_ROOT}/Resources/ThirdParty/base64/base64.cpp
   )  
 
+
+if (ENABLE_ZLIB)
+  list(APPEND ORTHANC_CORE_SOURCES_DEPENDENCIES
+    # This is the minizip distribution to create ZIP files using zlib
+    ${ORTHANC_ROOT}/Resources/ThirdParty/minizip/ioapi.c
+    ${ORTHANC_ROOT}/Resources/ThirdParty/minizip/zip.c
+    )
+endif()
+
+
 set(ORTHANC_CORE_SOURCES
   ${ORTHANC_CORE_SOURCES_INTERNAL}
   ${ORTHANC_CORE_SOURCES_DEPENDENCIES}
--- a/Resources/Orthanc/Resources/CMake/UuidConfiguration.cmake	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Resources/CMake/UuidConfiguration.cmake	Wed Apr 11 16:27:09 2018 +0200
@@ -39,7 +39,7 @@
     check_include_file("sys/un.h"       HAVE_SYS_UN_H)
     check_include_file("unistd.h"       HAVE_UNISTD_H)
 
-    If (NOT HAVE_NET_IF_H)  # This is the case of OpenBSD
+    if (NOT HAVE_NET_IF_H)  # This is the case of OpenBSD
       unset(HAVE_NET_IF_H CACHE)
       check_include_files("sys/socket.h;net/if.h" HAVE_NET_IF_H)
     endif()
@@ -49,7 +49,8 @@
       check_include_files("sys/socket.h;netinet/tcp.h" HAVE_NETINET_TCP_H)
     endif()
 
-    file(WRITE ${E2FSPROGS_SOURCES_DIR}/lib/uuid/config.h.cmake "
+    if (NOT EXISTS ${E2FSPROGS_SOURCES_DIR}/lib/uuid/config.h)
+      file(WRITE ${E2FSPROGS_SOURCES_DIR}/lib/uuid/config.h.cmake "
 #cmakedefine HAVE_NET_IF_H \@HAVE_NET_IF_H\@
 #cmakedefine HAVE_NET_IF_DL_H \@HAVE_NET_IF_DL_H\@
 #cmakedefine HAVE_NETINET_IN_H \@HAVE_NETINET_IN_H\@
@@ -64,26 +65,23 @@
 #cmakedefine HAVE_SYS_UN_H \@HAVE_SYS_UN_H\@
 #cmakedefine HAVE_UNISTD_H \@HAVE_UNISTD_H\@
 ")
-    
+    endif()
+      
     configure_file(
       ${E2FSPROGS_SOURCES_DIR}/lib/uuid/config.h.cmake
       ${E2FSPROGS_SOURCES_DIR}/lib/uuid/config.h
       )
-    
-    
+      
     configure_file(
       ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid.h.in
       ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid.h
       )
 
-    file(WRITE
-      ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid_types.h
-      "#include <stdint.h>\n")
-
-    #configure_file(
-    #  ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid_types.h.in
-    #  ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid_types.h
-    #  )
+    if (NOT EXISTS ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid_types.h)
+      file(WRITE
+        ${E2FSPROGS_SOURCES_DIR}/lib/uuid/uuid_types.h
+        "#include <stdint.h>\n")
+    endif()
     
     source_group(ThirdParty\\uuid REGULAR_EXPRESSION ${E2FSPROGS_SOURCES_DIR}/.*)
 
--- a/Resources/Orthanc/Resources/CMake/ZlibConfiguration.cmake	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Resources/CMake/ZlibConfiguration.cmake	Wed Apr 11 16:27:09 2018 +0200
@@ -1,7 +1,7 @@
 if (STATIC_BUILD OR NOT USE_SYSTEM_ZLIB)
-  SET(ZLIB_SOURCES_DIR ${CMAKE_BINARY_DIR}/zlib-1.2.7)
-  SET(ZLIB_URL "http://www.orthanc-server.com/downloads/third-party/zlib-1.2.7.tar.gz")
-  SET(ZLIB_MD5 "60df6a37c56e7c1366cca812414f7b85")
+  SET(ZLIB_SOURCES_DIR ${CMAKE_BINARY_DIR}/zlib-1.2.11)
+  SET(ZLIB_URL "http://www.orthanc-server.com/downloads/third-party/zlib-1.2.11.tar.gz")
+  SET(ZLIB_MD5 "1c9f62f0778697a09d36121ead88e08e")
 
   DownloadPackage(${ZLIB_MD5} ${ZLIB_URL} "${ZLIB_SOURCES_DIR}")
 
--- a/Resources/Orthanc/Resources/LinuxStandardBaseToolchain.cmake	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/Orthanc/Resources/LinuxStandardBaseToolchain.cmake	Wed Apr 11 16:27:09 2018 +0200
@@ -1,4 +1,4 @@
-# LSB_CC=gcc-4.8 LSB_CXX=g++-4.8 cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../Resources/LinuxStandardBaseToolchain.cmake
+# LSB_CC=gcc-4.8 LSB_CXX=g++-4.8 cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../Resources/LinuxStandardBaseToolchain.cmake -DUSE_LEGACY_JSONCPP=ON
 
 INCLUDE(CMakeForceCompiler)
 
--- a/Resources/Orthanc/Resources/Patches/boost-1.65.1-linux-standard-base.patch	Wed Mar 28 11:29:13 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-diff -urEb boost_1_65_1.orig/boost/move/adl_move_swap.hpp boost_1_65_1/boost/move/adl_move_swap.hpp
---- boost_1_65_1.orig/boost/move/adl_move_swap.hpp	2017-11-08 17:43:20.000000000 +0100
-+++ boost_1_65_1/boost/move/adl_move_swap.hpp	2018-01-02 15:34:48.829052917 +0100
-@@ -28,6 +28,8 @@
- //Try to avoid including <algorithm>, as it's quite big
- #if defined(_MSC_VER) && defined(BOOST_DINKUMWARE_STDLIB)
-    #include <utility>   //Dinkum libraries define std::swap in utility which is lighter than algorithm
-+#elif defined(__LSB_VERSION__)
-+#  include <utility>
- #elif defined(BOOST_GNU_STDLIB)
-    //For non-GCC compilers, where GNUC version is not very reliable, or old GCC versions
-    //use the good old stl_algobase header, which is quite lightweight
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/Orthanc/Resources/Patches/boost-1.66.0-linux-standard-base.patch	Wed Apr 11 16:27:09 2018 +0200
@@ -0,0 +1,13 @@
+diff -urEb boost_1_66_0.orig/boost/move/adl_move_swap.hpp boost_1_66_0/boost/move/adl_move_swap.hpp
+--- boost_1_66_0.orig/boost/move/adl_move_swap.hpp	2018-04-11 11:56:16.761768726 +0200
++++ boost_1_66_0/boost/move/adl_move_swap.hpp	2018-04-11 11:57:01.073881330 +0200
+@@ -28,6 +28,8 @@
+ //Try to avoid including <algorithm>, as it's quite big
+ #if defined(_MSC_VER) && defined(BOOST_DINKUMWARE_STDLIB)
+    #include <utility>   //Dinkum libraries define std::swap in utility which is lighter than algorithm
++#elif defined(__LSB_VERSION__)
++#  include <utility>
+ #elif defined(BOOST_GNU_STDLIB)
+    //For non-GCC compilers, where GNUC version is not very reliable, or old GCC versions
+    //use the good old stl_algobase header, which is quite lightweight
+Only in boost_1_66_0/boost/move: adl_move_swap.hpp~
--- a/Resources/SyncOrthancFolder.py	Wed Mar 28 11:29:13 2018 +0200
+++ b/Resources/SyncOrthancFolder.py	Wed Apr 11 16:27:09 2018 +0200
@@ -152,7 +152,7 @@
     'Resources/MinGW-W64-Toolchain32.cmake',
     'Resources/MinGW-W64-Toolchain64.cmake',
     'Resources/MinGWToolchain.cmake',
-    'Resources/Patches/boost-1.65.1-linux-standard-base.patch',
+    'Resources/Patches/boost-1.66.0-linux-standard-base.patch',
     'Resources/Patches/curl-7.57.0-cmake.patch',
     'Resources/Patches/dcmtk-3.6.2-linux-standard-base.patch',
     'Resources/ThirdParty/VisualStudio/stdint.h',