]> Creatis software - cpPlugins.git/blobdiff - CMakeLists.txt
Merge ssh://git.creatis.insa-lyon.fr/cpPlugins
[cpPlugins.git] / CMakeLists.txt
index 61a150b6b0dac6911d9ca81517b2ab828f50445a..45ffbb0fd33ce6c0255298bb8d3027f01d9b43d1 100644 (file)
@@ -1,33 +1,30 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 
-# for CMake 2.6 corrected behaviour (see "cmake --help-policy CMP0003")
-IF(
-    COMMAND cmake_policy AND
-    ${CMAKE_MAJOR_VERSION} EQUAL 2 AND
-    ${CMAKE_MINOR_VERSION} GREATER 4
-    )
-  CMAKE_POLICY(SET CMP0003 NEW)
-  CMAKE_POLICY(SET CMP0005 NEW)
-  CMAKE_POLICY(SET CMP0011 NEW)
-  CMAKE_POLICY(SET CMP0012 NEW)
-ENDIF(
-  COMMAND cmake_policy AND
-  ${CMAKE_MAJOR_VERSION} EQUAL 2 AND
-  ${CMAKE_MINOR_VERSION} GREATER 4
+## ============
+## = Policies =
+## ============
+
+SET(
+  policies
+  CMP0015
+  CMP0020
+  CMP0042
   )
+FOREACH(policy ${policies})
+  IF(POLICY ${policy})
+    CMAKE_POLICY(SET ${policy} NEW)
+  ENDIF(POLICY ${policy})
+ENDFOREACH(policy)
 
 ## ================
 ## = Project name =
 ## ================
 
 PROJECT(cpPlugins)
-SET(prj_MAJOR_VERSION   "0")
-SET(prj_MINOR_VERSION   "0")
-SET(prj_RELEASE_VERSION "1")
-SET(
-  prj_VERSION
-  "${prj_MAJOR_VERSION}.${prj_MINOR_VERSION}.${prj_RELEASE_VERSION}"
-  )
+SET(prj_MAJ_VER "0")
+SET(prj_MIN_VER "0")
+SET(prj_REL_VER "1")
+SET(prj_VERSION "${prj_MAJ_VER}.${prj_MIN_VER}.${prj_REL_VER}")
 
 ## ===========
 ## = Options =
@@ -36,62 +33,69 @@ SET(
 OPTION(USE_QT4 "Build Qt4-based code" OFF)
 OPTION(BUILD_EXAMPLES "Build examples" OFF)
 
+SET(LIBRARY_TYPE SHARED)
+
 ## ========================
 ## = Packages and options =
 ## ========================
 
+# Force c++11 language version
+# NOTE: It seems that by default on Visual Studio Compiler supports c++11,
+# so it only need to be test on other O.S.
+IF(NOT MSVC)
+  INCLUDE(CheckCXXCompilerFlag)
+  CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
+  IF(COMPILER_SUPPORTS_CXX11)
+    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+  ELSE(COMPILER_SUPPORTS_CXX11)
+    CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
+    IF(COMPILER_SUPPORTS_CXX0X)
+      SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
+    ELSE(COMPILER_SUPPORTS_CXX0X)
+      MESSAGE(
+        FATAL_ERROR
+        "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support."
+        )
+    ENDIF(COMPILER_SUPPORTS_CXX0X)
+  ENDIF(COMPILER_SUPPORTS_CXX11)
+ENDIF(NOT MSVC)
+
+# Prepare header to build shared libs (windows)
 INCLUDE(GenerateExportHeader)
 
-## -------------------------------------------------------------------------
-## If compiling on UNIX-like OS, an error could arise when using ITKVtkGlue:
-##
-##   <command-line>:0:0: warning: "vtkRenderingCore_AUTOINIT" redefined
-##   <command-line>:0:0: note: this is the location of the previous definition
-##
-## This is avoided by not including the VTK_USE_FILE. Nevertheless, this fails
-## on MS-Win OS.
-##
-## This is due to object factories. To avoid this, and let the project be
-## usable on UNIX-like and MS-Win, the way to find ITK and VTK differs
-## -------------------------------------------------------------------------
-
-IF(UNIX)
-  FIND_PACKAGE(ITK REQUIRED)
-  FIND_PACKAGE(VTK REQUIRED)
-  INCLUDE(${ITK_USE_FILE})
-  IF(NOT ITKVtkGlue_LOADED)
-    MESSAGE(FATAL_ERROR "ITKVtkGlue module is required but not available.")
-  ENDIF(NOT ITKVtkGlue_LOADED)
-ELSE(UNIX)
-  FIND_PACKAGE(ITK REQUIRED)
-  INCLUDE(${ITK_USE_FILE})
-  IF(ITKVtkGlue_LOADED)
-    FIND_PACKAGE(VTK REQUIRED)
-    INCLUDE(${VTK_USE_FILE})
-  ELSE(ITKVtkGlue_LOADED)
-    FIND_PACKAGE(ItkVtkGlue REQUIRED)
-    INCLUDE(${ItkVtkGlue_USE_FILE})
-    SET(Glue ItkVtkGlue)
-  ENDIF(ITKVtkGlue_LOADED)
-ENDIF(UNIX)
+# Find ITK and VTK
+FIND_PACKAGE(ITK REQUIRED)
+FIND_PACKAGE(VTK REQUIRED)
+
+INCLUDE(${ITK_USE_FILE})
+INCLUDE(${VTK_USE_FILE})
 
+# Do not use itk-vtk glue --> problems ahead!!!
+IF(ITKVtkGlue_LOADED)
+  MESSAGE(FATAL_ERROR "ITKVtkGlue module is available. Please re-compile your ITK without it. It could lead to nasty compilation problems... Just waiting for Kitware to solve it.")
+ENDIF(ITKVtkGlue_LOADED)
+
+SET(QT4_FOUND "0")
 IF(USE_QT4)
   FIND_PACKAGE(Qt4 REQUIRED)
   INCLUDE(${QT_USE_FILE})
 
-  ## Check for required modules
-  IF(NOT vtkGUISupportQt_LOADED)
-    MESSAGE(
-      FATAL_ERROR
-      "vtkGUISupportQt module is required but not available."
-      )
-  ENDIF(NOT vtkGUISupportQt_LOADED)
-  IF(NOT vtkGUISupportQtOpenGL_LOADED)
-    MESSAGE(
-      FATAL_ERROR
-      "vtkGUISupportQtOpenGL module is required but not available."
-      )
-  ENDIF(NOT vtkGUISupportQtOpenGL_LOADED)
+  ## Check for required vtk-qt4 modules
+  SET(
+    vtk_required_modules
+    vtkGUISupportQt
+    vtkGUISupportQtOpenGL
+    )
+  FOREACH(vtk_module ${vtk_required_modules})
+    IF(NOT ${vtk_module}_LOADED)
+      MESSAGE(
+        FATAL_ERROR
+        "${vtk_module} module is required but not available."
+        )
+      SET(QT4_FOUND "0")
+    ENDIF(NOT ${vtk_module}_LOADED)
+  ENDFOREACH(vtk_module)
+  SET(QT4_FOUND "1")
 ENDIF(USE_QT4)
 
 ## ================================================
@@ -99,7 +103,7 @@ ENDIF(USE_QT4)
 ## ================================================
 
 IF(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR})
-  MESSAGE(FATAL_ERROR "Building in the source tree is not allowed")
+  MESSAGE(FATAL_ERROR "Building in the source tree is not allowed.")
 ENDIF(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR})
 
 ## =====================================
