changeset 2647:862428fcdbce

Converting into ITKv4 module
author Vladimir S. FONOV <vladimir.fonov@gmail.com>
date Wed, 21 Mar 2012 16:32:55 -0400
parents 199f91058105
children aed206ef4c5e
files CMakeLists.txt ezminc/CMakeLists.txt minc4itk/CMakeLists.txt minc4itk/itkMincImageIO.h minc4itk/itkMincImageIOFactory.cxx minc4itk/minc_helpers.h
diffstat 6 files changed, 343 insertions(+), 268 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,40 +3,11 @@
 # Andrew Janke - a.janke@gmail.com
 # Vladimir S. FONOV - vladimir.fonov@gmail.com
 
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(minc2)
+
 SET(MINC2_PACKAGE_VERSION_MAJOR 2)
 SET(MINC2_PACKAGE_VERSION_MINOR 1)
 SET(MINC2_PACKAGE_VERSION_PATCH 20)
-
-
-IF(NOT MINC_TOOLKIT_BUILD)
-  PROJECT(minc2)
-  SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
-  ENABLE_TESTING()
-  INCLUDE(CTest)
-  
-  IF(CMAKE_VERSION VERSION_GREATER 2.8.2 )
-    INCLUDE(ExternalProject)
-    INCLUDE(BuildNETCDF)
-    INCLUDE(BuildHDF5)
-    SET(ENABLE_SUPERBUILD ON)
-  ELSE(CMAKE_VERSION VERSION_GREATER 2.8.2 )
-    SET(ENABLE_SUPERBUILD OFF)
-  ENDIF(CMAKE_VERSION VERSION_GREATER 2.8.2)
-  
-  SET(CPACK_GENERATOR TGZ)
-  SET(CPACK_PACKAGE_VERSION_MAJOR ${MINC2_PACKAGE_VERSION_MAJOR})
-  SET(CPACK_PACKAGE_VERSION_MINOR ${MINC2_PACKAGE_VERSION_MINOR})
-  SET(CPACK_PACKAGE_VERSION_PATCH ${MINC2_PACKAGE_VERSION_PATCH})
-  
-  INCLUDE(CPack)
-
-  FIND_PACKAGE(ITK QUIET)
-  
-ENDIF(NOT MINC_TOOLKIT_BUILD)
-
-#ADD_SUBDIRECTORY( doc )
-
 SET(PACKAGE "minc2")
 SET(PACKAGE_BUGREPORT "a.janke@gmail.com")
 
