changeset 2602:0bbe7def883e

Making building shared libraries possible
author Vladimir S. FONOV <vladimir.fonov@gmail.com>
date Tue, 31 Jan 2012 19:33:41 -0500
parents 6ba9bafd4321
children c1febabcb232
files CMakeLists.txt ezminc/CMakeLists.txt minc4itk/CMakeLists.txt
diffstat 3 files changed, 26 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -29,6 +29,7 @@
 SET(PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
 SET(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
 
+option(BUILD_SHARED_LIBS "Build minc2 with shared libraries." OFF)
 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)
@@ -36,13 +37,21 @@
 OPTION(USE_SYSTEM_NETCDF "Use System NETCDF > 3.6.3" OFF)
 
 IF(BUILD_EZMINC)
-OPTION(BUILD_MINC4ITK   "Build ITK interface" ON)
+  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)
 
+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(USE_SYSTEM_NETCDF)
   FIND_PACKAGE(NETCDF REQUIRED)
@@ -201,11 +210,11 @@
   SET(MINC2_LIBRARY minc2)
   SET(MINC2_LIBRARIES ${MINC2_LIBRARY} ${HDF5_LIBRARY} ${NETCDF_LIBRARY} ${ZLIB_LIBRARIES}  m )
 
-  ADD_LIBRARY(minc2 STATIC ${minc_LIB_SRCS} )
+  ADD_LIBRARY(minc2 ${LIBRARY_TYPE} ${minc_LIB_SRCS} )
 
   TARGET_LINK_LIBRARIES(minc2 ${NETCDF_LIBRARY} ${HDF5_LIBRARY} ${ZLIB_LIBRARIES} m )
 
-  INSTALL(TARGETS minc2 ARCHIVE DESTINATION lib)
+  INSTALL(TARGETS minc2 ${LIBRARY_INSTALL} DESTINATION lib)
 
   INSTALL(FILES libsrc/minc.h libsrc/ParseArgv.h 
     libsrc/voxel_loop.h 
@@ -227,9 +236,9 @@
 ELSE(BUILD_MINC2)
 
     SET(minc_LIB_SRCS ${minc1_LIB_SRCS} )
-    ADD_LIBRARY(minc STATIC ${minc1_LIB_SRCS} )
+    ADD_LIBRARY(minc ${LIBRARY_TYPE} ${minc1_LIB_SRCS} )
     TARGET_LINK_LIBRARIES(minc ${NETCDF_LIBRARY} )
-    INSTALL(TARGETS minc ARCHIVE DESTINATION lib)
+    INSTALL(TARGETS minc ${LIBRARY_INSTALL} DESTINATION lib)
 
     INSTALL(FILES libsrc/minc.h libsrc/ParseArgv.h 
       libsrc/voxel_loop.h 
@@ -291,15 +300,15 @@
 
 IF(BUILD_MINC2)
   # build and install volume_io2 library
-  ADD_LIBRARY(volume_io2 STATIC ${volume_io_LIB_SRCS})
-  INSTALL(TARGETS volume_io2 ARCHIVE DESTINATION lib)
+  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 ${CPACK_PACKAGE_VERSION_MAJOR})
   SET( VOLUME_IO_LIBRARY volume_io2)
   ADD_DEPENDENCIES(volume_io2 ${MINC2_LIBRARY})
 
 ELSE(BUILD_MINC2)
-  ADD_LIBRARY(volume_io STATIC ${volume_io_LIB_SRCS})
-  INSTALL(TARGETS volume_io ARCHIVE DESTINATION lib)
+  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 ${CPACK_PACKAGE_VERSION_MAJOR})
   SET( VOLUME_IO_LIBRARY volume_io)
   ADD_DEPENDENCIES(volume_io ${MINC2_LIBRARY})
@@ -380,7 +389,7 @@
 configure_file(UseMINC2.cmake.in
   ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake @ONLY)
 
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MINC2Config.cmake
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/UseMINC2.cmake ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MINC2Config.cmake
   DESTINATION lib
   COMPONENT Development)
 
--- a/ezminc/CMakeLists.txt
+++ b/ezminc/CMakeLists.txt
@@ -21,10 +21,10 @@
   )
 
 
-ADD_LIBRARY( minc_io ${MINC_IO_HEADERS} ${MINC_IO_SRC})
+ADD_LIBRARY( minc_io ${LIBRARY_TYPE} ${MINC_IO_HEADERS} ${MINC_IO_SRC})
 TARGET_LINK_LIBRARIES(minc_io ${MINC2_LIBRARIES})
 
-INSTALL(TARGETS minc_io ARCHIVE DESTINATION lib)
+INSTALL(TARGETS minc_io ${LIBRARY_INSTALL} DESTINATION lib)
 INSTALL(FILES  ${MINC_IO_HEADERS} DESTINATION include)
 
 
--- a/minc4itk/CMakeLists.txt
+++ b/minc4itk/CMakeLists.txt
@@ -9,6 +9,10 @@
   MESSAGE( FATAL_ERROR "ITK include directories are not found!")
 ENDIF(NOT ITK_INCLUDE_DIRS	)
 
+IF(BUILD_SHARED_LIBS AND NOT ITK_BUILD_SHARED)
+  message(WARNING "Building Shared library but ITK is linked statically!")
+ENDIF(BUILD_SHARED_LIBS AND NOT ITK_BUILD_SHARED)
+
 #OPTION(BUILD_ITK_PLUGIN    "Build ITK plugin" OFF)
 OPTION(BUILD_MINC4ITK_EXAMPLES   "Build minc4itk examples" ON)
 
@@ -50,7 +54,7 @@
 #INSTALL(TARGETS minc4itk_plugin LIBRARY DESTINATION lib)
 #ENDIF(BUILD_ITK_PLUGIN)
 
-INSTALL(TARGETS minc4itk ARCHIVE DESTINATION lib)
+INSTALL(TARGETS minc4itk ${LIBRARY_INSTALL} DESTINATION lib)
 INSTALL(FILES  ${MINC4ITK_HEADERS} DESTINATION include)
 
 IF(BUILD_MINC4ITK_EXAMPLES)