changeset 193:20636b255424

cont
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 17 Apr 2018 11:44:39 +0200
parents afaa2e133e7d
children a1ca7cf02939
files CMakeLists.txt Resources/Orthanc/DownloadOrthancFramework.cmake
diffstat 2 files changed, 48 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt	Mon Apr 16 21:33:19 2018 +0200
+++ b/CMakeLists.txt	Tue Apr 17 11:44:39 2018 +0200
@@ -23,28 +23,30 @@
 
 set(ORTHANC_WEBVIEWER_VERSION "mainline")
 
+if (ORTHANC_WEBVIEWER_VERSION STREQUAL "mainline")
+  set(ORTHANC_FRAMEWORK_VERSION "mainline")
+  set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "hg")
+else()
+  set(ORTHANC_FRAMEWORK_VERSION "1.3.1")
+  set(ORTHANC_FRAMEWORK_DEFAULT_SOURCE "web")
+endif()
+
+
 # Parameters of the build
 set(STATIC_BUILD OFF CACHE BOOL "Static build of the third-party libraries (necessary for Windows)")
-SET(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)")
+set(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)")
 set(ALLOW_DOWNLOADS OFF CACHE BOOL "Allow CMake to download packages")
+set(ORTHANC_FRAMEWORK_SOURCE "${ORTHANC_FRAMEWORK_DEFAULT_SOURCE}" CACHE STRING "Source of the Orthanc source code (can be \"hg\", \"archive\", \"web\" or \"path\")")
+set(ORTHANC_FRAMEWORK_ARCHIVE "" CACHE STRING "Path to the Orthanc archive, if ORTHANC_FRAMEWORK_SOURCE is \"archive\"")
+set(ORTHANC_FRAMEWORK_ROOT "" CACHE STRING "Path to the Orthanc source directory, if ORTHANC_FRAMEWORK_SOURCE is \"path\"")
 
 # Advanced parameters to fine-tune linking against system libraries
 set(USE_SYSTEM_GDCM ON CACHE BOOL "Use the system version of Grassroot DICOM (GDCM)")
 set(USE_SYSTEM_ORTHANC_SDK ON CACHE BOOL "Use the system version of the Orthanc plugin SDK")
 
-# Download the Orthanc framework
-if (ORTHANC_WEBVIEWER_VERSION STREQUAL "mainline")
-  set(ORTHANC_FRAMEWORK_SOURCE "hg")
-  set(ORTHANC_FRAMEWORK_VERSION "mainline")
-else()
-  set(ORTHANC_FRAMEWORK_SOURCE "web")
-  set(ORTHANC_FRAMEWORK_VERSION "1.3.1")
-endif()
 
+# Download and setup the Orthanc framework
 include(${CMAKE_SOURCE_DIR}/Resources/Orthanc/DownloadOrthancFramework.cmake)
-
-
-# Initialize the Orthanc framework
 include(${ORTHANC_ROOT}/Resources/CMake/OrthancFrameworkParameters.cmake)
 
 set(ENABLE_LOCALE OFF)         # Disable support for locales (notably in Boost)
--- a/Resources/Orthanc/DownloadOrthancFramework.cmake	Mon Apr 16 21:33:19 2018 +0200
+++ b/Resources/Orthanc/DownloadOrthancFramework.cmake	Tue Apr 17 11:44:39 2018 +0200
@@ -43,21 +43,12 @@
 endif()
 
 
-if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg" OR
-    ORTHANC_FRAMEWORK_SOURCE STREQUAL "web")
-  if (NOT STATIC_BUILD AND
-      NOT ALLOW_DOWNLOADS)
-    message(FATAL_ERROR "CMake is not allowed to download from Internet. Please set the ALLOW_DOWNLOADS option to ON")
-  endif()
-endif()
-
-
-
 ##
 ## Detection of the requested version
 ##
 
 if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg" OR
+    ORTHANC_FRAMEWORK_SOURCE STREQUAL "archive" OR
     ORTHANC_FRAMEWORK_SOURCE STREQUAL "web")
   if (NOT DEFINED ORTHANC_FRAMEWORK_VERSION)
     message(FATAL_ERROR "The variable ORTHANC_FRAMEWORK_VERSION must be set")