@@ -44,93 +15,143 @@
 SET(PACKAGE_VERSION "${MINC2_PACKAGE_VERSION_MAJOR}.${MINC2_PACKAGE_VERSION_MINOR}.${MINC2_PACKAGE_VERSION_PATCH}")
 SET(PACKAGE_STRING  "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 
-OPTION(BUILD_MINC2       "Support minc2 file format" ON)
-OPTION(BUILD_TOOLS       "Build minc tools (mincreshape,mincresample, etc)" ON)
-OPTION(BUILD_CONVERTERS  "Build minc conversion programs (mnc2nii, nii2mnc , dcm2mnc...)" ON)
-OPTION(BUILD_EZMINC      "Build C++ interface library EZminc" ON)
-OPTION(BUILD_SHARED_LIBS "Build minc2 with shared libraries." OFF)
+
+IF(itk-module)
+  # build minimal set for minc4itk library
 
-IF(ENABLE_SUPERBUILD)
-  OPTION(USE_SYSTEM_NETCDF "Use System NETCDF > 3.6.3" ON)
-ELSE(ENABLE_SUPERBUILD)
-  SET(USE_SYSTEM_NETCDF ON)
-ENDIF(ENABLE_SUPERBUILD)
+  SET(BUILD_EZMINC ON)
+  SET(BUILD_MINC4ITK OFF)
+  SET(BUILD_MINC2 ON)
+  SET(BUILD_TOOLS OFF)
+  SET(BUILD_ITK_PLUGIN OFF)
+  SET(BUILD_MINC4ITK_EXAMPLES OFF)
+  SET(BUILD_CONVERTERS OFF)
+  SET(BUILD_EZMINC_EXAMPLES OFF)
+  
+  SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
+  
+  FIND_PACKAGE(NETCDF REQUIRED)
+  # configuring as ITK external module
+  SET(USE_ITK_HDF5 ON)  # we made requirement for ITKHDF5
+  SET(HDF5_INCLUDE_DIR "${ITKHDF5_INCLUDE_DIRS}/itkhdf5") # a hack?
+  SET(HDF5_LIBRARY     ${ITKHDF5_LIBRARIES})
+  SET(ZLIB_LIBRARIES   ${ITKZLIB_LIBRARIES})
+  
+  SET(HAVE_ZLIB 1)# we made requirement for ITKHDF5
+ELSE(itk-module)
 
-IF(BUILD_EZMINC AND ITK_FOUND)
-  OPTION(BUILD_MINC4ITK   "Build ITK interface" ON)
-ENDIF(BUILD_EZMINC AND ITK_FOUND)
+  CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
 
-IF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
- IF(ITK_FOUND AND ITK_VERSION_MAJOR VERSION_EQUAL 4) # check if using ITK HDF5 library
-  IF(ITKHDF5_LOADED)
-		MESSAGE(WARNING "ITK compiled with HDF5 support!")
-    SET(USE_ITK_HDF5 ON)
-  ELSE(ITKHDF5_LOADED)
-    SET(USE_ITK_HDF5 OFF)
-  ENDIF(ITKHDF5_LOADED)
- ELSE(ITK_FOUND AND ITK_VERSION_MAJOR VERSION_EQUAL 4) # check if using ITK HDF5 library
-  SET(USE_ITK_HDF5 OFF)
+  IF(NOT MINC_TOOLKIT_BUILD)
+    SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
+    ENABLE_TESTING()
+    INCLUDE(CTest)
+    
+    IF(CMAKE_VERSION VERSION_GREATER 2.8.2 )
+      INCLUDE(ExternalProject)
+      INCLUDE(BuildNETCDF)
+      INCLUDE(BuildHDF5)
+      SET(ENABLE_SUPERBUILD ON)
+    ELSE(CMAKE_VERSION VERSION_GREATER 2.8.2 )
+      SET(ENABLE_SUPERBUILD OFF)
+    ENDIF(CMAKE_VERSION VERSION_GREATER 2.8.2)
+    
+    SET(CPACK_GENERATOR TGZ)
+    SET(CPACK_PACKAGE_VERSION_MAJOR ${MINC2_PACKAGE_VERSION_MAJOR})
+    SET(CPACK_PACKAGE_VERSION_MINOR ${MINC2_PACKAGE_VERSION_MINOR})
+    SET(CPACK_PACKAGE_VERSION_PATCH ${MINC2_PACKAGE_VERSION_PATCH})
+    
+    INCLUDE(CPack)
+
+    FIND_PACKAGE(ITK QUIET)
+    
+  ENDIF(NOT MINC_TOOLKIT_BUILD)
+
+  #ADD_SUBDIRECTORY( doc )
+
+  OPTION(BUILD_MINC2       "Support minc2 file format" ON)
+  OPTION(BUILD_TOOLS       "Build minc tools (mincreshape,mincresample, etc)" ON)
+  OPTION(BUILD_CONVERTERS  "Build minc conversion programs (mnc2nii, nii2mnc , dcm2mnc...)" ON)
+  OPTION(BUILD_EZMINC      "Build C++ interface library EZminc" ON)
+  OPTION(BUILD_SHARED_LIBS "Build minc2 with shared libraries." OFF)
+
   IF(ENABLE_SUPERBUILD)
-		OPTION(USE_SYSTEM_HDF5 "Use System HDF5 > 1.8" ON)
-	ELSE(ENABLE_SUPERBUILD)
-		SET(USE_SYSTEM_HDF5 ON)
+    OPTION(USE_SYSTEM_NETCDF "Use System NETCDF > 3.6.3" ON)
+  ELSE(ENABLE_SUPERBUILD)
+    SET(USE_SYSTEM_NETCDF ON)
   ENDIF(ENABLE_SUPERBUILD)
- ENDIF(ITK_FOUND AND ITK_VERSION_MAJOR VERSION_EQUAL 4) # check if using ITK HDF5 library
-ENDIF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
+
+  IF(BUILD_EZMINC AND ITK_FOUND)
+    OPTION(BUILD_MINC4ITK   "Build ITK interface" ON)
+  ENDIF(BUILD_EZMINC AND ITK_FOUND)
 
-IF(BUILD_SHARED_LIBS)
-  SET(LIBRARY_TYPE SHARED)
-  SET(LIBRARY_INSTALL LIBRARY)
-ELSE(BUILD_SHARED_LIBS)
-  SET(LIBRARY_TYPE STATIC)
-  SET(LIBRARY_INSTALL ARCHIVE)
-ENDIF(BUILD_SHARED_LIBS)
+  IF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
+    IF(ITK_FOUND AND ITK_VERSION_MAJOR VERSION_EQUAL 4) # check if using ITK HDF5 library
+      IF(ITKHDF5_LOADED)
+        SET(USE_ITK_HDF5 ON)
+      ELSE(ITKHDF5_LOADED)
+        SET(USE_ITK_HDF5 OFF)
+      ENDIF(ITKHDF5_LOADED)
+    ELSE(ITK_FOUND AND ITK_VERSION_MAJOR VERSION_EQUAL 4) # check if using ITK HDF5 library
+      SET(USE_ITK_HDF5 OFF)
+      IF(ENABLE_SUPERBUILD)
+        OPTION(USE_SYSTEM_HDF5 "Use System HDF5 > 1.8" ON)
+      ELSE(ENABLE_SUPERBUILD)
+        SET(USE_SYSTEM_HDF5 ON)
+      ENDIF(ENABLE_SUPERBUILD)
+    ENDIF(ITK_FOUND AND ITK_VERSION_MAJOR VERSION_EQUAL 4) # check if using ITK HDF5 library
+  ENDIF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
+
+  IF(BUILD_SHARED_LIBS)
+    SET(LIBRARY_TYPE SHARED)
+    SET(LIBRARY_INSTALL LIBRARY)
+  ELSE(BUILD_SHARED_LIBS)
+    SET(LIBRARY_TYPE STATIC)
+    SET(LIBRARY_INSTALL ARCHIVE)
+  ENDIF(BUILD_SHARED_LIBS)
 
 
-# external packages
-IF(NOT MINC_TOOLKIT_BUILD)
-  IF(USE_SYSTEM_NETCDF AND NOT MINC_TOOLKIT_BUILD)
-    FIND_PACKAGE(NETCDF REQUIRED)
-  ELSE(USE_SYSTEM_NETCDF AND NOT MINC_TOOLKIT_BUILD)
-    build_netcdf(${CMAKE_INSTALL_PREFIX})
-  ENDIF(USE_SYSTEM_NETCDF AND NOT MINC_TOOLKIT_BUILD)
-ENDIF(NOT MINC_TOOLKIT_BUILD)
+  # external packages
+  IF(NOT MINC_TOOLKIT_BUILD)
+    IF(USE_SYSTEM_NETCDF AND NOT MINC_TOOLKIT_BUILD)
+      FIND_PACKAGE(NETCDF REQUIRED)
+    ELSE(USE_SYSTEM_NETCDF AND NOT MINC_TOOLKIT_BUILD)
+      build_netcdf(${CMAKE_INSTALL_PREFIX})
+    ENDIF(USE_SYSTEM_NETCDF AND NOT MINC_TOOLKIT_BUILD)
+  ENDIF(NOT MINC_TOOLKIT_BUILD)
 
 
-IF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
-  IF(USE_ITK_HDF5)
-    SET(HDF5_INCLUDE_DIR ${ITKHDF5_INCLUDE_DIRS})
-    SET(HDF5_LIBRARY ${ITKHDF5_LIBRARIES})
-    SET(ZLIB_LIBRARIES ${ITKZLIB_LIBRARIES})
-  ELSE(USE_ITK_HDF5)
-    FIND_PACKAGE(ZLIB REQUIRED)
-    IF(USE_SYSTEM_HDF5)
-      FIND_PACKAGE(HDF5 REQUIRED)
-    ELSE(USE_SYSTEM_HDF5)
-      build_hdf5(${CMAKE_INSTALL_PREFIX})
-    ENDIF(USE_SYSTEM_HDF5)
-  ENDIF(USE_ITK_HDF5)
-  
-  IF(ZLIB_FOUND)
-    SET(HAVE_ZLIB 1)
-  ELSE(ZLIB_FOUND)
-    FIND_PACKAGE(ZLIB)
+  IF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
+    IF(USE_ITK_HDF5)
+      SET(HDF5_INCLUDE_DIR "${ITKHDF5_INCLUDE_DIRS}/itkhdf5") # a hack?
+      SET(HDF5_LIBRARY     ${ITKHDF5_LIBRARIES})
+      SET(ZLIB_LIBRARIES   ${ITKZLIB_LIBRARIES})
+    ELSE(USE_ITK_HDF5)
+      FIND_PACKAGE(ZLIB REQUIRED)
+      IF(USE_SYSTEM_HDF5)
+        FIND_PACKAGE(HDF5 REQUIRED)
+      ELSE(USE_SYSTEM_HDF5)
+        build_hdf5(${CMAKE_INSTALL_PREFIX})
+      ENDIF(USE_SYSTEM_HDF5)
+    ENDIF(USE_ITK_HDF5)
+    
     IF(ZLIB_FOUND)
       SET(HAVE_ZLIB 1)
+    ELSE(ZLIB_FOUND)
+      FIND_PACKAGE(ZLIB)
+      IF(ZLIB_FOUND)
+        SET(HAVE_ZLIB 1)
+      ENDIF(ZLIB_FOUND)
     ENDIF(ZLIB_FOUND)
-  ENDIF(ZLIB_FOUND)
-ENDIF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
-
-ADD_DEFINITIONS(-DHAVE_CONFIG_H)
+  ENDIF(BUILD_MINC2 AND NOT MINC_TOOLKIT_BUILD)
 
-# add for building relocatable library
-IF(UNIX)
-	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
-	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
-ENDIF(UNIX)
+  # add for building relocatable library
+  IF(UNIX)
+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+  ENDIF(UNIX)
 
-# aliases
-SET(VERSION "${PACKAGE_VERSION}")
+ENDIF(itk-module)
 
 # check for prereqs
 INCLUDE(CheckFunctionExists)
@@ -170,14 +191,17 @@
 CHECK_INCLUDE_FILES(strings.h   HAVE_STRINGS_H)
 CHECK_INCLUDE_FILES(pwd.h       HAVE_PWD_H)
 
+ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 
+# aliases
+SET(VERSION "${PACKAGE_VERSION}")
 
 IF(BUILD_EZMINC)
   set(MINC2_INCLUDE_DIRS_CONFIG    
-    ${CMAKE_SOURCE_DIR}/ezminc
+    ${CMAKE_CURRENT_SOURCE_DIR}/ezminc
   )
   INCLUDE_DIRECTORIES(
-    ${CMAKE_SOURCE_DIR}/ezminc
+    ${CMAKE_CURRENT_SOURCE_DIR}/ezminc
    )
 ENDIF(BUILD_EZMINC)
 
@@ -207,7 +231,6 @@
 # others
 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/epm-header.in ${CMAKE_CURRENT_BINARY_DIR}/epm-header)
 
