CMakeLists.txt 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. project(CTKDICOMCore)
  2. #
  3. # See CTK/CMake/ctkMacroBuildLib.cmake for details
  4. #
  5. set(KIT_export_directive "CTK_DICOM_CORE_EXPORT")
  6. # determine the DCMTK version we're using
  7. if(EXISTS ${DCMTK_config_INCLUDE_DIR}/cfunix.h)
  8. set(_DCMTK_CONFIG_HEADER ${DCMTK_config_INCLUDE_DIR}/cfunix.h)
  9. elseif(EXISTS ${DCMTK_config_INCLUDE_DIR}/osconfig.h)
  10. set(_DCMTK_CONFIG_HEADER ${DCMTK_config_INCLUDE_DIR}/osconfig.h)
  11. else()
  12. message(SEND_ERROR "DCMTK version cannot be determined!")
  13. endif()
  14. file(READ ${_DCMTK_CONFIG_HEADER} _DCMTK_CONFIG)
  15. # simple check, we do not expect anything else
  16. if(_DCMTK_CONFIG MATCHES "PACKAGE_VERSION_NUMBER 360")
  17. set(DCMTK_VERSION_IS_360 1)
  18. message(STATUS "Detected DCMTK 3.6.0, will include backported SCU")
  19. endif()
  20. # Source files
  21. set(KIT_SRCS
  22. ctkDICOMAbstractThumbnailGenerator.cpp
  23. ctkDICOMAbstractThumbnailGenerator.h
  24. ctkDICOMDatabase.cpp
  25. ctkDICOMDatabase.h
  26. ctkDICOMItem.h
  27. ctkDICOMFilterProxyModel.cpp
  28. ctkDICOMFilterProxyModel.h
  29. ctkDICOMIndexer.cpp
  30. ctkDICOMIndexer.h
  31. ctkDICOMIndexer_p.h
  32. ctkDICOMItem.cpp
  33. ctkDICOMItem.h
  34. ctkDICOMModel.cpp
  35. ctkDICOMModel.h
  36. ctkDICOMPersonName.cpp
  37. ctkDICOMPersonName.h
  38. ctkDICOMQuery.cpp
  39. ctkDICOMQuery.h
  40. ctkDICOMRetrieve.cpp
  41. ctkDICOMRetrieve.h
  42. ctkDICOMTester.cpp
  43. ctkDICOMTester.h
  44. ctkDICOMUtil.cpp
  45. ctkDICOMUtil.h
  46. )
  47. if(DCMTK_VERSION_IS_360)
  48. list(APPEND KIT_SRCS ctkDcmSCU.cc)
  49. endif(DCMTK_VERSION_IS_360)
  50. # Abstract class should not be wrapped !
  51. set_source_files_properties(
  52. ctkDICOMAbstractThumbnailGenerator.h
  53. WRAP_EXCLUDE
  54. )
  55. # XXX DCMTK 3.6.1: Remove the HAVE_DCMTK_LOG4CPLUS_LOGGER test when DCMTK 3.6.1
  56. # can be expected on all supported platforms.
  57. # XXX On multi configuration system, there is no way to run 'try_compile` configure
  58. # tests based on the configuration that WILL be selected to build the project.
  59. # Since the try compile test 'HAVE_DCMTK_LOG4CPLUS_LOGGER' has originally been
  60. # added to be able to build against DCMTK 3.6.0 available by default on linux
  61. # distribution. Let's skip it in the case of multi configuration system and
  62. # assume DCMTK provides 'dcmtk::log4cplus::Logger'.
  63. # We also skip this test if DCMTK_CMAKE_DEBUG_POSTFIX is set, because then the
  64. # DCMTK_LIBRARIES variable will have a value similar to "debug <lib1> ..." which
  65. # will not link the DCMTK debug libraries in the try_compile call because
  66. # BUILD_TYPE cannot be set for the generated CMakeLists.txt file.
  67. # TODO When build as external project, the config of the parent project could be passed to CTK
  68. # and used as a hint. We need to define what would be the convention for such hint.
  69. if(DCMTK_CMAKE_DEBUG_POSTFIX OR (CMAKE_CONFIGURATION_TYPES AND NOT DEFINED HAVE_DCMTK_LOG4CPLUS_LOGGER))
  70. set(HAVE_DCMTK_LOG4CPLUS_LOGGER 1 CACHE INTERNAL "Test HAVE_DCMTK_LOG4CPLUS_LOGGER")
  71. endif()
  72. # Check if DCMTK provides 'dcmtk::log4cplus::Logger', if not fallback to 'log4cplus::Logger'.
  73. # Indeed, following DCMTK-3.6.1_20110519 (commit e39d190), log4cplus has been moved
  74. # into dcmtk::log4cplus namespace.
  75. include(CheckCXXSourceCompiles)
  76. set(CMAKE_REQUIRED_DEFINITIONS -DHAVE_CONFIG_H)
  77. set(CMAKE_REQUIRED_INCLUDES ${DCMTK_INCLUDE_DIRS})
  78. set(CMAKE_REQUIRED_LIBRARIES ${DCMTK_LIBRARIES})
  79. check_cxx_source_compiles(
  80. "#include <dcmtk/oflog/oflog.h>\nint main(int, char*[]){dcmtk::log4cplus::Logger logger; return 0;}"
  81. HAVE_DCMTK_LOG4CPLUS_LOGGER)
  82. if(HAVE_DCMTK_LOG4CPLUS_LOGGER)
  83. set_source_files_properties(
  84. ctkDICOMUtil.cpp
  85. PROPERTIES COMPILE_DEFINITIONS HAVE_DCMTK_LOG4CPLUS_LOGGER
  86. )
  87. endif()
  88. # Headers that should run through moc
  89. set(KIT_MOC_SRCS
  90. ctkDICOMAbstractThumbnailGenerator.h
  91. ctkDICOMDatabase.h
  92. ctkDICOMIndexer.h
  93. ctkDICOMIndexer_p.h
  94. ctkDICOMFilterProxyModel.h
  95. ctkDICOMModel.h
  96. ctkDICOMQuery.h
  97. ctkDICOMRetrieve.h
  98. ctkDICOMTester.h
  99. )
  100. # UI files
  101. set(KIT_UI_FORMS
  102. )
  103. # Resources
  104. set(KIT_resources
  105. Resources/ctkDICOMCore.qrc
  106. )
  107. # Target libraries - See CMake/ctkFunctionGetTargetLibraries.cmake
  108. # The following macro will read the target libraries from the file 'target_libraries.cmake'
  109. ctkFunctionGetTargetLibraries(KIT_target_libraries)
  110. if(CTK_QT_VERSION VERSION_GREATER "4")
  111. list(APPEND KIT_target_libraries Qt5::Sql)
  112. endif()
  113. # create a dcm query/retrieve service config file that points to the build dir
  114. set (DCMQRSCP_STORE_DIR ${CMAKE_CURRENT_BINARY_DIR}/Testing)
  115. configure_file( Resources/dcmqrscp.cfg.in dcmqrscp.cfg )
  116. set (DCMQRSCP_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/dcmqrscp.cfg)
  117. ctkMacroBuildLib(
  118. NAME ${PROJECT_NAME}
  119. EXPORT_DIRECTIVE ${KIT_export_directive}
  120. SRCS ${KIT_SRCS}
  121. MOC_SRCS ${KIT_MOC_SRCS}
  122. UI_FORMS ${KIT_UI_FORMS}
  123. TARGET_LIBRARIES ${KIT_target_libraries}
  124. RESOURCES ${KIT_resources}
  125. LIBRARY_TYPE ${CTK_LIBRARY_MODE}
  126. )
  127. if(DEFINED DCMTK_HAVE_CONFIG_H_OPTIONAL AND NOT DCMTK_HAVE_CONFIG_H_OPTIONAL)
  128. # Workaround Debian packaging issue - See FindDCMTK.cmake for more details
  129. set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_DEFINITIONS ${DCMTK_DEFINITIONS})
  130. if("${CMAKE_VERSION}" VERSION_GREATER 2.8.10)
  131. set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_COMPILE_DEFINITIONS ${DCMTK_DEFINITIONS})
  132. endif()
  133. endif()
  134. if(CTK_WRAP_PYTHONQT_LIGHT)
  135. ctkMacroBuildLibWrapper(
  136. TARGET ${PROJECT_NAME}
  137. SRCS ${KIT_SRCS}
  138. WRAPPER_LIBRARY_TYPE ${CTK_LIBRARY_MODE}
  139. )
  140. endif()
  141. # Plugins
  142. #if(CTK_BUILD_QTDESIGNER_PLUGINS)
  143. # add_subdirectory(Plugins)
  144. #endif()
  145. # Testing
  146. if(BUILD_TESTING)
  147. add_subdirectory(Testing)
  148. endif()