changeset 2574:bba21faaef13

making a super build
author Vladimir Fonov <vladimir.fonov@gmail.com>
date Wed, 18 Jan 2012 15:58:47 +0800
parents 84714ccca340
children fdd411a31ee0
files CMakeLists.txt MINC2Config.cmake.in ezminc/CMakeLists.txt ezminc/examples/CMakeLists.txt minc4itk/CMakeLists.txt progs/CMakeLists.txt testdir/CMakeLists.txt volume_io/Volumes/input_mnc.c volume_io/Volumes/output_mnc.c
diffstat 9 files changed, 113 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,12 +4,14 @@
 # Vladimir S. FONOV - vladimir.fonov@gmail.com
 
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+INCLUDE(ExternalProject)
 
 PROJECT(minc2)
 
-SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake-modules")
+#SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake-modules")
+ENABLE_TESTING()
+INCLUDE(CTest)
 
-#ADD_SUBDIRECTORY( testdir )
 #ADD_SUBDIRECTORY( doc )
 
 
@@ -33,10 +35,61 @@
 OPTION(BUILD_CONVERTERS "Build minc conversion programs (mnc2nii, nii2mnc , dcm2mnc...)" ON)
 OPTION(BUILD_EZMINC     "Build C++ interface library EZminc" ON)
 
+OPTION(USE_SYSTEM_NETCDF "Use System NETCDF > 3.6.3" OFF)
+
 IF(BUILD_EZMINC)
 OPTION(BUILD_MINC4ITK   "Build ITK interface" ON)
 ENDIF(BUILD_EZMINC)
 
+IF(BUILD_MINC2)
+ OPTION(USE_SYSTEM_HDF5 "Use System HDF5 > 1.8 " OFF)
+ENDIF(BUILD_MINC2)
+
+
+
+# external packages
+IF(USE_SYSTEM_NETCDF)
+  FIND_PACKAGE(NETCDF REQUIRED)
+  
+ELSE(USE_SYSTEM_NETCDF)
+  ExternalProject_Add(NETCDF 
+    SOURCE_DIR NETCDF
+    URL "ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.0.1.tar.gz"
+    URL_MD5 a251453c5477599f050fa4e593295186
+    BUILD_IN_SOURCE 1
+    INSTALL_DIR "${CMAKE_INSTALL_PREFIX}"
+    BUILD_COMMAND   make 
+    INSTALL_COMMAND make install 
+    CONFIGURE_COMMAND ./configure --prefix=${CMAKE_INSTALL_PREFIX} --with-pic --disable-netcdf4 --disable-hdf4 --disable-dap --disable-shared --disable-cxx --disable-f77 --disable-f90 --disable-examples --enable-v2 --disable-docs
+  )
+
+  SET(NETCDF_LIBRARY ${CMAKE_INSTALL_PREFIX}/lib/libnetcdf.a )
+  SET(NETCDF_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include )
+ENDIF(USE_SYSTEM_NETCDF)
+
+
+IF(BUILD_MINC2)
+  IF(USE_SYSTEM_HDF5 )
+    FIND_PACKAGE(HDF5 REQUIRED)
+  ELSE(USE_SYSTEM_HDF5)
+
+    ExternalProject_Add(HDF5
+      SOURCE_DIR HDF5
+      URL "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.7/src/hdf5-1.8.7.tar.gz"
+      URL_MD5 37711d4bcb72997e93d495f97c76c33a
+      BUILD_IN_SOURCE 1
+      INSTALL_DIR     "${CMAKE_INSTALL_PREFIX}"
+      BUILD_COMMAND   make 
+      INSTALL_COMMAND make install 
+      CONFIGURE_COMMAND ./configure --prefix=${CMAKE_INSTALL_PREFIX} --enable-production --with-pic --disable-shared --disable-cxx --disable-f77 --disable-f90 --disable-examples --disable-hl --disable-docs
+    )
+
+    SET(HDF5_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include )
+    SET(HDF5_LIBRARY  ${CMAKE_INSTALL_PREFIX}/lib/libhdf5.a )
+
+  ENDIF(USE_SYSTEM_HDF5)
+ENDIF(BUILD_MINC2)
+
 
 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 