-
 # set the master INCLUDE directories
 INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}
@@ -219,12 +242,9 @@
 INCLUDE_DIRECTORIES( ${NETCDF_INCLUDE_DIR} )
 
 IF(BUILD_MINC2)
-  INCLUDE_DIRECTORIES(
-   ${CMAKE_CURRENT_SOURCE_DIR}/libsrc2
-   )
+  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libsrc2 )
 ENDIF(BUILD_MINC2)
 
-
 # some variables
 SET(minc1_LIB_SRCS
    libsrc/ParseArgv.c
@@ -243,6 +263,17 @@
    libsrc/read_file_names.c
    )
 
+SET(minc1_HEADERS
+  libsrc/minc.h 
+  libsrc/ParseArgv.h 
+  libsrc/voxel_loop.h 
+  libsrc/nd_loop.h
+  libsrc/time_stamp.h
+  libsrc/minc_compat.h
+  volume_io/Include/volume_io.h
+  libsrc/minc_simple.h
+)
+
 SET(minc2_LIB_SRCS
    libsrc2/convert.c
    libsrc2/datatype.c
@@ -259,65 +290,9 @@
    libsrc2/volume.c
    )
 
-SET(MINC2_LIBRARY minc)
-SET(MINC2_LIBRARIES ${MINC2_LIBRARY} ${NETCDF_LIBRARY})
-
-IF(BUILD_MINC2)
-  INCLUDE_DIRECTORIES( ${HDF5_INCLUDE_DIR} )
-
-
-  SET(minc_LIB_SRCS ${minc1_LIB_SRCS} ${minc2_LIB_SRCS})
-  SET(MINC2_LIBRARY minc2)
-  SET(MINC2_LIBRARIES ${MINC2_LIBRARY} ${HDF5_LIBRARY} ${NETCDF_LIBRARY} ${ZLIB_LIBRARIES}  m )
-
-  ADD_LIBRARY(minc2 ${LIBRARY_TYPE} ${minc_LIB_SRCS} )
-
-  TARGET_LINK_LIBRARIES(minc2 ${NETCDF_LIBRARY} ${HDF5_LIBRARY} ${ZLIB_LIBRARIES} m )
-
-  INSTALL(TARGETS minc2 ${LIBRARY_INSTALL} DESTINATION lib)
-
-  INSTALL(FILES libsrc/minc.h libsrc/ParseArgv.h 
-    libsrc/voxel_loop.h 
-    libsrc/nd_loop.h
-    libsrc/time_stamp.h
-    libsrc/minc_compat.h
-    volume_io/Include/volume_io.h
-    libsrc2/minc2.h
-    libsrc/minc_simple.h
-    DESTINATION include
-    )
-
-  SET_TARGET_PROPERTIES(minc2 PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${MINC2_PACKAGE_VERSION_MAJOR})
-
-  IF(NOT USE_SYSTEM_HDF5)
-      ADD_DEPENDENCIES(${MINC2_LIBRARY} HDF5)
-  ENDIF(NOT USE_SYSTEM_HDF5)
-
-ELSE(BUILD_MINC2)
-
-    SET(minc_LIB_SRCS ${minc1_LIB_SRCS} )
-    ADD_LIBRARY(minc ${LIBRARY_TYPE} ${minc1_LIB_SRCS} )
-    TARGET_LINK_LIBRARIES(minc ${NETCDF_LIBRARY} )
-    INSTALL(TARGETS minc ${LIBRARY_INSTALL} DESTINATION lib)
-
-    INSTALL(FILES libsrc/minc.h libsrc/ParseArgv.h 
-      libsrc/voxel_loop.h 
-      libsrc/nd_loop.h
-      libsrc/time_stamp.h
-      libsrc/minc_compat.h
-      volume_io/Include/volume_io.h
-      libsrc/minc_simple.h
-      DESTINATION include
-      )
-
-    SET_TARGET_PROPERTIES(minc PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${MINC2_PACKAGE_VERSION_MAJOR})
-ENDIF(BUILD_MINC2)
-
-IF(NOT USE_SYSTEM_NETCDF)
-    ADD_DEPENDENCIES(${MINC2_LIBRARY} NETCDF)
-ENDIF(NOT USE_SYSTEM_NETCDF)
-
-# build the main minc2 library
+SET(minc2_HEADERS
+  libsrc2/minc2.h
+)
 
 # volume_io2
 SET(volume_io_LIB_SRCS
@@ -355,113 +330,204 @@
    volume_io/Volumes/set_hyperslab.c
    volume_io/Volumes/volume_cache.c
    volume_io/Volumes/volumes.c
-   )
+)
+
+SET(volume_io_HEADERS
+    volume_io/Include/volume_io/alloc.h
+    volume_io/Include/volume_io/arrays.h 
+    volume_io/Include/volume_io/basic.h 
+    volume_io/Include/volume_io/def_math.h 
+    volume_io/Include/volume_io/files.h 
+    volume_io/Include/volume_io/geom_structs.h 
+    volume_io/Include/volume_io/geometry.h 
+    volume_io/Include/internal_volume_io.h 
+    volume_io/Include/volume_io/multidim.h 
+    volume_io/Include/volume_io/progress.h 
+    volume_io/Include/volume_io/string_funcs.h 
+    volume_io/Include/volume_io/system_dependent.h 
+    volume_io/Include/volume_io/transforms.h 
+    volume_io/Include/volume_io/vol_io_prototypes.h 
+    volume_io/Include/volume_io/volume.h 
+    volume_io/Include/volume_io/volume_cache.h
+)
+
+SET(MINC2_LIBRARY minc)
+SET(VOLUME_IO_LIBRARY volume_io)
+
+SET(MINC2_LIBRARIES ${MINC2_LIBRARY} ${NETCDF_LIBRARY})
+
+SET(MINC2_DEPENDENCIES "")
+
+IF(NOT USE_SYSTEM_NETCDF) 
+  SET(MINC2_DEPENDENCIES ${MINC2_DEPENDENCIES} NETCDF)
+ENDIF(NOT USE_SYSTEM_NETCDF)  
+
 
 IF(BUILD_MINC2)