@@ -121,14 +125,32 @@ MARK_AS_ADVANCED(
 INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/lib
   ${PROJECT_SOURCE_DIR}/lib/third_party
+  ${PROJECT_SOURCE_DIR}/lib/third_party/ItkVtkGlue
   ${PROJECT_BINARY_DIR}/lib
   ${PROJECT_BINARY_DIR}/lib/third_party
+  ${PROJECT_BINARY_DIR}/lib/third_party/ItkVtkGlue
   )
-IF(WIN32)
+IF(WIN32 OR APPLE)
   INCLUDE_DIRECTORIES(
     ${PROJECT_SOURCE_DIR}/lib/third_party/glext
     )
-ENDIF(WIN32)
+ENDIF(WIN32 OR APPLE)
+
+## =======================
+## = Local bash commands =
+## =======================
+SET(
+  bash_PROGRAMS
+  cpPlugins_createHost
+  )
+
+FOREACH(prog ${bash_PROGRAMS})
+  IF(MSVC)
+    SET(${prog}_APP ${PROJECT_BINARY_DIR}/$(ConfigurationName)/${prog})
+  ELSE(MSVC)
+    SET(${prog}_APP ${PROJECT_BINARY_DIR}/${prog})
+  ENDIF(MSVC)
+ENDFOREACH(prog)
 
 ## ===========================
 ## = Subdirs containing code =