blob: 5d1d476c8a65ed0a560bd3fa004a5e54af017643 [file] [log] [blame]
DRC2ff39b82011-07-28 08:38:59 +00001#
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#######################################################################
30# basic setup
31#######################################################################
32project(FLTK)
33cmake_minimum_required(VERSION 2.6)
34
35# The FLTK version
36set(FLTK_VERSION_MAJOR "1")
37set(FLTK_VERSION_MINOR "3")
38set(FLTK_VERSION_PATCH "0")
39set(FLTK_VERSION "${FLTK_VERSION_MAJOR}.${FLTK_VERSION_MINOR}")
40set(FLTK_VERSION_FULL "${FLTK_VERSION}.${FLTK_VERSION_PATCH}")
41
42# Search for modules in the FLTK source dir first
43set(CMAKE_MODULE_PATH "${FLTK_SOURCE_DIR}/CMake")
44
45include_directories(BEFORE ${FLTK_BINARY_DIR} ${FLTK_SOURCE_DIR})
46
47#######################################################################
48# platform dependent information
49#######################################################################
50
51include(TestBigEndian)
52TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
53
54if(APPLE)
55 set(__APPLE_QUARTZ__ 1)
56 set(HAVE_STRTOLL 1)
57 set(HAVE_STRCASECMP 1)
58 set(HAVE_DIRENT_H 1)
59endif(APPLE)
60
61if(WIN32)
62 if(MSVC)
63 add_definitions(-DWIN32_LEAN_AND_MEAN)
64 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
65 endif(MSVC)
66endif(WIN32)
67
68#######################################################################
69# size of ints
70include(CheckTypeSize)
71
72CHECK_TYPE_SIZE(short SIZEOF_SHORT)
73CHECK_TYPE_SIZE(int SIZEOF_INT)
74CHECK_TYPE_SIZE(long SIZEOF_LONG)
75CHECK_TYPE_SIZE("long long" HAVE_LONG_LONG)
76
77if(${SIZEOF_SHORT} MATCHES "^2$")
78 set(U16 "unsigned short")
79endif(${SIZEOF_SHORT} MATCHES "^2$")
80
81if(${SIZEOF_INT} MATCHES "^4$")
82 set(U32 "unsigned")
83else()
84 if(${SIZEOF_LONG} MATCHES "^4$")
85 set(U32 "unsigned long")
86 endif(${SIZEOF_LONG} MATCHES "^4$")
87endif(${SIZEOF_INT} MATCHES "^4$")
88
89if(${SIZEOF_INT} MATCHES "^8$")
90 set(U64 "unsigned")
91else()
92 if(${SIZEOF_LONG} MATCHES "^8$")
93 set(U64 "unsigned long")
94 endif(${SIZEOF_LONG} MATCHES "^8$")
95endif(${SIZEOF_INT} MATCHES "^8$")
96
97#######################################################################
98# check for headers, libraries and functions
99#######################################################################
100# headers
101find_file(HAVE_DIRENT_H dirent.h)
102find_file(HAVE_FREETYPE_H freetype.h PATH_SUFFIXES freetype2)
103find_file(HAVE_LOCALE_H locale.h)
104find_file(HAVE_NDIR_H ndir.h)
105find_file(HAVE_PTHREAD_H pthread.h)
106find_file(HAVE_SYS_DIR_H sys/dir.h)
107find_file(HAVE_SYS_NDIR_H sys/ndir.h)
108find_file(HAVE_SYS_SELECT_H sys/select.h)
109find_file(HAVE_SYS_STDTYPES_H sys/stdtypes.h)
110
111mark_as_advanced(HAVE_FREETYPE_H)
112mark_as_advanced(HAVE_SYS_DIR_H)
113mark_as_advanced(HAVE_SYS_NDIR_H HAVE_SYS_SELECT_H)
114mark_as_advanced(HAVE_SYS_STDTYPES_H)
115
116# where to find freetype headers
117find_path(FREETYPE_PATH freetype/config/ftheader.h PATH_SUFFIXES freetype2)
118if(FREETYPE_PATH)
119 include_directories(${FREETYPE_PATH})
120endif(FREETYPE_PATH)
121mark_as_advanced(FREETYPE_PATH)
122
123#######################################################################
124# functions
125include(CheckFunctionExists)
126
127if(HAVE_DLFCN_H)
128 set(CMAKE_REQUIRED_LIBRARIES dl)
129endif(HAVE_DLFCN_H)
130CHECK_FUNCTION_EXISTS(dlsym HAVE_DLSYM)
131
132CHECK_FUNCTION_EXISTS(localeconv HAVE_LOCALECONV)
133
134CHECK_FUNCTION_EXISTS(scandir HAVE_SCANDIR)
135CHECK_FUNCTION_EXISTS(snprintf HAVE_SNPRINTF)
136
137CHECK_FUNCTION_EXISTS(strlcat HAVE_STRLCAT)
138CHECK_FUNCTION_EXISTS(strlcpy HAVE_STRLCPY)
139CHECK_FUNCTION_EXISTS(strtoll HAVE_STRTOLL)
140CHECK_FUNCTION_EXISTS(vsnprintf HAVE_VSNPRINTF)
141
142set(CMAKE_REQUIRED_LIBRARIES)
143
144if(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
145 set(MSG "POSIX compatible scandir")
146 message(STATUS "Looking for ${MSG}")
147 try_compile(V
148 ${FLTK_BINARY_DIR}
149 ${FLTK_SOURCE_DIR}/CMake/posixScandir.cxx
150 )
151 if(V)
152 message(STATUS "${MSG} - found")
153 set(HAVE_SCANDIR_POSIX 1 CACHE INTERNAL "")
154 else()
155 message(STATUS "${MSG} - not found")
156 set(HAVE_SCANDIR_POSIX HAVE_SCANDIR_POSIX-NOTFOUND)
157 endif(V)
158endif(HAVE_SCANDIR AND NOT HAVE_SCANDIR_POSIX)
159mark_as_advanced(HAVE_SCANDIR_POSIX)
160
161#######################################################################
162# options
163#######################################################################
164if(APPLE)
165 option(OPTION_APPLE_X11 "use X11" OFF)
166endif(APPLE)
167
168if(NOT APPLE OR OPTION_APPLE_X11)
169 include(FindX11)
170 if(X11_FOUND)
171 set(USE_X11 1)
172 endif(X11_FOUND)
173endif(NOT APPLE OR OPTION_APPLE_X11)
174
175#######################################################################
176option(OPTION_USE_POLL "use poll if available" OFF)
177
178if(OPTION_USE_POLL)
179 CHECK_FUNCTION_EXISTS(poll USE_POLL)
180endif(OPTION_USE_POLL)
181
182#######################################################################
183option(OPTION_USE_THREADS "use multi-threading" ON)
184
185if(OPTION_USE_THREADS)
186 include(FindThreads)
187endif(OPTION_USE_THREADS)
188
189if(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
190 add_definitions("-D_THREAD_SAFE -D_REENTRANT")
191 set(USE_THREADS 1)
192 set(FLTK_THREADS_FOUND TRUE)
193else()
194 set(FLTK_THREADS_FOUND FALSE)
195endif(OPTION_USE_THREADS AND CMAKE_HAVE_THREADS_LIBRARY)
196
197if(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
198 set(HAVE_PTHREAD 1)
199 set(FLTK_PTHREADS_FOUND TRUE)
200else()
201 set(HAVE_PTHREAD 0)
202 set(HAVE_PTHREAD_H 0)
203 set(FLTK_PTHREADS_FOUND FALSE)
204endif(OPTION_USE_THREADS AND CMAKE_USE_PTHREADS_INIT)
205
206#######################################################################
207if(X11_Xinerama_FOUND)
208 option(OPTION_USE_XINERAMA "use lib Xinerama" ON)
209endif(X11_Xinerama_FOUND)
210
211if(OPTION_USE_XINERAMA)
212 set(HAVE_XINERAMA ${X11_Xinerama_FOUND})
213 include_directories(${X11_Xinerama_INCLUDE_PATH})
214 set(FLTK_XINERAMA_FOUND TRUE)
215else()
216 set(FLTK_XINERAMA_FOUND FALSE)
217endif(OPTION_USE_XINERAMA)
218
219#######################################################################
220if(X11_Xft_FOUND)
221 option(OPTION_USE_XFT "use lib Xft" ON)
222endif(X11_Xft_FOUND)
223
224if(OPTION_USE_XFT)
225 set(USE_XFT X11_Xft_FOUND)
226 set(FLTK_XFT_FOUND TRUE)
227else()
228 set(FLTK_XFT_FOUND FALSE)
229endif(OPTION_USE_XFT)
230
231#######################################################################
DRC0141bd52012-01-17 22:33:45 +0000232if(X11_Xfixes_FOUND)
233 option(OPTION_USE_XFIXES "use lib Xfixes" ON)
234endif(X11_Xfixes_FOUND)
235
236if(OPTION_USE_XFIXES)
237 set(HAVE_XFIXES ${X11_Xfixes_FOUND})
238endif(OPTION_USE_XFIXES)
239
240#######################################################################
241if(X11_Xcursor_FOUND)
242 option(OPTION_USE_XCURSOR "use lib Xcursor" ON)
243endif(X11_Xcursor_FOUND)
244
245if(OPTION_USE_XCURSOR)
246 set(HAVE_XCURSOR ${X11_Xcursor_FOUND})
247endif(OPTION_USE_XCURSOR)
248
249#######################################################################
DRC2ff39b82011-07-28 08:38:59 +0000250
251add_subdirectory(src)
252
253# generate config.h
254configure_file(
255 "${FLTK_SOURCE_DIR}/configh.cmake.in"
256 "${FLTK_BINARY_DIR}/config.h"
257 @ONLY
258)