-  # build and install volume_io2 library
-  ADD_LIBRARY(volume_io2 ${LIBRARY_TYPE} ${volume_io_LIB_SRCS})
-  INSTALL(TARGETS volume_io2 ${LIBRARY_INSTALL} DESTINATION lib)
-  SET_TARGET_PROPERTIES(volume_io2 PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${MINC2_PACKAGE_VERSION_MAJOR})
-  SET( VOLUME_IO_LIBRARY volume_io2)
-  ADD_DEPENDENCIES(volume_io2 ${MINC2_LIBRARY})
+  INCLUDE_DIRECTORIES( ${HDF5_INCLUDE_DIR} )
 
+  SET(minc_LIB_SRCS ${minc1_LIB_SRCS} ${minc2_LIB_SRCS})
+  SET(minc_HEADERS ${minc1_HEADERS} ${minc2_HEADERS})
+  SET(MINC2_LIBRARY minc2)
+  SET(MINC2_LIBRARIES ${MINC2_LIBRARY} ${HDF5_LIBRARY} ${NETCDF_LIBRARY} ${ZLIB_LIBRARIES}  m )
+  
+  SET(VOLUME_IO_LIBRARY volume_io2)
+  
+  IF(NOT USE_SYSTEM_HDF5)
+    SET(MINC2_DEPENDENCIES ${MINC2_DEPENDENCIES} HDF5)
+  ENDIF(NOT USE_SYSTEM_HDF5)
 ELSE(BUILD_MINC2)
