Procházet zdrojové kódy

Merge branch 'update-find-dcmtk-to-support-no-module'

* update-find-dcmtk-to-support-no-module:
  Update FindDCMTK.cmake module to support NO_MODULE mode
Jean-Christophe Fillion-Robin před 12 roky
rodič
revize
8cf58e5e58
1 změnil soubory, kde provedl 61 přidání a 13 odebrání
  1. 61 13
      Utilities/CMake/FindDCMTK.cmake

+ 61 - 13
Utilities/CMake/FindDCMTK.cmake

@@ -34,16 +34,26 @@
 # Modified for EasyViz by Thomas Sondergaard.
 #
 
-# prefer DCMTK_DIR over default system paths like /usr/lib
-set(CMAKE_PREFIX_PATH ${DCMTK_DIR}/lib ${CMAKE_PREFIX_PATH}) # this is given to FIND_LIBRARY or FIND_PATH
+#
+# First, try to use NO_MODULE
+set(_DCMTK_REQUIRED)
+set(_DCMTK_QUIET)
+if(DCMTK_FIND_QUIETLY)
+  set(_DCMTK_QUIET QUIET)
+endif()
+if(DCMTK_FIND_REQUIRED)
+  set(_DCMTK_REQUIRED REQUIRED)
+endif()
+find_package(DCMTK ${_DCMTK_REQUIRED} ${_DCMTK_QUIET} NO_MODULE)
+if(DCMTK_FOUND
+    AND NOT "x" STREQUAL "x${DCMTK_LIBRARIES}"
+    AND NOT "x" STREQUAL "x${DCMTK_INCLUDE_DIRS}")
+  return()
+endif()
 
-if(NOT DCMTK_FOUND AND NOT DCMTK_DIR)
-  set(DCMTK_DIR
-    "/usr/include/dcmtk/"
-    CACHE
-    PATH
-    "Root of DCMTK source tree (optional).")
-  mark_as_advanced(DCMTK_DIR)
+# prefer DCMTK_DIR over default system paths like /usr/lib
+if(DCMTK_DIR)
+  set(CMAKE_PREFIX_PATH ${DCMTK_DIR}/lib ${CMAKE_PREFIX_PATH}) # this is given to FIND_LIBRARY or FIND_PATH
 endif()
 
 # Find all libraries, store debug and release separately
@@ -118,6 +128,20 @@ if(CMAKE_THREAD_LIBS_INIT)
   list(APPEND DCMTK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
 endif()
 
+#
+# SPECIFIC CASE FOR DCMTK BUILD DIR as DCMTK_DIR
+# (as opposed to a DCMTK install dir)
+# Have to find the source directory.
+if(EXISTS ${DCMTK_DIR}/CMakeCache.txt)
+          load_cache(${DCMTK_DIR} READ_WITH_PREFIX "EXT"
+          DCMTK_SOURCE_DIR)
+  if(NOT EXISTS ${EXTDCMTK_SOURCE_DIR})
+    message(FATAL_ERROR
+      "DCMTK build directory references
+nonexistant DCMTK source directory ${EXTDCMTK_SOURCE_DIR}")
+  endif()
+endif()
+
 set(DCMTK_config_TEST_HEADER osconfig.h)
 set(DCMTK_dcmdata_TEST_HEADER dctypes.h)
 set(DCMTK_dcmimage_TEST_HEADER dicoimg.h)
@@ -130,6 +154,10 @@ set(DCMTK_dcmsign_TEST_HEADER sicert.h)
 set(DCMTK_dcmsr_TEST_HEADER dsrtree.h)
 set(DCMTK_dcmtls_TEST_HEADER tlslayer.h)
 set(DCMTK_ofstd_TEST_HEADER ofstdinc.h)
+set(DCMTK_oflog_TEST_HEADER oflog.h)
+set(DCMTK_dcmjpls_TEST_HEADER djlsutil.h)
+
+set(DCMTK_INCLUDE_DIR_NAMES)
 
 foreach(dir
     config
@@ -137,28 +165,43 @@ foreach(dir
     dcmimage
     dcmimgle
     dcmjpeg
+    dcmjpls
     dcmnet
     dcmpstat
     dcmqrdb
     dcmsign
     dcmsr
     dcmtls
-    ofstd)
+    ofstd
+    oflog)
+  if(EXTDCMTK_SOURCE_DIR)
+    set(SOURCE_DIR_PATH
+      ${EXTDCMTK_SOURCE_DIR}/${dir}/include/dcmtk/${dir})
+  endif()
   find_path(DCMTK_${dir}_INCLUDE_DIR
     ${DCMTK_${dir}_TEST_HEADER}
     PATHS
     ${DCMTK_DIR}/${dir}/include
     ${DCMTK_DIR}/${dir}
     ${DCMTK_DIR}/include/dcmtk/${dir}
-    ${DCMTK_DIR}/include/${dir})
+    ${DCMTK_DIR}/${dir}/include/dcmtk/${dir}
+    ${DCMTK_DIR}/include/${dir}
+    ${SOURCE_DIR_PATH}
+    )
 
   mark_as_advanced(DCMTK_${dir}_INCLUDE_DIR)
-  #message("** DCMTKs ${dir} found at ${DCMTK_${dir}_INCLUDE_DIR}")
+  list(APPEND DCMTK_INCLUDE_DIR_NAMES DCMTK_${dir}_INCLUDE_DIR)
 
   if(DCMTK_${dir}_INCLUDE_DIR)
+    # add the 'include' path so eg
+    #include "dcmtk/dcmimgle/dcmimage.h"
+    # works
+    get_filename_component(_include ${DCMTK_${dir}_INCLUDE_DIR} PATH)
+    get_filename_component(_include ${_include} PATH)
     list(APPEND
       DCMTK_INCLUDE_DIRS
-      ${DCMTK_${dir}_INCLUDE_DIR})
+      ${DCMTK_${dir}_INCLUDE_DIR}
+      ${_include})
   endif()
 endforeach()
 
@@ -179,3 +222,8 @@ endif()
 
 # Compatibility: This variable is deprecated
 set(DCMTK_INCLUDE_DIR ${DCMTK_INCLUDE_DIRS})
+
+find_package_handle_standard_args(DCMTK
+  REQUIRED_VARS ${DCMTK_INCLUDE_DIR_NAMES} DCMTK_LIBRARIES
+  FAIL_MESSAGE "Please set DCMTK_DIR and re-run configure")
+