Bläddra i källkod

Merge remote-tracking branch 'cjgoch/enable-debug-and-release-superbuild-with-dcmtk'

* cjgoch/enable-debug-and-release-superbuild-with-dcmtk:
  rearranged libraries according to dependency
  Add pthread to Link libraries and merge loops
  Added pthread package search
  Separated finding libraries and including them based on build type
  Removed debug output
  Debug and release libs are now stored separately
Sascha Zelzer 12 år sedan
förälder
incheckning
656f4065f8
2 ändrade filer med 139 tillägg och 320 borttagningar
  1. 3 0
      CMakeExternals/DCMTK.cmake
  2. 136 320
      Utilities/CMake/FindDCMTK.cmake

+ 3 - 0
CMakeExternals/DCMTK.cmake

@@ -48,6 +48,9 @@ if(${add_project})
         CMAKE_GENERATOR ${gen}
         UPDATE_COMMAND ""
         BUILD_COMMAND ""
+        CMAKE_ARGS
+          -DDCMTK_INSTALL_BINDIR:STRING=bin/${CMAKE_CFG_INTDIR}
+          -DDCMTK_INSTALL_LIBDIR:STRING=lib/${CMAKE_CFG_INTDIR}
         CMAKE_CACHE_ARGS
           ${ep_common_cache_args}
           -DBUILD_SHARED_LIBS:BOOL=OFF

+ 136 - 320
Utilities/CMake/FindDCMTK.cmake

@@ -1,7 +1,9 @@
+# adapted version of FindDCMTK, better suited for super-builds
+
 # - find DCMTK libraries and applications
 #
 
-#  DCMTK_INCLUDE_DIR   - Directories to include to use DCMTK
+#  DCMTK_INCLUDE_DIRS   - Directories to include to use DCMTK
 #  DCMTK_LIBRARIES     - Files to link against to use DCMTK
 #  DCMTK_FOUND         - If false, don't try to use DCMTK
 #  DCMTK_DIR           - (optional) Source directory for DCMTK
@@ -13,7 +15,8 @@
 
 #=============================================================================
 # Copyright 2004-2009 Kitware, Inc.
-# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
+# Copyright 2009-2010 Mathieu Malaterre <mathieu.malaterre@gmail.com>
+# Copyright 2010 Thomas Sondergaard <ts@medical-insight.com>
 #
 # Distributed under the OSI-approved BSD License (the "License");
 # see accompanying file Copyright.txt for details.
@@ -28,338 +31,151 @@
 #
 # Written for VXL by Amitha Perera.
 # Upgraded for GDCM by Mathieu Malaterre.