-  ADD_LIBRARY(volume_io ${LIBRARY_TYPE} ${volume_io_LIB_SRCS})
-  INSTALL(TARGETS volume_io ${LIBRARY_INSTALL} DESTINATION lib)
-  SET_TARGET_PROPERTIES(volume_io PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${MINC2_PACKAGE_VERSION_MAJOR})
-  SET( VOLUME_IO_LIBRARY volume_io)
-  ADD_DEPENDENCIES(volume_io ${MINC2_LIBRARY})
+  SET(minc_LIB_SRCS ${minc1_LIB_SRCS} )
+  SET(minc_HEADERS ${minc1_HEADERS} ${minc2_HEADERS})
 ENDIF(BUILD_MINC2)
 
-INSTALL(FILES volume_io/Include/volume_io/alloc.h
-	volume_io/Include/volume_io/arrays.h 
-	volume_io/Include/volume_io/basic.h 
-	volume_io/Include/volume_io/def_math.h 
-	volume_io/Include/volume_io/files.h 
-	volume_io/Include/volume_io/geom_structs.h 
-	volume_io/Include/volume_io/geometry.h 
-	volume_io/Include/internal_volume_io.h 
-	volume_io/Include/volume_io/multidim.h 
-	volume_io/Include/volume_io/progress.h 
-	volume_io/Include/volume_io/string_funcs.h 
-	volume_io/Include/volume_io/system_dependent.h 
-	volume_io/Include/volume_io/transforms.h 
-	volume_io/Include/volume_io/vol_io_prototypes.h 
-	volume_io/Include/volume_io/volume.h 
-	volume_io/Include/volume_io/volume_cache.h
-   DESTINATION include/volume_io)
+
+IF(NOT itk-module)
+
+  ADD_LIBRARY(${MINC2_LIBRARY} ${LIBRARY_TYPE} ${minc_LIB_SRCS} )
+  TARGET_LINK_LIBRARIES(${MINC2_LIBRARY} ${NETCDF_LIBRARY} ${HDF5_LIBRARY} ${ZLIB_LIBRARIES} m )
+
+  ADD_LIBRARY(${VOLUME_IO_LIBRARY} ${LIBRARY_TYPE} ${volume_io_LIB_SRCS})
+
+  SET_TARGET_PROPERTIES(${MINC2_LIBRARY}     PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${MINC2_PACKAGE_VERSION_MAJOR})
+  SET_TARGET_PROPERTIES(${VOLUME_IO_LIBRARY} PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${MINC2_PACKAGE_VERSION_MAJOR})
+  
+  ADD_DEPENDENCIES(${MINC2_LIBRARY} ${MINC2_DEPENDENCIES}) 
+  ADD_DEPENDENCIES(${VOLUME_IO_LIBRARY} ${MINC2_LIBRARY})
+  
+  INSTALL(TARGETS ${MINC2_LIBRARY} ${LIBRARY_INSTALL} DESTINATION lib)
+  INSTALL(TARGETS ${VOLUME_IO_LIBRARY} ${LIBRARY_INSTALL} DESTINATION lib)
+  
+  INSTALL(FILES 
+      ${minc2_HEADERS}
+    DESTINATION 
+      include
+    )
+  
+  INSTALL(FILES
+    ${volume_io_HEADERS}
+    DESTINATION include/volume_io)
+
+
+  IF(BUILD_TOOLS)
+    ADD_SUBDIRECTORY( progs )
+  ENDIF(BUILD_TOOLS)
+
+  IF(BUILD_CONVERTERS)
+    ADD_SUBDIRECTORY( conversion )
+  ENDIF(BUILD_CONVERTERS)
 
