changeset 4091:19a2f1d2b816 framework

moved CMakeLists.txt for the server to the OrthancServer folder
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 30 Jun 2020 07:30:50 +0200
parents 160ec8417874
children fb64d481940a 3ea5d52757d7
files CMakeLists.txt DarwinCompilation.txt INSTALL LinuxCompilation.txt OrthancServer/CMakeLists.txt OrthancServer/Resources/Orthanc.doxygen OrthancServer/Resources/OrthancPlugin.doxygen README
diffstat 8 files changed, 726 insertions(+), 718 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Mon Jun 29 19:33:22 2020 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,654 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-project(Orthanc)
-
-
-#####################################################################
-## Generic parameters of the Orthanc framework
-#####################################################################
-
-include(${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake)
-
-# Enable all the optional components of the Orthanc framework
-set(ENABLE_CRYPTO_OPTIONS ON)
-set(ENABLE_DCMTK ON)
-set(ENABLE_DCMTK_NETWORKING ON)
-set(ENABLE_DCMTK_TRANSCODING ON)
-set(ENABLE_GOOGLE_TEST ON)
-set(ENABLE_JPEG ON)
-set(ENABLE_LOCALE ON)
-set(ENABLE_LUA ON)
-set(ENABLE_OPENSSL_ENGINES ON)  # OpenSSL engines are necessary for PKCS11
-set(ENABLE_PNG ON)
-set(ENABLE_PUGIXML ON)
-set(ENABLE_SQLITE ON)
-set(ENABLE_WEB_CLIENT ON)
-set(ENABLE_WEB_SERVER ON)
-set(ENABLE_ZLIB ON)
-
-
-#####################################################################
-## CMake parameters tunable at the command line to configure the
-## plugins, the companion tools, and the unit tests
-#####################################################################
-
-# Parameters of the build
-set(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)")
-SET(BUILD_MODALITY_WORKLISTS ON CACHE BOOL "Whether to build the sample plugin to serve modality worklists")
-SET(BUILD_RECOVER_COMPRESSED_FILE ON CACHE BOOL "Whether to build the companion tool to recover files compressed using Orthanc")
-SET(BUILD_SERVE_FOLDERS ON CACHE BOOL "Whether to build the ServeFolders plugin")
-SET(BUILD_CONNECTIVITY_CHECKS ON CACHE BOOL "Whether to build the ConnectivityChecks plugin")
-SET(ENABLE_PLUGINS ON CACHE BOOL "Enable plugins")
-SET(UNIT_TESTS_WITH_HTTP_CONNEXIONS ON CACHE BOOL "Allow unit tests to make HTTP requests")
-
-
-#####################################################################
-## Configuration of the Orthanc framework
-#####################################################################
-
-include(${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/CMake/VisualStudioPrecompiledHeaders.cmake)
-include(${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake)
-
-
-#####################################################################
-## List of source files
-#####################################################################
-
-set(ORTHANC_SERVER_SOURCES
-  OrthancServer/Sources/Database/Compatibility/DatabaseLookup.cpp
-  OrthancServer/Sources/Database/Compatibility/ICreateInstance.cpp
-  OrthancServer/Sources/Database/Compatibility/IGetChildrenMetadata.cpp
-  OrthancServer/Sources/Database/Compatibility/ILookupResourceAndParent.cpp
-  OrthancServer/Sources/Database/Compatibility/ILookupResources.cpp
-  OrthancServer/Sources/Database/Compatibility/SetOfResources.cpp
-  OrthancServer/Sources/Database/ResourcesContent.cpp
-  OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp
-  OrthancServer/Sources/DicomInstanceOrigin.cpp
-  OrthancServer/Sources/DicomInstanceToStore.cpp
-  OrthancServer/Sources/EmbeddedResourceHttpHandler.cpp
-  OrthancServer/Sources/ExportedResource.cpp
-  OrthancServer/Sources/LuaScripting.cpp
-  OrthancServer/Sources/OrthancConfiguration.cpp
-  OrthancServer/Sources/OrthancFindRequestHandler.cpp
-  OrthancServer/Sources/OrthancGetRequestHandler.cpp
-  OrthancServer/Sources/OrthancHttpHandler.cpp
-  OrthancServer/Sources/OrthancInitialization.cpp
-  OrthancServer/Sources/OrthancMoveRequestHandler.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestAnonymizeModify.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestApi.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestChanges.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestModalities.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestResources.cpp
-  OrthancServer/Sources/OrthancRestApi/OrthancRestSystem.cpp
-  OrthancServer/Sources/QueryRetrieveHandler.cpp
-  OrthancServer/Sources/Search/DatabaseConstraint.cpp
-  OrthancServer/Sources/Search/DatabaseLookup.cpp
-  OrthancServer/Sources/Search/DicomTagConstraint.cpp
-  OrthancServer/Sources/Search/HierarchicalMatcher.cpp
-  OrthancServer/Sources/Search/ISqlLookupFormatter.cpp
-  OrthancServer/Sources/ServerContext.cpp
-  OrthancServer/Sources/ServerEnumerations.cpp
-  OrthancServer/Sources/ServerIndex.cpp
-  OrthancServer/Sources/ServerJobs/ArchiveJob.cpp
-  OrthancServer/Sources/ServerJobs/CleaningInstancesJob.cpp
-  OrthancServer/Sources/ServerJobs/DicomModalityStoreJob.cpp
-  OrthancServer/Sources/ServerJobs/DicomMoveScuJob.cpp
-  OrthancServer/Sources/ServerJobs/LuaJobManager.cpp
-  OrthancServer/Sources/ServerJobs/MergeStudyJob.cpp
-  OrthancServer/Sources/ServerJobs/Operations/DeleteResourceOperation.cpp
-  OrthancServer/Sources/ServerJobs/Operations/DicomInstanceOperationValue.cpp
-  OrthancServer/Sources/ServerJobs/Operations/ModifyInstanceOperation.cpp
-  OrthancServer/Sources/ServerJobs/Operations/StorePeerOperation.cpp
-  OrthancServer/Sources/ServerJobs/Operations/StoreScuOperation.cpp
-  OrthancServer/Sources/ServerJobs/Operations/SystemCallOperation.cpp
-  OrthancServer/Sources/ServerJobs/OrthancJobUnserializer.cpp
-  OrthancServer/Sources/ServerJobs/OrthancPeerStoreJob.cpp
-  OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp
-  OrthancServer/Sources/ServerJobs/SplitStudyJob.cpp
-  OrthancServer/Sources/ServerJobs/StorageCommitmentScpJob.cpp
-  OrthancServer/Sources/ServerToolbox.cpp
-  OrthancServer/Sources/SliceOrdering.cpp
-  OrthancServer/Sources/StorageCommitmentReports.cpp
-  )
-
-
-set(ORTHANC_FRAMEWORK_UNIT_TESTS
-  OrthancFramework/UnitTestsSources/DicomMapTests.cpp
-  OrthancFramework/UnitTestsSources/FileStorageTests.cpp
-  OrthancFramework/UnitTestsSources/FrameworkTests.cpp
-  OrthancFramework/UnitTestsSources/FromDcmtkTests.cpp
-  OrthancFramework/UnitTestsSources/ImageProcessingTests.cpp
-  OrthancFramework/UnitTestsSources/ImageTests.cpp
-  OrthancFramework/UnitTestsSources/JobsTests.cpp
-  OrthancFramework/UnitTestsSources/JpegLosslessTests.cpp
-  OrthancFramework/UnitTestsSources/LoggingTests.cpp
-  OrthancFramework/UnitTestsSources/LuaTests.cpp
-  OrthancFramework/UnitTestsSources/MemoryCacheTests.cpp
-  OrthancFramework/UnitTestsSources/RestApiTests.cpp
-  OrthancFramework/UnitTestsSources/SQLiteChromiumTests.cpp
-  OrthancFramework/UnitTestsSources/SQLiteTests.cpp
-  OrthancFramework/UnitTestsSources/StreamTests.cpp
-  OrthancFramework/UnitTestsSources/ToolboxTests.cpp
-  OrthancFramework/UnitTestsSources/ZipTests.cpp
-  )
-
-set(ORTHANC_SERVER_UNIT_TESTS
-  OrthancServer/UnitTestsSources/DatabaseLookupTests.cpp
-  OrthancServer/UnitTestsSources/LuaServerTests.cpp
-  OrthancServer/UnitTestsSources/PluginsTests.cpp
-  OrthancServer/UnitTestsSources/ServerIndexTests.cpp
-  OrthancServer/UnitTestsSources/ServerJobsTests.cpp
-  OrthancServer/UnitTestsSources/UnitTestsMain.cpp
-  OrthancServer/UnitTestsSources/VersionsTests.cpp
-  )
-
-
-if (ENABLE_PLUGINS)
-  include_directories(${CMAKE_SOURCE_DIR}/OrthancServer/Plugins/Include)
-
-  list(APPEND ORTHANC_SERVER_SOURCES
-    OrthancServer/Plugins/Engine/OrthancPluginDatabase.cpp
-    OrthancServer/Plugins/Engine/OrthancPlugins.cpp
-    OrthancServer/Plugins/Engine/PluginsEnumerations.cpp
-    OrthancServer/Plugins/Engine/PluginsErrorDictionary.cpp
-    OrthancServer/Plugins/Engine/PluginsJob.cpp
-    OrthancServer/Plugins/Engine/PluginsManager.cpp
-    )
-
-  list(APPEND ORTHANC_SERVER_UNIT_TESTS
-    OrthancServer/UnitTestsSources/PluginsTests.cpp
-    )
-endif()
-
-
-if (CMAKE_COMPILER_IS_GNUCXX
-    AND NOT CMAKE_CROSSCOMPILING 
-    AND DCMTK_STATIC_VERSION STREQUAL "3.6.0")
-  # Add the "-pedantic" flag only on the Orthanc sources, and only if
-  # cross-compiling DCMTK 3.6.0
-  set(ORTHANC_ALL_SOURCES
-    ${ORTHANC_CORE_SOURCES_INTERNAL}
-    ${ORTHANC_DICOM_SOURCES_INTERNAL}
-    ${ORTHANC_SERVER_SOURCES}
-    ${ORTHANC_FRAMEWORK_UNIT_TESTS}
-    ${ORTHANC_SERVER_UNIT_TESTS}
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Plugins/Samples/ModalityWorklists/Plugin.cpp
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Plugins/Samples/ServeFolders/Plugin.cpp
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Sources/EmbeddedResourceHttpHandler.cpp
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Sources/main.cpp
-    )
-
-  set_source_files_properties(${ORTHANC_ALL_SOURCES}
-    PROPERTIES COMPILE_FLAGS -pedantic
-    )
-endif()
-
-
-#####################################################################
-## Autogeneration of files
-#####################################################################
-
-set(ORTHANC_EMBEDDED_FILES
-  CONFIGURATION_SAMPLE         ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Resources/Configuration.json
-  DICOM_CONFORMANCE_STATEMENT  ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Resources/DicomConformanceStatement.txt
-  FONT_UBUNTU_MONO_BOLD_16     ${CMAKE_CURRENT_SOURCE_DIR}/OrthancFramework/Resources/Fonts/UbuntuMonoBold-16.json
-  LUA_TOOLBOX                  ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Resources/Toolbox.lua
-  PREPARE_DATABASE             ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Sources/Database/PrepareDatabase.sql
-  UPGRADE_DATABASE_3_TO_4      ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Sources/Database/Upgrade3To4.sql
-  UPGRADE_DATABASE_4_TO_5      ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Sources/Database/Upgrade4To5.sql
-
-  INSTALL_TRACK_ATTACHMENTS_SIZE
-  ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/Sources/Database/InstallTrackAttachmentsSize.sql
-  )
-
-if (STANDALONE_BUILD)
-  # We embed all the resources in the binaries for standalone builds
-  add_definitions(
-    -DORTHANC_STANDALONE=1
-    )
-
-  list(APPEND ORTHANC_EMBEDDED_FILES
-    ORTHANC_EXPLORER ${CMAKE_CURRENT_SOURCE_DIR}/OrthancServer/OrthancExplorer
-    )
-else()
-  add_definitions(
-    -DORTHANC_PATH=\"${CMAKE_SOURCE_DIR}\"
-    -DORTHANC_STANDALONE=0
-    )
-endif()
-
-EmbedResources(
-  --namespace=Orthanc.ServerResources
-  --target=OrthancServerResources
-  --framework-path=${CMAKE_SOURCE_DIR}/OrthancFramework/Sources
-  ${ORTHANC_EMBEDDED_FILES}
-  )
-
-
-if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-  execute_process(
-    COMMAND 
-    ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/WindowsResources.py
-    ${ORTHANC_VERSION} Orthanc Orthanc.exe "Lightweight, RESTful DICOM server for medical imaging"
-    ERROR_VARIABLE Failure
-    OUTPUT_FILE ${AUTOGENERATED_DIR}/Orthanc.rc
-    )
-
-  if (Failure)
-    message(FATAL_ERROR "Error while computing the version information: ${Failure}")
-  endif()
-
-  list(APPEND ORTHANC_RESOURCES ${AUTOGENERATED_DIR}/Orthanc.rc)
-endif()
-
-
-
-#####################################################################
-## Configuration of the C/C++ macros
-#####################################################################
-
-if (STATIC_BUILD)
-  add_definitions(-DORTHANC_STATIC=1)
-else()
-  add_definitions(-DORTHANC_STATIC=0)
-endif()
-
-
-if (ENABLE_PLUGINS)
-  add_definitions(-DORTHANC_ENABLE_PLUGINS=1)
-else()
-  add_definitions(-DORTHANC_ENABLE_PLUGINS=0)
-endif()
-
-
-if (UNIT_TESTS_WITH_HTTP_CONNEXIONS)
-  add_definitions(-DUNIT_TESTS_WITH_HTTP_CONNEXIONS=1)
-else()
-  add_definitions(-DUNIT_TESTS_WITH_HTTP_CONNEXIONS=0)
-endif()
-
-
-add_definitions(
-  -DORTHANC_BUILD_UNIT_TESTS=1
-  
-  # Macros for the plugins
-  -DHAS_ORTHANC_EXCEPTION=0
-  -DMODALITY_WORKLISTS_VERSION="${ORTHANC_VERSION}"
-  -DSERVE_FOLDERS_VERSION="${ORTHANC_VERSION}"
-  )
-
-
-# Setup precompiled headers for Microsoft Visual Studio
-
-# WARNING: There must be NO MORE "add_definitions()", "include()" or
-# "include_directories()" below, otherwise the generated precompiled
-# headers might get broken!
-
-if (MSVC)
-  add_definitions(-DORTHANC_USE_PRECOMPILED_HEADERS=1)
-
-  set(TMP
-    ${ORTHANC_CORE_SOURCES_INTERNAL}
-    ${ORTHANC_DICOM_SOURCES_INTERNAL}
-    )
-  
-  ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS(
-    "PrecompiledHeaders.h" "OrthancFramework/Sources/PrecompiledHeaders.cpp"
-    TMP ORTHANC_CORE_PCH)
-
-  ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS(
-    "PrecompiledHeadersServer.h" "OrthancServer/Sources/PrecompiledHeadersServer.cpp"
-    ORTHANC_SERVER_SOURCES ORTHANC_SERVER_PCH)
-
-  ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS(
-    "PrecompiledHeadersUnitTests.h" "OrthancServer/UnitTestsSources/PrecompiledHeadersUnitTests.cpp"
-    ORTHANC_SERVER_UNIT_TESTS ORTHANC_UNIT_TESTS_PCH)
-endif()
-
-
-
-#####################################################################
-## Build the core of Orthanc
-#####################################################################
-
-# "CoreLibrary" contains all the third-party dependencies and the
-# content of the "Core" folder
-add_library(CoreLibrary
-  STATIC
-  ${ORTHANC_CORE_PCH}
-  ${ORTHANC_CORE_SOURCES}
-  ${ORTHANC_DICOM_SOURCES}
-  ${AUTOGENERATED_SOURCES}
-  )
-
-if (LIBICU_LIBRARIES)
-  target_link_libraries(CoreLibrary ${LIBICU_LIBRARIES})
-endif()
-
-
-#####################################################################
-## Build the Orthanc server
-#####################################################################
-
-add_library(ServerLibrary
-  STATIC
-  ${ORTHANC_SERVER_PCH}
-  ${ORTHANC_SERVER_SOURCES}
-  )
-
-# Ensure autogenerated code is built before building ServerLibrary
-add_dependencies(ServerLibrary CoreLibrary)
-
-add_executable(Orthanc
-  OrthancServer/Sources/main.cpp
-  ${ORTHANC_RESOURCES}
-  )
-
-target_link_libraries(Orthanc ServerLibrary CoreLibrary ${DCMTK_LIBRARIES})
-
-install(
-  TARGETS Orthanc
-  RUNTIME DESTINATION sbin
-  )
-
-
-#####################################################################
-## Build the unit tests
-#####################################################################
-
-add_executable(UnitTests
-  ${GOOGLE_TEST_SOURCES}
-  ${ORTHANC_UNIT_TESTS_PCH}
-  ${ORTHANC_FRAMEWORK_UNIT_TESTS}
-  ${ORTHANC_SERVER_UNIT_TESTS}
-  ${BOOST_EXTENDED_SOURCES}
-  )
-
-target_link_libraries(UnitTests
-  ServerLibrary
-  CoreLibrary
-  ${DCMTK_LIBRARIES}
-  ${GOOGLE_TEST_LIBRARIES}
-  )
-
-
-#####################################################################
-## Build a static library to share code between the plugins
-#####################################################################
-
-if (ENABLE_PLUGINS AND
-    (BUILD_SERVE_FOLDERS OR BUILD_MODALITY_WORKLISTS))
-  add_library(ThirdPartyPlugins STATIC
-    ${BOOST_SOURCES}
-    ${JSONCPP_SOURCES}
-    ${LIBICONV_SOURCES}
-    ${LIBICU_SOURCES}
-    OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp
-    )
-
-  if (LIBICU_LIBRARIES)
-    target_link_libraries(ThirdPartyPlugins ${LIBICU_LIBRARIES})
-  endif()
-
-  # Add the "-fPIC" option as this static library must be embedded
-  # inside shared libraries (important on UNIX)
-  set_property(
-    TARGET ThirdPartyPlugins
-    PROPERTY POSITION_INDEPENDENT_CODE ON
-    )
-endif()
-
-
-#####################################################################
-## Build the "ServeFolders" plugin
-#####################################################################
-
-if (ENABLE_PLUGINS AND BUILD_SERVE_FOLDERS)
-  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    execute_process(
-      COMMAND 
-      ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/WindowsResources.py
-      ${ORTHANC_VERSION} ServeFolders ServeFolders.dll "Orthanc plugin to serve additional folders"
-      ERROR_VARIABLE Failure
-      OUTPUT_FILE ${AUTOGENERATED_DIR}/ServeFolders.rc
-      )
-
-    if (Failure)
-      message(FATAL_ERROR "Error while computing the version information: ${Failure}")
-    endif()
-
-    list(APPEND SERVE_FOLDERS_RESOURCES ${AUTOGENERATED_DIR}/ServeFolders.rc)
-  endif()  
-
-  add_library(ServeFolders SHARED 
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Plugins/Samples/ServeFolders/Plugin.cpp
-    ${SERVE_FOLDERS_RESOURCES}
-    )
-
-  target_link_libraries(ServeFolders ThirdPartyPlugins)
-
-  set_target_properties(
-    ServeFolders PROPERTIES 
-    VERSION ${ORTHANC_VERSION} 
-    SOVERSION ${ORTHANC_VERSION}
-    )
-
-  install(
-    TARGETS ServeFolders
-    RUNTIME DESTINATION lib    # Destination for Windows
-    LIBRARY DESTINATION share/orthanc/plugins    # Destination for Linux
-    )
-endif()
-
-
-
-#####################################################################
-## Build the "ModalityWorklists" plugin
-#####################################################################
-
-if (ENABLE_PLUGINS AND BUILD_MODALITY_WORKLISTS)
-  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    execute_process(
-      COMMAND 
-      ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/WindowsResources.py
-      ${ORTHANC_VERSION} ModalityWorklists ModalityWorklists.dll "Sample Orthanc plugin to serve modality worklists"
-      ERROR_VARIABLE Failure
-      OUTPUT_FILE ${AUTOGENERATED_DIR}/ModalityWorklists.rc
-      )
-
-    if (Failure)
-      message(FATAL_ERROR "Error while computing the version information: ${Failure}")
-    endif()
-
-    list(APPEND MODALITY_WORKLISTS_RESOURCES ${AUTOGENERATED_DIR}/ModalityWorklists.rc)
-  endif()
-
-  add_library(ModalityWorklists SHARED 
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Plugins/Samples/ModalityWorklists/Plugin.cpp
-    ${MODALITY_WORKLISTS_RESOURCES}
-    )
-
-  target_link_libraries(ModalityWorklists ThirdPartyPlugins)
-
-  set_target_properties(
-    ModalityWorklists PROPERTIES 
-    VERSION ${ORTHANC_VERSION} 
-    SOVERSION ${ORTHANC_VERSION}
-    )
-
-  install(
-    TARGETS ModalityWorklists
-    RUNTIME DESTINATION lib    # Destination for Windows
-    LIBRARY DESTINATION share/orthanc/plugins    # Destination for Linux
-    )
-endif()
-
-
-
-#####################################################################
-## Build the "ConnectivityChecks" plugin
-#####################################################################
-
-if (ENABLE_PLUGINS AND BUILD_CONNECTIVITY_CHECKS)
-  include(ExternalProject)
-
-  set(Flags)
-
-  if (CMAKE_TOOLCHAIN_FILE)
-    # Take absolute path to the toolchain
-    get_filename_component(TMP ${CMAKE_TOOLCHAIN_FILE} REALPATH BASE ${CMAKE_SOURCE_DIR})
-    list(APPEND Flags -DCMAKE_TOOLCHAIN_FILE=${TMP})
-  endif()
-
-  if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
-    list(APPEND Flags
-      -DLSB_CC=${CMAKE_LSB_CC}
-      -DLSB_CXX=${CMAKE_LSB_CXX}
-      )
-  endif()
-
-  externalproject_add(ConnectivityChecks
-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/OrthancServer/Plugins/Samples/ConnectivityChecks"
-
-    # We explicitly provide a build directory, in order to avoid paths
-    # that are too long on our Visual Studio 2008 CIS
-    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ConnectivityChecks-build"
-
-    CMAKE_ARGS
-    -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
-    -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
-    -DPLUGIN_VERSION=${ORTHANC_VERSION}
-    -DSTATIC_BUILD=${STATIC_BUILD}
-    -DALLOW_DOWNLOADS=${ALLOW_DOWNLOADS}
-    -DUSE_LEGACY_JSONCPP=${USE_LEGACY_JSONCPP}
-    ${Flags}
-    )
-
-  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    if (MSVC)
-      set(Prefix "")
-    else()
-      set(Prefix "lib")  # MinGW
-    endif()
-
-    install(FILES
-      ${CMAKE_CURRENT_BINARY_DIR}/${Prefix}ConnectivityChecks.dll
-      DESTINATION "lib")
-  else()
-    list(GET CMAKE_FIND_LIBRARY_PREFIXES 0 Prefix)
-    list(GET CMAKE_FIND_LIBRARY_SUFFIXES 0 Suffix)
-    install(FILES
-      ${CMAKE_CURRENT_BINARY_DIR}/${Prefix}ConnectivityChecks${Suffix}
-      ${CMAKE_CURRENT_BINARY_DIR}/${Prefix}ConnectivityChecks${Suffix}.${ORTHANC_VERSION}
-      DESTINATION "share/orthanc/plugins")
-  endif()
-endif()
-
-
-
-#####################################################################
-## Build the companion tool to recover files compressed using Orthanc
-#####################################################################
-
-if (BUILD_RECOVER_COMPRESSED_FILE)
-  set(RECOVER_COMPRESSED_SOURCES
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Resources/Samples/Tools/RecoverCompressedFile.cpp
-    )
-
-  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
-    execute_process(
-      COMMAND 
-      ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/OrthancFramework/Resources/WindowsResources.py
-      ${ORTHANC_VERSION} OrthancRecoverCompressedFile OrthancRecoverCompressedFile.exe
-      "Lightweight, RESTful DICOM server for medical imaging"
-      ERROR_VARIABLE Failure
-      OUTPUT_FILE ${AUTOGENERATED_DIR}/OrthancRecoverCompressedFile.rc
-      )
-
-    if (Failure)
-      message(FATAL_ERROR "Error while computing the version information: ${Failure}")
-    endif()
-
-    list(APPEND RECOVER_COMPRESSED_SOURCES
-      ${AUTOGENERATED_DIR}/OrthancRecoverCompressedFile.rc
-      )
-  endif()
-
-  add_executable(OrthancRecoverCompressedFile ${RECOVER_COMPRESSED_SOURCES})
-
-  target_link_libraries(OrthancRecoverCompressedFile CoreLibrary)
-
-  install(
-    TARGETS OrthancRecoverCompressedFile
-    RUNTIME DESTINATION bin
-    )
-endif()
-
-
-
-#####################################################################
-## Generate the documentation if Doxygen is present
-#####################################################################
-
-find_package(Doxygen)
-if (DOXYGEN_FOUND)
-  configure_file(
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Resources/Orthanc.doxygen
-    ${CMAKE_CURRENT_BINARY_DIR}/Orthanc.doxygen
-    @ONLY)
-
-  configure_file(
-    ${CMAKE_SOURCE_DIR}/OrthancServer/Resources/OrthancPlugin.doxygen
-    ${CMAKE_CURRENT_BINARY_DIR}/OrthancPlugin.doxygen
-    @ONLY)
-
-  add_custom_target(doc
-    ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Orthanc.doxygen
-    COMMENT "Generating internal documentation with Doxygen" VERBATIM
-    )
-
-  add_custom_command(TARGET Orthanc
-    POST_BUILD
-    COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/OrthancPlugin.doxygen
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-    COMMENT "Generating plugin documentation with Doxygen" VERBATIM
-    )
-
-  install(
-    DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancPluginDocumentation/doc/
-    DESTINATION share/doc/orthanc/OrthancPlugin
-    )
-else()
-  message("Doxygen not found. The documentation will not be built.")
-endif()
-
-
-
-#####################################################################
-## Install the plugin SDK
-#####################################################################
-
-if (ENABLE_PLUGINS)
-  install(
-    FILES
-    OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h 
-    OrthancServer/Plugins/Include/orthanc/OrthancCDatabasePlugin.h 
-    DESTINATION include/orthanc
-    )
-endif()
-
-
-
-#####################################################################
-## Prepare the "uninstall" target
-## http://www.cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
-#####################################################################
-
-configure_file(
-    "${CMAKE_CURRENT_SOURCE_DIR}/OrthancFramework/Resources/CMake/Uninstall.cmake.in"
-    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
-    IMMEDIATE @ONLY)
-
-add_custom_target(uninstall
-    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
--- a/DarwinCompilation.txt	Mon Jun 29 19:33:22 2020 +0200
+++ b/DarwinCompilation.txt	Tue Jun 30 07:30:50 2020 +0200
@@ -21,14 +21,14 @@
 
 3) It is assumed that Orthanc source code is placed in the folder
    "~/Orthanc" and that the binaries will be compiled to
-   "~/OrthancBuild".
+   "~/Orthanc/Build".
 
 
 Prepare the build with CMake
 ----------------------------
 
-# cd ~/OrthancBuild
-# cmake -GXcode -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DSTATIC_BUILD=ON -DSTANDALONE_BUILD=ON -DALLOW_DOWNLOADS=ON ~/Orthanc
+# cd ./Build
+# cmake -GXcode -DCMAKE_OSX_DEPLOYMENT_TARGET=10.8 -DSTATIC_BUILD=ON -DSTANDALONE_BUILD=ON -DALLOW_DOWNLOADS=ON ../OrthancServer
 
 NB: Adapt the value of "CMAKE_OSX_DEPLOYMENT_TARGET" with respect to
 your version of OS X. This version can obtained by typing:
@@ -42,7 +42,7 @@
 # xcodebuild
 # ./Debug/UnitTests
 
-The binaries of Orthanc are located at "~/OrthancBuild/Debug/Orthanc".
+The binaries of Orthanc are located at "~/Orthanc/Build/Debug/Orthanc".
 
 
 Build the Release version of Orthanc
@@ -51,4 +51,4 @@
 # xcodebuild -configuration Release
 # ./Release/UnitTests
 
-The binaries of Orthanc are located at "~/OrthancBuild/Release/Orthanc".
+The binaries of Orthanc are located at "~/Orthanc/Build/Release/Orthanc".
--- a/INSTALL	Mon Jun 29 19:33:22 2020 +0200
+++ b/INSTALL	Tue Jun 30 07:30:50 2020 +0200
@@ -36,12 +36,12 @@
    directory is "~/Orthanc".
 
 2) Create a build directory. For the examples below, we assume the
-   build directory is "~/OrthancBuild".
+   build directory is "~/Orthanc/Build".
 
 3) Depending on your platform, follow the build instructions below.
 
 
-WARNING 1: If you do not create a fresh "~/OrthancBuild" directory
+WARNING 1: If you do not create a fresh "~/Orthanc/Build" directory
 after upgrading the source code (i.e. if you reuse the build directory
 that was used to build a different version of Orthanc), the build
 might fail because of changes in the compilation/linking flags. Always
@@ -74,11 +74,11 @@
 Native Windows build with Microsoft Visual Studio 2008
 ------------------------------------------------------
 
-# cd [...]\OrthancBuild
+# cd [...]\Orthanc\Build
 # cmake -DSTANDALONE_BUILD=ON -DSTATIC_BUILD=ON -DALLOW_DOWNLOADS=ON \
-  -DUSE_LEGACY_JSONCPP=ON -G "Visual Studio 9 2008" [...]\Orthanc
+  -DUSE_LEGACY_JSONCPP=ON -G "Visual Studio 9 2008" [...]\OrthancServer
 
-Then open the "[...]/OrthancBuild/Orthanc.sln" with Visual Studio.
+Then open the "[...]\Orthanc\Build\Orthanc.sln" with Visual Studio.
 
 NOTES:
 * More recent versions of Visual Studio than 2008 should also
@@ -107,37 +107,40 @@
 
 Open a Visual Studio 2015 x64 Command Prompt.
 
-# cd [...]\OrthancBuild
-# cmake -G Ninja -DSTATIC_BUILD=ON [...]\Orthanc
+# cd [...]\Orthanc\Build
+# cmake -G Ninja -DSTATIC_BUILD=ON [...]\OrthancServer
 # ninja
 
 Then, you can open an existing project in QtCreator:
-* Select the CMakeLists.txt in [...]\Orthanc
-* Import build from [...]\OrthancBuild
+* Select the CMakeLists.txt in [...]\OrthancServer
+* Import build from [...]\Build
 
 
 Instructions to include support for Asian encodings:
 
-# cmake -G Ninja -T host=x64 -DSTATIC_BUILD=ON -DBOOST_LOCALE_BACKEND=icu [...]\Orthanc
+# cmake -G Ninja -T host=x64 -DSTATIC_BUILD=ON -DBOOST_LOCALE_BACKEND=icu [...]\OrthancServer
 
 The option "-T host=x64" is necessary to prevent error "C1060:
 compiler is out of heap space" when compiling Orthanc with ICU.
 
+
 Native 64-bit Windows build with Microsoft Visual Studio 2017 (msbuild)
 -----------------------------------------------------------------------
-# cd [...]\OrthancBuild
-# cmake -G "Visual Studio 15 2017 Win64" -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\Orthanc
+# cd [...]\Build
+# cmake -G "Visual Studio 15 2017 Win64" -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\OrthancServer
 
 Instructions to include support for Asian encodings:
-# cmake -G "Visual Studio 15 2017 Win64" -T host=x64 -DSTATIC_BUILD=ON -DBOOST_LOCALE_BACKEND=icu -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\Orthanc
+# cmake -G "Visual Studio 15 2017 Win64" -T host=x64 -DSTATIC_BUILD=ON -DBOOST_LOCALE_BACKEND=icu -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\OrthancServer
+
 
 Native 64-bit Windows build with Microsoft Visual Studio 2019 (msbuild)
 -----------------------------------------------------------------------
-# cd [...]\OrthancBuild
-# cmake -G "Visual Studio 16 2019" -A x64 -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\Orthanc
+# cd [...]\Build
+# cmake -G "Visual Studio 16 2019" -A x64 -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\OrthancServer
 
 Instructions to include support for Asian encodings:
-# cmake -G "Visual Studio 16 2019" -A x64 -T host=x64 -DSTATIC_BUILD=ON -DBOOST_LOCALE_BACKEND=icu -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\Orthanc
+# cmake -G "Visual Studio 16 2019" -A x64 -T host=x64 -DSTATIC_BUILD=ON -DBOOST_LOCALE_BACKEND=icu -DMSVC_MULTIPLE_PROCESSES=ON -DSTATIC_BUILD=ON -DOPENSSL_NO_CAPIENG=ON -DALLOW_DOWNLOADS=ON [...]\OrthancServer
+
 
 Cross-Compilation for Windows under GNU/Linux
 ---------------------------------------------
@@ -146,8 +149,8 @@
 those shipped in Ubuntu 16.04 LTS, in the "mingw-w64" package). Use
 the following command to disable C++11:
 