@@ -73,31 +126,32 @@
 ENDIF(BUILD_MINC4ITK AND BUILD_EZMINC)
 
 
-
 # netcdf and HDF5
-FIND_PACKAGE(NETCDF REQUIRED)
-INCLUDE_DIRECTORIES( ${NETCDF_INCLUDE_DIR} )
 
 IF(BUILD_MINC2)
-  FIND_PACKAGE(HDF5 REQUIRED)
   FIND_PACKAGE(ZLIB REQUIRED)
   SET(MINC2 "1")
-  INCLUDE_DIRECTORIES( ${HDF5_INCLUDE_DIR} )
+ELSE(BUILD_MINC2)
+  SET(MINC2 "0")
 ENDIF(BUILD_MINC2)
 
 # config files for build
-CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_SOURCE_DIR}/config.h)
+CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config.h.cmake ${CMAKE_BINARY_DIR}/config.h)
 
 # others
-CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/epm-header.in ${CMAKE_SOURCE_DIR}/epm-header)
+CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/epm-header.in ${CMAKE_BINARY_DIR}/epm-header)
+
 
 # set the master INCLUDE directories
 INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}
+   ${CMAKE_BINARY_DIR}
    ${CMAKE_SOURCE_DIR}/libsrc
    ${CMAKE_SOURCE_DIR}/volume_io/Include
    )
 
+INCLUDE_DIRECTORIES( ${NETCDF_INCLUDE_DIR} )
+
 IF(BUILD_MINC2)
   INCLUDE_DIRECTORIES(
    ${CMAKE_SOURCE_DIR}/libsrc2
@@ -138,11 +192,17 @@
    libsrc2/volume.c
    )
 
-SET(minc_LIB minc)
+SET(MINC_LIBRARY minc)
+SET(MINC_LIBS ${MINC_LIBRARY} ${NETCDF_LIBRARY})
 
 IF(BUILD_MINC2)
+  INCLUDE_DIRECTORIES( ${HDF5_INCLUDE_DIR} )
+
+
   SET(minc_LIB_SRCS ${minc1_LIB_SRCS} ${minc2_LIB_SRCS})
-  SET(minc_LIB minc2)
+  SET(MINC_LIBRARY minc2)
+  SET(MINC_LIBS ${MINC_LIBRARY} ${NETCDF_LIBRARY} ${HDF5_LIBRARY} ${ZLIB_LIBRARIES} m )
+
   ADD_LIBRARY(minc2 STATIC ${minc_LIB_SRCS} )
 
   TARGET_LINK_LIBRARIES(minc2 ${NETCDF_LIBRARY} ${HDF5_LIBRARY} ${ZLIB_LIBRARIES} m )