-IF(BUILD_TOOLS)
-# now build the progs subdir
-  ADD_SUBDIRECTORY( progs )
-ENDIF(BUILD_TOOLS)
+  IF(BUILD_EZMINC)
+    ADD_SUBDIRECTORY( ezminc )
+  ENDIF(BUILD_EZMINC)
+
+  IF(BUILD_MINC4ITK AND BUILD_EZMINC)
+    ADD_SUBDIRECTORY( minc4itk )
+  ENDIF(BUILD_MINC4ITK AND BUILD_EZMINC)
 
-IF(BUILD_CONVERTERS)
-# and then the conversion subdir
-  ADD_SUBDIRECTORY( conversion )
-ENDIF(BUILD_CONVERTERS)
+  # config for the build directory
+  set(MINC2_USE_FILE_CONFIG  ${CMAKE_CURRENT_BINARY_DIR}/UseMINC2.cmake)
+
+  set(MINC2_INCLUDE_DIRS_CONFIG
+    ${CMAKE_CURRENT_SOURCE_DIR}
+    ${CMAKE_CURRENT_SOURCE_DIR}/libsrc
+    ${CMAKE_CURRENT_SOURCE_DIR}/volume_io/Include
+  )
 
-IF(BUILD_EZMINC)
-  ADD_SUBDIRECTORY( ezminc )
-ENDIF(BUILD_EZMINC)
-
-IF(BUILD_MINC4ITK AND BUILD_EZMINC)
-  ADD_SUBDIRECTORY( minc4itk )
-ENDIF(BUILD_MINC4ITK AND BUILD_EZMINC)
+  IF(BUILD_MINC2)
+    set(MINC2_INCLUDE_DIRS_CONFIG
+      ${MINC2_INCLUDE_DIRS_CONFIG}
+      ${CMAKE_CURRENT_SOURCE_DIR}/libsrc2
+    )
+  ENDIF(BUILD_MINC2)
 
-# config for the build directory
-set(MINC2_USE_FILE_CONFIG  ${CMAKE_CURRENT_BINARY_DIR}/UseMINC2.cmake)
+  IF(BUILD_EZMINC)
+    SET(EZMINC_LIBRARIES minc_io ${MINC2_LIBRARIES})
+  ENDIF(BUILD_EZMINC)
 
-set(MINC2_INCLUDE_DIRS_CONFIG
-   ${CMAKE_CURRENT_SOURCE_DIR}
-   ${CMAKE_CURRENT_SOURCE_DIR}/libsrc
-   ${CMAKE_CURRENT_SOURCE_DIR}/volume_io/Include
-)
+  IF(BUILD_MINC4ITK)
+    SET(MINC4ITK_LIBRARIES minc4itk ${EZMINC_LIBRARIES})
+  ENDIF(BUILD_MINC4ITK)
+
+  set(MINC2_LIBRARY_DIRS_CONFIG ${CMAKE_CURRENT_BINARY_DIR})
+
+  configure_file(MINC2Config.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/MINC2Config.cmake @ONLY )
 