-# cd ~/OrthancBuild
-# cmake ~/Orthanc \
+# cd ~/Orthanc/Build
+# cmake ../OrthancServer \
         -DCMAKE_BUILD_TYPE=Debug \
         -DCMAKE_TOOLCHAIN_FILE=~/Orthanc/Resources/MinGW-W64-Toolchain32.cmake \
         -DSTANDALONE_BUILD=ON \
@@ -165,8 +168,8 @@
 C++11. Use the following command to force using DCMTK 3.6.0 and
 disable C++11:
 
-# cd ~/OrthancBuild
-# cmake ~/Orthanc \
+# cd ~/Orthanc/Build
+# cmake ../OrthancServer \
         -DCMAKE_BUILD_TYPE=Debug \
         -DCMAKE_TOOLCHAIN_FILE=~/Orthanc/Resources/MinGWToolchain.cmake \
         -DSTANDALONE_BUILD=ON \
--- a/LinuxCompilation.txt	Mon Jun 29 19:33:22 2020 +0200
+++ b/LinuxCompilation.txt	Tue Jun 30 07:30:50 2020 +0200
@@ -19,18 +19,18 @@
 
 We now make the assumption that Orthanc source code is placed in the
 folder "~/Orthanc" and that the binaries will be compiled to
-"~/OrthancBuild". To build binaries with debug information:
+"~/Orthanc/Build". To build binaries with debug information:
 
