5 # Find DCMTK libraries and applications 7 # The module defines the following variables:: 9 # DCMTK_INCLUDE_DIRS - Directories to include to use DCMTK 10 # DCMTK_LIBRARIES - Files to link against to use DCMTK 11 # DCMTK_FOUND - If false, don't try to use DCMTK 12 # DCMTK_DIR - (optional) Source directory for DCMTK 17 # This module is able to find a version of DCMTK that does or does not export 18 # a *DCMTKConfig.cmake* file. It applies a two step process: 20 # * Step 1: Attempt to find DCMTK version providing a *DCMTKConfig.cmake* file. 21 # * Step 2: If step 1 failed, rely on *FindDCMTK.cmake* to set `DCMTK_*` variables details below. 25 # <http://git.dcmtk.org/web?p=dcmtk.git;a=commit;h=662ae187c493c6b9a73dd5e3875372cebd0c11fe>`_ 26 # provides a *DCMTKConfig.cmake* :manual:`package configuration file 27 # <cmake-packages(7)>`. To exclusively use the package configuration file 28 # (recommended when possible), pass the `NO_MODULE` option to 29 # :command:`find_package`. For example, `find_package(DCMTK NO_MODULE)`. 30 # This requires official DCMTK snapshot *3.6.1_20140617* or newer. 33 # Until all clients update to the more recent DCMTK, build systems will need 34 # to support different versions of DCMTK. 36 # On any given system, the following combinations of DCMTK versions could be 39 # +--------+---------------------+-----------------------+-------------------+ 40 # | | SYSTEM DCMTK | LOCAL DCMTK | Supported ? | 41 # +--------+---------------------+-----------------------+-------------------+ 42 # | Case A | NA | [ ] DCMTKConfig | YES | 43 # +--------+---------------------+-----------------------+-------------------+ 44 # | Case B | NA | [X] DCMTKConfig | YES | 45 # +--------+---------------------+-----------------------+-------------------+ 46 # | Case C | [ ] DCMTKConfig | NA | YES | 47 # +--------+---------------------+-----------------------+-------------------+ 48 # | Case D | [X] DCMTKConfig | NA | YES | 49 # +--------+---------------------+-----------------------+-------------------+ 50 # | Case E | [ ] DCMTKConfig | [ ] DCMTKConfig | YES (*) | 51 # +--------+---------------------+-----------------------+-------------------+ 52 # | Case F | [X] DCMTKConfig | [ ] DCMTKConfig | NO | 53 # +--------+---------------------+-----------------------+-------------------+ 54 # | Case G | [ ] DCMTKConfig | [X] DCMTKConfig | YES | 55 # +--------+---------------------+-----------------------+-------------------+ 56 # | Case H | [X] DCMTKConfig | [X] DCMTKConfig | YES | 57 # +--------+---------------------+-----------------------+-------------------+ 59 # (*) See Troubleshooting section. 63 # NA ...............: Means that no System or Local DCMTK is available 65 # [ ] DCMTKConfig ..: Means that the version of DCMTK does NOT export a DCMTKConfig.cmake file. 67 # [X] DCMTKConfig ..: Means that the version of DCMTK exports a DCMTKConfig.cmake file. 73 # What to do if my project finds a different version of DCMTK? 75 # Remove DCMTK entry from the CMake cache per :command:`find_package` 78 #============================================================================= 79 # Copyright 2004-2009 Kitware, Inc. 80 # Copyright 2009-2010 Mathieu Malaterre <mathieu.malaterre@gmail.com> 81 # Copyright 2010 Thomas Sondergaard <ts@medical-insight.com> 83 # Distributed under the OSI-approved BSD License (the "License"); 84 # see accompanying file Copyright.txt for details. 86 # This software is distributed WITHOUT ANY WARRANTY; without even the 87 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 88 # See the License for more information. 89 #============================================================================= 90 # (To distribute this file outside of CMake, substitute the full 91 # License text for the above reference.) 94 # Written for VXL by Amitha Perera. 95 # Upgraded for GDCM by Mathieu Malaterre. 96 # Modified for EasyViz by Thomas Sondergaard. 99 set(_dcmtk_dir_description
"The directory of DCMTK build or install tree.")
101 # Ensure that DCMTK_DIR is
set to a reasonable
default value
102 # so that DCMTK libraries can be found on a standard Unix distribution.
103 # It also overwrite the value of DCMTK_DIR after
this one has been
104 #
set by a successful discovery of DCMTK by the unpatched FindDCMTK.cmake module
105 # distributed with
CMake (as of 0167cea)
106 if(NOT DCMTK_DIR OR DCMTK_DIR STREQUAL
"/usr/include/dcmtk")
107 set(DCMTK_DIR
"/usr" CACHE PATH ${_dcmtk_dir_description} FORCE)
110 set(_SAVED_DCMTK_DIR ${DCMTK_DIR})
113 # Step1: Attempt to find a version of DCMTK providing a DCMTKConfig.cmake file.
115 if(NOT DCMTK_FIND_QUIETLY)
116 message(STATUS
"Trying to find DCMTK expecting DCMTKConfig.cmake")
118 find_package(DCMTK QUIET NO_MODULE)
120 AND NOT "x" STREQUAL "x${DCMTK_LIBRARIES}
" 121 AND NOT "x
" STREQUAL "x${DCMTK_INCLUDE_DIRS}
") 123 if(NOT DCMTK_FIND_QUIETLY) 124 message(STATUS "Trying to find DCMTK expecting DCMTKConfig.cmake - ok
") 128 if(NOT DCMTK_FIND_QUIETLY) 129 message(STATUS "Trying to find DCMTK expecting DCMTKConfig.cmake - failed
") 133 if(NOT DCMTK_FIND_QUIETLY) 134 message(STATUS "Trying to find DCMTK relying on FindDCMTK.cmake
") 137 # Restore the value reset by the previous call to 'find_package(DCMTK QUIET NO_MODULE)' 138 set(DCMTK_DIR ${_SAVED_DCMTK_DIR} CACHE PATH ${_dcmtk_dir_description} FORCE) 142 # Step2: Attempt to find a version of DCMTK that does NOT provide a DCMTKConfig.cmake file. 145 # prefer DCMTK_DIR over default system paths like /usr/lib 147 set(CMAKE_PREFIX_PATH ${DCMTK_DIR}/lib ${CMAKE_PREFIX_PATH}) # this is given to FIND_LIBRARY or FIND_PATH 150 # Find all libraries, store debug and release separately 170 # Find Release libraries 171 find_library(DCMTK_${lib}_LIBRARY_RELEASE 174 ${DCMTK_DIR}/${lib}/libsrc 175 ${DCMTK_DIR}/${lib}/libsrc/Release 176 ${DCMTK_DIR}/${lib}/Release 178 ${DCMTK_DIR}/lib/Release 179 ${DCMTK_DIR}/dcmjpeg/lib${lib}/Release 183 # Find Debug libraries 184 find_library(DCMTK_${lib}_LIBRARY_DEBUG 185 ${lib}${DCMTK_CMAKE_DEBUG_POSTFIX} 187 ${DCMTK_DIR}/${lib}/libsrc 188 ${DCMTK_DIR}/${lib}/libsrc/Debug 189 ${DCMTK_DIR}/${lib}/Debug 191 ${DCMTK_DIR}/lib/Debug 192 ${DCMTK_DIR}/dcmjpeg/lib${lib}/Debug 196 mark_as_advanced(DCMTK_${lib}_LIBRARY_RELEASE) 197 mark_as_advanced(DCMTK_${lib}_LIBRARY_DEBUG) 199 # Add libraries to variable according to build type 200 if(DCMTK_${lib}_LIBRARY_RELEASE) 201 list(APPEND DCMTK_LIBRARIES optimized ${DCMTK_${lib}_LIBRARY_RELEASE}) 204 if(DCMTK_${lib}_LIBRARY_DEBUG) 205 list(APPEND DCMTK_LIBRARIES debug ${DCMTK_${lib}_LIBRARY_DEBUG}) 210 set(CMAKE_THREAD_LIBS_INIT) 211 if(DCMTK_oflog_LIBRARY_RELEASE OR DCMTK_oflog_LIBRARY_DEBUG) 212 # Hack - Not having a DCMTKConfig.cmake file to read the settings from, we will attempt to 213 # find the library in all cases. 214 # Ideally, pthread library should be discovered only if DCMTK_WITH_THREADS is enabled. 215 set(CMAKE_THREAD_PREFER_PTHREAD TRUE) 216 find_package(Threads) 219 if(CMAKE_THREAD_LIBS_INIT) 220 list(APPEND DCMTK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) 224 # SPECIFIC CASE FOR DCMTK BUILD DIR as DCMTK_DIR 225 # (as opposed to a DCMTK install dir) 226 # Have to find the source directory. 227 if(EXISTS ${DCMTK_DIR}/CMakeCache.txt) 228 load_cache(${DCMTK_DIR} READ_WITH_PREFIX "EXT
" 230 if(NOT EXISTS ${EXTDCMTK_SOURCE_DIR}) 232 "DCMTK build directory references
233 nonexistant DCMTK source directory ${EXTDCMTK_SOURCE_DIR}
") 237 set(DCMTK_config_TEST_HEADER osconfig.h) 238 set(DCMTK_dcmdata_TEST_HEADER dctypes.h) 239 set(DCMTK_dcmimage_TEST_HEADER dicoimg.h) 240 set(DCMTK_dcmimgle_TEST_HEADER dcmimage.h) 241 set(DCMTK_dcmjpeg_TEST_HEADER djdecode.h) 242 set(DCMTK_dcmnet_TEST_HEADER assoc.h) 243 set(DCMTK_dcmpstat_TEST_HEADER dcmpstat.h) 244 set(DCMTK_dcmqrdb_TEST_HEADER dcmqrdba.h) 245 set(DCMTK_dcmsign_TEST_HEADER sicert.h) 246 set(DCMTK_dcmsr_TEST_HEADER dsrtree.h) 247 set(DCMTK_dcmtls_TEST_HEADER tlslayer.h) 248 set(DCMTK_ofstd_TEST_HEADER ofstdinc.h) 249 set(DCMTK_oflog_TEST_HEADER oflog.h) 250 set(DCMTK_dcmjpls_TEST_HEADER djlsutil.h) 252 set(DCMTK_INCLUDE_DIR_NAMES) 253 message("Using
default CMAKE FindDCMTK
") 270 if(EXTDCMTK_SOURCE_DIR) 272 ${EXTDCMTK_SOURCE_DIR}/${dir}/include/dcmtk/${dir}) 274 find_path(DCMTK_${dir}_INCLUDE_DIR 275 ${DCMTK_${dir}_TEST_HEADER} 277 ${DCMTK_DIR}/${dir}/include 279 ${DCMTK_DIR}/include/dcmtk/${dir} 280 ${DCMTK_DIR}/${dir}/include/dcmtk/${dir} 281 ${DCMTK_DIR}/include/${dir} 284 mark_as_advanced(DCMTK_${dir}_INCLUDE_DIR) 285 list(APPEND DCMTK_INCLUDE_DIR_NAMES DCMTK_${dir}_INCLUDE_DIR) 287 if(DCMTK_${dir}_INCLUDE_DIR) 288 # add the 'include' path so eg 289 #include "dcmtk/dcmimgle/dcmimage.h
" 291 get_filename_component(_include ${DCMTK_${dir}_INCLUDE_DIR} PATH) 292 get_filename_component(_include ${_include} PATH) 295 ${DCMTK_${dir}_INCLUDE_DIR} 300 list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_DIR}/include) 303 list(APPEND DCMTK_LIBRARIES netapi32 wsock32) 306 if(DCMTK_ofstd_INCLUDE_DIR) 307 get_filename_component(DCMTK_dcmtk_INCLUDE_DIR 308 ${DCMTK_ofstd_INCLUDE_DIR} 311 list(APPEND DCMTK_INCLUDE_DIRS ${DCMTK_dcmtk_INCLUDE_DIR}) 312 mark_as_advanced(DCMTK_dcmtk_INCLUDE_DIR) 315 # Compatibility: This variable is deprecated 316 set(DCMTK_INCLUDE_DIR ${DCMTK_INCLUDE_DIRS}) 318 include(FindPackageHandleStandardArgs) 319 find_package_handle_standard_args(DCMTK 320 REQUIRED_VARS ${DCMTK_INCLUDE_DIR_NAMES} DCMTK_LIBRARIES 321 FAIL_MESSAGE "Please
set DCMTK_DIR and re-run configure
") 323 # Workaround bug in packaging of DCMTK 3.6.0 on Debian. 324 # See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=637687 325 if(DCMTK_FOUND AND UNIX AND NOT APPLE) 326 include(CheckCXXSourceCompiles) 327 set(CMAKE_REQUIRED_FLAGS ) 328 set(CMAKE_REQUIRED_DEFINITIONS ) 329 set(CMAKE_REQUIRED_INCLUDES ${DCMTK_INCLUDE_DIRS}) 330 set(CMAKE_REQUIRED_LIBRARIES ${DCMTK_LIBRARIES}) 331 set(CMAKE_REQUIRED_QUIET ${DCMTK_FIND_QUIETLY}) 332 check_cxx_source_compiles("#include <dcmtk/config/osconfig.h>\n#include <dcmtk/ofstd/ofstream.h>\nint
main(
int,
char*[]){
return 0;}
" 333 DCMTK_HAVE_CONFIG_H_OPTIONAL 335 if(NOT DCMTK_HAVE_CONFIG_H_OPTIONAL) 336 set(DCMTK_DEFINITIONS "HAVE_CONFIG_H
") 340 if(NOT DCMTK_FIND_QUIETLY) 341 message(STATUS "Trying to find DCMTK relying on FindDCMTK.cmake - ok
")
int main(int argc, char **argv)