-IF(BUILD_MINC2)
+  configure_file(UseMINC2.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/UseMINC2.cmake @ONLY)
+
+  # config for install dir
+  set(MINC2_USE_FILE_CONFIG "${CMAKE_INSTALL_PREFIX}/lib/UseMINC2.cmake")
+
   set(MINC2_INCLUDE_DIRS_CONFIG
-    ${MINC2_INCLUDE_DIRS_CONFIG}
-    ${CMAKE_CURRENT_SOURCE_DIR}/libsrc2
+    ${CMAKE_INSTALL_PREFIX}/include
   )
-ENDIF(BUILD_MINC2)
 
-IF(BUILD_EZMINC)
-  SET(EZMINC_LIBRARIES minc_io ${MINC2_LIBRARIES})
-ENDIF(BUILD_EZMINC)
+  set(MINC2_LIBRARY_DIRS_CONFIG ${CMAKE_INSTALL_PREFIX}/lib)
 
-IF(BUILD_MINC4ITK)
-  SET(MINC4ITK_LIBRARIES minc4itk ${EZMINC_LIBRARIES})
-ENDIF(BUILD_MINC4ITK)
+  configure_file(MINC2Config.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MINC2Config.cmake @ONLY )
 
-set(MINC2_LIBRARY_DIRS_CONFIG ${CMAKE_CURRENT_BINARY_DIR})
+  configure_file(UseMINC2.cmake.in
+    ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake @ONLY)
 
-configure_file(MINC2Config.cmake.in
-  ${CMAKE_CURRENT_BINARY_DIR}/MINC2Config.cmake @ONLY )
+  INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MINC2Config.cmake
+    DESTINATION lib
+    COMPONENT Development)
+  # testing
 
-configure_file(UseMINC2.cmake.in
-  ${CMAKE_CURRENT_BINARY_DIR}/UseMINC2.cmake @ONLY)
+ELSE(NOT itk-module)
 
-# config for install dir
-set(MINC2_USE_FILE_CONFIG "${CMAKE_INSTALL_PREFIX}/lib/UseMINC2.cmake")
-
-set(MINC2_INCLUDE_DIRS_CONFIG
-   ${CMAKE_INSTALL_PREFIX}/include
-)
-
-set(MINC2_LIBRARY_DIRS_CONFIG ${CMAKE_INSTALL_PREFIX}/lib)
-
-configure_file(MINC2Config.cmake.in
-  ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MINC2Config.cmake @ONLY )
+  SET(ITKIOMINC_LIBRARIES ITKIOMINC ${ITKHDF5_LIBRARIES} ${NETCDF_LIBRARY} ${ITKZLIB_LIBRARIES})
+  SET(ITKIOMINC_NO_SRC ON)
+  SET(ITKIOMINC_SYSTEM_INCLUDE_DIRS ${NETCDF_INCLUDE_DIR}) 
+  
+  #SET(ITKIOMINC_INCLUDE_DIRS ${NETCDF_INCLUDE_DIR})
+  SET(ITKIOMINC_THIRD_PARTY ON)
+  
+  IF(BUILD_MINC2)
+    ADD_DEFINITIONS( -DMINC2 )
+  ENDIF(BUILD_MINC2)
+  
+  INCLUDE_DIRECTORIES( ezminc minc4itk )
+  
+  ADD_LIBRARY(ITKIOMINC 
+    # EZ Minc
+    ezminc/minc_1_rw.cpp
+    ezminc/minc_1_simple_rw.cpp  
+    
+    # minc4itk
+    minc4itk/itkMincImageIO.cxx
+    minc4itk/itkMincImageIOFactory.cxx
+  
+    # volume io
+    ${volume_io_LIB_SRCS} 
+    
+    # minc low level
+    ${minc_LIB_SRCS} )
+  
+  target_link_libraries(ITKIOMINC
+    ${ITKIOImageBase_LIBRARIES}
+    ${ITKHDF5_LIBRARIES}
+    ${NETCDF_LIBRARY}
+    ${ITKZLIB_LIBRARIES}
+  )
+  
+  itk_module_target(ITKIOMINC NO_INSTALL)
+  
+  if(NOT ITK_INSTALL_NO_LIBRARIES)
+    install(TARGETS ITKIOMINC
+      EXPORT ${ITKIOMINC_INSTALL_EXPORT_NAME}
+      RUNTIME DESTINATION ${ITK_INSTALL_RUNTIME_DIR} COMPONENT RuntimeLibraries
+      LIBRARY DESTINATION ${ITK_INSTALL_LIBRARY_DIR} COMPONENT RuntimeLibraries
+      ARCHIVE DESTINATION ${ITK_INSTALL_ARCHIVE_DIR} COMPONENT Development
+      )
+  endif(NOT ITK_INSTALL_NO_LIBRARIES)
 