-# cd ~/OrthancBuild
-# cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Debug ~/Orthanc
+# cd ./Build
+# cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Debug ../OrthancServer/
 # make
 # make doc
 
 
 To build a release version:
 
-# cd ~/OrthancBuild
-# cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release ~/Orthanc
+# cd ./Build
+# cmake -DSTATIC_BUILD=ON -DCMAKE_BUILD_TYPE=Release ../OrthancServer/
 # make
 # make doc
 
@@ -41,7 +41,7 @@
 
 Note 2- If the development package of libuuid was not installed when
 first invoking cmake, you will have to manually remove the build
-directory ("rm -rf ~/OrthancBuild") after installing this package,
+directory ("rm -rf ~/Orthanc/Build") after installing this package,
 then run cmake again.
 
 Note 3- To build the documentation, you will have to install doxygen.
@@ -56,8 +56,8 @@
 when building packages for GNU/Linux distributions. Because using
 system libraries is the default behavior, you just have to use:
 
-# cd ~/OrthancBuild
-# cmake -DCMAKE_BUILD_TYPE=Debug ~/Orthanc
+# cd ./Build
+# cmake -DCMAKE_BUILD_TYPE=Debug ../OrthancServer
 # make
 
 Note that to build the documentation, you will have to install doxygen.
