|
|
@@ -2,17 +2,78 @@
|
|
|
# FindDCMTK
|
|
|
# ---------
|
|
|
#
|
|
|
-# find DCMTK libraries and applications
|
|
|
-
|
|
|
-# DCMTK_INCLUDE_DIRS - Directories to include to use DCMTK
|
|
|
+# Find DCMTK libraries and applications
|
|
|
+#
|
|
|
+# The module defines the following variables::
|
|
|
+#
|
|
|
+# 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
|
|
|
#
|
|
|
-# DCMTK_DIR can be used to make it simpler to find the various include
|
|
|
-# directories and compiled libraries if you've just compiled it in the
|
|
|
-# source tree. Just set it to the root of the tree where you extracted
|
|
|
-# the source (default to /usr/include/dcmtk/)
|
|
|
+# Compatibility
|
|
|
+# ^^^^^^^^^^^^^
|
|
|
+#
|
|
|
+# This module is able to find a version of DCMTK that does or does not export
|
|
|
+# a *DCMTKConfig.cmake* file. It applies a two step process:
|
|
|
+#
|
|
|
+# * Step 1: Attempt to find DCMTK version providing a *DCMTKConfig.cmake* file.
|
|
|
+# * Step 2: If step 1 failed, rely on *FindDCMTK.cmake* to set `DCMTK_*` variables details below.
|
|
|
+#
|
|
|
+#
|
|
|
+# `Recent DCMTK
|
|
|
+# <http://git.dcmtk.org/web?p=dcmtk.git;a=commit;h=662ae187c493c6b9a73dd5e3875372cebd0c11fe>`_
|
|
|
+# provides a *DCMTKConfig.cmake* :manual:`package configuration file
|
|
|
+# <cmake-packages(7)>`. To exclusively use the package configuration file
|
|
|
+# (recommended when possible), pass the `NO_MODULE` option to
|
|
|
+# :command:`find_package`. For example, `find_package(DCMTK NO_MODULE)`.
|
|
|
+# This requires official DCMTK snapshot *3.6.1_20140617* or newer.
|
|
|
+#
|
|
|
+#
|
|
|
+# Until all clients update to the more recent DCMTK, build systems will need
|
|
|
+# to support different versions of DCMTK.
|
|
|
+#
|
|
|
+# On any given system, the following combinations of DCMTK versions could be
|
|
|
+# considered:
|
|
|
+#
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | | SYSTEM DCMTK | LOCAL DCMTK | Supported ? |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case A | NA | [ ] DCMTKConfig | YES |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case B | NA | [X] DCMTKConfig | YES |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case C | [ ] DCMTKConfig | NA | YES |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case D | [X] DCMTKConfig | NA | YES |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case E | [ ] DCMTKConfig | [ ] DCMTKConfig | YES (*) |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case F | [X] DCMTKConfig | [ ] DCMTKConfig | NO |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case G | [ ] DCMTKConfig | [X] DCMTKConfig | YES |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+# | Case H | [X] DCMTKConfig | [X] DCMTKConfig | YES |
|
|
|
+# +--------+---------------------+-----------------------+-------------------+
|
|
|
+#
|
|
|
+# (*) See Troubleshooting section.
|
|
|
+#
|
|
|
+# Legend:
|
|
|
+#
|
|
|
+# NA ...............: Means that no System or Local DCMTK is available
|
|
|
+#
|
|
|
+# [ ] DCMTKConfig ..: Means that the version of DCMTK does NOT export a DCMTKConfig.cmake file.
|
|
|
+#
|
|
|
+# [X] DCMTKConfig ..: Means that the version of DCMTK exports a DCMTKConfig.cmake file.
|
|
|
+#
|
|
|
+#
|
|
|
+# Troubleshooting
|
|
|
+# ^^^^^^^^^^^^^^^
|
|
|
+#
|
|
|
+# What to do if my project finds a different version of DCMTK?
|
|
|
+#
|
|
|
+# Remove DCMTK entry from the CMake cache per :command:`find_package`
|
|
|
+# documentation.
|
|
|
|
|
|
#=============================================================================
|
|
|
# Copyright 2004-2009 Kitware, Inc.
|
|
|
@@ -35,50 +96,142 @@
|
|
|
# Modified for EasyViz by Thomas Sondergaard.
|
|
|
#
|
|
|
|
|
|
-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)
|
|
|
+set(_dcmtk_dir_description "The directory of DCMTK build or install tree.")
|
|
|
+
|
|
|
+# Ensure that DCMTK_DIR is set to a reasonable default value
|
|
|
+# so that DCMTK libraries can be found on a standard Unix distribution.
|
|
|
+# It also overwrite the value of DCMTK_DIR after this one has been
|
|
|
+# set by a successful discovery of DCMTK by the unpatched FindDCMTK.cmake module
|
|
|
+# distributed with CMake (as of 0167cea)
|
|
|
+if(NOT DCMTK_DIR OR DCMTK_DIR STREQUAL "/usr/include/dcmtk")
|
|
|
+ set(DCMTK_DIR "/usr" CACHE PATH ${_dcmtk_dir_description} FORCE)
|
|
|
+endif()
|
|
|
+
|
|
|
+set(_SAVED_DCMTK_DIR ${DCMTK_DIR})
|
|
|
+
|
|
|
+#
|
|
|
+# Step1: Attempt to find a version of DCMTK providing a DCMTKConfig.cmake file.
|
|
|
+#
|
|
|
+if(NOT DCMTK_FIND_QUIETLY)
|
|
|
+ message(STATUS "Trying to find DCMTK expecting DCMTKConfig.cmake")
|
|
|
endif()
|
|
|
+find_package(DCMTK QUIET NO_MODULE)
|
|
|
+if(DCMTK_FOUND
|
|
|
+ AND NOT "x" STREQUAL "x${DCMTK_LIBRARIES}"
|
|
|
+ AND NOT "x" STREQUAL "x${DCMTK_INCLUDE_DIRS}")
|
|
|
|
|
|
+ if(NOT DCMTK_FIND_QUIETLY)
|
|
|
+ message(STATUS "Trying to find DCMTK expecting DCMTKConfig.cmake - ok")
|
|
|
+ endif()
|
|
|
+ return()
|
|
|
+else()
|
|
|
+ if(NOT DCMTK_FIND_QUIETLY)
|
|
|
+ message(STATUS "Trying to find DCMTK expecting DCMTKConfig.cmake - failed")
|
|
|
+ endif()
|
|
|
+endif()
|
|
|
+
|
|
|
+if(NOT DCMTK_FIND_QUIETLY)
|
|
|
+ message(STATUS "Trying to find DCMTK relying on FindDCMTK.cmake")
|
|
|
+endif()
|
|
|
|
|
|
+# Restore the value reset by the previous call to 'find_package(DCMTK QUIET NO_MODULE)'
|
|
|
+set(DCMTK_DIR ${_SAVED_DCMTK_DIR} CACHE PATH ${_dcmtk_dir_description} FORCE)
|
|
|
+
|
|
|
+
|
|
|
+#
|
|
|
+# Step2: Attempt to find a version of DCMTK that does NOT provide a DCMTKConfig.cmake file.
|
|
|
+#
|
|
|
+
|
|
|
+# 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
|
|
|
foreach(lib
|
|
|
- dcmdata
|
|
|
- dcmimage
|
|
|
- dcmimgle
|
|
|
- dcmjpeg
|
|
|
- dcmnet
|
|
|
dcmpstat
|
|
|
- dcmqrdb
|
|
|
- dcmsign
|
|
|
dcmsr
|
|
|
+ dcmsign
|
|
|
dcmtls
|
|
|
+ dcmqrdb
|
|
|
+ dcmnet
|
|
|
+ dcmjpeg
|
|
|
+ dcmimage
|
|
|
+ dcmimgle
|
|
|
+ dcmdata
|
|
|
+ oflog
|
|
|
+ ofstd
|
|
|
ijg12
|
|
|
ijg16
|
|
|
ijg8
|
|
|
- ofstd)
|
|
|
+ )
|
|
|
|
|
|
- find_library(DCMTK_${lib}_LIBRARY
|
|
|
+ # Find Release libraries
|
|
|
+ find_library(DCMTK_${lib}_LIBRARY_RELEASE
|
|
|
${lib}
|
|
|
PATHS
|
|
|
${DCMTK_DIR}/${lib}/libsrc
|
|
|
${DCMTK_DIR}/${lib}/libsrc/Release
|
|
|
- ${DCMTK_DIR}/${lib}/libsrc/Debug
|
|
|
${DCMTK_DIR}/${lib}/Release
|
|
|
+ ${DCMTK_DIR}/lib
|
|
|
+ ${DCMTK_DIR}/lib/Release
|
|
|
+ ${DCMTK_DIR}/dcmjpeg/lib${lib}/Release
|
|
|
+ NO_DEFAULT_PATH
|
|
|
+ )
|
|
|
+
|
|
|
+ # Find Debug libraries
|
|
|
+ find_library(DCMTK_${lib}_LIBRARY_DEBUG
|
|
|
+ ${lib}${DCMTK_CMAKE_DEBUG_POSTFIX}
|
|
|
+ PATHS
|
|
|
+ ${DCMTK_DIR}/${lib}/libsrc
|
|
|
+ ${DCMTK_DIR}/${lib}/libsrc/Debug
|
|
|
${DCMTK_DIR}/${lib}/Debug
|
|
|
- ${DCMTK_DIR}/lib)
|
|
|
+ ${DCMTK_DIR}/lib
|
|
|
+ ${DCMTK_DIR}/lib/Debug
|
|
|
+ ${DCMTK_DIR}/dcmjpeg/lib${lib}/Debug
|
|
|
+ NO_DEFAULT_PATH
|
|
|
+ )
|
|
|
|
|
|
- mark_as_advanced(DCMTK_${lib}_LIBRARY)
|
|
|
+ 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()
|
|
|
|
|
|
- if(DCMTK_${lib}_LIBRARY)
|
|
|
- list(APPEND DCMTK_LIBRARIES ${DCMTK_${lib}_LIBRARY})
|
|
|
+ if(DCMTK_${lib}_LIBRARY_DEBUG)
|
|
|
+ list(APPEND DCMTK_LIBRARIES debug ${DCMTK_${lib}_LIBRARY_DEBUG})
|
|
|
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()
|
|
|
+
|
|
|
+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)
|
|
|
@@ -92,6 +245,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
|
|
|
@@ -99,31 +256,47 @@ 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/${dir}
|
|
|
${DCMTK_DIR}/include/dcmtk/${dir}
|
|
|
${DCMTK_DIR}/${dir}/include/dcmtk/${dir}
|
|
|
+ ${DCMTK_DIR}/include/${dir}
|
|
|
+ ${SOURCE_DIR_PATH}
|
|
|
)
|
|
|
mark_as_advanced(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()
|
|
|
|
|
|
+list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_DIR}/include)
|
|
|
+
|
|
|
if(WIN32)
|
|
|
list(APPEND DCMTK_LIBRARIES netapi32 wsock32)
|
|
|
endif()
|
|
|
@@ -137,21 +310,31 @@ if(DCMTK_ofstd_INCLUDE_DIR)
|
|
|
mark_as_advanced(DCMTK_dcmtk_INCLUDE_DIR)
|
|
|
endif()
|
|
|
|
|
|
-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
|
|
-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})
|
|
|
|
|
|
-foreach(executable dcmdump dcmdjpeg dcmdrle)
|
|
|
- string(TOUPPER ${executable} EXECUTABLE)
|
|
|
- find_program(DCMTK_${EXECUTABLE}_EXECUTABLE ${executable} ${DCMTK_DIR}/bin)
|
|
|
- mark_as_advanced(DCMTK_${EXECUTABLE}_EXECUTABLE)
|
|
|
-endforeach()
|
|
|
+include(FindPackageHandleStandardArgs)
|
|
|
+find_package_handle_standard_args(DCMTK
|
|
|
+ REQUIRED_VARS ${DCMTK_INCLUDE_DIR_NAMES} DCMTK_LIBRARIES
|
|
|
+ FAIL_MESSAGE "Please set DCMTK_DIR and re-run configure")
|
|
|
+
|
|
|
+# Workaround bug in packaging of DCMTK 3.6.0 on Debian.
|
|
|
+# See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637687
|
|
|
+if(DCMTK_FOUND AND UNIX AND NOT APPLE)
|
|
|
+ include(CheckCXXSourceCompiles)
|
|
|
+ set(CMAKE_REQUIRED_FLAGS )
|
|
|
+ set(CMAKE_REQUIRED_DEFINITIONS )
|
|
|
+ set(CMAKE_REQUIRED_INCLUDES ${DCMTK_INCLUDE_DIRS})
|
|
|
+ set(CMAKE_REQUIRED_LIBRARIES ${DCMTK_LIBRARIES})
|
|
|
+ set(CMAKE_REQUIRED_QUIET ${DCMTK_FIND_QUIETLY})
|
|
|
+ check_cxx_source_compiles("#include <dcmtk/config/osconfig.h>\n#include <dcmtk/ofstd/ofstream.h>\nint main(int,char*[]){return 0;}"
|
|
|
+ DCMTK_HAVE_CONFIG_H_OPTIONAL
|
|
|
+ )
|
|
|
+ if(NOT DCMTK_HAVE_CONFIG_H_OPTIONAL)
|
|
|
+ set(DCMTK_DEFINITIONS "HAVE_CONFIG_H")
|
|
|
+ endif()
|
|
|
+endif()
|
|
|
+
|
|
|
+if(NOT DCMTK_FIND_QUIETLY)
|
|
|
+ message(STATUS "Trying to find DCMTK relying on FindDCMTK.cmake - ok")
|
|
|
+endif()
|