@@ -65,10 +56,13 @@
 
   if (DEFINED ORTHANC_FRAMEWORK_MAJOR OR
       DEFINED ORTHANC_FRAMEWORK_MINOR OR
-      DEFINED ORTHANC_FRAMEWORK_REVISION)
+      DEFINED ORTHANC_FRAMEWORK_REVISION OR
+      DEFINED ORTHANC_FRAMEWORK_MD5)
     message(FATAL_ERROR "Some internal variable has been set")
   endif()
 
+  set(ORTHANC_FRAMEWORK_MD5 "")
+
   if (ORTHANC_FRAMEWORK_VERSION STREQUAL "mainline")
     set(ORTHANC_FRAMEWORK_BRANCH "default")
 
@@ -85,6 +79,10 @@
         NOT ORTHANC_FRAMEWORK_REVISION MATCHES "^[0-9]+$")
       message("Bad version of the Orthanc framework: ${ORTHANC_FRAMEWORK_VERSION}")
     endif()
+
+    if (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.3.1")
+      set(ORTHANC_FRAMEWORK_MD5 "dac95bd6cf86fb19deaf4e612961f378")
+    endif()
   endif()
 endif()
 
@@ -140,7 +138,7 @@
   endif()
   
   if (NOT EXISTS ${ORTHANC_FRAMEWORK_ROOT}/Resources/CMake/OrthancFrameworkParameters.cmake)
-    message(FATAL_ERROR "Directory not containing a version of Orthanc: ${ORTHANC_FRAMEWORK_ROOT}")
+    message(FATAL_ERROR "Directory not containing the source code of Orthanc: ${ORTHANC_FRAMEWORK_ROOT}")
   endif()
   
   set(ORTHANC_ROOT ${ORTHANC_FRAMEWORK_ROOT})
@@ -153,8 +151,12 @@
 ##
 
 if (ORTHANC_FRAMEWORK_SOURCE STREQUAL "hg")
+  if (NOT STATIC_BUILD AND NOT ALLOW_DOWNLOADS)
+    message(FATAL_ERROR "CMake is not allowed to download from Internet. Please set the ALLOW_DOWNLOADS option to ON")
+  endif()
+
   set(ORTHANC_ROOT ${CMAKE_BINARY_DIR}/orthanc)
-  
+
   if (NOT EXISTS ${ORTHANC_ROOT})
     message("Forking the Orthanc source repository using Mercurial")
 
@@ -193,20 +195,6 @@
   if (NOT DEFINED ORTHANC_FRAMEWORK_ARCHIVE)
     message(FATAL_ERROR "The variable ORTHANC_FRAMEWORK_ARCHIVE must provide the path to the sources of Orthanc")
   endif()
-
-  set(RE "^.*/Orthanc-([0-9]+)\\.([0-9]+)\\.([0-9]+).tar.gz$")
-  string(REGEX REPLACE ${RE} "\\1" ORTHANC_FRAMEWORK_MAJOR ${ORTHANC_FRAMEWORK_ARCHIVE})
-  string(REGEX REPLACE ${RE} "\\2" ORTHANC_FRAMEWORK_MINOR ${ORTHANC_FRAMEWORK_ARCHIVE})
-  string(REGEX REPLACE ${RE} "\\3" ORTHANC_FRAMEWORK_REVISION ${ORTHANC_FRAMEWORK_ARCHIVE})
-
-  if (NOT ORTHANC_FRAMEWORK_MAJOR MATCHES "^[0-9]+$" OR
-      NOT ORTHANC_FRAMEWORK_MINOR MATCHES "^[0-9]+$" OR
-      NOT ORTHANC_FRAMEWORK_REVISION MATCHES "^[0-9]+$")
-    message("Cannot detect the version of this release of Orthanc: ${ORTHANC_FRAMEWORK_ARCHIVE}")
-  endif()
-
-  set(ORTHANC_FRAMEWORK_VERSION ${ORTHANC_FRAMEWORK_MAJOR}.${ORTHANC_FRAMEWORK_MINOR}.${ORTHANC_FRAMEWORK_REVISION})
-  message("Detected version of Orthanc: ${ORTHANC_FRAMEWORK_VERSION}")
 endif()
 
 
@@ -219,16 +207,14 @@
   set(ORTHANC_FRAMEMORK_FILENAME Orthanc-${ORTHANC_FRAMEWORK_VERSION}.tar.gz)
   set(ORTHANC_FRAMEWORK_URL "https://www.orthanc-server.com/downloads/get.php?path=/orthanc/${ORTHANC_FRAMEMORK_FILENAME}")
 
-  if (ORTHANC_FRAMEWORK_VERSION STREQUAL "1.3.1")
-    set(ORTHANC_FRAMEWORK_MD5 "dac95bd6cf86fb19deaf4e612961f378")
-  else()
-    message(FATAL_ERROR "Unknown release of Orthanc: ${ORTHANC_FRAMEWORK_VERSION}")
-  endif()
-
   set(ORTHANC_FRAMEWORK_ARCHIVE "${CMAKE_SOURCE_DIR}/ThirdPartyDownloads/${ORTHANC_FRAMEMORK_FILENAME}")
 
   if (NOT EXISTS "${ORTHANC_FRAMEWORK_ARCHIVE}")
-    message("Downloading ${ORTHANC_FRAMEWORK_ARCHIVE}")
+    if (NOT STATIC_BUILD AND NOT ALLOW_DOWNLOADS)
+      message(FATAL_ERROR "CMake is not allowed to download from Internet. Please set the ALLOW_DOWNLOADS option to ON")
+    endif()
+
+    message("Downloading: ${ORTHANC_FRAMEWORK_ARCHIVE}")
 
     file(DOWNLOAD
       "${ORTHANC_FRAMEWORK_URL}" "${ORTHANC_FRAMEWORK_ARCHIVE}" 
@@ -237,12 +223,7 @@
       INACTIVITY_TIMEOUT 60
       )
   else()
-    message("Using local copy of ${ORTHANC_FRAMEWORK_URL}")
-
-    file(MD5 ${ORTHANC_FRAMEWORK_ARCHIVE} ActualMD5)
-    if (NOT "${ActualMD5}" STREQUAL "${ORTHANC_FRAMEWORK_MD5}")
-      message(FATAL_ERROR "The MD5 hash of a previously download file is invalid: ${ORTHANC_FRAMEWORK_ARCHIVE}")
-    endif()
+    message("Using local copy of: ${ORTHANC_FRAMEWORK_URL}")
   endif()  
 endif()
 
@@ -258,10 +239,21 @@
     ORTHANC_FRAMEWORK_SOURCE STREQUAL "web")
 
   if (NOT DEFINED ORTHANC_FRAMEWORK_ARCHIVE OR
-      NOT DEFINED ORTHANC_FRAMEWORK_VERSION)
+      NOT DEFINED ORTHANC_FRAMEWORK_VERSION OR
+      NOT DEFINED ORTHANC_FRAMEWORK_MD5)
     message(FATAL_ERROR "Internal error")
   endif()
 
