]> Creatis software - cpPlugins.git/blob - CMakeLists.txt
Merge ssh://git.creatis.insa-lyon.fr/cpPlugins
[cpPlugins.git] / CMakeLists.txt
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
2
3 ## ============
4 ## = Policies =
5 ## ============
6
7 SET(
8   policies
9   CMP0015
10   CMP0020
11   CMP0042
12   )
13 FOREACH(policy ${policies})
14   IF(POLICY ${policy})
15     CMAKE_POLICY(SET ${policy} NEW)
16   ENDIF(POLICY ${policy})
17 ENDFOREACH(policy)
18
19 ## ================
20 ## = Project name =
21 ## ================
22
23 PROJECT(cpPlugins)
24 SET(prj_MAJOR_VERSION   "0")
25 SET(prj_MINOR_VERSION   "0")
26 SET(prj_RELEASE_VERSION "1")
27 SET(
28   prj_VERSION
29   "${prj_MAJOR_VERSION}.${prj_MINOR_VERSION}.${prj_RELEASE_VERSION}"
30   )
31
32 ## ===========
33 ## = Options =
34 ## ===========
35
36 OPTION(USE_QT4 "Build Qt4-based code" OFF)
37 OPTION(BUILD_EXAMPLES "Build examples" OFF)
38
39 OPTION(BUILD_SHARED_LIBRARIES "Build libraries as shared" OFF)
40 IF(BUILD_SHARED_LIBRARIES)
41   SET(LIBRARY_TYPE SHARED)
42 ELSE(BUILD_SHARED_LIBRARIES)
43   SET(LIBRARY_TYPE STATIC)
44 ENDIF(BUILD_SHARED_LIBRARIES)
45
46 ## ========================
47 ## = Packages and options =
48 ## ========================
49
50 # it seems that by default on Visual Studio Compiler supports c++11, so it only need to be test on other O.S.
51         if(NOT MSVC)
52         INCLUDE(CheckCXXCompilerFlag)
53         CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
54         CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
55         IF(COMPILER_SUPPORTS_CXX11)
56           SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
57         ELSEIF(COMPILER_SUPPORTS_CXX0X)
58           SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
59         ELSE()
60           MESSAGE(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
61         ENDIF()
62 endif(NOT MSVC)
63
64 # Prepare header to build shared libs (windows)
65 INCLUDE(GenerateExportHeader)
66
67 # Find ITK and VTK
68 FIND_PACKAGE(ITK REQUIRED)
69 FIND_PACKAGE(VTK REQUIRED)
70
71 INCLUDE(${ITK_USE_FILE})
72 INCLUDE(${VTK_USE_FILE})
73
74 # Do not use itk-vtk glue --> problems ahead!!!
75 IF(ITKVtkGlue_LOADED)
76   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.")
77 ENDIF(ITKVtkGlue_LOADED)
78
79 SET(QT4_FOUND "0")
80 IF(USE_QT4)
81   FIND_PACKAGE(Qt4 REQUIRED)
82   INCLUDE(${QT_USE_FILE})
83
84   ## Check for required vtk-qt4 modules
85   SET(
86     vtk_required_modules
87     vtkGUISupportQt
88     vtkGUISupportQtOpenGL
89     )
90   FOREACH(vtk_module ${vtk_required_modules})
91     IF(NOT ${vtk_module}_LOADED)
92       MESSAGE(
93         FATAL_ERROR
94         "${vtk_module} module is required but not available."
95         )
96       SET(QT4_FOUND "0")
97     ENDIF(NOT ${vtk_module}_LOADED)
98   ENDFOREACH(vtk_module)
99   SET(QT4_FOUND "1")
100 ENDIF(USE_QT4)
101
102 ## ================================================
103 ## = Do not allow to build inside the source tree =
104 ## ================================================
105
106 IF(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR})
107   MESSAGE(FATAL_ERROR "Building in the source tree is not allowed.")
108 ENDIF(PROJECT_BINARY_DIR STREQUAL ${PROJECT_SOURCE_DIR})
109
110 ## =====================================
111 ## = Where to put executables and libs =
112 ## =====================================
113
114 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
115 SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR})
116 MARK_AS_ADVANCED(
117   CMAKE_BACKWARDS_COMPATIBILITY
118   EXECUTABLE_OUTPUT_PATH
119   LIBRARY_OUTPUT_PATH
120   )
121
122 ## ==============================
123 ## = Subdirs containing headers =
124 ## ==============================
125
126 INCLUDE_DIRECTORIES(
127   ${PROJECT_SOURCE_DIR}/lib
128   ${PROJECT_SOURCE_DIR}/lib/third_party
129   ${PROJECT_SOURCE_DIR}/lib/third_party/ItkVtkGlue
130   ${PROJECT_BINARY_DIR}/lib
131   ${PROJECT_BINARY_DIR}/lib/third_party
132   ${PROJECT_BINARY_DIR}/lib/third_party/ItkVtkGlue
133   )
134 IF(WIN32 OR APPLE)
135   INCLUDE_DIRECTORIES(
136     ${PROJECT_SOURCE_DIR}/lib/third_party/glext
137     )
138 ENDIF(WIN32 OR APPLE)
139
140 ## =======================
141 ## = Local bash commands =
142 ## =======================
143 SET(
144   bash_PROGRAMS
145   cpPlugins_createHost
146   )
147
148 FOREACH(prog ${bash_PROGRAMS})
149   IF(MSVC)
150     SET(${prog}_APP ${PROJECT_BINARY_DIR}/$(ConfigurationName)/${prog})
151   ELSE(MSVC)
152     SET(${prog}_APP ${PROJECT_BINARY_DIR}/${prog})
153   ENDIF(MSVC)
154 ENDFOREACH(prog)
155
156 ## ===========================
157 ## = Subdirs containing code =
158 ## ===========================
159
160 SUBDIRS(
161   cmake
162   lib
163   appli
164   )
165
166 ## eof - $RCSfile$