-configure_file(UseMINC2.cmake.in
-  ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake @ONLY)
+  itk_module_impl()
+ENDIF(NOT itk-module)
 
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MINC2Config.cmake
-  DESTINATION lib
-  COMPONENT Development)
-
-# testing
-
-IF(BUILD_TESTING)
+IF(BUILD_TESTING AND NOT itk-module)
   ADD_SUBDIRECTORY( testdir )
-ENDIF(BUILD_TESTING)
+ENDIF(BUILD_TESTING AND NOT itk-module)
--- a/ezminc/CMakeLists.txt
+++ b/ezminc/CMakeLists.txt
@@ -1,4 +1,6 @@
+IF(NOT itk-module)
 OPTION(BUILD_EZMINC_EXAMPLES   "Build EZminc examples" ON)
+ENDIF(NOT itk-module)
 
 IF(BUILD_MINC2)
   ADD_DEFINITIONS( -DMINC2 )
--- a/minc4itk/CMakeLists.txt
+++ b/minc4itk/CMakeLists.txt
@@ -12,8 +12,11 @@
   message(WARNING "Building Shared library but ITK is linked statically!")
 ENDIF(BUILD_SHARED_LIBS AND NOT ITK_BUILD_SHARED)
 
+IF(NOT itk-module)
 OPTION(BUILD_ITK_PLUGIN    "Build ITK plugin" OFF)
 OPTION(BUILD_MINC4ITK_EXAMPLES   "Build minc4itk examples" ON)
+ENDIF(NOT itk-module)
+
 
 LINK_DIRECTORIES(${ITK_LIBRARY_DIRS})
 
@@ -46,25 +49,29 @@
     m 
     z )
 
+
 #VF ITK plugin is disabled for now
 IF(BUILD_ITK_PLUGIN)
-message(WARNING "ITK IO plugin might not work as expected!")
-ADD_LIBRARY( minc4itk_plugin SHARED minc4itk_plugin.cxx)
-TARGET_LINK_LIBRARIES(  minc4itk_plugin minc4itk)
-INSTALL(TARGETS minc4itk_plugin LIBRARY DESTINATION lib)
+  message(WARNING "ITK IO plugin might not work as expected!")
+  ADD_LIBRARY( minc4itk_plugin SHARED minc4itk_plugin.cxx)
+  TARGET_LINK_LIBRARIES(  minc4itk_plugin minc4itk)
+  INSTALL(TARGETS minc4itk_plugin LIBRARY DESTINATION lib)
 ENDIF(BUILD_ITK_PLUGIN)
 
+
+
 INSTALL(TARGETS minc4itk ${LIBRARY_INSTALL} DESTINATION lib)
 INSTALL(FILES  ${MINC4ITK_HEADERS} DESTINATION include)
 
 IF(BUILD_MINC4ITK_EXAMPLES)
-add_subdirectory(examples)
+  add_subdirectory(examples)
 ENDIF(BUILD_MINC4ITK_EXAMPLES)
 
 IF(BUILD_TOOLS)
-add_subdirectory(tools)
+  add_subdirectory(tools)
 ENDIF(BUILD_TOOLS)
 
 IF(BUILD_CONVERTERS)
-add_subdirectory(conversion)
+  add_subdirectory(conversion)
 ENDIF(BUILD_CONVERTERS)
+
--- a/minc4itk/itkMincImageIO.h
+++ b/minc4itk/itkMincImageIO.h
@@ -20,7 +20,7 @@
 #pragma warning ( disable : 4786 )
 #endif
 
-#include <itkImageIOBase.h>
+#include "itkImageIOBase.h"
 #include <minc_1_simple.h>
 
 namespace itk
--- a/minc4itk/itkMincImageIOFactory.cxx
+++ b/minc4itk/itkMincImageIOFactory.cxx
@@ -6,7 +6,7 @@
 
 #if ( ITK_VERSION_MAJOR > 3 ) 
 //TODO:
-#include <itkHDF5ImageIOFactory.h>
+//#include <itkHDF5ImageIOFactory.h>
 #endif //( ITK_VERSION_MAJOR > 3 ) 
 
 namespace itk
--- a/minc4itk/minc_helpers.h
+++ b/minc4itk/minc_helpers.h
@@ -16,9 +16,9 @@
 #include <itkImageRegionIteratorWithIndex.h>
 #include <itkImageRegionConstIteratorWithIndex.h>
 
-#include <itkImageFileReader.h>
-#include <itkImageFileWriter.h>
-#include <itkImageIOFactory.h>
+#include <itkImageFileReader.h"
+#include <itkImageFileWriter.h"
+#include <itkImageIOFactory.h"
 
 #include "itkMincImageIOFactory.h"
 #include "itkMincImageIO.h"