1
# Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
2
# Written by Andy Cedilnik and Julien Jomier
6
SET(EXECUTABLE_OUTPUT_PATH ${FLTK_BINARY_DIR}/bin CACHE INTERNAL
7
"Where to put the executables for FLTK"
9
SET(LIBRARY_OUTPUT_PATH "${FLTK_BINARY_DIR}/lib" CACHE INTERNAL
10
"Where to put the libraries for FLTK"
13
#-----------------------------------------------------------------------------
14
# Test for some required system information.
15
INCLUDE (${CMAKE_ROOT}/Modules/FindThreads.cmake)
16
SET (CMAKE_USE_PTHREADS "${CMAKE_USE_PTHREADS_INIT}" CACHE BOOL "Use the pthreads library.")
19
SET(FLTK_DATADIR "${CMAKE_INSTALL_PREFIX}/share/FLTK")
20
SET(FLTK_DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/FLTK")
22
CONFIGURE_FILE(${FLTK_SOURCE_DIR}/configh.cmake.in
23
${FLTK_BINARY_DIR}/config.h)
28
SET( FLTK_PLATFORM_DEPENDENT_LIBS import32 )
30
SET( FLTK_PLATFORM_DEPENDENT_LIBS wsock32 comctl32 )
38
OPTION(FLTK_APPLE_X11 "Use X11 on Mac instead of Carbon" OFF)
39
MARK_AS_ADVANCED(FLTK_APPLE_X11)
40
IF(NOT FLTK_APPLE_X11)
43
OPTION(FLTK_QUARTZ "Use Quartz instead of Quickdraw" OFF)
44
ENDIF(NOT FLTK_APPLE_X11)
48
INCLUDE(${CMAKE_ROOT}/Modules/FindX11.cmake)
49
SET( FLTK_PLATFORM_DEPENDENT_LIBS ${X11_LIBRARIES} -lm)
53
SET( FLTK_PLATFORM_DEPENDENT_LIBS "-framework Carbon -framework Cocoa -framework ApplicationServices -lz")
57
ADD_DEFINITIONS(-DWIN32)
58
SET( FLTK_PLATFORM_DEPENDENT_LIBS ole32 uuid comctl32 wsock32 supc++ -lm -lgdi32)
67
INCLUDE (${CMAKE_ROOT}/Modules/CheckIncludeFiles.cmake)
68
# Check if header file exists and add it to the list.
69
MACRO(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
70
CHECK_INCLUDE_FILES("${PROJECT_INCLUDES};${FILE}" ${VARIABLE})
72
SET(PROJECT_INCLUDES ${PROJECT_INCLUDES} ${FILE})
74
ENDMACRO(CHECK_INCLUDE_FILE_CONCAT)
75
CHECK_INCLUDE_FILE_CONCAT("GL/glu.h" HAVE_GL_GLU_H)
76
CHECK_INCLUDE_FILE_CONCAT("OpenGL/glu.h" HAVE_OPENGL_GLU_H)
77
CHECK_INCLUDE_FILE_CONCAT("dirent.h" HAVE_DIRENT_H)
78
CHECK_INCLUDE_FILE_CONCAT("stdio.h" HAVE_STDIO_H)
79
CHECK_INCLUDE_FILE_CONCAT("strings.h" HAVE_STRINGS_H)
80
CHECK_INCLUDE_FILE_CONCAT("sys/dir.h" HAVE_SYS_DIR_H)
81
CHECK_INCLUDE_FILE_CONCAT("sys/ndir.h" HAVE_SYS_NDIR_H)
82
CHECK_INCLUDE_FILE_CONCAT("sys/select.h" HAVE_SYS_SELECT_H)
83
CHECK_INCLUDE_FILE_CONCAT("sys/stdtypes.h" HAVE_SYS_STDTYPES_H)
84
CHECK_INCLUDE_FILE("pthread.h" CMAKE_HAVE_PTHREAD_H)
86
INCLUDE(${CMAKE_ROOT}/Modules/FindZLIB.cmake)
87
INCLUDE(${CMAKE_ROOT}/Modules/FindPNG.cmake)
88
INCLUDE(${CMAKE_ROOT}/Modules/FindJPEG.cmake)
90
INCLUDE(${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
91
INCLUDE(${FLTK_SOURCE_DIR}/CMake/CheckFunctionWithHeaderExists.cmake)
93
CHECK_FUNCTIONWITHHEADER_EXISTS("int strcasecmp()" "${PROJECT_INCLUDES}" HAVE_STRCASECMP)
95
CHECK_SYMBOL_EXISTS(strlcat "${PROJECT_INCLUDES}" HAVE_STRLCAT)
96
CHECK_SYMBOL_EXISTS(strlcpy "${PROJECT_INCLUDES}" HAVE_STRLCPY)
97
CHECK_SYMBOL_EXISTS(vsnprintf "${PROJECT_INCLUDES}" HAVE_VSNPRINTF)
98
CHECK_SYMBOL_EXISTS(snprintf "${PROJECT_INCLUDES}" HAVE_SNPRINTF)
99
CHECK_SYMBOL_EXISTS(scandir "${PROJECT_INCLUDES}" HAVE_SCANDIR)
101
INCLUDE(${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
103
CHECK_TYPE_SIZE(short SIZEOF_SHORT)
104
CHECK_TYPE_SIZE(int SIZEOF_INT)
105
CHECK_TYPE_SIZE(long SIZEOF_LONG)
107
IF(${SIZEOF_SHORT} MATCHES "^2$")
108
SET(U16 "unsigned short")
109
ENDIF(${SIZEOF_SHORT} MATCHES "^2$")
111
IF(${SIZEOF_INT} MATCHES "^4$")
113
ELSE(${SIZEOF_INT} MATCHES "^4$")
114
IF(${SIZEOF_LONG} MATCHES "^4$")
115
SET(U32 "unsigned long")
116
ENDIF(${SIZEOF_LONG} MATCHES "^4$")
117
ENDIF(${SIZEOF_INT} MATCHES "^4$")
119
IF(${SIZEOF_INT} MATCHES "^8$")
121
ELSE(${SIZEOF_INT} MATCHES "^8$")
122
INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
123
IF(${SIZEOF_LONG} MATCHES "^8$")
124
SET(U64 "unsigned long")
125
ENDIF(${SIZEOF_LONG} MATCHES "^8$")
126
ENDIF(${SIZEOF_INT} MATCHES "^8$")
130
# Set an option to build FLTK with OpenGL support
131
OPTION(USE_OPENGL "OpenGL Support" ON)
133
INCLUDE(${CMAKE_ROOT}/Modules/FindOpenGL.cmake)
140
# Perform the FLTK specific test with status output
142
MACRO(PERFORM_CMAKE_TEST FILE TEST)
143
IF("${TEST}" MATCHES "^${TEST}$")
145
SET(MACRO_CHECK_FUNCTION_DEFINITIONS
146
"-D${TEST} ${CMAKE_REQUIRED_FLAGS}")
147
IF(CMAKE_REQUIRED_LIBRARIES)
148
SET(TEST_ADD_LIBRARIES
149
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
150
ENDIF(CMAKE_REQUIRED_LIBRARIES)
151
MESSAGE(STATUS "Performing Test ${TEST}")
155
${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
156
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
157
-DLINK_LIBRARIES:STRING=${CMAKE_TEST_SPECIAL_LIBRARIES}
158
"${TEST_ADD_LIBRARIES}"
159
OUTPUT_VARIABLE OUTPUT)
161
SET(${TEST} 1 CACHE INTERNAL "CMake test ${FUNCTION}")
162
MESSAGE(STATUS "Performing Test ${TEST} - Success")
164
MESSAGE(STATUS "Performing Test ${TEST} - Failed")
165
SET(${TEST} 0 CACHE INTERNAL "Test ${FUNCTION}")
166
WRITE_FILE(${CMAKE_BINARY_DIR}/CMakeError.log
167
"Performing Test ${TEST} failed with the following output:\n"
168
"${OUTPUT}\n" APPEND)
170
ELSE("${TEST}" MATCHES "^${TEST}$")
172
#FOREACH(tst ${TEST})
173
# MESSAGE("Test ${TEST} resulted in ${${tst}}")
174
#ENDFOREACH(tst ${TEST})
175
ENDIF("${TEST}" MATCHES "^${TEST}$")
176
ENDMACRO(PERFORM_CMAKE_TEST FILE TEST)
178
# Set an option to build the zlib library or not
179
OPTION(FLTK_USE_SYSTEM_ZLIB "Use's system zlib" ON)
180
IF(FLTK_USE_SYSTEM_ZLIB)
182
SET(CMAKE_TEST_SPECIAL_LIBRARIES ${ZLIB_LIBRARIES})
183
PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_LIBZ)
185
# We build the fltk zlib
186
ELSE(FLTK_USE_SYSTEM_ZLIB)
187
MARK_AS_ADVANCED(ZLIB_INCLUDE_DIR)
188
MARK_AS_ADVANCED(ZLIB_LIBRARY)
190
ENDIF(FLTK_USE_SYSTEM_ZLIB)
192
# Set an option to build the jpeg library or not
193
OPTION(FLTK_USE_SYSTEM_JPEG "Use's system jpeg" ON)
194
IF(FLTK_USE_SYSTEM_JPEG)
196
SET(CMAKE_TEST_SPECIAL_LIBRARIES ${JPEG_LIBRARIES})
197
PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_LIBJPEG)
199
# We build the fltk png
200
ELSE(FLTK_USE_SYSTEM_JPEG)
201
MARK_AS_ADVANCED(JPEG_INCLUDE_DIR)
202
MARK_AS_ADVANCED(JPEG_LIBRARY)
204
ENDIF(FLTK_USE_SYSTEM_JPEG)
206
# Set an option to build the png library or not
207
OPTION(FLTK_USE_SYSTEM_PNG "Use's system png" ON)
208
IF(FLTK_USE_SYSTEM_PNG)
210
SET(CMAKE_TEST_SPECIAL_LIBRARIES ${PNG_LIBRARIES})
211
PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_LIBPNG)
212
PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_PNG_GET_VALID)
213
PERFORM_CMAKE_TEST(CMake/PlatformTests.cxx HAVE_PNG_SET_TRNS_TO_ALPHA)
216
# We build the fltk png
217
ELSE(FLTK_USE_SYSTEM_PNG)
218
MARK_AS_ADVANCED(PNG_INCLUDE_DIR)
219
MARK_AS_ADVANCED(PNG_LIBRARY)
221
ENDIF(FLTK_USE_SYSTEM_PNG)
226
SET(FLTK_CREATE_SYMLINKS 1)
229
SET(FLTK_CREATE_SYMLINKS 0)
233
MACRO(SAFE_CREATE_SYMLINK SOURCE DESTINATION)
234
IF(EXISTS "${DESTINATION}")
235
ELSE(EXISTS "${DESTINATION}")
236
EXEC_PROGRAM(ln ARGS -s
238
"${DESTINATION}" OUTPUT_VARIABLE ln_output
239
RETURN_VALUE ln_retval)
240
IF("${ln_retval}" GREATER 0)
241
MESSAGE(FATAL_ERROR "Problem creatin symlink from \"${SOURCE}\" to \"${DESTINATION}\":\n${ln_output}")
242
ENDIF("${ln_retval}" GREATER 0)
243
ENDIF(EXISTS "${DESTINATION}")
244
ENDMACRO(SAFE_CREATE_SYMLINK SOURCE DESTINATION)
246
# If this is out-of-source build, then copy FL directory
247
FILE(GLOB FLTK_HEADER_FILES "${FLTK_SOURCE_DIR}/FL/*")
248
FOREACH(file ${FLTK_HEADER_FILES})
249
GET_FILENAME_COMPONENT(ext "${file}" EXT)
250
GET_FILENAME_COMPONENT(namewe "${file}" NAME_WE)
251
GET_FILENAME_COMPONENT(name "${file}" NAME)
252
STRING(COMPARE EQUAL "${ext}" ".h" lower_case_h)
253
STRING(COMPARE EQUAL "${ext}" ".H" upper_case_h)
254
IF(lower_case_h OR upper_case_h)
255
SET(outfile_h "${FLTK_BINARY_DIR}/FL/${namewe}.h")
256
SET(outfile_H "${FLTK_BINARY_DIR}/FL/${namewe}.H")
257
CONFIGURE_FILE("${file}" "${outfile_H}" COPYONLY IMMEDIATE)
258
# IF(FLTK_CREATE_SYMLINKS)
259
# SAFE_CREATE_SYMLINK("${outfile_H}" "${outfile_h}")
260
# ENDIF(FLTK_CREATE_SYMLINKS)
261
ELSE(lower_case_h OR upper_case_h)
262
STRING(COMPARE EQUAL "${ext}" ".r" mac_resource_file)
263
IF(mac_resource_file)
264
SET(outfile "${FLTK_BINARY_DIR}/FL/${name}")
265
CONFIGURE_FILE("${file}" "${outfile}" COPYONLY IMMEDIATE)
266
ENDIF(mac_resource_file)
267
ENDIF(lower_case_h OR upper_case_h)
270
IF(FLTK_CREATE_SYMLINKS)
272
"${FLTK_BINARY_DIR}/FL"
273
"${FLTK_BINARY_DIR}/Fl")
276
"${FLTK_BINARY_DIR}/FL/gl.H"
277
"${FLTK_BINARY_DIR}/FL/gl.h")
279
# Create the symlinks
280
FILE(READ ${FLTK_SOURCE_DIR}/fltk.list.in SYMLINKSFILE)
281
STRING(REGEX MATCHALL "(l 0000 root sys .includedir/)([^(\n)])+"
282
SYMLINKS ${SYMLINKSFILE})
283
FOREACH(var ${SYMLINKS} )
284
IF("${var}" MATCHES ".H")
285
STRING(REGEX MATCH "(/F)([^(\n)])+" tmp ${var})
286
STRING(REGEX MATCH "(/F)([^( )])+" in ${tmp})
287
STRING(REGEX MATCH "( )([^(\n)])+" out ${tmp})
288
STRING(REGEX REPLACE "( )" "" out ${out})
289
SAFE_CREATE_SYMLINK("${FLTK_BINARY_DIR}/FL/${out}" "${FLTK_BINARY_DIR}/${in}")
290
ENDIF("${var}" MATCHES ".H")
292
ENDIF(FLTK_CREATE_SYMLINKS)
295
# Set the fluid executable path
296
SET(FLUID_COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/fluid)
298
# Set an option to build the tests
299
OPTION(BUILD_TESTS "Build the tests" ON)
303
INCLUDE(${CMAKE_ROOT}/Modules/Dart.cmake)
306
#Genereate the configuration file
307
SET(FLTK_EXECUTABLE_DIRS ${EXECUTABLE_OUTPUT_PATH})
308
SET(FLTK_LIBRARY_DIRS ${LIBRARY_OUTPUT_PATH})
310
CONFIGURE_FILE(${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
311
${FLTK_BINARY_DIR}/FLTKConfig.cmake)