changeset 102:50803058462d

simplified build process for LSB
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 01 Sep 2025 16:54:37 +0200
parents 8a9048d6e5e7
children ab1e8b8f127d
files Resources/CMake/GdcmConfiguration.cmake Resources/CMake/gdcm-2.8.9-no-networking.patch Resources/CMake/gdcm-3.0.24-no-networking.patch
diffstat 3 files changed, 84 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/Resources/CMake/GdcmConfiguration.cmake	Mon Sep 01 15:35:21 2025 +0200
+++ b/Resources/CMake/GdcmConfiguration.cmake	Mon Sep 01 16:54:37 2025 +0200
@@ -73,25 +73,25 @@
   # Don't build manpages (since gdcm 2.8.4)
   list(APPEND Flags -DGDCM_BUILD_DOCBOOK_MANPAGES=OFF)
 
-  if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
-    # Trick to disable the compilation of socket++ by gdcm, which is
+  if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Linux" OR
+      "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Darwin")
+    # Patch to disable the compilation of socket++ by gdcm, which is
     # incompatible with LSB, but fortunately only required for DICOM
-    # Networking
-    list(APPEND Flags -DGDCM_USE_SYSTEM_SOCKETXX=ON)
+    # Networking. We don't do this on Windows, as the "patch.exe"
+    # command-line tool will certainly be unavailable. (*)
+    if (USE_LEGACY_GDCM)
+      set(GDCM_PATCH "${CMAKE_SOURCE_DIR}/Resources/CMake/gdcm-2.8.9-no-networking.patch")
+    else()
+      set(GDCM_PATCH "${CMAKE_SOURCE_DIR}/Resources/CMake/gdcm-3.0.24-no-networking.patch")
+    endif()
 
-    # Detect the number of CPU cores to run "make" with as much
-    # parallelism as possible
-    include(ProcessorCount)
-    ProcessorCount(N)
-    if (NOT N EQUAL 0)
-      set(MAKE_PARALLEL -j${N})
+    find_program(PATCH_EXECUTABLE patch)
+    if (${PATCH_EXECUTABLE} MATCHES "PATCH_EXECUTABLE-NOTFOUND")
+      message(FATAL_ERROR "Please install the 'patch' standard command-line tool")
     endif()
-      
-    # For Linux Standard Base, avoid building incompatible target gdcmMEXD (*)
-    set(BUILD_COMMAND BUILD_COMMAND
-      ${CMAKE_MAKE_PROGRAM} ${MAKE_PARALLEL}
-      gdcmMSFF gdcmcharls gdcmDICT gdcmDSED gdcmIOD gdcmjpeg8
-      gdcmjpeg12 gdcmjpeg16 gdcmopenjp2 gdcmzlib gdcmCommon gdcmexpat gdcmuuid)
+
+    set(PATCH_COMMAND PATCH_COMMAND
+      ${PATCH_EXECUTABLE} -p1 -N -i ${GDCM_PATCH})
   endif()
 
   include(ExternalProject)
@@ -99,8 +99,8 @@
     URL "${GDCM_URL}"
     URL_MD5 "${GDCM_MD5}"
     TIMEOUT 60
+    ${PATCH_COMMAND}   # Apply patch to remove networking support (*)
     CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} "-DCMAKE_INSTALL_PREFIX=${GDCM_INSTALL_DIR}" ${Flags}
-    ${BUILD_COMMAND}    # Customize "make", only for Linux Standard Base (*)
     )
 
   if(MSVC)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/CMake/gdcm-2.8.9-no-networking.patch	Mon Sep 01 16:54:37 2025 +0200