@@ -162,10 +222,13 @@
 
   SET_TARGET_PROPERTIES(minc2 PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
 
+  IF(NOT USE_SYSTEM_HDF5)
+      ADD_DEPENDENCIES(${MINC_LIBRARY} HDF5)
+  ENDIF(NOT USE_SYSTEM_HDF5)
+
 ELSE(BUILD_MINC2)
 
     SET(minc_LIB_SRCS ${minc1_LIB_SRCS} )
-    SET(minc_LIB minc)
     ADD_LIBRARY(minc STATIC ${minc1_LIB_SRCS} )
     TARGET_LINK_LIBRARIES(minc ${NETCDF_LIBRARY} )
     INSTALL(TARGETS minc ARCHIVE DESTINATION lib)
@@ -181,8 +244,12 @@
       )
 
     SET_TARGET_PROPERTIES(minc PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
+ENDIF(BUILD_MINC2)
 
-ENDIF(BUILD_MINC2)
+IF(NOT USE_SYSTEM_NETCDF)
+    ADD_DEPENDENCIES(${MINC_LIBRARY} NETCDF)
+ENDIF(NOT USE_SYSTEM_NETCDF)
+
 
 # build the main minc2 library
 
@@ -229,13 +296,15 @@
   ADD_LIBRARY(volume_io2 STATIC ${volume_io_LIB_SRCS})
   INSTALL(TARGETS volume_io2 ARCHIVE DESTINATION lib)
   SET_TARGET_PROPERTIES(volume_io2 PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
-  SET( volume_io_LIB volume_io2)
+  SET( VOLUME_IO_LIB volume_io2)
+  ADD_DEPENDENCIES(volume_io2 ${MINC_LIBRARY})
 
 ELSE(BUILD_MINC2)
   ADD_LIBRARY(volume_io STATIC ${volume_io_LIB_SRCS})
   INSTALL(TARGETS volume_io ARCHIVE DESTINATION lib)
   SET_TARGET_PROPERTIES(volume_io PROPERTIES VERSION ${PACKAGE_VERSION} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})
-  SET( volume_io_LIB volume_io)
+  SET( VOLUME_IO_LIB volume_io)
+  ADD_DEPENDENCIES(volume_io ${MINC_LIBRARY})
 ENDIF(BUILD_MINC2)
 
 INSTALL(FILES volume_io/Include/volume_io/alloc.h
@@ -317,4 +386,11 @@
   DESTINATION lib/MINC2
   COMPONENT Development)
 
-# config for the install directory
+# testing
+
+IF(BUILD_TESTING)
+  ADD_SUBDIRECTORY( testdir )
+ENDIF(BUILD_TESTING)
+
+
+
--- a/MINC2Config.cmake.in
+++ b/MINC2Config.cmake.in
@@ -5,3 +5,4 @@
 set(MINC2_INCLUDE_DIRS "@MINC2_INCLUDE_DIRS_CONFIG@")
 set(MINC2_LIBRARY_DIRS "@MINC2_LIBRARY_DIRS_CONFIG@")
 set(MINC2_USE_FILE     "@MINC2_USE_FILE_CONFIG@")
+set(MINC2_LIBRARIES    "@MINC_LIBS@")
--- a/ezminc/CMakeLists.txt
+++ b/ezminc/CMakeLists.txt
@@ -1,7 +1,5 @@
 OPTION(BUILD_EZMINC_EXAMPLES   "Build EZminc examples" ON)
 
-
-
 IF(BUILD_MINC2)
   ADD_DEFINITIONS( -DMINC2 )
 ENDIF(BUILD_MINC2)
@@ -24,7 +22,7 @@
 
 
 ADD_LIBRARY( minc_io ${MINC_IO_HEADERS} ${MINC_IO_SRC})
-TARGET_LINK_LIBRARIES(minc_io ${minc_LIB})
+TARGET_LINK_LIBRARIES(minc_io ${MINC_LIBS})
 
 INSTALL(TARGETS minc_io ARCHIVE DESTINATION lib)
 INSTALL(FILES  ${MINC_IO_HEADERS} DESTINATION include)
--- a/ezminc/examples/CMakeLists.txt
+++ b/ezminc/examples/CMakeLists.txt
@@ -7,7 +7,7 @@
 ADD_EXECUTABLE(volume_similarity volume_similarity.cpp)
 
 INSTALL(TARGETS
-  fuzzy_volume_similarity
-  volume_similarity
+   fuzzy_volume_similarity
+   volume_similarity
    DESTINATION bin)
 
--- a/minc4itk/CMakeLists.txt
+++ b/minc4itk/CMakeLists.txt
@@ -37,8 +37,8 @@
     ${ITK_LIBRARIES}
     itkvnl_algo 
     itkvnl 
-    ${minc_LIB}
-    ${volume_io_LIB}
+    ${MINC_LIBS}
+    ${VOLUME_IO_LIB}
     m 
     z )
 
--- a/progs/CMakeLists.txt
+++ b/progs/CMakeLists.txt
@@ -7,7 +7,7 @@
 #LINK_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/..)
 INCLUDE_DIRECTORIES(Proglib)
 
-LINK_LIBRARIES( ${minc_LIB} )
+LINK_LIBRARIES( ${MINC_LIBS} )
 ADD_DEFINITIONS(-DHAVE_CONFIG_H)
 
 #SET(BISON_FIND_REQUIRED)
@@ -85,7 +85,7 @@
 ADD_EXECUTABLE(mincresample mincresample/mincresample.c
                                mincresample/resample_volumes.c
                                Proglib/convert_origin_to_start.c)
