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.

679 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. mark_as_advanced(HAVE_ALSA_ASOUNDLIB_H HAVE_DIRENT_H HAVE_DLFCN_H)
  116. mark_as_advanced(HAVE_FREETYPE_H HAVE_GL_GL_H HAVE_GL_GLU_H)
  117. mark_as_advanced(HAVE_LIBPNG_PNG_H HAVE_LOCALE_H HAVE_NDIR_H)
  118. mark_as_advanced(HAVE_OPENGL_GLU_H HAVE_PNG_H HAVE_PTHREAD_H)
  119. mark_as_advanced(HAVE_STDIO_H HAVE_STRINGS_H HAVE_SYS_DIR_H)
  120. mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
  121. mark_as_advanced(HAVE_SYS_STDTYPES_H)
  122. # where to find freetype headers
  123. find_path(FREETYPE_PATH freetype/config/ftheader.h PATH_SUFFIXES freetype2)
  124. if(FREETYPE_PATH)
  125. include_directories(${FREETYPE_PATH})
  126. endif(FREETYPE_PATH)
  127. mark_as_advanced(FREETYPE_PATH)
  128. #######################################################################
  129. # libraries
  130. find_library(LIB_CAIRO cairo)
  131. find_library(LIB_fontconfig fontconfig)
  132. find_library(LIB_freetype freetype)
  133. find_library(LIB_GL GL)
  134. find_library(LIB_MesaGL MesaGL)
  135. find_library(LIB_jpeg jpeg)
  136. find_library(LIB_png png)
  137. find_library(LIB_zlib z)
  138. mark_as_advanced(LIB_CAIRO LIB_fontconfig LIB_freetype)
  139. mark_as_advanced(LIB_GL LIB_MesaGL)
  140. mark_as_advanced(LIB_jpeg LIB_png LIB_zlib)
  141. #######################################################################
  142. # functions
  143. include(CheckFunctionExists)
  144. if(HAVE_DLFCN_H)
  145. set(CMAKE_REQUIRED_LIBRARIES dl)
  146. endif(HAVE_DLFCN_H)
  147. CHECK_FUNCTION_EXISTS(dlsym HAVE_DLSYM)
  148. CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
  149. if(LIB_png)
  150. set(CMAKE_REQUIRED_LIBRARIES png)
  151. endif(LIB_png)
  152. CHECK_FUNCTION_EXISTS(png_get_valid HAVE_PNG_GET_VALID)
  153. CHECK_FUNCTION_EXISTS(png_set_tRNS_to_alpha HAVE_PNG_SET_TRNS_TO_ALPHA)
  154. CHECK_FUNCTION_EXISTS(scandir HAVE_SCANDIR)
  155. CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
  156. # not really true but we convert strcasecmp calls to _stricmp calls in flstring.h
  157. if(MSVC)
  158. set(HAVE_STRCASECMP 1)
  159. endif(MSVC)
  160. CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP)
  161. CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
  162. CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
  163. CHECK_FUNCTION_EXISTS(strtoll HAVE_STRTOLL)
  164. CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
  165. set(CMAKE_REQUIRED_LIBRARIES)
  166. if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
  167. set(MSG "POSIX compatible scandir")
  168. message(STATUS "Looking for ${MSG}")
  169. try_compile(V
  170. ${FLTK_BINARY_DIR}
  171. ${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx
  172. )
  173. if(V)
  174. message(STATUS "${MSG} - found")
  175. set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
  176. else()
  177. message(STATUS "${MSG} - not found")
  178. set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
  179. endif(V)
  180. endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
  181. mark_as_advanced(HAVE_SCANDIR_POSIX)
  182. #######################################################################
  183. # options
  184. #######################################################################
  185. set(OPTION_OPTIM ""
  186. CACHE STRING
  187. "custom optimization flags"
  188. )
  189. add_definitions(${OPTION_OPTIM})
  190. #######################################################################
  191. set(OPTION_ARCHFLAGS ""
  192. CACHE STRING
  193. "custom architecture flags"
  194. )
  195. add_definitions(${OPTION_ARCHFLAGS})
  196. #######################################################################
  197. set(OPTION_PREFIX_BIN ""
  198. CACHE STRING
  199. "where to install executables - leave empty to use {CMAKE_INSTALL_PREFIX}/bin"
  200. )
  201. if(OPTION_PREFIX_BIN)
  202. set(PREFIX_BIN ${OPTION_PREFIX_BIN} CACHE INTERNAL "" FORCE)
  203. else()
  204. set(PREFIX_BIN ${CMAKE_INSTALL_PREFIX}/bin CACHE INTERNAL "" FORCE)
  205. endif(OPTION_PREFIX_BIN)
  206. #######################################################################
  207. set(OPTION_PREFIX_LIB ""
  208. CACHE STRING
  209. "where to install libraries - leave empty to use {CMAKE_INSTALL_PREFIX}/lib"
  210. )
  211. if(OPTION_PREFIX_LIB)
  212. set(PREFIX_LIB ${OPTION_PREFIX_LIB} CACHE INTERNAL "" FORCE)
  213. else()
  214. set(PREFIX_LIB ${CMAKE_INSTALL_PREFIX}/lib CACHE INTERNAL "" FORCE)
  215. endif(OPTION_PREFIX_LIB)
  216. #######################################################################
  217. set(OPTION_PREFIX_INCLUDE ""
  218. CACHE STRING
  219. "where to install include files - leave empty to use {CMAKE_INSTALL_PREFIX}/include"
  220. )
  221. if(OPTION_PREFIX_INCLUDE)
  222. set(PREFIX_INCLUDE ${OPTION_PREFIX_INCLUDE} CACHE INTERNAL "" FORCE)
  223. else()
  224. set(PREFIX_INCLUDE ${CMAKE_INSTALL_PREFIX}/include CACHE INTERNAL "" FORCE)
  225. endif(OPTION_PREFIX_INCLUDE)
  226. #######################################################################
  227. set(OPTION_PREFIX_DATA ""
  228. CACHE STRING
  229. "where to install data files - leave empty to use {CMAKE_INSTALL_PREFIX}/share/FLTK"
  230. )
  231. if(OPTION_PREFIX_DATA)
  232. set(PREFIX_DATA ${OPTION_PREFIX_DATA} CACHE INTERNAL "" FORCE)
  233. else()
  234. set(PREFIX_DATA ${CMAKE_INSTALL_PREFIX}/share/FLTK CACHE INTERNAL "" FORCE)
  235. endif(OPTION_PREFIX_DATA)
  236. #######################################################################
  237. set(OPTION_PREFIX_DOC ""
  238. CACHE STRING
  239. "where to install doc files - leave empty to use {CMAKE_INSTALL_PREFIX}/share/doc/FLTK"
  240. )
  241. if(OPTION_PREFIX_DOC)
  242. set(PREFIX_DOC ${OPTION_PREFIX_DOC} CACHE INTERNAL "" FORCE)
  243. else()
  244. set(PREFIX_DOC ${CMAKE_INSTALL_PREFIX}/share/doc/FLTK CACHE INTERNAL "" FORCE)
  245. endif(OPTION_PREFIX_DOC)
  246. #######################################################################
  247. if(WIN32)
  248. set(DEFAULT_CONFIG "${CMAKE_INSTALL_PREFIX}/CMake")
  249. elseif(APPLE)
  250. set(DEFAULT_CONFIG "${CMAKE_INSTALL_PREFIX}/FLTK/.framework/Resources/CMake")
  251. else()
  252. set(DEFAULT_CONFIG "${CMAKE_INSTALL_PREFIX}/lib/FLTK-${FLTK_VERSION}")
  253. endif(WIN32)
  254. set(OPTION_PREFIX_CONFIG ""
  255. CACHE STRING
  256. "where to install CMake config files - leave empty to use ${DEFAULT_CONFIG}"
  257. )
  258. if(OPTION_PREFIX_CONFIG)
  259. set(PREFIX_CONFIG "${OPTION_PREFIX_CONFIG}" CACHE INTERNAL "" FORCE)
  260. else()
  261. set(PREFIX_CONFIG "${DEFAULT_CONFIG}" CACHE INTERNAL "" FORCE)
  262. endif(OPTION_PREFIX_CONFIG)
  263. #######################################################################
  264. if(CMAKE_HOST_UNIX)
  265. set(OPTION_PREFIX_MAN ""
  266. CACHE STRING
  267. "where to install man files - leave empty to use {CMAKE_INSTALL_PREFIX}/man"
  268. )
  269. if(OPTION_PREFIX_MAN)
  270. set(PREFIX_MAN ${OPTION_PREFIX_MAN} CACHE INTERNAL "" FORCE)
  271. else()
  272. set(PREFIX_MAN ${CMAKE_INSTALL_PREFIX}/man CACHE INTERNAL "" FORCE)
  273. endif(OPTION_PREFIX_MAN)
  274. option(OPTION_CREATE_LINKS "create backwards compatibility links" OFF)
  275. endif(CMAKE_HOST_UNIX)
  276. #######################################################################
  277. if(APPLE)
  278. option(OPTION_APPLE_X11 "use X11" OFF)
  279. endif(APPLE)
  280. if(NOT APPLE OR OPTION_APPLE_X11)
  281. include(FindX11)
  282. if(X11_FOUND)
  283. set(USE_X11 1)
  284. list(APPEND FLTK_CFLAGS -DUSE_X11)
  285. list(APPEND FLTK_LDLIBS -lX11)
  286. endif(X11_FOUND)
  287. endif(NOT APPLE OR OPTION_APPLE_X11)
  288. #######################################################################
  289. option(OPTION_USE_POLL "use poll if available" OFF)
  290. if(OPTION_USE_POLL)
  291. CHECK_FUNCTION_EXISTS(poll USE_POLL)
  292. endif(OPTION_USE_POLL)
  293. #######################################################################
  294. option(OPTION_BUILD_SHARED_LIBS "Build shared libraries" OFF)
  295. #######################################################################
  296. option(OPTION_BUILD_EXAMPLES "build example programs" ON)
  297. #######################################################################
  298. include(FindPkgConfig)
  299. option(OPTION_CAIRO "use lib Cairo" OFF)
  300. option(OPTION_CAIROEXT
  301. "use fltk code instrumentation for cairo extended use" OFF
  302. )
  303. if(OPTION_CAIRO OR OPTION_CAIROEXT AND LIB_CAIRO)
  304. pkg_search_module(PKG_CAIRO cairo)
  305. endif(OPTION_CAIRO OR OPTION_CAIROEXT AND LIB_CAIRO)
  306. if(PKG_CAIRO_FOUND)
  307. set(FLTK_HAVE_CAIRO 1)
  308. # add_subdirectory(cairo)
  309. list(APPEND FLTK_LDLIBS -lcairo -lpixman-1)
  310. include_directories(${PKG_CAIRO_INCLUDE_DIRS})
  311. string(REPLACE ";" " " CAIROFLAGS "${PKG_CAIRO_CFLAGS}")
  312. endif(PKG_CAIRO_FOUND)
  313. if(LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
  314. set(FLTK_USE_CAIRO 1)
  315. set(FLTK_CAIRO_FOUND TRUE)
  316. else()
  317. set(FLTK_CAIRO_FOUND FALSE)
  318. endif(LIB_CAIRO AND OPTION_CAIROEXT AND PKG_CAIRO_FOUND)
  319. #######################################################################
  320. set(HAVE_GL LIB_GL OR LIB_MesaGL)
  321. if(HAVE_GL)
  322. option(OPTION_USE_GL "use OpenGL" ON)
  323. endif(HAVE_GL)
  324. if(OPTION_USE_GL)
  325. include(FindOpenGL)
  326. endif(OPTION_USE_GL)
  327. if(OPENGL_FOUND)
  328. set(CMAKE_REQUIRED_INCLUDES ${OPENGL_INCLUDE_DIR}/GL)
  329. set(CMAKE_REQUIRED_LIBRARIES -lGLU -lGL)
  330. CHECK_FUNCTION_EXISTS(glXGetProcAddressARB HAVE_GLXGETPROCADDRESSARB)
  331. set(FLTK_GL_FOUND TRUE)
  332. else()
  333. set(FLTK_GL_FOUND FALSE)
  334. endif(OPENGL_FOUND)
  335. #######################################################################
  336. option(OPTION_USE_THREADS "use multi-threading" ON)
  337. if(OPTION_USE_THREADS)
  338. include(FindThreads)
  339. endif(OPTION_USE_THREADS)
  340. if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
  341. add_definitions("-D_THREAD_SAFE -D_REENTRANT")
  342. set(USE_THREADS 1)
  343. set(FLTK_THREADS_FOUND TRUE)
  344. else()
  345. set(FLTK_THREADS_FOUND FALSE)
  346. endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
  347. if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
  348. set(HAVE_PTHREAD 1)
  349. list(APPEND FLTK_LDLIBS -lpthread)
  350. list(APPEND FLTK_CFLAGS -D_THREAD_SAFE -D_REENTRANT)
  351. set(FLTK_PTHREADS_FOUND TRUE)
  352. else()
  353. set(HAVE_PTHREAD 0)
  354. set(HAVE_PTHREAD_H 0)
  355. set(FLTK_PTHREADS_FOUND FALSE)
  356. endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
  357. #######################################################################
  358. option(OPTION_LARGE_FILE "enable large file support" ON)
  359. if(OPTION_LARGE_FILE)
  360. if(NOT MSVC)
  361. add_definitions(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
  362. list(APPEND FLTK_CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE)
  363. endif(NOT MSVC)
  364. endif(OPTION_LARGE_FILE)
  365. #######################################################################
  366. option(OPTION_USE_SYSTEM_LIBJPEG "Use's system libjpeg" ON)
  367. if(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
  368. include(FindJPEG)
  369. endif(OPTION_USE_SYSTEM_LIBJPEG AND LIB_jpeg)
  370. if(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
  371. set(FLTK_JPEG_LIBRARIES ${JPEG_LIBRARIES})
  372. include_directories(${JPEG_INCLUDE_DIR})
  373. set(FLTK_BUILTIN_JPEG_FOUND FALSE)
  374. else()
  375. add_subdirectory(jpeg)
  376. set(FLTK_JPEG_LIBRARIES fltk_jpeg)
  377. include_directories(${FLTK_SOURCE_DIR}/jpeg)
  378. set(FLTK_BUILTIN_JPEG_FOUND TRUE)
  379. endif(OPTION_USE_SYSTEM_LIBJPEG AND JPEG_FOUND)
  380. if(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
  381. message(STATUS "\ncannot find system jpeg library - using built-in\n")
  382. endif(OPTION_USE_SYSTEM_LIBJPEG AND NOT JPEG_FOUND)
  383. set(HAVE_LIBJPEG 1)
  384. #######################################################################
  385. option(OPTION_USE_SYSTEM_ZLIB "Use's system zlib" ON)
  386. if(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
  387. include(FindZLIB)
  388. endif(OPTION_USE_SYSTEM_ZLIB AND LIB_zlib)
  389. if(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
  390. set(FLTK_ZLIB_LIBRARIES ${ZLIB_LIBRARIES})
  391. include_directories(${ZLIB_INCLUDE_DIRS})
  392. set(FLTK_BUILTIN_ZLIB_FOUND FALSE)
  393. else()
  394. add_subdirectory(zlib)
  395. set(FLTK_ZLIB_LIBRARIES fltk_z)
  396. set(ZLIB_INCLUDE_DIR ${FLTK_SOURCE_DIR}/zlib)
  397. include_directories(${FLTK_SOURCE_DIR}/zlib)
  398. set(FLTK_BUILTIN_ZLIB_FOUND TRUE)
  399. endif(OPTION_USE_SYSTEM_ZLIB AND ZLIB_FOUND)
  400. if(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
  401. message(STATUS "\ncannot find system zlib library - using built-in\n")
  402. endif(OPTION_USE_SYSTEM_ZLIB AND NOT ZLIB_FOUND)
  403. set(HAVE_LIBZ 1)
  404. #######################################################################
  405. option(OPTION_USE_SYSTEM_LIBPNG "Use's system libpng" ON)
  406. if(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
  407. include(FindPNG)
  408. endif(OPTION_USE_SYSTEM_LIBPNG AND LIB_png)
  409. if(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
  410. set(FLTK_PNG_LIBRARIES ${PNG_LIBRARIES})
  411. include_directories(${PNG_INCLUDE_DIR})
  412. add_definitions(${PNG_DEFINITIONS})
  413. set(FLTK_BUILTIN_PNG_FOUND FALSE)
  414. else()
  415. add_subdirectory(png)
  416. set(FLTK_PNG_LIBRARIES fltk_png)
  417. set(HAVE_PNG_H 1)
  418. set(HAVE_PNG_GET_VALID 1)
  419. set(HAVE_PNG_SET_TRNS_TO_ALPHA 1)
  420. include_directories(${FLTK_SOURCE_DIR}/png)
  421. set(FLTK_BUILTIN_PNG_FOUND TRUE)
  422. endif(OPTION_USE_SYSTEM_LIBPNG AND PNG_FOUND)
  423. if(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
  424. message(STATUS "\ncannot find system png library - using built-in\n")
  425. endif(OPTION_USE_SYSTEM_LIBPNG AND NOT PNG_FOUND)
  426. set(HAVE_LIBPNG 1)
  427. #######################################################################
  428. if(X11_Xinerama_FOUND)
  429. option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
  430. endif(X11_Xinerama_FOUND)
  431. if(OPTION_USE_XINERAMA)
  432. set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
  433. include_directories(${X11_Xinerama_INCLUDE_PATH})
  434. list(APPEND FLTK_LDLIBS -lXinerama)
  435. set(FLTK_XINERAMA_FOUND TRUE)
  436. else()
  437. set(FLTK_XINERAMA_FOUND FALSE)
  438. endif(OPTION_USE_XINERAMA)
  439. #######################################################################
  440. if(X11_Xft_FOUND)
  441. option(OPTION_USE_XFT "use lib Xft" ON)
  442. endif(X11_Xft_FOUND)
  443. if(OPTION_USE_XFT)
  444. set(USE_XFT X11_Xft_FOUND)
  445. list(APPEND FLTK_LDLIBS -lXft)
  446. set(FLTK_XFT_FOUND TRUE)
  447. else()
  448. set(FLTK_XFT_FOUND FALSE)
  449. endif(OPTION_USE_XFT)
  450. #######################################################################
  451. # final setup and config
  452. #######################################################################
  453. # Set the fluid executable path
  454. if(CMAKE_CROSSCOMPILING)
  455. find_file(FLUID_PATH
  456. NAMES fluid fluid.exe
  457. PATHS ENV PATH
  458. NO_CMAKE_FIND_ROOT_PATH
  459. )
  460. add_executable(fluid IMPORTED)
  461. set(FLTK_FLUID_EXECUTABLE ${FLUID_PATH})
  462. set(FLTK_FLUID_PATH ${FLUID_PATH})
  463. set_target_properties(fluid
  464. PROPERTIES IMPORTED_LOCATION ${FLUID_PATH}
  465. )
  466. else()
  467. add_subdirectory(fluid)
  468. set(FLTK_FLUID_EXECUTABLE fluid)
  469. set(FLTK_FLUID_PATH ${PREFIX_BIN}/fluid)
  470. endif(CMAKE_CROSSCOMPILING)
  471. add_subdirectory(src)
  472. # generate FLTKConfig.cmake
  473. string(REPLACE ";" " " EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
  474. configure_file(
  475. ${FLTK_SOURCE_DIR}/CMake/FLTKConfig.cmake.in
  476. ${EXECUTABLE_OUTPUT_PATH}/FLTKConfig.cmake
  477. @ONLY
  478. )
  479. # generate UseFLTK.cmake
  480. configure_file(
  481. ${FLTK_SOURCE_DIR}/CMake/UseFLTK.cmake.in
  482. ${EXECUTABLE_OUTPUT_PATH}/UseFLTK.cmake
  483. @ONLY
  484. )
  485. # generate config.h
  486. configure_file(
  487. "${FLTK_SOURCE_DIR}/configh.cmake.in"
  488. "${FLTK_BINARY_DIR}/config.h"
  489. @ONLY
  490. )
  491. # generate fltk-config
  492. get_filename_component(CC ${CMAKE_C_COMPILER} NAME)
  493. get_filename_component(CXX ${CMAKE_CXX_COMPILER} NAME)
  494. string(REPLACE ";" " " C_FLAGS "${FLTK_CFLAGS}")
  495. if(X11_Xext_FOUND)
  496. list(APPEND FLTK_LDLIBS -lXext)
  497. endif(X11_Xext_FOUND)
  498. string(REPLACE ";" " " LD_LIBS "${FLTK_LDLIBS}")
  499. configure_file(
  500. "${FLTK_SOURCE_DIR}/fltk-config.cmake.in"
  501. "${FLTK_BINARY_DIR}/fltk-config"
  502. @ONLY
  503. )
  504. if(UNIX)
  505. execute_process(COMMAND chmod 755 fltk-config
  506. WORKING_DIRECTORY "${FLTK_BINARY_DIR}"
  507. )
  508. endif(UNIX)
  509. if(OPTION_CREATE_LINKS)
  510. configure_file(
  511. "${FLTK_SOURCE_DIR}/CMake/install-symlinks.cmake.in"
  512. "${FLTK_BINARY_DIR}/install-symlinks.cmake"
  513. @ONLY
  514. )
  515. endif(OPTION_CREATE_LINKS)
  516. # generate uninstall target
  517. configure_file(
  518. "${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in"
  519. "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  520. @ONLY
  521. )
  522. add_custom_target(uninstall
  523. "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  524. )
  525. #######################################################################
  526. # build examples - these have to be after fluid is built/imported
  527. #######################################################################
  528. if(OPTION_BUILD_EXAMPLES)
  529. add_subdirectory(test)
  530. endif(OPTION_BUILD_EXAMPLES)
  531. #######################################################################
  532. # installation
  533. #######################################################################
  534. install(DIRECTORY ${FLTK_SOURCE_DIR}/FL
  535. DESTINATION ${PREFIX_INCLUDE} USE_SOURCE_PERMISSIONS
  536. PATTERN ".svn" EXCLUDE
  537. )
  538. if(OPTION_CREATE_LINKS)
  539. install(SCRIPT ${FLTK_BINARY_DIR}/install-symlinks.cmake)
  540. endif(OPTION_CREATE_LINKS)
  541. install(PROGRAMS ${FLTK_BINARY_DIR}/fltk-config
  542. DESTINATION ${PREFIX_BIN}
  543. OPTIONAL
  544. )
  545. install(EXPORT fltk-install
  546. DESTINATION ${PREFIX_CONFIG}
  547. FILE FLTKLibraries.cmake
  548. )
  549. install(FILES ${EXECUTABLE_OUTPUT_PATH}/FLTKConfig.cmake
  550. DESTINATION ${PREFIX_CONFIG}
  551. )
  552. install(FILES ${EXECUTABLE_OUTPUT_PATH}/UseFLTK.cmake
  553. DESTINATION ${PREFIX_CONFIG}
  554. )
  555. if(CMAKE_HOST_UNIX)
  556. macro(INSTALL_MAN FILE LEVEL)
  557. install(FILES
  558. ${FLTK_SOURCE_DIR}/documentation/src/${FILE}.man
  559. DESTINATION ${PREFIX_MAN}/man${LEVEL}
  560. RENAME ${FILE}.${LEVEL}
  561. )
  562. endmacro(INSTALL_MAN FILE LEVEL)
  563. INSTALL_MAN(fluid 1)
  564. INSTALL_MAN(fltk-config 1)
  565. INSTALL_MAN(fltk 3)
  566. INSTALL_MAN(blocks 6)
  567. INSTALL_MAN(checkers 6)
  568. INSTALL_MAN(sudoku 6)
  569. endif(CMAKE_HOST_UNIX)