]> Creatis software - bbtk.git/blob - kernel/src/CMakeLists.txt
BUGs INSTALL , External Packages, CPACK windows
[bbtk.git] / kernel / src / CMakeLists.txt
1 #-----------------------------------------------------------------------------
2 # BUILDS AND INSTALLS THE LIBRARY BBTK
3 #-----------------------------------------------------------------------------
4
5
6 #-----------------------------------------------------------------------------
7 # Tests 
8 #-----------------------------------------------------------------------------
9
10
11 #-----------------------------------------------------------------------------
12 # Test if compiler defines the pseudo-macro __FUNCTION__
13 IF("BBTK_COMPILER_HAS_FUNCTION" MATCHES "^BBTK_COMPILER_HAS_FUNCTION$")
14   MESSAGE(STATUS "Checking support for __FUNCTION__ in compiler")
15   TRY_COMPILE(BBTK_COMPILER_HAS_FUNCTION
16               ${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/Function
17               ${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkTestFUNCTION.cxx
18               OUTPUT_VARIABLE OUTPUT)
19   IF(BBTK_COMPILER_HAS_FUNCTION)
20     MESSAGE(STATUS "Checking support for __FUNCTION__ -- yes")
21     SET(BBTK_COMPILER_HAS_FUNCTION 1 CACHE INTERNAL "Support for extension C __FUNCTION__")
22     WRITE_FILE(${CMAKE_CURRENT_BINARY_DIR}/CMakeOutput.log
23       "Determining if the C compiler supports __FUNCTION__ "
24       "passed with the following output:\n"
25       "${OUTPUT}\n" APPEND)
26   ELSE(BBTK_COMPILER_HAS_FUNCTION)
27     MESSAGE(STATUS "Checking support for __FUNCTION__ -- no")
28     SET(BBTK_COMPILER_HAS_FUNCTION 0 CACHE INTERNAL "Support for extension C __FUNCTION__")
29     WRITE_FILE(${CMAKE_CURRENT_BINARY_DIR}/CMakeError.log
30       "Determining if the C compiler supports __FUNCTION__ "
31       "failed with the following output:\n"
32       "${OUTPUT}\n" APPEND)
33   ENDIF(BBTK_COMPILER_HAS_FUNCTION)
34 ENDIF("BBTK_COMPILER_HAS_FUNCTION" MATCHES "^BBTK_COMPILER_HAS_FUNCTION$")
35 #-----------------------------------------------------------------------------
36
37 #-----------------------------------------------------------------------------
38 # Test is compiler support istringstream
39 IF("BBTK_TEST_ISTRINGSTREAM" MATCHES "^BBTK_TEST_ISTRINGSTREAM$")
40   MESSAGE(STATUS "Checking istringstream")
41   TRY_RUN(BBTK_TEST_ISTRINGSTREAM BBTK_TEST_ISTRINGSTREAM_COMPILED
42           ${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/
43           ${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkTestIstringStream.cxx)
44   IF(BBTK_TEST_ISTRINGSTREAM_COMPILED)
45     IF(BBTK_TEST_ISTRINGSTREAM)
46       MESSAGE(STATUS "Checking istringstream works -- yes")
47       SET(BBTK_TEST_ISTRINGSTREAM 1 CACHE INTERNAL "Whether istringstream works.")
48     ELSE(BBTK_TEST_ISTRINGSTREAM)
49       MESSAGE(STATUS "Checking istringstream works -- no")
50       SET(BBTK_TEST_ISTRINGSTREAM 0 CACHE INTERNAL "Whether istringstream works.")
51     ENDIF(BBTK_TEST_ISTRINGSTREAM)
52   ELSE(BBTK_TEST_ISTRINGSTREAM_COMPILED)
53     MESSAGE(STATUS "Checking istringstream -- failed")
54   ENDIF(BBTK_TEST_ISTRINGSTREAM_COMPILED)
55 ENDIF("BBTK_TEST_ISTRINGSTREAM" MATCHES "^BBTK_TEST_ISTRINGSTREAM$")
56 #-----------------------------------------------------------------------------
57
58 #-----------------------------------------------------------------------------
59 INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFile.cmake)
60 CHECK_INCLUDE_FILE("stdint.h"       CMAKE_HAVE_STDINT_H)
61 IF(UNIX) #Avoid polluting Win32 cmakecache
62   CHECK_INCLUDE_FILE("inttypes.h"   CMAKE_HAVE_INTTYPES_H)
63   # termios 
64   CHECK_INCLUDE_FILE("termios.h"   CMAKE_HAVE_TERMIOS_H)
65 ENDIF(UNIX)
66 # Special Time support, two conventions: *NIX vs Win32
67 CHECK_INCLUDE_FILE("sys/times.h"    CMAKE_HAVE_SYS_TIMES_H)
68 CHECK_INCLUDE_FILE("sys/timeb.h"    CMAKE_HAVE_SYS_TIMEB_H)
69 #-----------------------------------------------------------------------------
70
71   
72
73 #-----------------------------------------------------------------------------
74 # bbtk library dependencies
75 #-----------------------------------------------------------------------------
76
77 #-----------------------------------------------------------------------------
78 # WXWIDGETS
79 OPTION(BBTK_USE_WXWIDGETS "Build bbtk library and applications in graphical mode using the wxWidgets library" OFF)
80
81 IF(BBTK_USE_WXWIDGETS)
82   SET(USE_WXWIDGETS ON CACHE BOOL "Use WxWidgets" FORCE)
83
84 #  INCLUDE(cmake/FIND_AND_USE_WXWIDGETS.cmake)
85 #  FIND_AND_USE_WXWIDGETS()
86 #  ADD_DEF( _USE_WXWIDGETS_ )
87   SET(BBTK_LINK_LIBRARIES
88     ${BBTK_LINK_LIBRARIES}
89     ${BBTK_WXWIDGETS_LIBRARIES} 
90     )
91 ENDIF(BBTK_USE_WXWIDGETS)
92 #-----------------------------------------------------------------------------
93
94 #-----------------------------------------------------------------------------
95 # On unix systems, need to link against dl for dynamic librairies open/close
96 IF(UNIX)
97   SET(BBTK_LINK_LIBRARIES
98     ${BBTK_LINK_LIBRARIES}
99     dl) 
100 ENDIF(UNIX)
101 #-----------------------------------------------------------------------------
102
103 #-----------------------------------------------------------------------------
104 # EO bbtk library dependencies
105 #-----------------------------------------------------------------------------
106
107
108
109
110
111
112
113 #-----------------------------------------------------------------------------
114 # Generates the bbtkConfigure.h file
115 #-----------------------------------------------------------------------------
116
117 #-----------------------------------------------------------------------------
118 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkConfigure.h.in
119                ${CMAKE_CURRENT_BINARY_DIR}/bbtkConfigure.h 
120                @ONLY IMMEDIATE
121                )
122 #-----------------------------------------------------------------------------
123
124 #-----------------------------------------------------------------------------
125 IF(NOT BBTK_INSTALL_NO_DEVELOPMENT)
126   INSTALL_FILES(/include/bbtk FILES bbtkConfigure.h)
127 ENDIF(NOT BBTK_INSTALL_NO_DEVELOPMENT)
128 #-----------------------------------------------------------------------------
129
130 #-----------------------------------------------------------------------------
131 # Add the path to current dir for apps to find bbtkConfigure.h
132 # LG : already done in upper dir
133 #INCLUDE_DIRECTORIES(
134 #  ${CMAKE_CURRENT_BINARY_DIR} #for bbtkConfigure.h
135 #)
136 #-----------------------------------------------------------------------------
137
138 #-----------------------------------------------------------------------------
139 # EO Generates the bbtkConfigure.h file
140 #-----------------------------------------------------------------------------
141
142
143
144
145
146
147
148 #-----------------------------------------------------------------------------
149 # bbtk library creation
150 #-----------------------------------------------------------------------------
151 # Symbols must be exported (Windows)
152 ADD_DEF(BBTK_EXPORT_SYMBOLS)
153
154 #-----------------------------------------------------------------------------
155 # Sources files 
156 FILE(GLOB SOURCES "." "*.cxx" "*.cpp")
157 FILE(GLOB SOURCES_H "." "*.h" )
158 #-----------------------------------------------------------------------------
159 # lib definition
160 ADD_LIBRARY(bbtk SHARED ${SOURCES} ${SOURCES_H})
161 #-----------------------------------------------------------------------------
162 TARGET_LINK_LIBRARIES(bbtk ${BBTK_LINK_LIBRARIES})
163 #-----------------------------------------------------------------------------
164
165 #IF(UNIX)
166 # for gnu linker : version script used to define exported symbols
167 #SET_TARGET_PROPERTIES(bbtk PROPERTIES 
168 #  LINK_FLAGS_DEBUG -Wl,--version-script=bbtk.map)
169 #SET_TARGET_PROPERTIES(bbtk PROPERTIES
170 #  LINK_FLAGS_RELEASE -Wl,--version-script=bbtk.map)
171 #ENDIF(UNIX)
172 #-----------------------------------------------------------------------------
173
174 #-----------------------------------------------------------------------------
175 # EO bbtk library creation
176 #-----------------------------------------------------------------------------
177
178
179
180
181
182
183
184 #=============================================================================
185 # bbtk library installation
186 #=============================================================================
187
188
189 #-----------------------------------------------------------------------------
190 FILE(GLOB BBTK_HEADERS "*.h")
191 INSTALL(FILES ${BBTK_HEADERS} DESTINATION include/bbtk)
192 INSTALL(TARGETS bbtk DESTINATION lib)
193 IF(WIN32)
194   INSTALL(TARGETS bbtk DESTINATION bin/)
195 ENDIF(WIN32)
196 #-----------------------------------------------------------------------------
197
198 #-----------------------------------------------------------------------------
199 # Code installing the files needed to find the lib by FIND_PACKAGE
200 # Uses CMakeCreateFindPackage 
201 #-----------------------------------------------------------------------------
202
203
204 #-----------------------------------------------------------------------------
205 # - Set the variable LIBRARY_NAME to the name of your library
206 SET(LIBRARY_NAME BBTK)
207 SET(${LIBRARY_NAME}_INSTALL_FOLDER bbtk)
208 SET(${LIBRARY_NAME}_LIBRARIES bbtk)
209 SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS kernel/src)
210 IF(UNIX)
211   SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS 
212     ${EXECUTABLE_OUTPUT_REL_PATH})
213 ELSE(UNIX)
214   SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS 
215     ${EXECUTABLE_OUTPUT_REL_PATH}/Debug
216     ${EXECUTABLE_OUTPUT_REL_PATH}/Release)
217 ENDIF(UNIX)
218 SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_INCLUDE_PATHS include/bbtk)
219 SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_LIBRARY_PATHS lib)
220
221 # OPTIONAL 
222 # - Set the version of your library
223 # SET YOUR LIB VERSION
224 #SET(${LIBRARY_NAME}_MAJOR_VERSION 1)
225 #SET(${LIBRARY_NAME}_MINOR_VERSION 0)
226 #SET(${LIBRARY_NAME}_BUILD_VERSION 0)
227 # REQUIRED BUILD FLAGS
228 #SET(${LIBRARY_NAME}_REQUIRED_C_FLAGS "")
229 #SET(${LIBRARY_NAME}_REQUIRED_CXX_FLAGS "")
230 #SET(${LIBRARY_NAME}_REQUIRED_LINK_FLAGS "")
231 # ADDITIONAL CONFIG FILE
232 # HERE WE USE ONE TO EXPORT testLib_EXPORTED_VALUE
233
234 SET(${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE TRUE)
235 SET(${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE 
236   ${PROJECT_SOURCE_DIR}/kernel/cmake/AdditionalBBTKConfig.cmake.in)
237 SET(${LIBRARY_NAME}_ADDITIONAL_USE_FILE 
238   ${PROJECT_SOURCE_DIR}/kernel/cmake/AdditionalUseBBTK.cmake.in)
239 #-----------------------------------------------------------------------------
240
241 #-----------------------------------------------------------------------------
242 # Includes CMakeCreateFindPackage
243 INCLUDE(${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage.cmake)
244 CMAKE_CREATE_FIND_PACKAGE(${LIBRARY_NAME})
245 #-----------------------------------------------------------------------------
246
247 #-----------------------------------------------------------------------------
248 # EO bbtk library installation
249 #-----------------------------------------------------------------------------
250
251
252
253 #-----------------------------------------------------------------------------
254 # EOF
255 #-----------------------------------------------------------------------------
256