@@ -89,7 +89,8 @@
         -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \
         -DDCMTK_LIBRARIES=dcmjpls \
         -DCMAKE_BUILD_TYPE=Release \
-	~/Orthanc
+	../OrthancServer/
+# make
 
 Note: Have also a look at the official package:
 http://anonscm.debian.org/viewvc/debian-med/trunk/packages/orthanc/trunk/debian/
@@ -111,7 +112,7 @@
         -DUSE_SYSTEM_LUA=OFF \
         -DDCMTK_LIBRARIES=dcmjpls \
         -DCMAKE_BUILD_TYPE=Release \
-        ~/Orthanc
+        ../OrthancServer/
 # make
 
 
@@ -129,7 +130,7 @@
         -DUSE_SYSTEM_CIVETWEB=OFF \
         -DDCMTK_LIBRARIES=dcmjpls \
         -DCMAKE_BUILD_TYPE=Release \
-        ~/Orthanc
+        ../OrthancServer/
 # make
 
 
@@ -142,7 +143,7 @@
         -DUSE_SYSTEM_CIVETWEB=OFF \
         -DDCMTK_LIBRARIES=dcmjpls \
         -DCMAKE_BUILD_TYPE=Release \
-        ~/Orthanc
+        ../OrthancServer/
 # ninja
 
 
