Просмотр исходного кода

Debug and release libs are now stored separately

Changed the DCMTK script to install the debug and release libs as well as
the binaries to Debug/Release subfolders. Furthermore changed the
FindDCMTK scipt to search these folders and add only the libs
corresponding to the current build selection.

This was done to fix the inability to do a Microsoft Visual Studio 2010
Debug and Release superbuild.
Caspar Goch лет назад: 12
Родитель
Сommit
479f9ab479
2 измененных файлов с 152 добавлено и 322 удалено
  1. 3 0
      CMakeExternals/DCMTK.cmake
  2. 149 322
      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

+ 149 - 322
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,162 @@
 #
 # 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
-)
-
-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
-)
-
-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
-)
+# Modified for EasyViz by Thomas Sondergaard.
+#
 
-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
-    ${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_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
-)
+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_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
+foreach(lib
+    dcmdata
+    dcmimage
+    dcmimgle
+    dcmjpeg
+    dcmnet
+    dcmpstat
+    dcmqrdb
+    dcmsign
+    dcmsr
+    dcmtls
+    ijg12
+    ijg16
+    ijg8
+    oflog
+    ofstd)
+
+  message("** \n\n\n\n I am looking for ${lib} in the following paths")
+  message("** ${DCMTK_DIR}/${lib}/libsrc")
+  message("** ${DCMTK_DIR}/${lib}/libsrc/Release")
+  message("** ${DCMTK_DIR}/${lib}/Release")
+  message("** ${DCMTK_DIR}/lib")
+  message("** ${DCMTK_DIR}/dcmjpeg/lib${lib}/Release")
+  message("** That be it \n\n\n\n\n")
+  # Find Release libraries
+  find_library(DCMTK_${lib}_LIBRARY
+    ${lib}
+    PATHS
+    ${DCMTK_DIR}/${lib}/libsrc
+    ${DCMTK_DIR}/${lib}/libsrc/Release
+    ${DCMTK_DIR}/${lib}/Release
     ${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
-  )
+    ${DCMTK_DIR}/lib/Release
+    ${DCMTK_DIR}/dcmjpeg/lib${lib}/Release
+    NO_DEFAULT_PATH
+    )
+    
+  mark_as_advanced(DCMTK_${lib}_LIBRARY)
 
-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)
+  message("** DCMTKs ${lib} found at ${DCMTK_${lib}_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)
+  if(DCMTK_${lib}_LIBRARY)
+    list(APPEND DCMTK_LIBRARIES_RELEASE optimized ${DCMTK_${lib}_LIBRARY})
   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}
-   )
+  # 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
+    ${DCMTK_DIR}/lib/Debug
+    ${DCMTK_DIR}/dcmjpeg/lib${lib}/Debug
+    NO_DEFAULT_PATH
+    )
+    
+  message("** DCMTKs ${lib} in debug found at ${DCMTK_${lib}_LIBRARY_DEBUG}")
+    
+  mark_as_advanced(DCMTK_${lib}_LIBRARY_DEBUG)
+
+  if(DCMTK_${lib}_LIBRARY_DEBUG)
+    list(APPEND DCMTK_LIBRARIES_DEBUG debug ${DCMTK_${lib}_LIBRARY_DEBUG})
   endif()
 
-  if( WIN32 )
-    set( DCMTK_LIBRARIES ${DCMTK_LIBRARIES} ws2_32 netapi32 wsock32)
+endforeach()
+
+#depending on build type set debug or release
+list(APPEND DCMTK_LIBRARIES ${DCMTK_LIBRARIES_RELEASE} ${DCMTK_LIBRARIES_DEBUG} )
+
+message("** Overall there be the following libraries \n ${DCMTK_LIBRARIES}")
+
+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()
-  
-#   IF (NOT WIN32)
-#     set( DCMTK_LIBRARIES ${DCMTK_LIBRARIES} ${DCMTK_wrap_LIBRARY} )
-#   endif()
-
-endif()
-
-find_program(DCMTK_DCMDUMP_EXECUTABLE dcmdump
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
+endforeach()
 
-find_program(DCMTK_DCMDJPEG_EXECUTABLE dcmdjpeg
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
+list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_DIR}/include)
 
-find_program(DCMTK_DCMDRLE_EXECUTABLE dcmdrle
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
-
-find_program(DCMTK_DCMQRSCP_EXECUTABLE dcmqrscp
-  PATHS
-    ${DCMTK_DIR}/bin
-  NO_DEFAULT_PATH
-  )
-
-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()
 
+#include(FindPackageHandleStandardArgs)
+#find_package_handle_standard_args(DCMTK DEFAULT_MSG
+#  DCMTK_config_INCLUDE_DIR
+#  DCMTK_ofstd_INCLUDE_DIR
+#  DCMTK_ofstd_LIBRARY
+#  DCMTK_dcmdata_INCLUDE_DIR
+#  DCMTK_dcmdata_LIBRARY
+#  DCMTK_dcmimgle_INCLUDE_DIR
+#  DCMTK_dcmimgle_LIBRARY)
+
+# Compatibility: This variable is deprecated
+set(DCMTK_INCLUDE_DIR ${DCMTK_INCLUDE_DIRS})