You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

692 lines
21KB

  1. #
  2. # "$Id: CMakeLists.txt 8198 2011-01-06 10:24:58Z manolo $"
  3. #
  4. # Main CMakeLists.txt to build the FLTK project using CMake (www.cmake.org)
  5. # Written by Andy Cedilnik and Julien Jomier
  6. #
  7. # Copyright 1998-2010 by Bill Spitzak and others.
  8. #
  9. # This library is free software; you can redistribute it and/or
  10. # modify it under the terms of the GNU Library General Public
  11. # License as published by the Free Software Foundation; either
  12. # version 2 of the License, or (at your option) any later version.
  13. #
  14. # This library is distributed in the hope that it will be useful,
  15. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. # Library General Public License for more details.
  18. #
  19. # You should have received a copy of the GNU Library General Public
  20. # License along with this library; if not, write to the Free Software
  21. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
  22. # USA.
  23. #
  24. # Please report all bugs and problems on the following page:
  25. #
  26. # http:#www.fltk.org/str.php
  27. #
  28. #######################################################################
  29. # basic setup
  30. #######################################################################
  31. project(FLTK)
  32. cmake_minimum_required(VERSION 2.6)
  33. # The FLTK version
  34. set(FLTK_VERSION_MAJOR "1")
  35. set(FLTK_VERSION_MINOR "3")
  36. set(FLTK_VERSION_PATCH "0")
  37. set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
  38. set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")
  39. set(EXECUTABLE_OUTPUT_PATH ${FLTK_BINARY_DIR}/bin)
  40. set(LIBRARY_OUTPUT_PATH ${FLTK_BINARY_DIR}/lib)
  41. set(ARCHIVE_OUTPUT_PATH ${FLTK_BINARY_DIR}/lib)
  42. # Search for modules in the FLTK source dir first
  43. set(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake")
  44. include_directories(${FLTK_BINARY_DIR} ${FLTK_SOURCE_DIR})
  45. #######################################################################
  46. # platform dependent information
  47. #######################################################################
  48. include(TestBigEndian)
  49. TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
  50. if(APPLE)
  51. set(__APPLE_QUARTZ__ 1)
  52. set(HAVE_STRTOLL 1)
  53. set(HAVE_STRCASECMP 1)
  54. set(HAVE_DIRENT_H 1)
  55. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
  56. endif(APPLE)
  57. if(WIN32)
  58. if(MSVC)
  59. add_definitions(-DWIN32_LEAN_AND_MEAN)
  60. add_definitions(-D_CRT_SECURE_NO_WARNINGS)
  61. endif(MSVC)
  62. if(CMAKE_C_COMPILER_ID STREQUAL GNU)
  63. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
  64. endif(CMAKE_C_COMPILER_ID STREQUAL GNU)
  65. if(MINGW AND EXISTS /mingw)
  66. list(APPEND CMAKE_PREFIX_PATH /mingw)
  67. endif(MINGW AND EXISTS /mingw)
  68. endif(WIN32)
  69. #######################################################################
  70. # size of ints
  71. include(CheckTypeSize)
  72. CHECK_TYPE_SIZE(short SIZEOF_SHORT)
  73. CHECK_TYPE_SIZE(int SIZEOF_INT)
  74. CHECK_TYPE_SIZE(long SIZEOF_LONG)
  75. CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG)
  76. if(${SIZEOF_SHORT} MATCHES "^2$")
  77. set(U16 "unsigned short")
  78. endif(${SIZEOF_SHORT} MATCHES "^2$")
  79. if(${SIZEOF_INT} MATCHES "^4$")
  80. set(U32 "unsigned")
  81. else()
  82. if(${SIZEOF_LONG} MATCHES "^4$")
  83. set(U32 "unsigned long")
  84. endif(${SIZEOF_LONG} MATCHES "^4$")
  85. endif(${SIZEOF_INT} MATCHES "^4$")
  86. if(${SIZEOF_INT} MATCHES "^8$")
  87. set(U64 "unsigned")
  88. else()
  89. if(${SIZEOF_LONG} MATCHES "^8$")
  90. set(U64 "unsigned long")
  91. endif(${SIZEOF_LONG} MATCHES "^8$")
  92. endif(${SIZEOF_INT} MATCHES "^8$")
  93. #######################################################################
  94. # check for headers, libraries and functions
  95. #######################################################################
  96. # headers
  97. find_file(HAVE_ALSA_ASOUNDLIB_H alsa/asoundlib.h)
  98. find_file(HAVE_DIRENT_H dirent.h)
  99. find_file(HAVE_DLFCN_H dlfcn.h)
  100. find_file(HAVE_FREETYPE_H freetype.h PATH_SUFFIXES freetype2)
  101. find_file(HAVE_GL_GL_H GL/gl.h)
  102. find_file(HAVE_GL_GLU_H GL/glu.h)
  103. find_file(HAVE_LIBPNG_PNG_H libpng/png.h)
  104. find_file(HAVE_LOCALE_H locale.h)
  105. find_file(HAVE_NDIR_H ndir.h)
  106. find_file(HAVE_OPENGL_GLU_H OpenGL/glu.h)
  107. find_file(HAVE_PNG_H png.h)
  108. find_file(HAVE_PTHREAD_H pthread.h)
  109. find_file(HAVE_STDIO_H stdio.h)
  110. find_file(HAVE_STRINGS_H strings.h)
  111. find_file(HAVE_SYS_DIR_H sys/dir.h)
  112. find_file(HAVE_SYS_NDIR_H sys/ndir.h)
  113. find_file(HAVE_SYS_SELECT_H sys/select.h)
  114. find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h)
  115. find_path(HAVE_XDBE_H Xdbe.h PATH_SUFFIXES X11/extensions extensions)
  116. mark_as_advanced(HAVE_ALSA_ASOUNDLIB_H HAVE_DIRENT_H HAVE_DLFCN_H)
  117. mark_as_advanced(HAVE_FREETYPE_H HAVE_GL_GL_H HAVE_GL_GLU_H)
  118. mark_as_advanced(HAVE_LIBPNG_PNG_H HAVE_LOCALE_H HAVE_NDIR_H)
  119. mark_as_advanced(HAVE_OPENGL_GLU_H HAVE_PNG_H HAVE_PTHREAD_H)
  120. mark_as_advanced(HAVE_STDIO_H HAVE_STRINGS_H HAVE_SYS_DIR_H)
  121. mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
  122. mark_as_advanced(HAVE_SYS_STDTYPES_H HAVE_XDBE_H)
  123. # where to find freetype headers
  124. find_path(FREETYPE_PATH freetype/config/ftheader.h PATH_SUFFIXES freetype2)
  125. if(FREETYPE_PATH)
  126. include_directories(${FREETYPE_PATH})
  127. endif(FREETYPE_PATH)
  128. mark_as_advanced(FREETYPE_PATH)
  129. #######################################################################
  130. # libraries
  131. find_library(LIB_CAIRO cairo)
  132. find_library(LIB_fontconfig fontconfig)
  133. find_library(LIB_freetype freetype)
  134. find_library(LIB_GL GL)
  135. find_library(LIB_MesaGL MesaGL)
  136. find_library(LIB_jpeg jpeg)
  137. find_library(LIB_png png)
  138. find_library(LIB_zlib z)
  139. mark_as_advanced(LIB_CAIRO LIB_fontconfig LIB_freetype)
  140. mark_as_advanced(LIB_GL LIB_MesaGL)
  141. mark_as_advanced(LIB_jpeg LIB_png LIB_zlib)
  142. #######################################################################
  143. # functions
  144. include(CheckFunctionExists)
  145. if(HAVE_DLFCN_H)
  146. set(CMAKE_REQUIRED_LIBRARIES dl)
  147. endif(HAVE_DLFCN_H)
  148. CHECK_FUNCTION_EXISTS(dlsym HAVE_DLSYM)
  149. CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
  150. if(LIB_png)
  151. set(CMAKE_REQUIRED_LIBRARIES png)
  152. endif(LIB_png)
  153. CHECK_FUNCTION_EXISTS(png_get_valid HAVE_PNG_GET_VALID)
  154. CHECK_FUNCTION_EXISTS(png_set_tRNS_to_alpha HAVE_PNG_SET_TRNS_TO_ALPHA)
  155. CHECK_FUNCTION_EXISTS(scandir HAVE_SCANDIR)
  156. CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
  157. # not really true but we convert strcasecmp calls to _stricmp calls in flstring.h
  158. if(MSVC)
  159. set(HAVE_STRCASECMP 1)
  160. endif(MSVC)
  161. CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
  162. CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
  163. CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
  164. CHECK_FUNCTION_EXISTS(strtoll HAVE_STRTOLL)
  165. CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
  166. set(CMAKE_REQUIRED_LIBRARIES)
  167. if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
  168. set(MSG "POSIX compatible scandir")
  169. message(STATUS "Looking for ${MSG}")
  170. try_compile(V
  171. ${FLTK_BINARY_DIR}
  172. ${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx
  173. )
  174. if(V)
  175. message(STATUS "${MSG} - found")
  176. set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
  177. else()
  178. message(STATUS "${MSG} - not found")
  179. set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
  180. endif(V)
  181. endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
  182. mark_as_advanced(HAVE_SCANDIR_POSIX)
  183. #######################################################################
  184. # options
  185. #######################################################################
  186. set(OPTION_OPTIM ""
  187. CACHE STRING
  188. "custom optimization flags"
  189. )
  190. add_definitions(${OPTION_OPTIM})
  191. #######################################################################
  192. set(OPTION_ARCHFLAGS ""
  193. CACHE STRING
  194. "custom architecture flags"
  195. )
  196. add_definitions(${OPTION_ARCHFLAGS})
  197. #######################################################################
  198. set(OPTION_PREFIX_BIN ""
  199. CACHE STRING
  200. "where to install executables - leave empty to use {CMAKE_INSTALL_PREFIX}/bin"
  201. )
  202. if(OPTION_PREFIX_BIN)
  203. set(PREFIX_BIN ${OPTION_PREFIX_BIN} CACHE INTERNAL "" FORCE)
  204. else()
  205. set(PREFIX_BIN ${CMAKE_INSTALL_PREFIX}/bin CACHE INTERNAL "" FORCE)
  206. endif(OPTION_PREFIX_BIN)
  207. #######################################################################
  208. set(OPTION_PREFIX_LIB ""
  209. CACHE STRING
  210. "where to install libraries - leave empty to use {CMAKE_INSTALL_PREFIX}/lib"
  211. )
  212. if(OPTION_PREFIX_LIB)
  213. set(PREFIX_LIB ${OPTION_PREFIX_LIB} CACHE INTERNAL "" FORCE)
  214. else()
  215. set(PREFIX_LIB ${CMAKE_INSTALL_PREFIX}/lib CACHE INTERNAL "" FORCE)
  216. endif(OPTION_PREFIX_LIB)
  217. #######################################################################
  218. set(OPTION_PREFIX_INCLUDE ""
  219. CACHE STRING
  220. "where to install include files - leave empty to use {CMAKE_INSTALL_PREFIX}/include"
  221. )
  222. if(OPTION_PREFIX_INCLUDE)
  223. set(PREFIX_INCLUDE ${OPTION_PREFIX_INCLUDE} CACHE INTERNAL "" FORCE)
  224. else()
  225. set(PREFIX_INCLUDE ${CMAKE_INSTALL_PREFIX}/include CACHE INTERNAL "" FORCE)
  226. endif(OPTION_PREFIX_INCLUDE)
  227. #######################################################################
  228. set(OPTION_PREFIX_DATA ""
  229. CACHE STRING
  230. "where to install data files - leave empty to use {CMAKE_INSTALL_PREFIX}/share/FLTK"
  231. )
  232. if(OPTION_PREFIX_DATA)
  233. set(PREFIX_DATA ${OPTION_PREFIX_DATA} CACHE INTERNAL "" FORCE)
  234. else()
  235. set(PREFIX_DATA ${CMAKE_INSTALL_PREFIX}/share/FLTK CACHE INTERNAL "" FORCE)
  236. endif(OPTION_PREFIX_DATA)
  237. #######################################################################
  238. set(OPTION_PREFIX_DOC ""
  239. CACHE STRING
  240. "where to install doc files - leave empty to use {CMAKE_INSTALL_PREFIX}/share/doc/FLTK"
  241. )
  242. if(OPTION_PREFIX_DOC)
  243. set(PREFIX_DOC ${OPTION_PREFIX_DOC} CACHE INTERNAL "" FORCE)
  244. else()
  245. set(PREFIX_DOC ${CMAKE_INSTALL_PREFIX}/share/doc/FLTK CACHE INTERNAL "" FORCE)
  246. endif(OPTION_PREFIX_DOC)
  247. #######################################################################
  248. if(WIN32)
  249. set(DEFAULT_CONFIG "${CMAKE_INSTALL_PREFIX}/CMake")
  250. elseif(APPLE)
  251. set(DEFAULT_CONFIG "${CMAKE_INSTALL_PREFIX}/FLTK/.framework/Resources/CMake")
  252. else()
  253. set(DEFAULT_CONFIG "${CMAKE_INSTALL_PREFIX}/lib/FLTK-${FLTK_VERSION}")
  254. endif(WIN32)
  255. set(OPTION_PREFIX_CONFIG ""
  256. CACHE STRING
  257. "where to install CMake config files - leave empty to use ${DEFAULT_CONFIG}"
  258. )
  259. if(OPTION_PREFIX_CONFIG)
  260. set(PREFIX_CONFIG "${OPTION_PREFIX_CONFIG}" CACHE INTERNAL "" FORCE)
  261. else()
  262. set(PREFIX_CONFIG "${DEFAULT_CONFIG}" CACHE INTERNAL "" FORCE)
  263. endif(OPTION_PREFIX_CONFIG)
  264. #######################################################################
  265. if(CMAKE_HOST_UNIX)
  266. set(OPTION_PREFIX_MAN ""
  267. CACHE STRING
  268. "where to install man files - leave empty to use {CMAKE_INSTALL_PREFIX}/man"
  269. )
  270. if(OPTION_PREFIX_MAN)
  271. set(PREFIX_MAN ${OPTION_PREFIX_MAN} CACHE INTERNAL "" FORCE)
  272. else()
  273. set(PREFIX_MAN ${CMAKE_INSTALL_PREFIX}/man CACHE INTERNAL "" FORCE)
  274. endif(OPTION_PREFIX_MAN)
  275. option(OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
  276. endif(CMAKE_HOST_UNIX)
  277. #######################################################################
  278. if(APPLE)
  279. option(OPTION_APPLE_X11 "use X11" OFF)
  280. endif(APPLE)
  281. if(NOT APPLE OR OPTION_APPLE_X11)
  282. include(FindX11)
  283. if(X11_FOUND)
  284. set(USE_X11 1)
  285. list(APPEND FLTK_CFLAGS -DUSE_X11)
  286. list(APPEND FLTK_LDLIBS -lX11)
  287. endif(X11_FOUND)
  288. endif(NOT APPLE OR OPTION_APPLE_X11)
  289. #######################################################################
  290. option(OPTION_USE_POLL "use poll if available" OFF)
  291. if(OPTION_USE_POLL)
  292. CHECK_FUNCTION_EXISTS(poll USE_POLL)
  293. endif(OPTION_USE_POLL)
  294. #######################################################################
  295. option(OPTION_BUILD_SHARED_LIBS "Build shared libraries" OFF)
  296. #######################################################################
  297. option(OPTION_BUILD_EXAMPLES "build example programs" ON)
  298. #######################################################################
  299. include(FindPkgConfig)
  300. option(OPTION_CAIRO "use lib Cairo" OFF)
  301. option(OPTION_CAIROEXT
  302. "use fltk code instrumentation for cairo extended use" OFF
  303. )
  304. if(OPTION_CAIRO OR OPTION_CAIROEXT AND LIB_CAIRO)
  305. pkg_search_module(PKG_CAIRO cairo)
  306. endif(OPTION_CAIRO OR OPTION_CAIROEXT AND LIB_CAIRO)
  307. if(PKG_CAIRO_FOUND)
  308. set(FLTK_HAVE_CAIRO 1)
  309. # add_subdirectory(cairo)
  310. list(APPEND FLTK_LDLIBS -lcairo -lpixman-1)
  311. include_directories(${PKG_CAIRO_INCLUDE_DIRS})
  312. string(REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
  313. endif(PKG_CAIRO_FOUND)
  314. if(LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
  315. set(FLTK_USE_CAIRO 1)
  316. set(FLTK_CAIRO_FOUND TRUE)
  317. else()
  318. set(FLTK_CAIRO_FOUND FALSE)
  319. endif(LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
  320. #######################################################################
  321. set(HAVE_GL LIB_GL OR LIB_MesaGL)
  322. if(HAVE_GL)
  323. option(OPTION_USE_GL "use OpenGL" ON)
  324. endif(HAVE_GL)
  325. if(OPTION_USE_GL)
  326. include(FindOpenGL)
  327. endif(OPTION_USE_GL)
  328. if(OPENGL_FOUND)
  329. set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL)
  330. set(CMAKE_REQUIRED_LIBRARIES -lGLU -lGL)
  331. CHECK_FUNCTION_EXISTS(glXGetProcAddressARB HAVE_GLXGETPROCADDRESSARB)
  332. set(FLTK_GL_FOUND TRUE)
  333. else()
  334. set(FLTK_GL_FOUND FALSE)
  335. endif(OPENGL_FOUND)
  336. #######################################################################
  337. option(OPTION_USE_THREADS "use multi-threading" ON)
  338. if(OPTION_USE_THREADS)
  339. include(FindThreads)
  340. endif(OPTION_USE_THREADS)
  341. if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
  342. add_definitions("-D_THREAD_SAFE -D_REENTRANT")
  343. set(USE_THREADS 1)
  344. set(FLTK_THREADS_FOUND TRUE)
  345. else()
  346. set(FLTK_THREADS_FOUND FALSE)
  347. endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
  348. if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
  349. set(HAVE_PTHREAD 1)
  350. list(APPEND FLTK_LDLIBS -lpthread)
  351. list(APPEND FLTK_CFLAGS -D_THREAD_SAFE -D_REENTRANT)
  352. set(FLTK_PTHREADS_FOUND TRUE)
  353. else()
  354. set(HAVE_PTHREAD 0)
  355. set(HAVE_PTHREAD_H 0)
  356. set(FLTK_PTHREADS_FOUND FALSE)
  357. endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
  358. #######################################################################
  359. option(OPTION_LARGE_FILE "enable large file support" ON)
  360. if(OPTION_LARGE_FILE)
  361. if(NOT MSVC)
  362. add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
  363. list(APPEND FLTK_CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
  364. endif(NOT MSVC)
  365. endif(OPTION_LARGE_FILE)
  366. #######################################################################
  367. option(OPTION_USE_SYSTEM_LIBJPEG "Use's system libjpeg" ON)
  368. if(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
  369. include(FindJPEG)
  370. endif(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
  371. if(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
  372. set(FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
  373. include_directories(${JPEG_INCLUDE_DIR})
  374. set(FLTK_BUILTIN_JPEG_FOUND FALSE)
  375. else()
  376. add_subdirectory(jpeg)
  377. set(FLTK_JPEG_LIBRARIES fltk_jpeg)
  378. include_directories(${FLTK_SOURCE_DIR}/jpeg)
  379. set(FLTK_BUILTIN_JPEG_FOUND TRUE)
  380. endif(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
  381. if(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
  382. message(STATUS "\ncannot find system jpeg library - using built-in\n")
  383. endif(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
  384. set(HAVE_LIBJPEG 1)
  385. #######################################################################
  386. option(OPTION_USE_SYSTEM_ZLIB "Use's system zlib" ON)
  387. if(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
  388. include(FindZLIB)
  389. endif(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
  390. if(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
  391. set(FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
  392. include_directories(${ZLIB_INCLUDE_DIRS})
  393. set(FLTK_BUILTIN_ZLIB_FOUND FALSE)
  394. else()
  395. add_subdirectory(zlib)
  396. set(FLTK_ZLIB_LIBRARIES fltk_z)
  397. set(ZLIB_INCLUDE_DIR ${FLTK_SOURCE_DIR}/zlib)
  398. include_directories(${FLTK_SOURCE_DIR}/zlib)
  399. set(FLTK_BUILTIN_ZLIB_FOUND TRUE)
  400. endif(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
  401. if(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
  402. message(STATUS "\ncannot find system zlib library - using built-in\n")
  403. endif(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
  404. set(HAVE_LIBZ 1)
  405. #######################################################################
  406. option(OPTION_USE_SYSTEM_LIBPNG "Use's system libpng" ON)
  407. if(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
  408. include(FindPNG)
  409. endif(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
  410. if(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
  411. set(FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
  412. include_directories(${PNG_INCLUDE_DIR})
  413. add_definitions(${PNG_DEFINITIONS})
  414. set(FLTK_BUILTIN_PNG_FOUND FALSE)
  415. else()
  416. add_subdirectory(png)
  417. set(FLTK_PNG_LIBRARIES fltk_png)
  418. set(HAVE_PNG_H 1)
  419. set(HAVE_PNG_GET_VALID 1)
  420. set(HAVE_PNG_SET_TRNS_TO_ALPHA 1)
  421. include_directories(${FLTK_SOURCE_DIR}/png)
  422. set(FLTK_BUILTIN_PNG_FOUND TRUE)
  423. endif(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
  424. if(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
  425. message(STATUS "\ncannot find system png library - using built-in\n")
  426. endif(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
  427. set(HAVE_LIBPNG 1)
  428. #######################################################################
  429. if(X11_Xinerama_FOUND)
  430. option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
  431. endif(X11_Xinerama_FOUND)
  432. if(OPTION_USE_XINERAMA)
  433. set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
  434. include_directories(${X11_Xinerama_INCLUDE_PATH})
  435. list(APPEND FLTK_LDLIBS -lXinerama)
  436. set(FLTK_XINERAMA_FOUND TRUE)
  437. else()
  438. set(FLTK_XINERAMA_FOUND FALSE)
  439. endif(OPTION_USE_XINERAMA)
  440. #######################################################################
  441. if(X11_Xft_FOUND)
  442. option(OPTION_USE_XFT "use lib Xft" ON)
  443. endif(X11_Xft_FOUND)
  444. if(OPTION_USE_XFT)
  445. set(USE_XFT X11_Xft_FOUND)
  446. list(APPEND FLTK_LDLIBS -lXft)
  447. set(FLTK_XFT_FOUND TRUE)
  448. else()
  449. set(FLTK_XFT_FOUND FALSE)
  450. endif(OPTION_USE_XFT)
  451. #######################################################################
  452. if(X11_FOUND)
  453. option(OPTION_USE_XDBE "use lib Xdbe" ON)
  454. endif(X11_FOUND)
  455. if(OPTION_USE_XDBE AND HAVE_XDBE_H)
  456. set(HAVE_XDBE 1)
  457. set(FLTK_XDBE_FOUND TRUE)
  458. else()
  459. set(FLTK_XDBE_FOUND FALSE)
  460. endif(OPTION_USE_XDBE AND HAVE_XDBE_H)
  461. #######################################################################
  462. # final setup and config
  463. #######################################################################
  464. # Set the fluid executable path
  465. if(CMAKE_CROSSCOMPILING)
  466. find_file(FLUID_PATH
  467. NAMES fluid fluid.exe
  468. PATHS ENV PATH
  469. NO_CMAKE_FIND_ROOT_PATH
  470. )
  471. add_executable(fluid IMPORTED)
  472. set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
  473. set(FLTK_FLUID_PATH ${FLUID_PATH})
  474. set_target_properties(fluid
  475. PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
  476. )
  477. else()
  478. add_subdirectory(fluid)
  479. set(FLTK_FLUID_EXECUTABLE fluid)
  480. set(FLTK_FLUID_PATH ${PREFIX_BIN}/fluid)
  481. endif(CMAKE_CROSSCOMPILING)
  482. add_subdirectory(src)
  483. # generate FLTKConfig.cmake
  484. string(REPLACE ";" " " EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
  485. configure_file(
  486. ${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
  487. ${EXECUTABLE_OUTPUT_PATH}/FLTKConfig.cmake
  488. @ONLY
  489. )
  490. # generate UseFLTK.cmake
  491. configure_file(
  492. ${FLTK_SOURCE_DIR}/CMake/UseFLTK.cmake.in
  493. ${EXECUTABLE_OUTPUT_PATH}/UseFLTK.cmake
  494. @ONLY
  495. )
  496. # generate config.h
  497. configure_file(
  498. "${FLTK_SOURCE_DIR}/configh.cmake.in"
  499. "${FLTK_BINARY_DIR}/config.h"
  500. @ONLY
  501. )
  502. # generate fltk-config
  503. get_filename_component(CC ${CMAKE_C_COMPILER} NAME)
  504. get_filename_component(CXX ${CMAKE_CXX_COMPILER} NAME)
  505. string(REPLACE ";" " " C_FLAGS "${FLTK_CFLAGS}")
  506. if(X11_Xext_FOUND)
  507. list(APPEND FLTK_LDLIBS -lXext)
  508. endif(X11_Xext_FOUND)
  509. string(REPLACE ";" " " LD_LIBS "${FLTK_LDLIBS}")
  510. configure_file(
  511. "${FLTK_SOURCE_DIR}/fltk-config.cmake.in"
  512. "${FLTK_BINARY_DIR}/fltk-config"
  513. @ONLY
  514. )
  515. if(UNIX)
  516. execute_process(COMMAND chmod 755 fltk-config
  517. WORKING_DIRECTORY "${FLTK_BINARY_DIR}"
  518. )
  519. endif(UNIX)
  520. if(OPTION_CREATE_LINKS)
  521. configure_file(
  522. "${FLTK_SOURCE_DIR}/CMake/install-symlinks.cmake.in"
  523. "${FLTK_BINARY_DIR}/install-symlinks.cmake"
  524. @ONLY
  525. )
  526. endif(OPTION_CREATE_LINKS)
  527. # generate uninstall target
  528. configure_file(
  529. "${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in"
  530. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  531. @ONLY
  532. )
  533. add_custom_target(uninstall
  534. "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  535. )
  536. #######################################################################
  537. # build examples - these have to be after fluid is built/imported
  538. #######################################################################
  539. if(OPTION_BUILD_EXAMPLES)
  540. add_subdirectory(test)
  541. endif(OPTION_BUILD_EXAMPLES)
  542. #######################################################################
  543. # installation
  544. #######################################################################
  545. install(DIRECTORY ${FLTK_SOURCE_DIR}/FL
  546. DESTINATION ${PREFIX_INCLUDE} USE_SOURCE_PERMISSIONS
  547. PATTERN ".svn" EXCLUDE
  548. )
  549. if(OPTION_CREATE_LINKS)
  550. install(SCRIPT ${FLTK_BINARY_DIR}/install-symlinks.cmake)
  551. endif(OPTION_CREATE_LINKS)
  552. install(PROGRAMS ${FLTK_BINARY_DIR}/fltk-config
  553. DESTINATION ${PREFIX_BIN}
  554. OPTIONAL
  555. )
  556. install(EXPORT fltk-install
  557. DESTINATION ${PREFIX_CONFIG}
  558. FILE FLTKLibraries.cmake
  559. )
  560. install(FILES ${EXECUTABLE_OUTPUT_PATH}/FLTKConfig.cmake
  561. DESTINATION ${PREFIX_CONFIG}
  562. )
  563. install(FILES ${EXECUTABLE_OUTPUT_PATH}/UseFLTK.cmake
  564. DESTINATION ${PREFIX_CONFIG}
  565. )
  566. if(CMAKE_HOST_UNIX)
  567. macro(INSTALL_MAN FILE LEVEL)
  568. install(FILES
  569. ${FLTK_SOURCE_DIR}/documentation/src/${FILE}.man
  570. DESTINATION ${PREFIX_MAN}/man${LEVEL}
  571. RENAME ${FILE}.${LEVEL}
  572. )
  573. endmacro(INSTALL_MAN FILE LEVEL)
  574. INSTALL_MAN(fluid 1)
  575. INSTALL_MAN(fltk-config 1)
  576. INSTALL_MAN(fltk 3)
  577. INSTALL_MAN(blocks 6)
  578. INSTALL_MAN(checkers 6)
  579. INSTALL_MAN(sudoku 6)
  580. endif(CMAKE_HOST_UNIX)