+  if (ORTHANC_FRAMEWORK_MD5 STREQUAL "")
+    message(FATAL_ERROR "Unknown release of Orthanc: ${ORTHANC_FRAMEWORK_VERSION}")
+  endif()
+
+  file(MD5 ${ORTHANC_FRAMEWORK_ARCHIVE} ActualMD5)
+
+  if (NOT "${ActualMD5}" STREQUAL "${ORTHANC_FRAMEWORK_MD5}")
+    message(FATAL_ERROR "The MD5 hash of the Orthanc archive is invalid: ${ORTHANC_FRAMEWORK_ARCHIVE}")
+  endif()
+
   set(ORTHANC_ROOT "${CMAKE_BINARY_DIR}/Orthanc-${ORTHANC_FRAMEWORK_VERSION}")
 
   if (NOT IS_DIRECTORY "${ORTHANC_ROOT}")
@@ -269,7 +261,7 @@
       message(FATAL_ERROR "Archive should have the \".tar.gz\" extension: ${ORTHANC_FRAMEWORK_ARCHIVE}")
     endif()
     
-    message("Uncompressing ${ORTHANC_FRAMEWORK_ARCHIVE}")
+    message("Uncompressing: ${ORTHANC_FRAMEWORK_ARCHIVE}")
 
     if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
       # How to silently extract files using 7-zip