From c14dd383cfedd2f2c0daf9adf2b50214712821e6 Mon Sep 17 00:00:00 2001 From: Kent Williams Date: Wed, 13 Feb 2013 15:41:40 -0600 Subject: [PATCH] COMP: Add CMAKE code to generate comprehensive DCMTKConfig files Since CMake 2.6 (and in particular since 2.8) CMake supports a new signature for find_package: find_package( NO_MODULE) NO_MODULE tells CMake to skip loading the Find.cmake to locate a package and use it. The big advantage for implementing this in a package like DCMTK is that once it is properly implemented, a third-party library (like DCMTK) can be used by other CMake projects without needing a Find.cmake file in the CMake installation. This work in DCMTK is based on this tutorial: http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file along with assistance from Brad King (brad.king@kitware.com) --- CMake/3rdparty.cmake | 468 +++++++++++++++++---------------- CMake/DCMTKBuildTreeSettings.cmake.in | 2 + CMake/DCMTKConfig.cmake.in | 30 ++ CMake/DCMTKConfigVersion.cmake.in | 11 + CMake/dcmtkMacros.cmake | 8 +- CMake/dcmtkPrepare.cmake | 8 + CMakeLists.txt | 152 +++++++++--- 7 files changed, 410 insertions(+), 269 deletions(-) create mode 100644 CMake/DCMTKBuildTreeSettings.cmake.in create mode 100644 CMake/DCMTKConfigVersion.cmake.in diff --git a/CMake/3rdparty.cmake b/CMake/3rdparty.cmake index ed9e658..abb19f2 100755 --- a/CMake/3rdparty.cmake +++ b/CMake/3rdparty.cmake @@ -1,286 +1,292 @@ -IF(WIN32) +if(WIN32) # For Windows, we don't used FIND_PACKAGE because DCMTK usually is used with its # own set of 3rd-party support libraries that can be downloaded from DCMTK's # website (pre-built). # libxml support: find out whether user has library - GET_FILENAME_COMPONENT(LIBXML_DIR "${DCMTK_SOURCE_DIR}/../libxml2-2.7.7" ABSOLUTE) - FIND_PATH(WITH_LIBXMLINC "/include/libxml/parser.h" "${LIBXML_DIR}"/ NO_DEFAULT_PATH) + get_filename_component(LIBXML_DIR "${DCMTK_SOURCE_DIR}/../libxml2-2.7.7" ABSOLUTE) + find_path(WITH_LIBXMLINC "/include/libxml/parser.h" "${LIBXML_DIR}"/ NO_DEFAULT_PATH) # libpng support: find out whether user has library - GET_FILENAME_COMPONENT(LIBPNG_DIR "${DCMTK_SOURCE_DIR}/../libpng-1.4.2" ABSOLUTE) - FIND_PATH(WITH_LIBPNGINC "include/png.h" "${LIBPNG_DIR}" NO_DEFAULT_PATH) + get_filename_component(LIBPNG_DIR "${DCMTK_SOURCE_DIR}/../libpng-1.4.2" ABSOLUTE) + find_path(WITH_LIBPNGINC "include/png.h" "${LIBPNG_DIR}" NO_DEFAULT_PATH) # libtiff support: find out whether user has library - GET_FILENAME_COMPONENT(LIBTIFF_DIR "${DCMTK_SOURCE_DIR}/../tiff-3.9.2" ABSOLUTE) - FIND_PATH(WITH_LIBTIFFINC "include/tiff.h" "${LIBTIFF_DIR}" NO_DEFAULT_PATH) + get_filename_component(LIBTIFF_DIR "${DCMTK_SOURCE_DIR}/../tiff-3.9.2" ABSOLUTE) + find_path(WITH_LIBTIFFINC "include/tiff.h" "${LIBTIFF_DIR}" NO_DEFAULT_PATH) # OpenSSL support: find out whether user has library - GET_FILENAME_COMPONENT(OPENSSL_DIR "${DCMTK_SOURCE_DIR}/../openssl-1.0.0" ABSOLUTE) - FIND_PATH(WITH_OPENSSLINC "include/openssl/ssl.h" "${OPENSSL_DIR}" NO_DEFAULT_PATH) + get_filename_component(OPENSSL_DIR "${DCMTK_SOURCE_DIR}/../openssl-1.0.0" ABSOLUTE) + find_path(WITH_OPENSSLINC "include/openssl/ssl.h" "${OPENSSL_DIR}" NO_DEFAULT_PATH) # zlib support: find out whether user has library - GET_FILENAME_COMPONENT(ZLIB_DIR "${DCMTK_SOURCE_DIR}/../zlib-1.2.5" ABSOLUTE) - FIND_PATH(WITH_ZLIBINC "include/zlib.h" "${ZLIB_DIR}" NO_DEFAULT_PATH) + get_filename_component(ZLIB_DIR "${DCMTK_SOURCE_DIR}/../zlib-1.2.5" ABSOLUTE) + find_path(WITH_ZLIBINC "include/zlib.h" "${ZLIB_DIR}" NO_DEFAULT_PATH) # sndfile support: find out whether user has library. Needed for module dcmwave (not in public DCMTK yet, marked as advanced) - GET_FILENAME_COMPONENT(SNDFILE_DIR "${DCMTK_SOURCE_DIR}/../libsndfile-1.0.17" ABSOLUTE) - FIND_PATH(WITH_SNDFILEINC "sndfile.h" "${SNDFILE_DIR}" NO_DEFAULT_PATH) + get_filename_component(SNDFILE_DIR "${DCMTK_SOURCE_DIR}/../libsndfile-1.0.17" ABSOLUTE) + find_path(WITH_SNDFILEINC "sndfile.h" "${SNDFILE_DIR}" NO_DEFAULT_PATH) MARK_AS_ADVANCED(SNDFILE_DIR WITH_SNDFILEINC) # libiconv support: find out whether user has library - GET_FILENAME_COMPONENT(LIBICONV_DIR "${DCMTK_SOURCE_DIR}/../libiconv-1.14" ABSOLUTE) - FIND_PATH(WITH_LIBICONVINC "include/iconv.h" "${LIBICONV_DIR}" NO_DEFAULT_PATH) + get_filename_component(LIBICONV_DIR "${DCMTK_SOURCE_DIR}/../libiconv-1.14" ABSOLUTE) + find_path(WITH_LIBICONVINC "include/iconv.h" "${LIBICONV_DIR}" NO_DEFAULT_PATH) # libxml support: configure compiler - IF(DCMTK_WITH_XML) - IF(WITH_LIBXMLINC) - SET(LIBXML_INCDIR ${WITH_LIBXMLINC}/include) - SET(LIBXML_LIBDIR ${WITH_LIBXMLINC}/lib) - SET(LIBXML_LIBS debug ${LIBXML_LIBDIR}/libxml2_d.lib optimized ${LIBXML_LIBDIR}/libxml2_o.lib debug ${LIBXML_LIBDIR}/iconv_d.lib optimized ${LIBXML_LIBDIR}/iconv_o.lib) - MESSAGE(STATUS "Info: DCMTK XML support will be enabled") - SET(WITH_LIBXML 1) - ELSE(WITH_LIBXMLINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: XML support will be disabled because libxml2 directory is not specified. Correct path and re-enable DCMTK_WITH_XML.") - SET(DCMTK_WITH_XML OFF CACHE BOOL "" FORCE) - SET(WITH_LIBXML "") - ENDIF(WITH_LIBXMLINC) - ENDIF(DCMTK_WITH_XML) + if(DCMTK_WITH_XML) + if(WITH_LIBXMLINC) + set(LIBXML_INCDIR ${WITH_LIBXMLINC}/include) + set(LIBXML_LIBDIR ${WITH_LIBXMLINC}/lib) + set(LIBXML_LIBS debug ${LIBXML_LIBDIR}/libxml2_d.lib optimized ${LIBXML_LIBDIR}/libxml2_o.lib debug ${LIBXML_LIBDIR}/iconv_d.lib optimized ${LIBXML_LIBDIR}/iconv_o.lib) + message(STATUS "Info: DCMTK XML support will be enabled") + set(WITH_LIBXML 1) + else() # turn off library if library path not set + message(STATUS "Warning: XML support will be disabled because libxml2 directory is not specified. Correct path and re-enable DCMTK_WITH_XML.") + set(DCMTK_WITH_XML OFF CACHE BOOL "" FORCE) + set(WITH_LIBXML "") + endif() + endif() # libpng support: configure compiler - IF(DCMTK_WITH_PNG) - IF(WITH_LIBPNGINC) - SET(LIBPNG_INCDIR ${WITH_LIBPNGINC}/include) - SET(LIBPNG_LIBDIR ${WITH_LIBPNGINC}/lib) - SET(LIBPNG_LIBS debug ${LIBPNG_LIBDIR}/libpng_d.lib optimized ${LIBPNG_LIBDIR}/libpng_o.lib) - MESSAGE(STATUS "Info: DCMTK PNG support will be enabled") - SET(WITH_LIBPNG 1) - ELSE(WITH_LIBPNGINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: PNG support will be disabled because libpng directory was not specified. Correct path and re-enable DCMTK_WITH_PNG.") - SET(DCMTK_WITH_PNG OFF CACHE BOOL "" FORCE) - SET(WITH_LIBPNG "") - ENDIF(WITH_LIBPNGINC) - ENDIF(DCMTK_WITH_PNG) + if(DCMTK_WITH_PNG) + if(WITH_LIBPNGINC) + set(LIBPNG_INCDIR ${WITH_LIBPNGINC}/include) + set(LIBPNG_LIBDIR ${WITH_LIBPNGINC}/lib) + set(LIBPNG_LIBS debug ${LIBPNG_LIBDIR}/libpng_d.lib optimized ${LIBPNG_LIBDIR}/libpng_o.lib) + message(STATUS "Info: DCMTK PNG support will be enabled") + set(WITH_LIBPNG 1) + else() # turn off library if library path not set + message(STATUS "Warning: PNG support will be disabled because libpng directory was not specified. Correct path and re-enable DCMTK_WITH_PNG.") + set(DCMTK_WITH_PNG OFF CACHE BOOL "" FORCE) + set(WITH_LIBPNG "") + endif() + endif() # libtiff support: configure compiler - IF(DCMTK_WITH_TIFF) - IF(WITH_LIBTIFFINC) - SET(LIBTIFF_INCDIR ${WITH_LIBTIFFINC}/include) - SET(LIBTIFF_LIBDIR ${WITH_LIBTIFFINC}/lib) - SET(LIBTIFF_LIBS debug ${LIBTIFF_LIBDIR}/libtiff_d.lib optimized ${LIBTIFF_LIBDIR}/libtiff_o.lib) - MESSAGE(STATUS "Info: DCMTK TIFF support will be enabled") - SET(WITH_LIBTIFF 1) - ELSE(WITH_LIBTIFFINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: TIFF support will be disabled because libtiff directory was not specified. Correct path and re-enable DCMTK_WITH_TIFF.") - SET(DCMTK_WITH_TIFF OFF CACHE BOOL "" FORCE) - SET(WITH_LIBTIFF "") - ENDIF(WITH_LIBTIFFINC) - ENDIF(DCMTK_WITH_TIFF) + if(DCMTK_WITH_TIFF) + if(WITH_LIBTIFFINC) + set(LIBTIFF_INCDIR ${WITH_LIBTIFFINC}/include) + set(LIBTIFF_LIBDIR ${WITH_LIBTIFFINC}/lib) + set(LIBTIFF_LIBS debug ${LIBTIFF_LIBDIR}/libtiff_d.lib optimized ${LIBTIFF_LIBDIR}/libtiff_o.lib) + message(STATUS "Info: DCMTK TIFF support will be enabled") + set(WITH_LIBTIFF 1) + else() # turn off library if library path not set + message(STATUS "Warning: TIFF support will be disabled because libtiff directory was not specified. Correct path and re-enable DCMTK_WITH_TIFF.") + set(DCMTK_WITH_TIFF OFF CACHE BOOL "" FORCE) + set(WITH_LIBTIFF "") + endif() + endif() # OpenSSL support: configure compiler - IF(DCMTK_WITH_OPENSSL) - IF(WITH_OPENSSLINC) - SET(OPENSSL_BINDIR ${WITH_OPENSSLINC}/bin) - SET(OPENSSL_INCDIR ${WITH_OPENSSLINC}/include) - SET(OPENSSL_LIBDIR ${WITH_OPENSSLINC}/lib) - SET(OPENSSL_LIBS debug ${OPENSSL_LIBDIR}/dcmtkssl_d.lib optimized ${OPENSSL_LIBDIR}/dcmtkssl_o.lib debug ${OPENSSL_LIBDIR}/dcmtkeay_d.lib optimized ${OPENSSL_LIBDIR}/dcmtkeay_o.lib) - MESSAGE(STATUS "Info: DCMTK OPENSSL support will be enabled") - SET(WITH_OPENSSL 1) - ELSE(WITH_OPENSSLINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: OPENSSL support will be disabled because openssl directory was not specified. Correct path and re-enable DCMTK_WITH_OPENSSL.") - SET(DCMTK_WITH_OPENSSL OFF CACHE BOOL "" FORCE) - SET(WITH_OPENSSL "") - ENDIF(WITH_OPENSSLINC) - ENDIF(DCMTK_WITH_OPENSSL) + if(DCMTK_WITH_OPENSSL) + if(WITH_OPENSSLINC) + set(OPENSSL_BINDIR ${WITH_OPENSSLINC}/bin) + set(OPENSSL_INCDIR ${WITH_OPENSSLINC}/include) + set(OPENSSL_LIBDIR ${WITH_OPENSSLINC}/lib) + set(OPENSSL_LIBS debug ${OPENSSL_LIBDIR}/dcmtkssl_d.lib optimized ${OPENSSL_LIBDIR}/dcmtkssl_o.lib debug ${OPENSSL_LIBDIR}/dcmtkeay_d.lib optimized ${OPENSSL_LIBDIR}/dcmtkeay_o.lib) + message(STATUS "Info: DCMTK OPENSSL support will be enabled") + set(WITH_OPENSSL 1) + else() # turn off library if library path not set + message(STATUS "Warning: OPENSSL support will be disabled because openssl directory was not specified. Correct path and re-enable DCMTK_WITH_OPENSSL.") + set(DCMTK_WITH_OPENSSL OFF CACHE BOOL "" FORCE) + set(WITH_OPENSSL "") + endif() + endif() # zlib support: configure compiler - IF(DCMTK_WITH_ZLIB) - IF(WITH_ZLIBINC) - SET(ZLIB_INCDIR ${WITH_ZLIBINC}/include) - SET(ZLIB_LIBDIR ${WITH_ZLIBINC}/lib) - SET(ZLIB_LIBS debug ${ZLIB_LIBDIR}/zlib_d.lib optimized ${ZLIB_LIBDIR}/zlib_o.lib) - MESSAGE(STATUS "Info: DCMTK ZLIB support will be enabled") - SET(WITH_ZLIB 1) - ELSE(WITH_ZLIBINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: ZLIB support will be disabled because zlib directory was not specified. Correct path and re-enable DCMTK_WITH_ZLIB.") - SET(DCMTK_WITH_ZLIB OFF CACHE BOOL "" FORCE) - SET(WITH_ZLIB "") - ENDIF(WITH_ZLIBINC) - ENDIF(DCMTK_WITH_ZLIB) + if(DCMTK_WITH_ZLIB) + if(WITH_ZLIBINC) + set(ZLIB_INCDIR ${WITH_ZLIBINC}/include) + set(ZLIB_LIBDIR ${WITH_ZLIBINC}/lib) + set(ZLIB_LIBS debug ${ZLIB_LIBDIR}/zlib_d.lib optimized ${ZLIB_LIBDIR}/zlib_o.lib) + message(STATUS "Info: DCMTK ZLIB support will be enabled") + set(WITH_ZLIB 1) + else() # turn off library if library path not set + message(STATUS "Warning: ZLIB support will be disabled because zlib directory was not specified. Correct path and re-enable DCMTK_WITH_ZLIB.") + set(DCMTK_WITH_ZLIB OFF CACHE BOOL "" FORCE) + set(WITH_ZLIB "") + endif() + endif() # sndfile support: configure compiler - IF(DCMTK_WITH_SNDFILE) - IF(WITH_SNDFILEINC) - SET(SNDFILE_INCDIR ${WITH_SNDFILEINC}/include) - SET(SNDFILE_LIBDIR ${WITH_SNDFILEINC}/lib) - SET(SNDFILE_LIBS debug ${SNDFILE_LIBDIR}/libsndfile_d.lib optimized ${SNDFILE_LIBDIR}/libsndfile_o.lib) - MESSAGE(STATUS "Info: DCMTK SNDFILE support will be enabled") - SET(WITH_SNDFILE 1) - ELSE(WITH_SNDFILEINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: SNDFILE support will be disabled because libsndfile directory was not specified. Correct path and re-enable DCMTK_WITH_SNDFILE.") - SET(DCMTK_WITH_SNDFILE OFF CACHE BOOL "" FORCE) - SET(WITH_SNDFILE "") - ENDIF(WITH_SNDFILEINC) - ENDIF(DCMTK_WITH_SNDFILE) + if(DCMTK_WITH_SNDFILE) + if(WITH_SNDFILEINC) + set(SNDFILE_INCDIR ${WITH_SNDFILEINC}/include) + set(SNDFILE_LIBDIR ${WITH_SNDFILEINC}/lib) + set(SNDFILE_LIBS debug ${SNDFILE_LIBDIR}/libsndfile_d.lib optimized ${SNDFILE_LIBDIR}/libsndfile_o.lib) + message(STATUS "Info: DCMTK SNDFILE support will be enabled") + set(WITH_SNDFILE 1) + else() # turn off library if library path not set + message(STATUS "Warning: SNDFILE support will be disabled because libsndfile directory was not specified. Correct path and re-enable DCMTK_WITH_SNDFILE.") + set(DCMTK_WITH_SNDFILE OFF CACHE BOOL "" FORCE) + set(WITH_SNDFILE "") + endif() + endif() # libiconv support: configure compiler - IF(DCMTK_WITH_ICONV) - IF(WITH_LIBICONVINC) - SET(LIBICONV_INCDIR ${WITH_LIBICONVINC}/include) - SET(LIBICONV_LIBDIR ${WITH_LIBICONVINC}/lib) - SET(LIBICONV_LIBS debug ${LIBICONV_LIBDIR}/libiconv_d.lib optimized ${LIBICONV_LIBDIR}/libiconv_o.lib) - MESSAGE(STATUS "Info: DCMTK ICONV support will be enabled") - SET(WITH_LIBICONV 1) - ELSE(WITH_LIBICONVINC) # turn off library if library path not set - MESSAGE(STATUS "Warning: ICONV support will be disabled because libiconv directory was not specified. Correct path and re-enable DCMTK_WITH_ICONV.") - SET(DCMTK_WITH_ICONV OFF CACHE BOOL "" FORCE) - SET(WITH_LIBICONV "") - ENDIF(WITH_LIBICONVINC) - ENDIF(DCMTK_WITH_ICONV) + if(DCMTK_WITH_ICONV) + if(WITH_LIBICONVINC) + set(LIBICONV_INCDIR ${WITH_LIBICONVINC}/include) + set(LIBICONV_LIBDIR ${WITH_LIBICONVINC}/lib) + set(LIBICONV_LIBS debug ${LIBICONV_LIBDIR}/libiconv_d.lib optimized ${LIBICONV_LIBDIR}/libiconv_o.lib) + message(STATUS "Info: DCMTK ICONV support will be enabled") + set(WITH_LIBICONV 1) + else() # turn off library if library path not set + message(STATUS "Warning: ICONV support will be disabled because libiconv directory was not specified. Correct path and re-enable DCMTK_WITH_ICONV.") + set(DCMTK_WITH_ICONV OFF CACHE BOOL "" FORCE) + set(WITH_LIBICONV "") + endif() + endif() -ELSE(WIN32) +else() # Find TIFF - IF(DCMTK_WITH_TIFF) - FIND_PACKAGE(TIFF) - INCLUDE_DIRECTORIES(${TIFF_INCLUDE_DIR}) - SET(LIBTIFF_LIBS ${TIFF_LIBRARY}) + if(DCMTK_WITH_TIFF) + find_package(TIFF) + message("TIFF_FOUND=${TIFF_FOUND} TIFF_LIBRARY=${TIFF_LIBRARY}") + find_package(JPEG) + message("JPEG_FOUND=${JPEG_FOUND} JPEG_LIBRARY=${JPEG_LIBRARY}") # turn off library if it could not be found - IF(NOT LIBTIFF_LIBS) - MESSAGE(STATUS "Warning: TIFF support will be disabled because libtiff was not found.") - SET(DCMTK_WITH_TIFF OFF CACHE BOOL "" FORCE) - SET(WITH_LIBTIFF "") - ELSE(NOT LIBTIFF_LIBS) - MESSAGE(STATUS "Info: DCMTK TIFF support will be enabled") - SET(WITH_LIBTIFF 1) - ENDIF(NOT LIBTIFF_LIBS) - ENDIF(DCMTK_WITH_TIFF) + if(NOT TIFF_FOUND OR NOT JPEG_FOUND) + if(NOT TIFF_FOUND) + message(STATUS "Warning: TIFF support will be disabled because libtiff was not found.") + else() + message(STATUS "Warning: TIFF support will be disabled because libjpeg was not found.") + endif() + set(DCMTK_WITH_TIFF OFF CACHE BOOL "" FORCE) + set(WITH_LIBTIFF "") + else() + message(STATUS "Info: DCMTK TIFF support will be enabled") + set(WITH_LIBTIFF 1) + include_directories(${TIFF_INCLUDE_DIR}) + set(LIBTIFF_LIBS ${TIFF_LIBRARY} ${JPEG_LIBRARY}) + endif() + endif() # Find PNG - IF(DCMTK_WITH_PNG) - FIND_PACKAGE(PNG) - INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) - SET(LIBPNG_LIBS ${PNG_LIBRARY}) - IF(NOT LIBPNG_LIBS) - SET(DCMTK_WITH_PNG OFF CACHE BOOL "" FORCE) - MESSAGE(STATUS "Warning: PNG support will be disabled because libpng was not found.") - SET(WITH_LIBPNG "") - ELSE(NOT LIBPNG_LIBS) - MESSAGE(STATUS "Info: DCMTK PNG support will be enabled") - SET(WITH_LIBPNG 1) - ENDIF(NOT LIBPNG_LIBS) - ENDIF(DCMTK_WITH_PNG) + if(DCMTK_WITH_PNG) + find_package(PNG QUIET) + if(NOT PNG_FOUND) + set(DCMTK_WITH_PNG OFF CACHE BOOL "" FORCE) + message(STATUS "Warning: PNG support will be disabled because libpng was not found.") + set(WITH_LIBPNG "") + else() + message(STATUS "Info: DCMTK PNG support will be enabled") + set(WITH_LIBPNG 1) + include_directories(${PNG_INCLUDE_DIR}) + set(LIBPNG_LIBS ${PNG_LIBRARY}) + endif() + endif() # Find OpenSSL - IF(DCMTK_WITH_OPENSSL) - FIND_PACKAGE(OpenSSL) - INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) - SET(OPENSSL_LIBS ${OPENSSL_LIBRARIES}) - IF(NOT OPENSSL_LIBS) - MESSAGE(STATUS "Warning: OPENSSL support will be disabled because openssl was not found.") - SET(WITH_OPENSSL "") - SET(DCMTK_WITH_OPENSSL OFF CACHE BOOL "" FORCE) - ELSE(NOT OPENSSL_LIBS) - MESSAGE(STATUS "Info: DCMTK OPENSSL support will be enabled") - SET(WITH_OPENSSL 1) - ENDIF(NOT OPENSSL_LIBS) - ENDIF(DCMTK_WITH_OPENSSL) + if(DCMTK_WITH_OPENSSL) + find_package(OpenSSL QUIET) + if(NOT OPENSSL_FOUND) + message(STATUS "Warning: OPENSSL support will be disabled because openssl was not found.") + set(WITH_OPENSSL "") + set(DCMTK_WITH_OPENSSL OFF CACHE BOOL "" FORCE) + else() + message(STATUS "Info: DCMTK OPENSSL support will be enabled") + set(WITH_OPENSSL 1) + include_directories(${OPENSSL_INCLUDE_DIR}) + set(OPENSSL_LIBS ${OPENSSL_LIBRARIES}) + endif() + endif() # Find libXML2 - IF(DCMTK_WITH_XML) - FIND_PACKAGE(LibXml2) - INCLUDE_DIRECTORIES(${LIBXML2_INCLUDE_DIR}) - SET(LIBXML_LIBS ${LIBXML2_LIBRARIES}) - IF(NOT LIBXML_LIBS) - MESSAGE(STATUS "Warning: XML support will be disabled because libxml2 was not found.") - SET(WITH_LIBXML "") - SET(DCMTK_WITH_XML OFF CACHE BOOL "" FORCE) - ELSE(NOT LIBXML_LIBS) - MESSAGE(STATUS "Info: DCMTK XML support will be enabled") - SET(WITH_LIBXML 1) - ENDIF(NOT LIBXML_LIBS) - ENDIF(DCMTK_WITH_XML) + if(DCMTK_WITH_XML) + find_package(LibXml2 QUIET) + if(NOT LIBXML2_FOUND) + message(STATUS "Warning: XML support will be disabled because libxml2 was not found.") + set(WITH_LIBXML "") + set(DCMTK_WITH_XML OFF CACHE BOOL "" FORCE) + else() + message(STATUS "Info: DCMTK XML support will be enabled") + set(WITH_LIBXML 1) + include_directories(${LIBXML2_INCLUDE_DIR}) + set(LIBXML_LIBS ${LIBXML2_LIBRARIES}) + endif() + endif() # Find zlib - IF(DCMTK_WITH_ZLIB) - FIND_PACKAGE(ZLIB) - INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIRS}) - SET(ZLIB_LIBS ${ZLIB_LIBRARIES}) - IF(NOT ZLIB_LIBS) - MESSAGE(STATUS "Warning: ZLIB support will be disabled because zlib was not found.") - SET(WITH_ZLIB "") - SET(DCMTK_WITH_ZLIB OFF CACHE BOOL "" FORCE) - ELSE(NOT ZLIB_LIBS) - MESSAGE(STATUS "Info: DCMTK ZLIB support will be enabled") - SET(WITH_ZLIB 1) - ENDIF(NOT ZLIB_LIBS) - ENDIF(DCMTK_WITH_ZLIB) + if(DCMTK_WITH_ZLIB) + find_package(ZLIB QUIET) + if(NOT ZLIB_FOUND) + message(STATUS "Warning: ZLIB support will be disabled because zlib was not found.") + set(WITH_ZLIB "") + set(DCMTK_WITH_ZLIB OFF CACHE BOOL "" FORCE) + else() + message(STATUS "Info: DCMTK ZLIB support will be enabled") + set(WITH_ZLIB 1) + include_directories(${ZLIB_INCLUDE_DIRS}) + set(ZLIB_LIBS ${ZLIB_LIBRARIES}) + endif() + endif() # Find libsndfile - IF(DCMTK_WITH_SNDFILE) - FIND_PACKAGE(Sndfile) - INCLUDE_DIRECTORIES(${SNDFILE_INCLUDE_DIRS}) - SET(SNDFILE_LIBS ${SNDFILE_LIBRARIES}) - IF(NOT SNDFILE_LIBS) - MESSAGE(STATUS "Warning: SNDFILE support will be disabled because libsndfile was not found.") - SET(WITH_SNDFILE "") - SET(DCMTK_WITH_SNDFILE OFF CACHE BOOL "" FORCE) - ELSE(NOT SNDFILE_LIBS) - MESSAGE(STATUS "Info: DCMTK SNDFILE support will be enabled") - SET(WITH_SNDFILE 1) - ENDIF(NOT SNDFILE_LIBS) - ENDIF(DCMTK_WITH_SNDFILE) + if(DCMTK_WITH_SNDFILE) + find_package(Sndfile QUIET) + if(NOT SNDFILE_LIBS) + message(STATUS "Warning: SNDFILE support will be disabled because libsndfile was not found.") + set(WITH_SNDFILE "") + set(DCMTK_WITH_SNDFILE OFF CACHE BOOL "" FORCE) + else() + message(STATUS "Info: DCMTK SNDFILE support will be enabled") + set(WITH_SNDFILE 1) + include_directories(${SNDFILE_INCLUDE_DIRS}) + set(SNDFILE_LIBS ${SNDFILE_LIBRARIES}) + endif() + endif() # Find libiconv - IF(DCMTK_WITH_ICONV) - FIND_PACKAGE(ICONV) - FIND_PACKAGE(Charset) - - IF(LIBICONV_FOUND AND LIBCHARSET_FOUND) - MESSAGE(STATUS "Info: DCMTK ICONV support will be enabled") - SET(WITH_LIBICONV 1) - SET(LIBICONV_INCDIR ${LIBICONV_INCLUDE_DIRS} ${LIBCHARSET_INCLUDE_DIRS}) - SET(LIBICONV_LIBDIR ${LIBICONV_LIBDIR}) - SET(LIBICONV_LIBS ${LIBICONV_LIBRARIES} ${LIBCHARSET_LIBRARY}) - INCLUDE_DIRECTORIES(${LIBICONV_INCDIR}) - ELSE(LIBICONV_FOUND AND LIBCHARSET_FOUND) - MESSAGE(STATUS "Warning: ICONV support will be disabled because libiconv was not found. Correct LIBICONV_LIBDIR and LIBICONV_INCLUDE_DIR and re-enable DCMTK_WITH_ICONV.") - SET(DCMTK_WITH_ICONV OFF CACHE BOOL "" FORCE) - SET(WITH_LIBICONV "") - ENDIF(LIBICONV_FOUND AND LIBCHARSET_FOUND) - ENDIF(DCMTK_WITH_ICONV) + if(DCMTK_WITH_ICONV) + find_package(ICONV QUIET) + find_package(Charset QUIET) + if(NOT LIBICONV_FOUND OR NOT LIBCHARSET_FOUND) + message(STATUS "Warning: ICONV support will be disabled because libiconv was not found. Correct LIBICONV_LIBDIR and LIBICONV_INCLUDE_DIR and re-enable DCMTK_WITH_ICONV.") + set(DCMTK_WITH_ICONV OFF CACHE BOOL "" FORCE) + set(WITH_LIBICONV "") + else() + message(STATUS "Info: DCMTK ICONV support will be enabled") + set(WITH_LIBICONV 1) + set(LIBICONV_INCDIR ${LIBICONV_INCLUDE_DIRS} ${LIBCHARSET_INCLUDE_DIRS}) + set(LIBICONV_LIBDIR ${LIBICONV_LIBDIR}) + set(LIBICONV_LIBS ${LIBICONV_LIBRARIES} ${LIBCHARSET_LIBRARY}) + include_directories(${LIBICONV_INCDIR}) + endif() + endif() # Find libwrap - IF(DCMTK_WITH_WRAP) - FIND_PACKAGE(Wrap) - INCLUDE_DIRECTORIES(${WRAP_INCLUDE_DIRS}) - SET(WRAP_LIBS ${WRAP_LIBRARIES}) - IF(NOT WRAP_LIBS) - MESSAGE(STATUS "Warning: WRAP support will be disabled because libwrap was not found.") - SET(WITH_TCPWRAPPER "") - SET(DCMTK_WITH_WRAP OFF CACHE BOOL "" FORCE) - ELSE(NOT WRAP_LIBS) - MESSAGE(STATUS "Info: DCMTK WRAP support will be enabled") - SET(WITH_TCPWRAPPER 1) - ENDIF(NOT WRAP_LIBS) - ENDIF(DCMTK_WITH_WRAP) + if(DCMTK_WITH_WRAP) + find_package(Wrap QUIET) + if(NOT WRAP_FOUND) + message(STATUS "Warning: WRAP support will be disabled because libwrap was not found.") + set(WITH_TCPWRAPPER "") + set(DCMTK_WITH_WRAP OFF CACHE BOOL "" FORCE) + else() + message(STATUS "Info: DCMTK WRAP support will be enabled") + set(WITH_TCPWRAPPER 1) + include_directories(${WRAP_INCLUDE_DIRS}) + set(WRAP_LIBS ${WRAP_LIBRARIES}) + endif() + endif() -ENDIF(WIN32) +endif() # Find doxygen -IF(DCMTK_WITH_DOXYGEN) - FIND_PACKAGE(Doxygen) # will set variable DOXYGEN_EXECUTABLE - IF(NOT DOXYGEN_EXECUTABLE) - MESSAGE(STATUS "Warning: DOXYGEN support will be disabled because doxygen was not found.") - SET(DCMTK_WITH_DOXYGEN OFF CACHE BOOL "" FORCE) - ENDIF(NOT DOXYGEN_EXECUTABLE) -ENDIF(DCMTK_WITH_DOXYGEN) +if(DCMTK_WITH_DOXYGEN) + find_package(Doxygen) # will set variable DOXYGEN_EXECUTABLE + if(NOT DOXYGEN_FOUND) + message(STATUS "Warning: DOXYGEN support will be disabled because doxygen was not found.") + set(DCMTK_WITH_DOXYGEN OFF CACHE BOOL "" FORCE) + endif() +endif() -IF(DCMTK_WITH_ICONV) - INCLUDE(CheckCXXSourceCompiles) - SET(CMAKE_REQUIRED_INCLUDES ${LIBICONV_INCDIR}) - SET(CMAKE_REQUIRED_LIBRARIES ${LIBICONV_LIBS}) +if(DCMTK_WITH_ICONV) + include(CheckCXXSourceCompiles) + set(CMAKE_REQUIRED_INCLUDES ${LIBICONV_INCDIR}) + set(CMAKE_REQUIRED_LIBRARIES ${LIBICONV_LIBS}) CHECK_CXX_SOURCE_COMPILES(" #include int main() { @@ -289,6 +295,6 @@ IF(DCMTK_WITH_ICONV) iconv(cd, &in, 0, 0, 0); return 0; }" LIBICONV_SECOND_ARGUMENT_CONST) - SET(CMAKE_REQUIRED_INCLUDES) - SET(CMAKE_REQUIRED_LIBRARIES) -ENDIF(DCMTK_WITH_ICONV) + set(CMAKE_REQUIRED_INCLUDES) + set(CMAKE_REQUIRED_LIBRARIES) +endif() diff --git a/CMake/DCMTKBuildTreeSettings.cmake.in b/CMake/DCMTKBuildTreeSettings.cmake.in new file mode 100644 index 0000000..7026128 --- /dev/null +++ b/CMake/DCMTKBuildTreeSettings.cmake.in @@ -0,0 +1,2 @@ +set(DCMTK_INCLUDE_DIRS + "@DCMTK_INCLUDE_DIR@") diff --git a/CMake/DCMTKConfig.cmake.in b/CMake/DCMTKConfig.cmake.in index 99a1ea6..dbadc32 100644 --- a/CMake/DCMTKConfig.cmake.in +++ b/CMake/DCMTKConfig.cmake.in @@ -26,3 +26,33 @@ SET(DCMTK_SINGLE_SHARED_LIBRARY @BUILD_SINGLE_SHARED_LIBRARY@) SET(DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS @DCMTK_OVERWRITE_WIN32_COMPILER_FLAGS@) SET(DCMTK_WIDE_CHAR_FILE_IO_FUNCTIONS @DCMTK_WIDE_CHAR_FILE_IO_FUNCTIONS@) SET(DCMTK_WIDE_CHAR_MAIN_FUNCTION @DCMTK_WIDE_CHAR_MAIN_FUNCTION@) + +get_filename_component(DCMTK_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + +set(DCMTK_INCLUDE_DIR_LIST "@DCMTK_MODULES_W_INCLUDE@") + +@DCMTKCONFIG_INCLUDE_DIR_CODE@ + +include("${DCMTK_CMAKE_DIR}/DCMTKLibraryDepends.cmake") + +set(DCMTK_LIBRARIES charls +dcmimage +dcmjpls +dcmqrdb +dcmtls +ijg12 +oflog +dcmdata +dcmimgle +dcmnet +dcmrt +dcmwlm +ijg16 +ofstd +dcmdsig +dcmjpeg +dcmpstat +dcmsr +i2d +ijg8 +) diff --git a/CMake/DCMTKConfigVersion.cmake.in b/CMake/DCMTKConfigVersion.cmake.in new file mode 100644 index 0000000..5d53321 --- /dev/null +++ b/CMake/DCMTKConfigVersion.cmake.in @@ -0,0 +1,11 @@ +set(PACKAGE_VERSION "@DCMTK_MAJOR_VERSION@.@DCMTK_MINOR_VERSION@.@DCMTK_BUILD_VERSION@") + +# Check whether the requested PACKAGE_FIND_VERSION is compatible +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/CMake/dcmtkMacros.cmake b/CMake/dcmtkMacros.cmake index 1a3c772..57d14fe 100644 --- a/CMake/dcmtkMacros.cmake +++ b/CMake/dcmtkMacros.cmake @@ -62,10 +62,10 @@ MACRO(DCMTK_ADD_LIBRARY LIBRARY) IF(NOT BUILD_SINGLE_SHARED_LIBRARY) # Declare installation files INSTALL(TARGETS ${LIBRARY}${DCMTK_LIBRARY_SUFFIX} - COMPONENT lib - RUNTIME DESTINATION ${DCMTK_INSTALL_BINDIR} - LIBRARY DESTINATION ${DCMTK_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${DCMTK_INSTALL_LIBDIR}) + EXPORT DCMTKLibraryDepends + RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin + LIBRARY DESTINATION ${INSTALL_LIB_DIR}/lib COMPONENT shlib + ARCHIVE DESTINATION ${INSTALL_LIB_DIR}/lib COMPONENT lib) ENDIF(NOT BUILD_SINGLE_SHARED_LIBRARY) ENDMACRO(DCMTK_ADD_LIBRARY) diff --git a/CMake/dcmtkPrepare.cmake b/CMake/dcmtkPrepare.cmake index d36e935..09ffb12 100644 --- a/CMake/dcmtkPrepare.cmake +++ b/CMake/dcmtkPrepare.cmake @@ -13,6 +13,14 @@ IF(CMAKE_BACKWARDS_COMPATIBILITY GREATER 2.8.10) SET(CMAKE_BACKWARDS_COMPATIBILITY 2.8.10 CACHE STRING "Latest version of CMake when this project was released." FORCE) ENDIF(CMAKE_BACKWARDS_COMPATIBILITY GREATER 2.8.10) +# make sure CMAKE_BUILD_TYPE has a value. default to release +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") +endif() + # Basic version information # (Starting with version 3.5.5, an odd number at the last position indicates # a development snapshot and an even number indicates an official release.) diff --git a/CMakeLists.txt b/CMakeLists.txt index db1e219..7552ba7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,50 +12,78 @@ INCLUDE(CMake/dcmtkPrepare.cmake NO_POLICY_SCOPE) #----------------------------------------------------------------------------- # Modules to be built -SET(DCMTK_MODULES config ofstd oflog dcmdata dcmimgle dcmimage dcmjpeg dcmjpls dcmtls dcmnet dcmsr dcmsign dcmwlm dcmqrdb dcmpstat dcmrt doxygen - CACHE STRING "List of modules that should be built.") -MARK_AS_ADVANCED(DCMTK_MODULES) +SET(DCMTK_LIBS ofstd oflog dcmdata dcmimgle + dcmimage dcmjpeg dcmjpls dcmtls dcmnet dcmsr + dcmsign dcmwlm dcmqrdb dcmpstat dcmrt) + +SET(DCMTK_MODULES config doxygen ofstd oflog dcmdata dcmimgle + dcmimage dcmjpeg dcmjpls dcmtls dcmnet dcmsr + dcmsign dcmwlm dcmqrdb dcmpstat dcmrt) + +set(DCMTK_LIBRARIES ${DCMTK_LIBS} ijg8 ijg12 ijg16 charls dcmdsig) #----------------------------------------------------------------------------- # Include directories #----------------------------------------------------------------------------- - -SET(DCMTK_INCLUDE_DIR - ${DCMTK_BINARY_DIR}/config/include - ${DCMTK_SOURCE_DIR}/ofstd/include - ${DCMTK_SOURCE_DIR}/oflog/include - ${DCMTK_SOURCE_DIR}/dcmdata/include - ${DCMTK_SOURCE_DIR}/dcmimgle/include - ${DCMTK_SOURCE_DIR}/dcmimage/include - ${DCMTK_SOURCE_DIR}/dcmjpeg/libijg8 - ${DCMTK_SOURCE_DIR}/dcmjpeg/libijg12 - ${DCMTK_SOURCE_DIR}/dcmjpeg/libijg16 - ${DCMTK_SOURCE_DIR}/dcmjpeg/include - ${DCMTK_SOURCE_DIR}/dcmjpls/include - ${DCMTK_SOURCE_DIR}/dcmnet/include - ${DCMTK_SOURCE_DIR}/dcmpstat/include - ${DCMTK_SOURCE_DIR}/dcmqrdb/include - ${DCMTK_SOURCE_DIR}/dcmsign/include - ${DCMTK_SOURCE_DIR}/dcmsr/include - ${DCMTK_SOURCE_DIR}/dcmtls/include - ${DCMTK_SOURCE_DIR}/dcmwlm/include +set(DCMTK_MODULES_W_INCLUDE + config + ofstd + oflog + dcmdata + dcmimgle + dcmimage + dcmjpeg + dcmjpeg + dcmjpeg + dcmjpeg + dcmjpls + dcmnet + dcmpstat + dcmqrdb + dcmsign + dcmsr + dcmtls + dcmwlm ) + +SET(DCMTK_INCLUDE_DIR) +foreach(inc ${DCMTK_MODULES_W_INCLUDE}) + if(inc STREQUAL config) + list(APPEND DCMTK_INCLUDE_DIR ${DCMTK_BINARY_DIR}/config/include) + else() + list(APPEND DCMTK_INCLUDE_DIR ${DCMTK_SOURCE_DIR}/${inc}/include) + endif() +endforeach() + INCLUDE_DIRECTORIES(${DCMTK_INCLUDE_DIR}) +# set paths for install -- empty initially +# Offer the user the choice of overriding the installation directories +set(INSTALL_BIN_DIR CACHE PATH "Installation directory for libraries") +set(INSTALL_LIB_DIR CACHE PATH "Installation directory for libraries") +set(INSTALL_INCLUDE_DIR CACHE PATH "Installation directory for include") +# set suffix for CMake files used for packaging +if(WIN32 AND NOT CYGWIN) + set(INSTALL_CMAKE_DIR cmake) +else() + set(INSTALL_CMAKE_DIR lib/cmake/dcmtk) +endif() + +# Make relative paths absolute (needed later) +foreach(p LIB BIN INCLUDE CMAKE) + set(var INSTALL_${p}_DIR) + if(NOT IS_ABSOLUTE "${${var}}") + set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") + endif() +endforeach() + #----------------------------------------------------------------------------- # Prepare osconfig.h #----------------------------------------------------------------------------- # add the osconfig.h.in file CONFIGURE_FILE(${DCMTK_SOURCE_DIR}/CMake/osconfig.h.in - ${DCMTK_BINARY_DIR}/config/include/dcmtk/config/osconfig.h) - -#----------------------------------------------------------------------------- -# Write current configuration to file (for external projects) -#----------------------------------------------------------------------------- - -CONFIGURE_FILE(${DCMTK_SOURCE_DIR}/CMake/DCMTKConfig.cmake.in - ${DCMTK_BINARY_DIR}/DCMTKConfig.cmake @ONLY) + ${DCMTK_BINARY_DIR}/config/include/dcmtk/config/osconfig.h) #----------------------------------------------------------------------------- # Start actual compilation tasks @@ -68,6 +96,58 @@ ENDFOREACH(module) INCLUDE(CMake/dcmtkAfterModules.cmake NO_POLICY_SCOPE) #----------------------------------------------------------------------------- +# exports +#----------------------------------------------------------------------------- +if(BUILD_SINGLE_SHARED_LIBRARY) + set(EXPORT_LIBS dcmtk) +else() + set(EXPORT_LIBS ${DCMTK_LIBRARIES}) +endif() + +export(TARGETS ${EXPORT_LIBS} + FILE ${PROJECT_BINARY_DIR}/DCMTKLibraryDepends.cmake) + +export(PACKAGE DCMTK) + +# +# determine where include is relative to the CMake dir in +# in installed tree +file(RELATIVE_PATH CONF_REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" + "${INSTALL_INCLUDE_DIR}") + +#----------------------------------------------------------------------------- +# Write current configuration to file (for external projects) +#----------------------------------------------------------------------------- +set(DCMTKCONFIG_INCLUDE_DIR_CODE + "include(\"\${DCMTK_CMAKE_DIR}/DCMTKBuildTreeSettings.cmake\")") +configure_file(${DCMTK_SOURCE_DIR}/CMake/DCMTKConfig.cmake.in + ${DCMTK_BINARY_DIR}/DCMTKConfig.cmake @ONLY) + +set(DCMTKCONFIG_INCLUDE_DIR_CODE +"SET(DCMTK_INCLUDE_DIRS) +foreach(inc \${DCMTK_INCLUDE_DIR_LIST}) + list(APPEND DCMTK_INCLUDE_DIRS \${DCMTK_CMAKE_DIR}/${CONF_REL_INCLUDE_DIR}include/dcmtk/\${inc}) +endforeach() +list(APPEND DCMTK_INCLUDE_DIRS \${DCMTK_CMAKE_DIR}/${CONF_REL_INCLUDE_DIR}include)" +) +configure_file(${DCMTK_SOURCE_DIR}/CMake/DCMTKConfig.cmake.in + CMakeFiles/DCMTKConfig.cmake @ONLY) + +#----------------------------------------------------------------------------- +# Export version # checked by find_package +#----------------------------------------------------------------------------- +configure_file(${DCMTK_SOURCE_DIR}/CMake/DCMTKConfigVersion.cmake.in + "${PROJECT_BINARY_DIR}/DCMTKConfigVersion.cmake" + @ONLY) + +# +# make a cmake file -- in this case, all that needs defining +# is double-conversion_INCLUDE_DIRS +configure_file(${DCMTK_SOURCE_DIR}/CMake/DCMTKBuildTreeSettings.cmake.in + "${PROJECT_BINARY_DIR}/DCMTKBuildTreeSettings.cmake" + @ONLY) + +#----------------------------------------------------------------------------- # Installation tasks #----------------------------------------------------------------------------- @@ -82,6 +162,10 @@ INSTALL(FILES ANNOUNCE.${DCMTK_PACKAGE_VERSION_NUMBER} CHANGES.${DCMTK_PACKAGE_V COMPONENT doc) # Install DCMTK's CMake configuration file -INSTALL(FILES ${DCMTK_BINARY_DIR}/DCMTKConfig.cmake - DESTINATION ${DCMTK_INSTALL_DATDIR} - COMPONENT data) +INSTALL(FILES ${DCMTK_BINARY_DIR}/CMakeFiles/DCMTKConfig.cmake + ${DCMTK_BINARY_DIR}/DCMTKConfigVersion.cmake + DESTINATION ${INSTALL_CMAKE_DIR} + COMPONENT dev) + +install(EXPORT DCMTKLibraryDepends DESTINATION + "${INSTALL_CMAKE_DIR}" COMPONENT dev) -- 1.7.6.1