@@ -160,7 +161,7 @@
         -DUSE_SYSTEM_CIVETWEB=OFF \
         -DDCMTK_LIBRARIES=dcmjpls \
         -DCMAKE_BUILD_TYPE=Release \
-        ~/Orthanc
+        ../OrthancServer/
 # make
 
 
@@ -187,7 +188,8 @@
          -DENABLE_CIVETWEB=OFF \
          -DSYSTEM_MONGOOSE_USE_CALLBACKS=OFF \
          -DCMAKE_BUILD_TYPE=Release \
-         ~/Orthanc
+         ../OrthancServer/
+# make
        
 Note: Have also a look at the official package:
 http://pkgs.fedoraproject.org/cgit/orthanc.git/tree/?h=f18
@@ -204,7 +206,8 @@
         -DUSE_SYSTEM_CIVETWEB=OFF \
         -DDCMTK_LIBRARIES="dcmdsig;charls;dcmjpls" \
         -DCMAKE_BUILD_TYPE=Release \
-	~/Orthanc
+	../OrthancServer/
+# make
 
 
 
@@ -247,4 +250,4 @@
 Orthanc. This is especially useful for developers. To this end, you
 would use:
 
-# CC="ccache gcc" CXX="ccache g++" cmake ~/Orthanc [Other Options]
+# CC="ccache gcc" CXX="ccache g++" cmake ../OrthancServer/ [Other Options]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/OrthancServer/CMakeLists.txt	Tue Jun 30 07:30:50 2020 +0200
@@ -0,0 +1,654 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(Orthanc)
+
+
+#####################################################################
+## Generic parameters of the Orthanc framework
+#####################################################################
+
+include(${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake)
+
+# Enable all the optional components of the Orthanc framework
+set(ENABLE_CRYPTO_OPTIONS ON)
+set(ENABLE_DCMTK ON)
+set(ENABLE_DCMTK_NETWORKING ON)
+set(ENABLE_DCMTK_TRANSCODING ON)
+set(ENABLE_GOOGLE_TEST ON)
+set(ENABLE_JPEG ON)
+set(ENABLE_LOCALE ON)
+set(ENABLE_LUA ON)
+set(ENABLE_OPENSSL_ENGINES ON)  # OpenSSL engines are necessary for PKCS11
+set(ENABLE_PNG ON)
+set(ENABLE_PUGIXML ON)
+set(ENABLE_SQLITE ON)
+set(ENABLE_WEB_CLIENT ON)
+set(ENABLE_WEB_SERVER ON)
+set(ENABLE_ZLIB ON)
+
+
+#####################################################################
+## CMake parameters tunable at the command line to configure the
+## plugins, the companion tools, and the unit tests
+#####################################################################
+
+# Parameters of the build
+set(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)")
+SET(BUILD_MODALITY_WORKLISTS ON CACHE BOOL "Whether to build the sample plugin to serve modality worklists")
+SET(BUILD_RECOVER_COMPRESSED_FILE ON CACHE BOOL "Whether to build the companion tool to recover files compressed using Orthanc")
+SET(BUILD_SERVE_FOLDERS ON CACHE BOOL "Whether to build the ServeFolders plugin")
+SET(BUILD_CONNECTIVITY_CHECKS ON CACHE BOOL "Whether to build the ConnectivityChecks plugin")
+SET(ENABLE_PLUGINS ON CACHE BOOL "Enable plugins")
+SET(UNIT_TESTS_WITH_HTTP_CONNEXIONS ON CACHE BOOL "Allow unit tests to make HTTP requests")
+
+
+#####################################################################
+## Configuration of the Orthanc framework
+#####################################################################
+
+include(${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/CMake/VisualStudioPrecompiledHeaders.cmake)
+include(${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake)
+
+
+#####################################################################
+## List of source files
+#####################################################################
+
+set(ORTHANC_SERVER_SOURCES
+  ${CMAKE_SOURCE_DIR}/Sources/Database/Compatibility/DatabaseLookup.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/Compatibility/ICreateInstance.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/Compatibility/IGetChildrenMetadata.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/Compatibility/ILookupResourceAndParent.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/Compatibility/ILookupResources.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/Compatibility/SetOfResources.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/ResourcesContent.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Database/SQLiteDatabaseWrapper.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/DicomInstanceOrigin.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/DicomInstanceToStore.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/EmbeddedResourceHttpHandler.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ExportedResource.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/LuaScripting.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancConfiguration.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancFindRequestHandler.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancGetRequestHandler.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancHttpHandler.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancInitialization.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancMoveRequestHandler.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestAnonymizeModify.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestApi.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestArchive.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestChanges.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestModalities.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestResources.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/OrthancRestApi/OrthancRestSystem.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/QueryRetrieveHandler.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Search/DatabaseConstraint.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Search/DatabaseLookup.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Search/DicomTagConstraint.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Search/HierarchicalMatcher.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/Search/ISqlLookupFormatter.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerContext.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerEnumerations.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerIndex.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/ArchiveJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/CleaningInstancesJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/DicomModalityStoreJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/DicomMoveScuJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/LuaJobManager.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/MergeStudyJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/Operations/DeleteResourceOperation.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/Operations/DicomInstanceOperationValue.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/Operations/ModifyInstanceOperation.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/Operations/StorePeerOperation.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/Operations/StoreScuOperation.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/Operations/SystemCallOperation.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/OrthancJobUnserializer.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/OrthancPeerStoreJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/ResourceModificationJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/SplitStudyJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerJobs/StorageCommitmentScpJob.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/ServerToolbox.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/SliceOrdering.cpp
+  ${CMAKE_SOURCE_DIR}/Sources/StorageCommitmentReports.cpp
+  )
+
+
+set(ORTHANC_FRAMEWORK_UNIT_TESTS
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/DicomMapTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/FileStorageTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/FrameworkTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/FromDcmtkTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/ImageProcessingTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/ImageTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/JobsTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/JpegLosslessTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/LoggingTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/LuaTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/MemoryCacheTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/RestApiTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/SQLiteChromiumTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/SQLiteTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/StreamTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/ToolboxTests.cpp
+  ${CMAKE_SOURCE_DIR}/../OrthancFramework/UnitTestsSources/ZipTests.cpp
+  )
+
+set(ORTHANC_SERVER_UNIT_TESTS
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/DatabaseLookupTests.cpp
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/LuaServerTests.cpp
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/PluginsTests.cpp
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/ServerIndexTests.cpp
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/ServerJobsTests.cpp
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/UnitTestsMain.cpp
+  ${CMAKE_SOURCE_DIR}/UnitTestsSources/VersionsTests.cpp
+  )
+
+
+if (ENABLE_PLUGINS)
+  include_directories(${CMAKE_SOURCE_DIR}/Plugins/Include)
+
+  list(APPEND ORTHANC_SERVER_SOURCES
+    ${CMAKE_SOURCE_DIR}/Plugins/Engine/OrthancPluginDatabase.cpp
+    ${CMAKE_SOURCE_DIR}/Plugins/Engine/OrthancPlugins.cpp
+    ${CMAKE_SOURCE_DIR}/Plugins/Engine/PluginsEnumerations.cpp
+    ${CMAKE_SOURCE_DIR}/Plugins/Engine/PluginsErrorDictionary.cpp
+    ${CMAKE_SOURCE_DIR}/Plugins/Engine/PluginsJob.cpp
+    ${CMAKE_SOURCE_DIR}/Plugins/Engine/PluginsManager.cpp
+    )
+
+  list(APPEND ORTHANC_SERVER_UNIT_TESTS
+    ${CMAKE_SOURCE_DIR}/UnitTestsSources/PluginsTests.cpp
+    )
+endif()
+
+
+if (CMAKE_COMPILER_IS_GNUCXX
+    AND NOT CMAKE_CROSSCOMPILING 
+    AND DCMTK_STATIC_VERSION STREQUAL "3.6.0")
+  # Add the "-pedantic" flag only on the Orthanc sources, and only if
+  # cross-compiling DCMTK 3.6.0
+  set(ORTHANC_ALL_SOURCES
+    ${ORTHANC_CORE_SOURCES_INTERNAL}
+    ${ORTHANC_DICOM_SOURCES_INTERNAL}
+    ${ORTHANC_SERVER_SOURCES}
+    ${ORTHANC_FRAMEWORK_UNIT_TESTS}
+    ${ORTHANC_SERVER_UNIT_TESTS}
+    ${CMAKE_SOURCE_DIR}/Plugins/Samples/ModalityWorklists/Plugin.cpp
+    ${CMAKE_SOURCE_DIR}/Plugins/Samples/ServeFolders/Plugin.cpp
+    ${CMAKE_SOURCE_DIR}/Sources/EmbeddedResourceHttpHandler.cpp
+    ${CMAKE_SOURCE_DIR}/Sources/main.cpp
+    )
+
+  set_source_files_properties(${ORTHANC_ALL_SOURCES}
+    PROPERTIES COMPILE_FLAGS -pedantic
+    )
+endif()
+
+
+#####################################################################
+## Autogeneration of files
+#####################################################################
+
+set(ORTHANC_EMBEDDED_FILES
+  CONFIGURATION_SAMPLE         ${CMAKE_SOURCE_DIR}/Resources/Configuration.json
+  DICOM_CONFORMANCE_STATEMENT  ${CMAKE_SOURCE_DIR}/Resources/DicomConformanceStatement.txt
+  FONT_UBUNTU_MONO_BOLD_16     ${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/Fonts/UbuntuMonoBold-16.json
+  LUA_TOOLBOX                  ${CMAKE_SOURCE_DIR}/Resources/Toolbox.lua
+  PREPARE_DATABASE             ${CMAKE_SOURCE_DIR}/Sources/Database/PrepareDatabase.sql
+  UPGRADE_DATABASE_3_TO_4      ${CMAKE_SOURCE_DIR}/Sources/Database/Upgrade3To4.sql
+  UPGRADE_DATABASE_4_TO_5      ${CMAKE_SOURCE_DIR}/Sources/Database/Upgrade4To5.sql
+
+  INSTALL_TRACK_ATTACHMENTS_SIZE
+  ${CMAKE_SOURCE_DIR}/Sources/Database/InstallTrackAttachmentsSize.sql
+  )
+
+if (STANDALONE_BUILD)
+  # We embed all the resources in the binaries for standalone builds
+  add_definitions(
+    -DORTHANC_STANDALONE=1
+    )
+
+  list(APPEND ORTHANC_EMBEDDED_FILES
+    ORTHANC_EXPLORER ${CMAKE_SOURCE_DIR}/OrthancExplorer
+    )
+else()
+  add_definitions(
+    -DORTHANC_PATH=\"${CMAKE_SOURCE_DIR}\"
+    -DORTHANC_STANDALONE=0
+    )
+endif()
+
+EmbedResources(
+  --namespace=Orthanc.ServerResources
+  --target=OrthancServerResources
+  --framework-path=${CMAKE_SOURCE_DIR}/../OrthancFramework/Sources
+  ${ORTHANC_EMBEDDED_FILES}
+  )
+
+
+if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+  execute_process(
+    COMMAND 
+    ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/WindowsResources.py
+    ${ORTHANC_VERSION} Orthanc Orthanc.exe "Lightweight, RESTful DICOM server for medical imaging"
+    ERROR_VARIABLE Failure
+    OUTPUT_FILE ${AUTOGENERATED_DIR}/Orthanc.rc
+    )
+
+  if (Failure)
+    message(FATAL_ERROR "Error while computing the version information: ${Failure}")
+  endif()
+
+  list(APPEND ORTHANC_RESOURCES ${AUTOGENERATED_DIR}/Orthanc.rc)
+endif()
+
+
+
+#####################################################################
+## Configuration of the C/C++ macros
+#####################################################################
+
+if (STATIC_BUILD)
+  add_definitions(-DORTHANC_STATIC=1)
+else()
+  add_definitions(-DORTHANC_STATIC=0)
+endif()
+
+
+if (ENABLE_PLUGINS)
+  add_definitions(-DORTHANC_ENABLE_PLUGINS=1)
+else()
+  add_definitions(-DORTHANC_ENABLE_PLUGINS=0)
+endif()
+
+
+if (UNIT_TESTS_WITH_HTTP_CONNEXIONS)
+  add_definitions(-DUNIT_TESTS_WITH_HTTP_CONNEXIONS=1)
+else()
+  add_definitions(-DUNIT_TESTS_WITH_HTTP_CONNEXIONS=0)
+endif()
+
+
+add_definitions(
+  -DORTHANC_BUILD_UNIT_TESTS=1
+  
+  # Macros for the plugins
+  -DHAS_ORTHANC_EXCEPTION=0
+  -DMODALITY_WORKLISTS_VERSION="${ORTHANC_VERSION}"
+  -DSERVE_FOLDERS_VERSION="${ORTHANC_VERSION}"
+  )
+
+
+# Setup precompiled headers for Microsoft Visual Studio
+
+# WARNING: There must be NO MORE "add_definitions()", "include()" or
+# "include_directories()" below, otherwise the generated precompiled
+# headers might get broken!
+
+if (MSVC)
+  add_definitions(-DORTHANC_USE_PRECOMPILED_HEADERS=1)
+
+  set(TMP
+    ${ORTHANC_CORE_SOURCES_INTERNAL}
+    ${ORTHANC_DICOM_SOURCES_INTERNAL}
+    )
+  
+  ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS(
+    "PrecompiledHeaders.h" "${CMAKE_SOURCE_DIR}/../OrthancFramework/Sources/PrecompiledHeaders.cpp"
+    TMP ORTHANC_CORE_PCH)
+
+  ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS(
+    "PrecompiledHeadersServer.h" "${CMAKE_SOURCE_DIR}/Sources/PrecompiledHeadersServer.cpp"
+    ORTHANC_SERVER_SOURCES ORTHANC_SERVER_PCH)
+
+  ADD_VISUAL_STUDIO_PRECOMPILED_HEADERS(
+    "PrecompiledHeadersUnitTests.h" "${CMAKE_SOURCE_DIR}/UnitTestsSources/PrecompiledHeadersUnitTests.cpp"
+    ORTHANC_SERVER_UNIT_TESTS ORTHANC_UNIT_TESTS_PCH)
+endif()
+
+
+
+#####################################################################
+## Build the core of Orthanc
+#####################################################################
+
+# "CoreLibrary" contains all the third-party dependencies and the
+# content of the "Core" folder
+add_library(CoreLibrary
+  STATIC
+  ${ORTHANC_CORE_PCH}
+  ${ORTHANC_CORE_SOURCES}
+  ${ORTHANC_DICOM_SOURCES}
+  ${AUTOGENERATED_SOURCES}
+  )
+
+if (LIBICU_LIBRARIES)
+  target_link_libraries(CoreLibrary ${LIBICU_LIBRARIES})
+endif()
+
+
+#####################################################################
+## Build the Orthanc server
+#####################################################################
+
+add_library(ServerLibrary
+  STATIC
+  ${ORTHANC_SERVER_PCH}
+  ${ORTHANC_SERVER_SOURCES}
+  )
+
+# Ensure autogenerated code is built before building ServerLibrary
+add_dependencies(ServerLibrary CoreLibrary)
+
+add_executable(Orthanc
+  ${CMAKE_SOURCE_DIR}/Sources/main.cpp
+  ${ORTHANC_RESOURCES}
+  )
+
+target_link_libraries(Orthanc ServerLibrary CoreLibrary ${DCMTK_LIBRARIES})
+
+install(
+  TARGETS Orthanc
+  RUNTIME DESTINATION sbin
+  )
+
+
+#####################################################################
+## Build the unit tests
+#####################################################################
+
+add_executable(UnitTests
+  ${GOOGLE_TEST_SOURCES}
+  ${ORTHANC_UNIT_TESTS_PCH}
+  ${ORTHANC_FRAMEWORK_UNIT_TESTS}
+  ${ORTHANC_SERVER_UNIT_TESTS}
+  ${BOOST_EXTENDED_SOURCES}
+  )
+
+target_link_libraries(UnitTests
+  ServerLibrary
+  CoreLibrary
+  ${DCMTK_LIBRARIES}
+  ${GOOGLE_TEST_LIBRARIES}
+  )
+
+
+#####################################################################
+## Build a static library to share code between the plugins
+#####################################################################
+
+if (ENABLE_PLUGINS AND
+    (BUILD_SERVE_FOLDERS OR BUILD_MODALITY_WORKLISTS))
+  add_library(ThirdPartyPlugins STATIC
+    ${BOOST_SOURCES}
+    ${JSONCPP_SOURCES}
+    ${LIBICONV_SOURCES}
+    ${LIBICU_SOURCES}
+    Plugins/Samples/Common/OrthancPluginCppWrapper.cpp
+    )
+
+  if (LIBICU_LIBRARIES)
+    target_link_libraries(ThirdPartyPlugins ${LIBICU_LIBRARIES})
+  endif()
+
+  # Add the "-fPIC" option as this static library must be embedded
+  # inside shared libraries (important on UNIX)
+  set_property(
+    TARGET ThirdPartyPlugins
+    PROPERTY POSITION_INDEPENDENT_CODE ON
+    )
+endif()
+
+
+#####################################################################
+## Build the "ServeFolders" plugin
+#####################################################################
+
+if (ENABLE_PLUGINS AND BUILD_SERVE_FOLDERS)
+  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+    execute_process(
+      COMMAND 
+      ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/WindowsResources.py
+      ${ORTHANC_VERSION} ServeFolders ServeFolders.dll "Orthanc plugin to serve additional folders"
+      ERROR_VARIABLE Failure
+      OUTPUT_FILE ${AUTOGENERATED_DIR}/ServeFolders.rc
+      )
+
+    if (Failure)
+      message(FATAL_ERROR "Error while computing the version information: ${Failure}")
+    endif()
+
+    list(APPEND SERVE_FOLDERS_RESOURCES ${AUTOGENERATED_DIR}/ServeFolders.rc)
+  endif()  
+
+  add_library(ServeFolders SHARED 
+    ${CMAKE_SOURCE_DIR}/Plugins/Samples/ServeFolders/Plugin.cpp
+    ${SERVE_FOLDERS_RESOURCES}
+    )
+
+  target_link_libraries(ServeFolders ThirdPartyPlugins)
+
+  set_target_properties(
+    ServeFolders PROPERTIES 
+    VERSION ${ORTHANC_VERSION} 
+    SOVERSION ${ORTHANC_VERSION}
+    )
+
+  install(
+    TARGETS ServeFolders
+    RUNTIME DESTINATION lib    # Destination for Windows
+    LIBRARY DESTINATION share/orthanc/plugins    # Destination for Linux
+    )
+endif()
+
+
+
+#####################################################################
+## Build the "ModalityWorklists" plugin
+#####################################################################
+
+if (ENABLE_PLUGINS AND BUILD_MODALITY_WORKLISTS)
+  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+    execute_process(
+      COMMAND 
+      ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/WindowsResources.py
+      ${ORTHANC_VERSION} ModalityWorklists ModalityWorklists.dll "Sample Orthanc plugin to serve modality worklists"
+      ERROR_VARIABLE Failure
+      OUTPUT_FILE ${AUTOGENERATED_DIR}/ModalityWorklists.rc
+      )
+
+    if (Failure)
+      message(FATAL_ERROR "Error while computing the version information: ${Failure}")
+    endif()
+
+    list(APPEND MODALITY_WORKLISTS_RESOURCES ${AUTOGENERATED_DIR}/ModalityWorklists.rc)
+  endif()
+
+  add_library(ModalityWorklists SHARED 
+    ${CMAKE_SOURCE_DIR}/Plugins/Samples/ModalityWorklists/Plugin.cpp
+    ${MODALITY_WORKLISTS_RESOURCES}
+    )
+
+  target_link_libraries(ModalityWorklists ThirdPartyPlugins)
+
+  set_target_properties(
+    ModalityWorklists PROPERTIES 
+    VERSION ${ORTHANC_VERSION} 
+    SOVERSION ${ORTHANC_VERSION}
+    )
+
+  install(
+    TARGETS ModalityWorklists
+    RUNTIME DESTINATION lib    # Destination for Windows
+    LIBRARY DESTINATION share/orthanc/plugins    # Destination for Linux
+    )
+endif()
+
+
+
+#####################################################################
+## Build the "ConnectivityChecks" plugin
+#####################################################################
+
+if (ENABLE_PLUGINS AND BUILD_CONNECTIVITY_CHECKS)
+  include(ExternalProject)
+
+  set(Flags)
+
+  if (CMAKE_TOOLCHAIN_FILE)
+    # Take absolute path to the toolchain
+    get_filename_component(TMP ${CMAKE_TOOLCHAIN_FILE} REALPATH BASE ${CMAKE_SOURCE_DIR})
+    list(APPEND Flags -DCMAKE_TOOLCHAIN_FILE=${TMP})
+  endif()
+
+  if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
+    list(APPEND Flags
+      -DLSB_CC=${CMAKE_LSB_CC}
+      -DLSB_CXX=${CMAKE_LSB_CXX}
+      )
+  endif()
+
+  externalproject_add(ConnectivityChecks
+    SOURCE_DIR "${CMAKE_SOURCE_DIR}/Plugins/Samples/ConnectivityChecks"
+
+    # We explicitly provide a build directory, in order to avoid paths
+    # that are too long on our Visual Studio 2008 CIS
+    BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ConnectivityChecks-build"
+
+    CMAKE_ARGS
+    -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+    -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}
+    -DPLUGIN_VERSION=${ORTHANC_VERSION}
+    -DSTATIC_BUILD=${STATIC_BUILD}
+    -DALLOW_DOWNLOADS=${ALLOW_DOWNLOADS}
+    -DUSE_LEGACY_JSONCPP=${USE_LEGACY_JSONCPP}
+    ${Flags}
+    )
+
+  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+    if (MSVC)
+      set(Prefix "")
+    else()
+      set(Prefix "lib")  # MinGW
+    endif()
+
+    install(FILES
+      ${CMAKE_CURRENT_BINARY_DIR}/${Prefix}ConnectivityChecks.dll
+      DESTINATION "lib")
+  else()
+    list(GET CMAKE_FIND_LIBRARY_PREFIXES 0 Prefix)
+    list(GET CMAKE_FIND_LIBRARY_SUFFIXES 0 Suffix)
+    install(FILES
+      ${CMAKE_CURRENT_BINARY_DIR}/${Prefix}ConnectivityChecks${Suffix}
+      ${CMAKE_CURRENT_BINARY_DIR}/${Prefix}ConnectivityChecks${Suffix}.${ORTHANC_VERSION}
+      DESTINATION "share/orthanc/plugins")
+  endif()
+endif()
+
+
+
+#####################################################################
+## Build the companion tool to recover files compressed using Orthanc
+#####################################################################
+
+if (BUILD_RECOVER_COMPRESSED_FILE)
+  set(RECOVER_COMPRESSED_SOURCES
+    ${CMAKE_SOURCE_DIR}/Resources/Samples/Tools/RecoverCompressedFile.cpp
+    )
+
+  if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+    execute_process(
+      COMMAND 
+      ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/WindowsResources.py
+      ${ORTHANC_VERSION} OrthancRecoverCompressedFile OrthancRecoverCompressedFile.exe
+      "Lightweight, RESTful DICOM server for medical imaging"
+      ERROR_VARIABLE Failure
+      OUTPUT_FILE ${AUTOGENERATED_DIR}/OrthancRecoverCompressedFile.rc
+      )
+
+    if (Failure)
+      message(FATAL_ERROR "Error while computing the version information: ${Failure}")
+    endif()
+
+    list(APPEND RECOVER_COMPRESSED_SOURCES
+      ${AUTOGENERATED_DIR}/OrthancRecoverCompressedFile.rc
+      )
+  endif()
+
+  add_executable(OrthancRecoverCompressedFile ${RECOVER_COMPRESSED_SOURCES})
+
+  target_link_libraries(OrthancRecoverCompressedFile CoreLibrary)
+
+  install(
+    TARGETS OrthancRecoverCompressedFile
+    RUNTIME DESTINATION bin
+    )
+endif()
+
+
+
+#####################################################################
+## Generate the documentation if Doxygen is present
+#####################################################################
+
+find_package(Doxygen)
+if (DOXYGEN_FOUND)
+  configure_file(
+    ${CMAKE_SOURCE_DIR}/Resources/Orthanc.doxygen
+    ${CMAKE_CURRENT_BINARY_DIR}/Orthanc.doxygen
+    @ONLY)
+
+  configure_file(
+    ${CMAKE_SOURCE_DIR}/Resources/OrthancPlugin.doxygen
+    ${CMAKE_CURRENT_BINARY_DIR}/OrthancPlugin.doxygen
+    @ONLY)
+
+  add_custom_target(doc
+    ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Orthanc.doxygen
+    COMMENT "Generating internal documentation with Doxygen" VERBATIM
+    )
+
+  add_custom_command(TARGET Orthanc
+    POST_BUILD
+    COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/OrthancPlugin.doxygen
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    COMMENT "Generating plugin documentation with Doxygen" VERBATIM
+    )
+
+  install(
+    DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancPluginDocumentation/doc/
+    DESTINATION share/doc/orthanc/OrthancPlugin
+    )
+else()
+  message("Doxygen not found. The documentation will not be built.")
+endif()
+
+
+
+#####################################################################
+## Install the plugin SDK
+#####################################################################
+
+if (ENABLE_PLUGINS)
+  install(
+    FILES
+    ${CMAKE_SOURCE_DIR}/Plugins/Include/orthanc/OrthancCPlugin.h 
+    ${CMAKE_SOURCE_DIR}/Plugins/Include/orthanc/OrthancCDatabasePlugin.h 
+    DESTINATION include/orthanc
+    )
+endif()
+
+
+
+#####################################################################
+## Prepare the "uninstall" target
+## http://www.cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
+#####################################################################
+
+configure_file(
+    "${CMAKE_SOURCE_DIR}/../OrthancFramework/Resources/CMake/Uninstall.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+    IMMEDIATE @ONLY)
+
+add_custom_target(uninstall
+    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
--- a/OrthancServer/Resources/Orthanc.doxygen	Mon Jun 29 19:33:22 2020 +0200
+++ b/OrthancServer/Resources/Orthanc.doxygen	Tue Jun 30 07:30:50 2020 +0200
@@ -51,7 +51,7 @@
 # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
 # to the output directory.
 
-PROJECT_LOGO           = @CMAKE_SOURCE_DIR@/OrthancServer/Resources/OrthancLogoDocumentation.png
+PROJECT_LOGO           = @CMAKE_SOURCE_DIR@/Resources/OrthancLogoDocumentation.png
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
 # into which the generated documentation will be written. If a relative path is
@@ -754,8 +754,8 @@
 # spaces.
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = @CMAKE_SOURCE_DIR@/OrthancFramework/Sources \
-                         @CMAKE_SOURCE_DIR@/OrthancServer/Sources
+INPUT                  = @CMAKE_SOURCE_DIR@/../OrthancFramework/Sources \
+                         @CMAKE_SOURCE_DIR@/Sources
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
--- a/OrthancServer/Resources/OrthancPlugin.doxygen	Mon Jun 29 19:33:22 2020 +0200
+++ b/OrthancServer/Resources/OrthancPlugin.doxygen	Tue Jun 30 07:30:50 2020 +0200
@@ -51,7 +51,7 @@
 # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
 # to the output directory.
 
-PROJECT_LOGO           = @CMAKE_SOURCE_DIR@/OrthancServer/Resources/OrthancLogoDocumentation.png
+PROJECT_LOGO           = @CMAKE_SOURCE_DIR@/Resources/OrthancLogoDocumentation.png
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
 # into which the generated documentation will be written. If a relative path is
@@ -754,8 +754,8 @@
 # spaces.
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = @CMAKE_SOURCE_DIR@/OrthancServer/Plugins/Include/orthanc/OrthancCPlugin.h \
-                         @CMAKE_SOURCE_DIR@/OrthancServer/Plugins/Include/orthanc/OrthancCDatabasePlugin.h
+INPUT                  = @CMAKE_SOURCE_DIR@/Plugins/Include/orthanc/OrthancCPlugin.h \
+                         @CMAKE_SOURCE_DIR@/Plugins/Include/orthanc/OrthancCDatabasePlugin.h
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
--- a/README	Mon Jun 29 19:33:22 2020 +0200
+++ b/README	Tue Jun 30 07:30:50 2020 +0200
@@ -71,31 +71,33 @@
 
 The following directories have separate licensing terms:
 
-* The file of the "Core/SQLite/" directory are licensed under the
-  3-clause BSD license, as they are derived from the Chromium project.
+* The files of the "OrthancFramework/Sources/SQLite/" directory are
+  licensed under the 3-clause BSD license, as they are derived from
+  the Chromium project.
 
 
 Content
 -------
 
-This archive contains the following directories:
+This archive contains the following important directories:
 
-* Core/               - The core C++ classes (independent of DCMTK)
-* OrthancExplorer/    - Code of the Web application (HTML5/Javascript)
-* OrthancServer/      - Code of the Orthanc server (depends on DCMTK)
-* Plugins/            - Code of the plugin framework
-* Resources/          - Scripts, resources for building third-party code
-* UnitTestsSources/   - Unit tests
+* OrthancFramework/Sources/          - The sources of the Orthanc framework
+* OrthancFramework/UnitTestsSources/ - Unit tests of the Orthanc framework
+* OrthancServer/OrthancExplorer/     - Code of the Orthanc Explorer (HTML5/Javascript)
+* OrthancServer/Plugins/             - Code of the plugin framework
+* OrthancServer/Resources/Samples/   - Samples
+* OrthancServer/Sources/             - Code of the Orthanc server (depends on DCMTK)
+* OrthancServer/UnitTestsSources/    - Unit tests of the Orthanc server
 
-This archive contains the following files:
+This archive contains the following important files:
 
-* AUTHORS             - The list of the authors
-* CMakeLists.txt      - The main build script
-* COPYING             - The GPLv3 license
-* INSTALL             - How to build Orthanc
-* README              - This file
-* THANKS              - The list of the contributors
-* NEWS                - The history of main changes between versions
+* AUTHORS                       - The list of the authors
+* INSTALL                       - How to build Orthanc
+* NEWS                          - The history of main changes between versions
+* OrthancFramework/COPYING      - The GPLv3 license
+* OrthancServer/CMakeLists.txt  - The main build script of the Orthanc server
+* OrthancServer/COPYING         - The GPLv3 license
+* README                        - This file
 
 We have decided not to maintain a separate "ChangeLog" file. Each
 commit to the official Orthanc Mercurial repository should be