@@ -0,0 +1,34 @@
+diff -urEb gdcm-2.8.9.orig/CMakeLists.txt gdcm-2.8.9/CMakeLists.txt
+--- gdcm-2.8.9.orig/CMakeLists.txt	2025-09-01 16:44:15.260052498 +0200
++++ gdcm-2.8.9/CMakeLists.txt	2025-09-01 16:45:00.788774640 +0200
+@@ -1031,7 +1031,7 @@
+   "${GDCM_BINARY_DIR}/Source/Common"
+   "${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition"
+   "${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat"
+-  "${GDCM_SOURCE_DIR}/Source/MessageExchangeDefinition"
++  # "${GDCM_SOURCE_DIR}/Source/MessageExchangeDefinition"
+   "${GDCM_SOURCE_DIR}/Source/DataDictionary"
+   "${GDCM_SOURCE_DIR}/Source/InformationObjectDefinition"
+   )
+diff -urEb gdcm-2.8.9.orig/Source/CMakeLists.txt gdcm-2.8.9/Source/CMakeLists.txt
+--- gdcm-2.8.9.orig/Source/CMakeLists.txt	2025-09-01 16:44:15.246052583 +0200
++++ gdcm-2.8.9/Source/CMakeLists.txt	2025-09-01 16:44:47.887853385 +0200
+@@ -6,5 +6,5 @@
+   DataStructureAndEncodingDefinition
+   InformationObjectDefinition
+   MediaStorageAndFileFormat
+-  MessageExchangeDefinition
++  # MessageExchangeDefinition
+   )
+diff -urEb gdcm-2.8.9.orig/Utilities/CMakeLists.txt gdcm-2.8.9/Utilities/CMakeLists.txt
+--- gdcm-2.8.9.orig/Utilities/CMakeLists.txt	2025-09-01 16:44:15.256052522 +0200
++++ gdcm-2.8.9/Utilities/CMakeLists.txt	2025-09-01 16:44:41.502892354 +0200
+@@ -125,7 +125,7 @@
+   set(SOCKETXX_INSTALL_BIN_DIR      ${GDCM_INSTALL_BIN_DIR})
+   set(SOCKETXX_INSTALL_LIB_DIR      ${GDCM_INSTALL_LIB_DIR})
+   set(SOCKETXX_INSTALL_INCLUDE_DIR  ${GDCM_INSTALL_INCLUDE_DIR}/socketxx)
+-  subdirs(socketxx)
++  # subdirs(socketxx)
+ endif()
+ 
+ add_subdirectory(gdcmrle)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/CMake/gdcm-3.0.24-no-networking.patch	Mon Sep 01 16:54:37 2025 +0200
@@ -0,0 +1,33 @@
+diff -urEb GDCM-3.0.24.orig/CMakeLists.txt GDCM-3.0.24/CMakeLists.txt
+--- GDCM-3.0.24.orig/CMakeLists.txt	2025-09-01 16:43:54.922176587 +0200
++++ GDCM-3.0.24/CMakeLists.txt	2025-09-01 16:53:23.970874745 +0200
+@@ -1113,7 +1113,7 @@
+   "${GDCM_BINARY_DIR}/Source/Common"
+   "${GDCM_SOURCE_DIR}/Source/DataStructureAndEncodingDefinition"
+   "${GDCM_SOURCE_DIR}/Source/MediaStorageAndFileFormat"
+-  "${GDCM_SOURCE_DIR}/Source/MessageExchangeDefinition"
++  # "${GDCM_SOURCE_DIR}/Source/MessageExchangeDefinition"
+   "${GDCM_SOURCE_DIR}/Source/DataDictionary"
+   "${GDCM_SOURCE_DIR}/Source/InformationObjectDefinition"
+   )
+diff -urEb GDCM-3.0.24.orig/Source/CMakeLists.txt GDCM-3.0.24/Source/CMakeLists.txt
+--- GDCM-3.0.24.orig/Source/CMakeLists.txt	2025-09-01 16:43:54.925176568 +0200
++++ GDCM-3.0.24/Source/CMakeLists.txt	2025-09-01 16:53:47.762740783 +0200
+@@ -5,4 +5,4 @@
+ add_subdirectory( DataStructureAndEncodingDefinition )
+ add_subdirectory( InformationObjectDefinition )
+ add_subdirectory( MediaStorageAndFileFormat )
+-add_subdirectory( MessageExchangeDefinition )
++# add_subdirectory( MessageExchangeDefinition )
+diff -urEb GDCM-3.0.24.orig/Utilities/CMakeLists.txt GDCM-3.0.24/Utilities/CMakeLists.txt
+--- GDCM-3.0.24.orig/Utilities/CMakeLists.txt	2025-09-01 16:43:54.942176465 +0200
++++ GDCM-3.0.24/Utilities/CMakeLists.txt	2025-09-01 16:53:37.253800011 +0200
+@@ -122,7 +122,7 @@
+   set(SOCKETXX_INSTALL_BIN_DIR      ${GDCM_INSTALL_BIN_DIR})
+   set(SOCKETXX_INSTALL_LIB_DIR      ${GDCM_INSTALL_LIB_DIR})
+   set(SOCKETXX_INSTALL_INCLUDE_DIR  ${GDCM_INSTALL_INCLUDE_DIR}/socketxx)
+-  add_subdirectory(socketxx)
++  # add_subdirectory(socketxx)
+ endif()
+ 
+ add_subdirectory(gdcmrle)