-TARGET_LINK_LIBRARIES(mincresample ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(mincresample ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 ADD_EXECUTABLE(mincreshape mincreshape/mincreshape.c
                               mincreshape/copy_data.c)
@@ -98,20 +98,20 @@
                             Proglib/convert_origin_to_start.c)
 
 ADD_EXECUTABLE(voxeltoworld coordinates/voxeltoworld.c)
-TARGET_LINK_LIBRARIES(voxeltoworld ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(voxeltoworld ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 ADD_EXECUTABLE(worldtovoxel coordinates/worldtovoxel.c)
-TARGET_LINK_LIBRARIES(worldtovoxel ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(worldtovoxel ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 
 ADD_EXECUTABLE(transformtags xfm/transformtags.c)
-TARGET_LINK_LIBRARIES(transformtags ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(transformtags ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 ADD_EXECUTABLE(xfmconcat xfm/xfmconcat.c)
-TARGET_LINK_LIBRARIES(xfmconcat ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(xfmconcat ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 ADD_EXECUTABLE(xfminvert xfm/xfminvert.c)
-TARGET_LINK_LIBRARIES(xfminvert ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(xfminvert ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 # install progs
 INSTALL(TARGETS
--- a/testdir/CMakeLists.txt
+++ b/testdir/CMakeLists.txt
@@ -1,8 +1,9 @@
 
-LINK_LIBRARIES( ${minc_LIB} )
+LINK_LIBRARIES( ${MINC_LIBS} )
 
-ADD_EXECUTABLE(minc minc.c)
+ADD_EXECUTABLE(minc_tst minc.c)
 ADD_EXECUTABLE(icv icv.c)
+
 ADD_EXECUTABLE(icv_dim1 icv_dim1.c)
 ADD_EXECUTABLE(icv_dim icv_dim.c)
 ADD_EXECUTABLE(icv_fillvalue icv_fillvalue.c)
@@ -15,7 +16,7 @@
 ADD_EXECUTABLE(test_xfm test_xfm.c)
 
 ADD_EXECUTABLE(create_grid_xfm create_grid_xfm.c)
-TARGET_LINK_LIBRARIES(create_grid_xfm ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(create_grid_xfm ${VOLUME_IO_LIB} ${MINC_LIBS})
 
 MACRO(minc_test cmd)
   # minc 1 version
@@ -36,7 +37,7 @@
 
 add_test(arg_parse ${CMAKE_CURRENT_SOURCE_DIR}/run_test_arg_parse_cmake.sh ${CMAKE_CURRENT_BINARY_DIR}/test_arg_parse)
 add_test(icv icv)
-add_test(minc minc)
+add_test(minc minc_tst)
 
 add_test(mincapi mincapi)
 add_test(test_arg_parse test_arg_parse)
@@ -47,4 +48,4 @@
 #add_test(test_speed test_speed)
 #add_test(test_xfm test_xfm)
 
-TARGET_LINK_LIBRARIES(test_xfm ${volume_io_LIB} ${minc_LIB})
+TARGET_LINK_LIBRARIES(test_xfm ${VOLUME_IO_LIB} ${MINC_LIBS})
--- a/volume_io/Volumes/input_mnc.c
+++ b/volume_io/Volumes/input_mnc.c
@@ -598,7 +598,7 @@
           file->n_slab_dims++;  /* integral number of complete dimensions */
         } else {
           slab_size *= MIN( file->sizes_in_file[d],
-                            (hsize_t)( MI_MAX_VAR_BUFFER_SIZE / ( slab_size * unit_size ) ) );
+                            (size_t)( MI_MAX_VAR_BUFFER_SIZE / ( slab_size * unit_size ) ) );
           full_dim = 0;
         }
       }
--- a/volume_io/Volumes/output_mnc.c
+++ b/volume_io/Volumes/output_mnc.c
@@ -1430,7 +1430,7 @@
           file->n_slab_dims++;  /* integral number of complete dimensions */
         } else {
           count[d] = MIN( volume_count[to_volume_index[d]], 
-                          (hsize_t)( MI_MAX_VAR_BUFFER_SIZE / ( slab_size * unit_size ) ) );
+                          (size_t)( MI_MAX_VAR_BUFFER_SIZE / ( slab_size * unit_size ) ) );
           n_steps *= (int)( ( volume_count[to_volume_index[d]] + count[d] - 1 ) / count[d] );
         }
         slab_size *= count[d];