1 #-----------------------------------------------------------------------------
2 # BUILDS AND INSTALLS THE LIBRARY BBTK
3 #-----------------------------------------------------------------------------
6 #-----------------------------------------------------------------------------
8 #-----------------------------------------------------------------------------
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"
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"
33 ENDIF(BBTK_COMPILER_HAS_FUNCTION)
34 ENDIF("BBTK_COMPILER_HAS_FUNCTION" MATCHES "^BBTK_COMPILER_HAS_FUNCTION$")
35 #-----------------------------------------------------------------------------
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 #-----------------------------------------------------------------------------
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)
64 CHECK_INCLUDE_FILE("termios.h" CMAKE_HAVE_TERMIOS_H)
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 #-----------------------------------------------------------------------------
73 #-----------------------------------------------------------------------------
74 # bbtk library dependencies
75 #-----------------------------------------------------------------------------
77 #-----------------------------------------------------------------------------
79 IF(BBTK_USE_WXWIDGETS)
80 SET(USE_WXWIDGETS ON CACHE BOOL "Use WxWidgets" FORCE)
82 # INCLUDE(cmake/FIND_AND_USE_WXWIDGETS.cmake)
83 # FIND_AND_USE_WXWIDGETS()
84 # ADD_DEF( _USE_WXWIDGETS_ )
85 SET(BBTK_LINK_LIBRARIES
86 ${BBTK_LINK_LIBRARIES}
87 ${BBTK_WXWIDGETS_LIBRARIES}
89 ENDIF(BBTK_USE_WXWIDGETS)
90 #-----------------------------------------------------------------------------
92 #-----------------------------------------------------------------------------
94 IF(BBTK_USE_KWWIDGETS)
95 SET(USE_KWWIDGETS ON CACHE BOOL "Use KWWidgets" FORCE)
97 # INCLUDE(cmake/FIND_AND_USE_WXWIDGETS.cmake)
98 # FIND_AND_USE_WXWIDGETS()
99 # ADD_DEF( _USE_WXWIDGETS_ )
100 SET(BBTK_LINK_LIBRARIES
101 ${BBTK_LINK_LIBRARIES}
102 ${BBTK_KWWIDGETS_LIBRARIES}
104 ENDIF(BBTK_USE_KWWIDGETS)
105 #-----------------------------------------------------------------------------
107 #-----------------------------------------------------------------------------
109 SET(BBTK_USE_BOOST TRUE)
112 SET(USE_BOOST ON CACHE BOOL "Use boost C++ library" FORCE)
113 SET(BBTK_LINK_LIBRARIES
114 ${BBTK_LINK_LIBRARIES}
115 ${BBTK_BOOST_LIBRARIES}
117 ENDIF(BBTK_USE_BOOST)
118 #-----------------------------------------------------------------------------
120 #-----------------------------------------------------------------------------
121 # On unix systems, need to link against dl for dynamic librairies open/close
123 SET(BBTK_LINK_LIBRARIES
124 ${BBTK_LINK_LIBRARIES}
127 #-----------------------------------------------------------------------------
129 MESSAGE(STATUS "bbtk link libraries = ${BBTK_LINK_LIBRARIES}")
131 #-----------------------------------------------------------------------------
132 # EO bbtk library dependencies
133 #-----------------------------------------------------------------------------
141 #-----------------------------------------------------------------------------
142 # Generates the bbtkConfigure.h file
143 #-----------------------------------------------------------------------------
145 #-----------------------------------------------------------------------------
146 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/bbtkConfigure.h.in
147 ${CMAKE_CURRENT_BINARY_DIR}/bbtkConfigure.h
150 #-----------------------------------------------------------------------------
152 #-----------------------------------------------------------------------------
153 IF(NOT BBTK_INSTALL_NO_DEVELOPMENT)
154 INSTALL_FILES(/include/bbtk FILES bbtkConfigure.h)
155 ENDIF(NOT BBTK_INSTALL_NO_DEVELOPMENT)
156 #-----------------------------------------------------------------------------
158 #-----------------------------------------------------------------------------
159 # Add the path to current dir for apps to find bbtkConfigure.h
160 # LG : already done in upper dir
161 #INCLUDE_DIRECTORIES(
162 # ${CMAKE_CURRENT_BINARY_DIR} #for bbtkConfigure.h
164 #-----------------------------------------------------------------------------
166 #-----------------------------------------------------------------------------
167 # EO Generates the bbtkConfigure.h file
168 #-----------------------------------------------------------------------------
175 #-----------------------------------------------------------------------------
176 # bbtk library creation
177 #-----------------------------------------------------------------------------
178 # Symbols must be exported (Windows)
179 ADD_DEF(BBTK_EXPORT_SYMBOLS)
181 #ADD_DEFINITIONS(-DCHECKBOXVIEW=1)
182 #-----------------------------------------------------------------------------
184 FILE(GLOB SOURCES "." "*.cxx" "*.cpp")
185 # "ThirdParty/wx/treemultictrl/*.cpp")
186 FILE(GLOB SOURCES_H "." "*.h" )
188 IF(BBTK_USE_KWWIDGETS)
189 include("${KWWidgets_CMAKE_DIR}/KWWidgetsWrappingMacros.cmake")
190 kwwidgets_wrap_tcl(bbtk LIB_TCL_SRCS "vtkKWBlackBoxDialog.cxx" "")
191 SET(SOURCES ${SOURCES} ${LIB_TCL_SRCS})
192 ENDIF(BBTK_USE_KWWIDGETS)
194 #-----------------------------------------------------------------------------
196 ADD_LIBRARY(bbtk SHARED ${SOURCES} ${SOURCES_H})
197 #-----------------------------------------------------------------------------
198 TARGET_LINK_LIBRARIES(bbtk ${BBTK_LINK_LIBRARIES})
199 #-----------------------------------------------------------------------------
201 SET_TARGET_PROPERTIES(bbtk PROPERTIES COMPILE_FLAGS -Wall)
205 # for gnu linker : version script used to define exported symbols
206 #SET_TARGET_PROPERTIES(bbtk PROPERTIES
207 # LINK_FLAGS_DEBUG -Wl,--version-script=bbtk.map)
208 #SET_TARGET_PROPERTIES(bbtk PROPERTIES
209 # LINK_FLAGS_RELEASE -Wl,--version-script=bbtk.map)
211 #-----------------------------------------------------------------------------
214 #-----------------------------------------------------------------------------
215 # EO bbtk library creation
216 #-----------------------------------------------------------------------------
224 #=============================================================================
225 # bbtk library installation
226 #=============================================================================
229 #-----------------------------------------------------------------------------
230 FILE(GLOB BBTK_HEADERS "*.h")
231 INSTALL(FILES ${BBTK_HEADERS} DESTINATION include/bbtk)
232 INSTALL(TARGETS bbtk DESTINATION ${BBTK_LIB_PATH})
233 #-----------------------------------------------------------------------------
235 #-----------------------------------------------------------------------------
236 # Code installing the files needed to find the lib by FIND_PACKAGE
237 # Uses CMakeCreateFindPackage
238 #-----------------------------------------------------------------------------
241 #-----------------------------------------------------------------------------
242 # - Set the variable LIBRARY_NAME to the name of your library
243 SET(LIBRARY_NAME BBTK)
244 SET(${LIBRARY_NAME}_INSTALL_FOLDER bbtk)
245 SET(${LIBRARY_NAME}_LIBRARIES bbtk)
246 SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS kernel/src kernel/src/ThirdParty)
247 IF(BBTK_USE_SHIPPED_BOOST)
248 SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS
249 ${${LIBRARY_NAME}_BUILD_TREE_RELATIVE_INCLUDE_PATHS}
250 kernel/src/ThirdParty/${BBTK_SHIPPED_BOOST}
252 ENDIF(BBTK_USE_SHIPPED_BOOST)
254 SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS
255 ${EXECUTABLE_OUTPUT_REL_PATH})
257 SET(${LIBRARY_NAME}_BUILD_TREE_RELATIVE_LIBRARY_PATHS
258 ${EXECUTABLE_OUTPUT_REL_PATH}/Debug
259 ${EXECUTABLE_OUTPUT_REL_PATH}/Release)
261 SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_INCLUDE_PATHS include/bbtk include/bbtk/ThirdParty)
262 SET(${LIBRARY_NAME}_INSTALL_TREE_RELATIVE_LIBRARY_PATHS ${BBTK_LIB_PATH})
265 # - Set the version of your library
266 # SET YOUR LIB VERSION
267 #SET(${LIBRARY_NAME}_MAJOR_VERSION 1)
268 #SET(${LIBRARY_NAME}_MINOR_VERSION 0)
269 #SET(${LIBRARY_NAME}_BUILD_VERSION 0)
270 # REQUIRED BUILD FLAGS
271 #SET(${LIBRARY_NAME}_REQUIRED_C_FLAGS "")
272 #SET(${LIBRARY_NAME}_REQUIRED_CXX_FLAGS "")
273 #SET(${LIBRARY_NAME}_REQUIRED_LINK_FLAGS "")
274 # ADDITIONAL CONFIG FILE
275 # HERE WE USE ONE TO EXPORT testLib_EXPORTED_VALUE
277 SET(${LIBRARY_NAME}_HAS_ADDITIONAL_CONFIG_FILE TRUE)
278 SET(${LIBRARY_NAME}_ADDITIONAL_CONFIG_FILE
279 ${PROJECT_SOURCE_DIR}/kernel/cmake/AdditionalBBTKConfig.cmake.in)
280 SET(${LIBRARY_NAME}_ADDITIONAL_USE_FILE
281 ${PROJECT_SOURCE_DIR}/kernel/cmake/AdditionalUseBBTK.cmake.in)
282 #-----------------------------------------------------------------------------
284 #-----------------------------------------------------------------------------
285 # Includes CMakeCreateFindPackage
286 INCLUDE(${CMakeCreateFindPackage_DIR}/CMakeCreateFindPackage.cmake)
287 CMAKE_CREATE_FIND_PACKAGE(${LIBRARY_NAME})
288 #-----------------------------------------------------------------------------
290 #-----------------------------------------------------------------------------
291 # EO bbtk library installation
292 #-----------------------------------------------------------------------------
295 #-----------------------------------------------------------------------------
296 # Recurse in ThirdParty to build the needed libs
298 #-----------------------------------------------------------------------------
300 #-----------------------------------------------------------------------------
302 #-----------------------------------------------------------------------------