-# 
-
-if( NOT DCMTK_FOUND )
-  set( DCMTK_DIR "/usr/include/dcmtk/"
-    CACHE PATH "Root of DCMTK source tree (optional)." )
-  mark_as_advanced( DCMTK_DIR )
-endif()
-
-find_path( DCMTK_config_INCLUDE_DIR osconfig.h
-  PATHS
-    ${DCMTK_DIR}/config/include
-    ${DCMTK_DIR}/config
-    ${DCMTK_DIR}/include/dcmtk/config
-    ${DCMTK_DIR}/include
-  NO_DEFAULT_PATH
-  
-)
-
-find_path( DCMTK_ofstd_INCLUDE_DIR ofstdinc.h
-  PATHS
-    ${DCMTK_DIR}/ofstd/include
-    ${DCMTK_DIR}/ofstd
-    ${DCMTK_DIR}/include/ofstd
-    ${DCMTK_DIR}/include/dcmtk/ofstd
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_ofstd_LIBRARY ofstd
-  PATHS
-    ${DCMTK_DIR}/ofstd/libsrc
-    ${DCMTK_DIR}/ofstd/libsrc/Release
-    ${DCMTK_DIR}/ofstd/libsrc/Debug
-    ${DCMTK_DIR}/ofstd/Release
-    ${DCMTK_DIR}/ofstd/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_path( DCMTK_oflog_INCLUDE_DIR logger.h
-  PATHS
-    ${DCMTK_DIR}/oflog/include
-    ${DCMTK_DIR}/oflog
-    ${DCMTK_DIR}/include/oflog
-    ${DCMTK_DIR}/include/dcmtk/oflog
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_oflog_LIBRARY oflog
-  PATHS
-    ${DCMTK_DIR}/oflog/libsrc
-    ${DCMTK_DIR}/oflog/libsrc/Release
-    ${DCMTK_DIR}/oflog/libsrc/Debug
-    ${DCMTK_DIR}/oflog/Release
-    ${DCMTK_DIR}/oflog/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-
-
-find_path( DCMTK_dcmdata_INCLUDE_DIR dctypes.h
-  PATHS
-    ${DCMTK_DIR}/include/dcmdata
-    ${DCMTK_DIR}/include/dcmtk/dcmdata
-    ${DCMTK_DIR}/dcmdata
-    ${DCMTK_DIR}/dcmdata/include
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_dcmdata_LIBRARY dcmdata
-  PATHS
-    ${DCMTK_DIR}/dcmdata/libsrc
-    ${DCMTK_DIR}/dcmdata/libsrc/Release
-    ${DCMTK_DIR}/dcmdata/libsrc/Debug
-    ${DCMTK_DIR}/dcmdata/Release
-    ${DCMTK_DIR}/dcmdata/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_path( DCMTK_dcmjpeg_INCLUDE_DIR djdecode.h
-  PATHS
-    ${DCMTK_DIR}/include/dcmjpeg
-    ${DCMTK_DIR}/include/dcmtk/dcmjpeg
-    ${DCMTK_DIR}/dcmjpeg
-    ${DCMTK_DIR}/dcmjpeg/include
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_dcmjpeg_LIBRARY dcmjpeg
-  PATHS
-    ${DCMTK_DIR}/dcmjpeg/libsrc
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Release
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Debug
-    ${DCMTK_DIR}/dcmjpeg/Release
-    ${DCMTK_DIR}/dcmjpeg/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_ijg12_LIBRARY ijg12
-  PATHS
-    ${DCMTK_DIR}/dcmjpeg/libsrc
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Release
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Debug
-    ${DCMTK_DIR}/dcmjpeg/Release
-    ${DCMTK_DIR}/dcmjpeg/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_ijg16_LIBRARY ijg16
-  PATHS
-    ${DCMTK_DIR}/dcmjpeg/libsrc
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Release
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Debug
-    ${DCMTK_DIR}/dcmjpeg/Release
-    ${DCMTK_DIR}/dcmjpeg/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_ijg8_LIBRARY ijg8
-  PATHS
-    ${DCMTK_DIR}/dcmjpeg/libsrc
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Release
-    ${DCMTK_DIR}/dcmjpeg/libsrc/Debug
-    ${DCMTK_DIR}/dcmjpeg/Release
-    ${DCMTK_DIR}/dcmjpeg/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_path( DCMTK_dcmnet_INCLUDE_DIR dimse.h
-  PATHS
-    ${DCMTK_DIR}/include/dcmnet
-    ${DCMTK_DIR}/include/dcmtk/dcmnet
-    ${DCMTK_DIR}/dcmnet
-    ${DCMTK_DIR}/dcmnet/include
-  NO_DEFAULT_PATH
-)
+# Modified for EasyViz by Thomas Sondergaard.
+#
 
-find_library( DCMTK_dcmnet_LIBRARY dcmnet
-  PATHS
-    ${DCMTK_DIR}/dcmnet/libsrc
-    ${DCMTK_DIR}/dcmnet/libsrc/Release
-    ${DCMTK_DIR}/dcmnet/libsrc/Debug
-    ${DCMTK_DIR}/dcmnet/Release
-    ${DCMTK_DIR}/dcmnet/Debug
-    ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
+# 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
 
-find_path( DCMTK_dcmimgle_INCLUDE_DIR dcmimage.h
-  PATHS
-    ${DCMTK_DIR}/dcmimgle/include
-    ${DCMTK_DIR}/dcmimgle
-    ${DCMTK_DIR}/include/dcmimgle
-    ${DCMTK_DIR}/include/dcmtk/dcmimgle
-  NO_DEFAULT_PATH
-)
+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)
+endif()
 
-find_library( DCMTK_dcmimgle_LIBRARY dcmimgle
-  PATHS
-    ${DCMTK_DIR}/dcmimgle/libsrc
-    ${DCMTK_DIR}/dcmimgle/libsrc/Release
-    ${DCMTK_DIR}/dcmimgle/libsrc/Debug
-    ${DCMTK_DIR}/dcmimgle/Release
-    ${DCMTK_DIR}/dcmimgle/Debug
+# Find all libraries, store debug and release separately
+foreach(lib
+    dcmpstat
+    dcmsr
+    dcmsign
+    dcmtls
+    dcmqrdb
+    dcmnet
+    dcmjpeg
+    dcmimage
+    dcmimgle
+    dcmdata
+    oflog
+    ofstd
+    ijg12
+    ijg16
+    ijg8
+    )
+
+  # Find Release libraries
+  find_library(DCMTK_${lib}_LIBRARY_RELEASE
+    ${lib}
+    PATHS
+    ${DCMTK_DIR}/${lib}/libsrc
+    ${DCMTK_DIR}/${lib}/libsrc/Release
+    ${DCMTK_DIR}/${lib}/Release
     ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-find_path( DCMTK_dcmimage_INCLUDE_DIR diregist.h
-  PATHS
-    ${DCMTK_DIR}/dcmimage/include
-    ${DCMTK_DIR}/dcmimage
-    ${DCMTK_DIR}/include/dcmimage
-    ${DCMTK_DIR}/include/dcmtk/dcmimage
-  NO_DEFAULT_PATH
-)
-
-find_library( DCMTK_dcmimage_LIBRARY dcmimage
-  PATHS
-    ${DCMTK_DIR}/dcmimage/libsrc
-    ${DCMTK_DIR}/dcmimage/libsrc/Release
-    ${DCMTK_DIR}/dcmimage/libsrc/Debug
-    ${DCMTK_DIR}/dcmimage/Release
-    ${DCMTK_DIR}/dcmimage/Debug
+    ${DCMTK_DIR}/lib/Release
+    ${DCMTK_DIR}/dcmjpeg/lib${lib}/Release
+    NO_DEFAULT_PATH
+    )
+
+  # Find Debug libraries
+  find_library(DCMTK_${lib}_LIBRARY_DEBUG
+    ${lib}
+    PATHS
+    ${DCMTK_DIR}/${lib}/libsrc
+    ${DCMTK_DIR}/${lib}/libsrc/Debug
+    ${DCMTK_DIR}/${lib}/Debug
     ${DCMTK_DIR}/lib
-  NO_DEFAULT_PATH
-)
-
-# MM: I could not find this library on debian system / dcmtk 3.5.4
-# Michael Onken: this module is now called dcmqrdb. I will re-work that script soon...
-find_library(DCMTK_imagedb_LIBRARY imagedb
-  PATHS
-    ${DCMTK_DIR}/imagectn/libsrc/Release
-    ${DCMTK_DIR}/imagectn/libsrc/
-    ${DCMTK_DIR}/imagectn/libsrc/Debug
-  NO_DEFAULT_PATH
-  )
-
-if( DCMTK_config_INCLUDE_DIR 
-    AND DCMTK_ofstd_INCLUDE_DIR 
-    AND DCMTK_ofstd_LIBRARY
-    AND DCMTK_oflog_INCLUDE_DIR    
-    AND DCMTK_oflog_LIBRARY
-    AND DCMTK_dcmdata_INCLUDE_DIR
-    AND DCMTK_dcmdata_LIBRARY
-    AND DCMTK_dcmjpeg_INCLUDE_DIR
-    AND DCMTK_dcmjpeg_LIBRARY
-    AND DCMTK_dcmnet_INCLUDE_DIR
-    AND DCMTK_dcmnet_LIBRARY    
-    AND DCMTK_dcmimgle_INCLUDE_DIR
-    AND DCMTK_dcmimgle_LIBRARY 
-    AND DCMTK_dcmimage_INCLUDE_DIR
-    AND DCMTK_dcmimage_LIBRARY)
-
-#   # Wrap library is required on Linux
-#   if(NOT WIN32)
-#     find_library(DCMTK_wrap_LIBRARY wrap)
-#     message(DCMTK_wrap_LIBRARY:${DCMTK_wrap_LIBRARY})
-#     if(NOT DCMTK_wrap_LIBRARY)
-#       message(FATAL_ERROR "error: Wrap library is required to use DCMTK. "
-#                           "On Ubuntu, you could install it using 'sudo apt-get libwrap0'")
-#     endif()
-#   endif()
-
-  set(CMAKE_THREAD_LIBS_INIT)
-  if(DCMTK_oflog_LIBRARY)
-    # Hack - Not having a DCMTKConfig.cmake file to read the settings from, we will attempt to 
-    # find the library in all cases.
-    # Ideally, pthread library should be discovered only if DCMTK_WITH_THREADS is enabled.
-    set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
-    find_package(Threads)
+    ${DCMTK_DIR}/lib/Debug
+    ${DCMTK_DIR}/dcmjpeg/lib${lib}/Debug
+    NO_DEFAULT_PATH
+    )
+    
+  mark_as_advanced(DCMTK_${lib}_LIBRARY_RELEASE)
+  mark_as_advanced(DCMTK_${lib}_LIBRARY_DEBUG)
+  
+  # Add libraries to variable according to build type
+  if(DCMTK_${lib}_LIBRARY_RELEASE)
+    list(APPEND DCMTK_LIBRARIES optimized ${DCMTK_${lib}_LIBRARY_RELEASE})
   endif()
   
-  set( DCMTK_FOUND "YES" )
-  set( DCMTK_INCLUDE_DIR
-    ${DCMTK_DIR}/include
-    ${DCMTK_config_INCLUDE_DIR}
-    ${DCMTK_ofstd_INCLUDE_DIR}
-    ${DCMTK_oflog_INCLUDE_DIR}    
-    ${DCMTK_dcmdata_INCLUDE_DIR}
-    ${DCMTK_dcmjpeg_INCLUDE_DIR}
-    ${DCMTK_dcmnet_INCLUDE_DIR}
-    ${DCMTK_dcmimgle_INCLUDE_DIR}
-    ${DCMTK_dcmimage_INCLUDE_DIR}
-  )
-
-  set( DCMTK_LIBRARIES
-    ${DCMTK_dcmimage_LIBRARY}
-    ${DCMTK_dcmimgle_LIBRARY}
-    ${DCMTK_dcmnet_LIBRARY}    
-    ${DCMTK_dcmjpeg_LIBRARY}
-    ${DCMTK_dcmdata_LIBRARY}
-    ${DCMTK_ijg8_LIBRARY}
-    ${DCMTK_ijg12_LIBRARY}
-    ${DCMTK_ijg16_LIBRARY}
-    ${DCMTK_oflog_LIBRARY}    
-    ${DCMTK_ofstd_LIBRARY}
-    ${DCMTK_config_LIBRARY}
-    ${CMAKE_THREAD_LIBS_INIT}
-  )
-
-  if(DCMTK_imagedb_LIBRARY)
-   set( DCMTK_LIBRARIES
-   ${DCMTK_LIBRARIES}
-   ${DCMTK_imagedb_LIBRARY}
-   )
+  if(DCMTK_${lib}_LIBRARY_DEBUG)
+    list(APPEND DCMTK_LIBRARIES debug ${DCMTK_${lib}_LIBRARY_DEBUG})
   endif()
 
-  if( WIN32 )
-    set( DCMTK_LIBRARIES ${DCMTK_LIBRARIES} ws2_32 netapi32 wsock32)
-  endif()
-  
-#   IF (NOT WIN32)
-#     set( DCMTK_LIBRARIES ${DCMTK_LIBRARIES} ${DCMTK_wrap_LIBRARY} )
-#   endif()
+endforeach()
 
+set(CMAKE_THREAD_LIBS_INIT)
+if(DCMTK_oflog_LIBRARY_RELEASE OR DCMTK_oflog_LIBRARY_DEBUG)
+  # Hack - Not having a DCMTKConfig.cmake file to read the settings from, we will attempt to
+  # find the library in all cases.
+  # Ideally, pthread library should be discovered only if DCMTK_WITH_THREADS is enabled.
+  set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
+  find_package(Threads)
 endif()
 
-find_program(DCMTK_DCMDUMP_EXECUTABLE dcmdump
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
-
-find_program(DCMTK_DCMDJPEG_EXECUTABLE dcmdjpeg
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
+if(CMAKE_THREAD_LIBS_INIT)
+  list(APPEND DCMTK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+endif()
 
-find_program(DCMTK_DCMDRLE_EXECUTABLE dcmdrle
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
+set(DCMTK_config_TEST_HEADER osconfig.h)
+set(DCMTK_dcmdata_TEST_HEADER dctypes.h)
+set(DCMTK_dcmimage_TEST_HEADER dicoimg.h)
+set(DCMTK_dcmimgle_TEST_HEADER dcmimage.h)
+set(DCMTK_dcmjpeg_TEST_HEADER djdecode.h)
+set(DCMTK_dcmnet_TEST_HEADER assoc.h)
+set(DCMTK_dcmpstat_TEST_HEADER dcmpstat.h)
+set(DCMTK_dcmqrdb_TEST_HEADER dcmqrdba.h)
+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)
+
+foreach(dir
+    config
+    dcmdata
+    dcmimage
+    dcmimgle
+    dcmjpeg
+    dcmnet
+    dcmpstat
+    dcmqrdb
+    dcmsign
+    dcmsr
+    dcmtls
+    ofstd)
+  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})
+
+  mark_as_advanced(DCMTK_${dir}_INCLUDE_DIR)
+  #message("** DCMTKs ${dir} found at ${DCMTK_${dir}_INCLUDE_DIR}")
+
+  if(DCMTK_${dir}_INCLUDE_DIR)
+    list(APPEND
+      DCMTK_INCLUDE_DIRS
+      ${DCMTK_${dir}_INCLUDE_DIR})
+  endif()
+endforeach()
 
-find_program(DCMTK_DCMQRSCP_EXECUTABLE dcmqrscp
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
+list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_DIR}/include)
 
-find_program(DCMTK_STORESCU_EXECUTABLE storescu
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
+if(WIN32)
+  list(APPEND DCMTK_LIBRARIES netapi32 wsock32)
+endif()
 
-mark_as_advanced(
-  DCMTK_DCMDUMP_EXECUTABLE
-  DCMTK_DCMDJPEG_EXECUTABLE
-  DCMTK_DCMDRLE_EXECUTABLE
-  DCMTK_DCMQRSCP_EXECUTABLE
-  DCMTK_STORESCU_EXECUTABLE
-  DCMTK_config_INCLUDE_DIR
-  DCMTK_dcmdata_INCLUDE_DIR
-  DCMTK_dcmdata_LIBRARY
-  DCMTK_dcmnet_INCLUDE_DIR
-  DCMTK_dcmnet_LIBRARY
-  DCMTK_dcmimgle_INCLUDE_DIR
-  DCMTK_dcmimgle_LIBRARY
-  DCMTK_dcmimage_INCLUDE_DIR
-  DCMTK_dcmimage_LIBRARY  
-  DCMTK_imagedb_LIBRARY 
-  DCMTK_ofstd_INCLUDE_DIR
-  DCMTK_ofstd_LIBRARY
-  DCMTK_oflog_INCLUDE_DIR
-  DCMTK_oflog_LIBRARY
-  )
+if(DCMTK_ofstd_INCLUDE_DIR)
+  get_filename_component(DCMTK_dcmtk_INCLUDE_DIR
+    ${DCMTK_ofstd_INCLUDE_DIR}
+    PATH
+    CACHE)
+  list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_dcmtk_INCLUDE_DIR})
+  mark_as_advanced(DCMTK_dcmtk_INCLUDE_DIR)
+endif()
 
+# Compatibility: This variable is deprecated
+set(DCMTK_INCLUDE_DIR ${DCMTK_INCLUDE_DIRS})